From d7467b4fb66501060356422742aa6ec74a98ef97 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 4 May 2018 15:35:03 +0200 Subject: [PATCH] Change coloring Signed-off-by: Mario Danic --- .../talk/activities/CallActivity.java | 2 +- .../MagicIncomingTextMessageViewHolder.java | 27 +++--- .../MagicOutcomingTextMessageViewHolder.java | 88 +++++++++++++++++++ .../talk/controllers/ChatController.java | 2 + .../MentionAutocompletePresenter.java | 3 + .../nextcloud/talk/utils/DisplayUtils.java | 28 +++--- app/src/main/res/layout/bottom_buttons.xml | 4 +- app/src/main/res/layout/controller_chat.xml | 6 +- .../layout/controller_server_selection.xml | 8 +- .../item_custom_incoming_text_message.xml | 4 +- app/src/main/res/layout/surface_renderer.xml | 2 +- app/src/main/res/values/colors.xml | 8 +- app/src/main/res/values/dimens.xml | 2 + app/src/main/res/values/setup.xml | 1 - app/src/main/res/values/styles.xml | 2 +- 15 files changed, 150 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index 86c0ffcf2..110f82820 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -411,7 +411,7 @@ public class CallActivity extends AppCompatActivity { .headingTvColor(getResources().getColor(R.color.colorPrimary)) .headingTvSize(20) .headingTvText(getString(R.string.nc_push_to_talk)) - .subHeadingTvColor(getResources().getColor(R.color.nc_white_color_complete)) + .subHeadingTvColor(getResources().getColor(R.color.white)) .subHeadingTvSize(16) .subHeadingTvText(getString(R.string.nc_push_to_talk_desc)) .maskColor(Color.parseColor("#dc000000")) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java index 6d09d8fa0..9bc90824d 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java @@ -20,7 +20,8 @@ package com.nextcloud.talk.adapters.messages; -import android.text.Html; +import android.text.Spannable; +import android.text.SpannableString; import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -77,7 +78,7 @@ public class MagicIncomingTextMessageViewHolder HashMap> messageParameters = message.getMessageParameters(); - String messageString = message.getText(); + Spannable messageString = new SpannableString(message.getText()); if (messageParameters != null && message.getMessageParameters().size() > 0) { for (String key : message.getMessageParameters().keySet()) { @@ -85,21 +86,23 @@ public class MagicIncomingTextMessageViewHolder if (individualHashMap.get("type").equals("user")) { int color; - if (messageParameters.get(key).get("id").equals(currentUser.getUserId())) { - color = NextcloudTalkApplication.getSharedApplication().getResources().getColor(R.color - .colorAccent); - } else { - color = NextcloudTalkApplication.getSharedApplication().getResources().getColor(R.color - .colorAccentComplement); - } + if (!individualHashMap.get("id").equals(message.getActorId())) { + if (individualHashMap.get("id").equals(currentUser.getUserId())) { + color = NextcloudTalkApplication.getSharedApplication().getResources().getColor(R.color + .nc_incoming_text_mention_you); + } else { + color = NextcloudTalkApplication.getSharedApplication().getResources().getColor(R.color + .nc_incoming_text_mention_others); + } - messageString = DisplayUtils.searchAndColor(messageString, - "@" + messageParameters.get(key).get("name"), color); + messageString = DisplayUtils.searchAndColor(messageText.getText().toString(), + messageString, "@" + individualHashMap.get("name"), color); + } } } } - messageText.setText(Html.fromHtml(messageString)); + messageText.setText(messageString); } } \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java new file mode 100644 index 000000000..0992fbcf3 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java @@ -0,0 +1,88 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.adapters.messages; + +import android.text.Spannable; +import android.text.SpannableString; +import android.view.View; +import android.widget.TextView; + +import com.nextcloud.talk.R; +import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.models.database.UserEntity; +import com.nextcloud.talk.models.json.chat.ChatMessage; +import com.nextcloud.talk.utils.DisplayUtils; +import com.nextcloud.talk.utils.database.user.UserUtils; +import com.stfalcon.chatkit.messages.MessageHolders; + +import java.util.HashMap; + +import javax.inject.Inject; + +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.ButterKnife; + +@AutoInjector(NextcloudTalkApplication.class) +public class MagicOutcomingTextMessageViewHolder extends MessageHolders.OutcomingTextMessageViewHolder { + @BindView(R.id.messageText) + TextView messageText; + + @Inject + UserUtils userUtils; + + private UserEntity currentUser; + + public MagicOutcomingTextMessageViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); + + currentUser = userUtils.getCurrentUser(); + } + + @Override + public void onBind(ChatMessage message) { + super.onBind(message); + + HashMap> messageParameters = message.getMessageParameters(); + + Spannable messageString = new SpannableString(message.getText()); + + if (messageParameters != null && message.getMessageParameters().size() > 0) { + for (String key : message.getMessageParameters().keySet()) { + HashMap individualHashMap = message.getMessageParameters().get(key); + if (individualHashMap.get("type").equals("user")) { + if (!individualHashMap.get("id").equals(currentUser.getUserId())) { + messageString = DisplayUtils.searchAndColor(messageText.getText().toString(), + messageString, "@" + individualHashMap.get("name"), NextcloudTalkApplication + .getSharedApplication().getResources().getColor(R.color.nc_outcoming_text_mention_others)); + } + + } + } + + } + + messageText.setText(messageString); + } + +} diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java index 1c77a62db..98db48379 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java @@ -46,6 +46,7 @@ import com.bumptech.glide.request.RequestOptions; import com.nextcloud.talk.R; import com.nextcloud.talk.activities.CallActivity; import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder; +import com.nextcloud.talk.adapters.messages.MagicOutcomingTextMessageViewHolder; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.callbacks.MentionAutocompleteCallback; @@ -154,6 +155,7 @@ public class ChatController extends BaseController implements MessagesListAdapte MessagesListAdapter.HoldersConfig holdersConfig = new MessagesListAdapter.HoldersConfig(); holdersConfig.setIncoming(MagicIncomingTextMessageViewHolder.class, R.layout.item_custom_incoming_text_message); + holdersConfig.setOutcomingTextHolder(MagicOutcomingTextMessageViewHolder.class); adapter = new MessagesListAdapter<>(currentUser.getUserId(), holdersConfig, new ImageLoader() { @Override diff --git a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java index ebb9aa7e0..92912a5dd 100644 --- a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java +++ b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java @@ -112,12 +112,14 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter internalUserItemList.add(new MentionAutocompleteItem(mention.getId(), mention .getLabel(), currentUser)); } + userItemList = internalUserItemList; adapter.updateDataSet(internalUserItemList, true); } } @Override public void onError(Throwable e) { + userItemList = new ArrayList<>(); adapter.updateDataSet(new ArrayList<>(), false); } @@ -127,6 +129,7 @@ public class MentionAutocompletePresenter extends RecyclerViewPresenter } }); } else { + userItemList = new ArrayList<>(); adapter.updateDataSet(new ArrayList<>(), false); } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java index c77003915..9b31cdbb7 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java @@ -23,16 +23,24 @@ package com.nextcloud.talk.utils; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; +import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; import android.support.v7.widget.AppCompatDrawableManager; +import android.text.Spannable; import android.text.TextUtils; +import android.text.style.AbsoluteSizeSpan; +import android.text.style.ForegroundColorSpan; +import android.text.style.StyleSpan; import android.util.DisplayMetrics; import android.util.Log; +import com.nextcloud.talk.R; +import com.nextcloud.talk.application.NextcloudTalkApplication; + import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -81,26 +89,26 @@ public class DisplayUtils { } - public static String searchAndColor(String text, String searchText, @ColorInt int color) { + public static Spannable searchAndColor(String text, Spannable spannable, String searchText, @ColorInt int color) { if (TextUtils.isEmpty(text) || TextUtils.isEmpty(searchText)) { - return text; + return spannable; } Matcher m = Pattern.compile(searchText, Pattern.CASE_INSENSITIVE | Pattern.LITERAL) .matcher(text); - StringBuffer sb = new StringBuffer(); + int textSize = NextcloudTalkApplication.getSharedApplication().getResources().getDimensionPixelSize(R.dimen + .chat_text_size); while (m.find()) { - String replacement = m.group().replace( - m.group(), - "" + m.group() + "" - ); - m.appendReplacement(sb, Matcher.quoteReplacement(replacement)); + int start = text.indexOf(m.group()); + int end = text.indexOf(m.group()) + m.group().length(); + spannable.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + spannable.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + spannable.setSpan(new AbsoluteSizeSpan(textSize) , start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } - m.appendTail(sb); - return sb.toString(); + return spannable; } } diff --git a/app/src/main/res/layout/bottom_buttons.xml b/app/src/main/res/layout/bottom_buttons.xml index 44864190a..f0a65f501 100644 --- a/app/src/main/res/layout/bottom_buttons.xml +++ b/app/src/main/res/layout/bottom_buttons.xml @@ -42,7 +42,7 @@ android:background="@color/nc_darkRed" android:text="@string/nc_contacts_clear" android:textAlignment="center" - android:textColor="@color/nc_white_color_complete"/> + android:textColor="@android:color/white"/>