From b3ea73f6a9b644c6e62f871ffd09fd4067359113 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 9 May 2018 13:46:22 +0200 Subject: [PATCH] Implement part of #164 Signed-off-by: Mario Danic --- app/build.gradle | 2 ++ .../talk/controllers/ChatController.java | 36 ++++++++++++++++--- .../ic_baseline_arrow_downward_24px.xml | 26 ++++++++++++++ app/src/main/res/layout/controller_chat.xml | 24 ++++++++++--- app/src/main/res/menu/menu_conversation.xml | 4 +-- app/src/main/res/values-b+en+001/strings.xml | 4 +-- app/src/main/res/values-de-rDE/strings.xml | 4 +-- app/src/main/res/values-de/strings.xml | 4 +-- app/src/main/res/values-es-rMX/strings.xml | 4 +-- app/src/main/res/values-es/strings.xml | 4 +-- app/src/main/res/values-fr/strings.xml | 4 +-- app/src/main/res/values-it/strings.xml | 4 +-- app/src/main/res/values-pt-rBR/strings.xml | 4 +-- app/src/main/res/values-ru/strings.xml | 4 +-- app/src/main/res/values-sr/strings.xml | 4 +-- app/src/main/res/values-tr/strings.xml | 4 +-- app/src/main/res/values/strings.xml | 5 +-- 17 files changed, 106 insertions(+), 35 deletions(-) create mode 100644 app/src/main/res/drawable/ic_baseline_arrow_downward_24px.xml diff --git a/app/build.gradle b/app/build.gradle index 4a9e87da5..37e601e59 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -155,6 +155,8 @@ dependencies { implementation 'com.github.Kennyc1012:BottomSheet:2.4.0' implementation 'eu.davidea:flipview:1.1.3' + implementation 'com.webianks.library:popup-bubble:1.0.5' + testImplementation 'junit:junit:4.12' androidTestImplementation ('com.android.support.test.espresso:espresso-core:3.0.1', { exclude group: 'com.android.support', module: 'support-annotations' 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 6336ee242..f6dec5020 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java @@ -31,6 +31,8 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.LinearSmoothScroller; +import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; @@ -76,6 +78,7 @@ import com.stfalcon.chatkit.messages.MessageInput; import com.stfalcon.chatkit.messages.MessagesList; import com.stfalcon.chatkit.messages.MessagesListAdapter; import com.stfalcon.chatkit.utils.DateFormatter; +import com.webianks.library.PopupBubble; import org.parceler.Parcels; @@ -109,6 +112,8 @@ public class ChatController extends BaseController implements MessagesListAdapte MessageInput messageInput; @BindView(R.id.messagesList) MessagesList messagesList; + @BindView(R.id.popupBubble) + PopupBubble popupBubble; private List disposableList = new ArrayList<>(); private String conversationName; private String roomToken; @@ -122,8 +127,8 @@ public class ChatController extends BaseController implements MessagesListAdapte private MessagesListAdapter adapter; private Menu globalMenu; + private RecyclerView.SmoothScroller smoothScroller; private Autocomplete mentionAutocomplete; - /* TODO: - check push notifications @@ -150,6 +155,15 @@ public class ChatController extends BaseController implements MessagesListAdapte boolean adapterWasNull = false; + if (getActivity() != null) { + smoothScroller = new LinearSmoothScroller(getActivity()) { + @Override + protected int getVerticalSnapPreference() { + return LinearSmoothScroller.SNAP_TO_START; + } + }; + } + if (adapter == null) { adapterWasNull = true; @@ -178,9 +192,10 @@ public class ChatController extends BaseController implements MessagesListAdapte messagesList.setAdapter(adapter); adapter.setLoadMoreListener(this); adapter.setDateHeadersFormatter(this::format); - adapter.setOnMessageLongClickListener(this); + popupBubble.setRecyclerView(messagesList); + setupMentionAutocomplete(); messageInput.getInputEditText().setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); @@ -312,7 +327,14 @@ public class ChatController extends BaseController implements MessagesListAdapte @Override public void onNext(GenericOverall genericOverall) { + LinearLayoutManager layoutManager = (LinearLayoutManager) messagesList.getLayoutManager(); + if (popupBubble.isShown()) { + popupBubble.hide(); + } + + smoothScroller.setTargetPosition(0); + layoutManager.startSmoothScroll(smoothScroller); } @Override @@ -433,8 +455,14 @@ public class ChatController extends BaseController implements MessagesListAdapte LinearLayoutManager layoutManager = (LinearLayoutManager) messagesList.getLayoutManager(); for (int i = 0; i < chatMessageList.size(); i++) { chatMessageList.get(i).setBaseUrl(currentUser.getBaseUrl()); - adapter.addToStart(chatMessageList.get(i), - layoutManager.findLastVisibleItemPosition() <= adapter.getItemCount() - 10); + boolean shouldScroll = layoutManager.findFirstVisibleItemPosition() == 0; + + if (!shouldScroll && !popupBubble.isShown()) { + popupBubble.show(); + } + + adapter.addToStart(chatMessageList.get(i), shouldScroll); + } globalLastKnownFutureMessageId = Integer.parseInt(response.headers().get("X-Chat-Last-Given")); diff --git a/app/src/main/res/drawable/ic_baseline_arrow_downward_24px.xml b/app/src/main/res/drawable/ic_baseline_arrow_downward_24px.xml new file mode 100644 index 000000000..97057217c --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_arrow_downward_24px.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/app/src/main/res/layout/controller_chat.xml b/app/src/main/res/layout/controller_chat.xml index 5d0012ea1..3429ba70a 100644 --- a/app/src/main/res/layout/controller_chat.xml +++ b/app/src/main/res/layout/controller_chat.xml @@ -32,21 +32,35 @@ app:incomingDefaultBubbleColor="@color/white_two" app:incomingDefaultBubblePressedColor="@color/white_two" app:incomingDefaultBubbleSelectedColor="@color/colorPrimaryDark" + app:incomingTextColor="@color/nc_incoming_text_default" + app:incomingTextLinkColor="@color/nc_incoming_text_default" app:incomingTextSize="@dimen/chat_text_size" app:incomingTimeTextSize="12sp" app:outcomingDefaultBubbleColor="@color/colorPrimary" app:outcomingDefaultBubblePressedColor="@color/colorPrimary" app:outcomingDefaultBubbleSelectedColor="@color/colorPrimaryDark" - app:outcomingTextSize="@dimen/chat_text_size" - app:outcomingTimeTextSize="12sp" - app:outcomingTimeTextColor="@color/warm_grey_four" app:outcomingTextColor="@color/nc_outcoming_text_default" app:outcomingTextLinkColor="@color/nc_outcoming_text_default" - app:incomingTextColor="@color/nc_incoming_text_default" - app:incomingTextLinkColor="@color/nc_incoming_text_default" + app:outcomingTextSize="@dimen/chat_text_size" + app:outcomingTimeTextColor="@color/warm_grey_four" + app:outcomingTimeTextSize="12sp" app:textAutoLink="all"/> + + diff --git a/app/src/main/res/values-b+en+001/strings.xml b/app/src/main/res/values-b+en+001/strings.xml index 539fdff68..ef97706da 100644 --- a/app/src/main/res/values-b+en+001/strings.xml +++ b/app/src/main/res/values-b+en+001/strings.xml @@ -171,7 +171,7 @@ Find Nextcloud on https://nextcloud.com Enter a message… Yesterday Today - Voice call - Video call + Voice call + Video call diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index dcd125977..442332aa1 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -170,7 +170,7 @@ Finden Sie Nextcloud auf https://nextcloud.com Eine Nachricht eingeben… Gestern Heute - Sprachanruf - Videoanruf + Sprachanruf + Videoanruf diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index fe8784bff..a4a403363 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -170,7 +170,7 @@ Finden Sie Nextcloud auf https://nextcloud.com Neue Nachricht eingeben… Gestern Heute - Sprachanruf - Videoanruf + Sprachanruf + Videoanruf diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index e04b6ac2e..6b4df9f11 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -172,7 +172,7 @@ Visita a Nextcloud en https://nextcloud.com Introduce un mensaje... Ayer Hoy - Llamada de voz - Video llamada + Llamada de voz + Video llamada diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 84a2078d3..38fcb4403 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -171,7 +171,7 @@ Encuentra Nextcloud en https://nextcloud.com Escribe un mensaje… Ayer Hoy - Llamada de audio - Llamada de vídeo + Llamada de audio + Llamada de vídeo diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9b4e4a357..b275faf5c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -170,7 +170,7 @@ Trouvez Nextcloud sur https://nextcloud.com Saisir un message… Hier Aujourd\'hui - Appel audio - Appel vidéo + Appel audio + Appel vidéo diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 552a1565c..807e444c8 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -171,7 +171,7 @@ Trovi Nextcloud su https://nextcloud.com Digita un messaggio Ieri Oggi - Chiamata vocale - Chiamata video + Chiamata vocale + Chiamata video diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b89fbce88..edae5c37a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -171,7 +171,7 @@ Encontre o Nextcloud em https://nextcloud.com Digite uma mensagem... Ontem Hoje - Chamada de áudio - Chamada de vídeo + Chamada de áudio + Chamada de vídeo diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f6269a565..7b520cb6a 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -170,7 +170,7 @@ Nextcloud ежедневно используется как для работы Напишите сообщение… Вчера Сегодня - Голосовой вызов - Видеозвонок + Голосовой вызов + Видеозвонок diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 2e9becb89..f8f13a5cc 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -166,7 +166,7 @@ Nextcloud Talk апликација захтева да имате Некстк Унесите поруку… Јуче Данас - Аудио позив - Видео позив + Аудио позив + Видео позив diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 7f1ceb12c..40825de64 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -173,7 +173,7 @@ Nextcloud web sitesi https://nextcloud.com Bir ileti yazın… Dün Bugün - Sesli arama - Görüntülü arama + Sesli arama + Görüntülü arama diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 009e8e370..38a5a6c07 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -171,7 +171,8 @@ Find Nextcloud on https://nextcloud.com Enter a message… Yesterday Today - Voice call - Video call + Voice call + Video call + New messages