Просмотр исходного кода

Fix #249

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 5 лет назад
Родитель
Сommit
1ebb2e079d

+ 13 - 5
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java

@@ -102,7 +102,7 @@ public class MagicIncomingTextMessageViewHolder
             messageAuthor.setText(R.string.nc_nick_guest);
         }
 
-        if (!message.isGrouped) {
+        if (!message.isGrouped() && !message.isOneToOneConversation()) {
             messageUserAvatarView.setVisibility(View.VISIBLE);
             if (message.getActorType().equals("guests")) {
                 TextDrawable drawable = TextDrawable.builder().beginConfig().bold()
@@ -125,8 +125,11 @@ public class MagicIncomingTextMessageViewHolder
                 messageUserAvatarView.getHierarchy().setPlaceholderImage(drawable);
             }
         } else {
-
-            messageUserAvatarView.setVisibility(View.INVISIBLE);
+            if (message.isOneToOneConversation()) {
+                messageUserAvatarView.setVisibility(View.GONE);
+            } else {
+                messageUserAvatarView.setVisibility(View.INVISIBLE);
+            }
             messageAuthor.setVisibility(View.GONE);
         }
 
@@ -135,14 +138,19 @@ public class MagicIncomingTextMessageViewHolder
                 resources.getColor(R.color.bg_message_list_incoming_bubble_dark2) :
                 resources.getColor(R.color.bg_message_list_incoming_bubble);
 
+        int bubbleResource = R.drawable.shape_incoming_message;
+
+        if (message.isGrouped) {
+            bubbleResource = R.drawable.shape_grouped_incoming_message;
+        }
+
         Drawable bubbleDrawable = DisplayUtils.getMessageSelector(bg_bubble_color,
                 resources.getColor(R.color.transparent),
-                bg_bubble_color, R.drawable.shape_grouped_incoming_message);
+                bg_bubble_color, bubbleResource);
         ViewCompat.setBackground(bubble, bubbleDrawable);
 
         HashMap<String, HashMap<String, String>> messageParameters = message.getMessageParameters();
 
-        Context context = NextcloudTalkApplication.Companion.getSharedApplication().getApplicationContext();
         itemView.setSelected(false);
         messageTimeView.setTextColor(context.getResources().getColor(R.color.warm_grey_four));
 

+ 6 - 2
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java

@@ -81,8 +81,12 @@ public class MagicPreviewMessageViewHolder extends MessageHolders.IncomingImageM
     public void onBind(ChatMessage message) {
         super.onBind(message);
         if (userAvatar != null) {
-            if (message.isGrouped) {
-                userAvatar.setVisibility(View.INVISIBLE);
+            if (message.isGrouped || message.isOneToOneConversation()) {
+                if (message.isOneToOneConversation()) {
+                    userAvatar.setVisibility(View.GONE);
+                } else {
+                    userAvatar.setVisibility(View.INVISIBLE);
+                }
             } else {
                 userAvatar.setVisibility(View.VISIBLE);
 

+ 53 - 1
app/src/main/java/com/nextcloud/talk/controllers/ChatController.java

@@ -25,6 +25,7 @@ import android.content.ClipData;
 import android.content.ClipboardManager;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Bitmap;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -48,6 +49,8 @@ import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
+import androidx.core.graphics.drawable.RoundedBitmapDrawable;
+import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
 import androidx.emoji.widget.EmojiEditText;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -55,9 +58,16 @@ import androidx.recyclerview.widget.RecyclerView;
 import com.bluelinelabs.conductor.RouterTransaction;
 import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
 import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
+import com.facebook.common.executors.UiThreadImmediateExecutorService;
+import com.facebook.common.references.CloseableReference;
+import com.facebook.datasource.DataSource;
 import com.facebook.drawee.backends.pipeline.Fresco;
 import com.facebook.drawee.interfaces.DraweeController;
 import com.facebook.drawee.view.SimpleDraweeView;
+import com.facebook.imagepipeline.core.ImagePipeline;
+import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber;
+import com.facebook.imagepipeline.image.CloseableImage;
+import com.facebook.imagepipeline.request.ImageRequest;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.activities.MagicCallActivity;
 import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder;
@@ -129,6 +139,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import autodagger.AutoInjector;
@@ -265,6 +276,8 @@ public class ChatController extends BaseController implements MessagesListAdapte
 
                         currentConversation = roomOverall.getOcs().getData();
 
+                        loadAvatarForStatusBar();
+
                         conversationName = currentConversation.getDisplayName();
                         setTitle();
                         setupMentionAutocomplete();
@@ -312,6 +325,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
                             if (roomId.equals(conversation.getRoomId())) {
                                 roomToken = conversation.getToken();
                                 currentConversation = conversation;
+                                loadAvatarForStatusBar();
                                 checkLobbyState();
                                 checkReadOnlyState();
                                 conversationName = conversation.getDisplayName();
@@ -343,6 +357,36 @@ public class ChatController extends BaseController implements MessagesListAdapte
         return inflater.inflate(R.layout.controller_chat, container, false);
     }
 
+    private void loadAvatarForStatusBar() {
+        if (currentConversation != null && currentConversation.getType().equals(Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) && getActivity() != null && conversationVoiceCallMenuItem != null) {
+            int avatarSize =
+                    (int) DisplayUtils.convertDpToPixel(conversationVoiceCallMenuItem.getIcon().getIntrinsicWidth(), getActivity());
+
+            ImageRequest imageRequest =
+                    DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithNameAndPixels(conversationUser.getBaseUrl(),
+                            currentConversation.getName(), avatarSize / 2), null);
+
+            ImagePipeline imagePipeline = Fresco.getImagePipeline();
+            DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, null);
+
+            dataSource.subscribe(new BaseBitmapDataSubscriber() {
+                @Override
+                protected void onNewResultImpl(@Nullable Bitmap bitmap) {
+                    if (getActionBar() != null && bitmap != null && getResources() != null) {
+                        RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
+                        roundedBitmapDrawable.setCircular(true);
+                        roundedBitmapDrawable.setAntiAlias(true);
+                        getActionBar().setIcon(roundedBitmapDrawable);
+                    }
+                }
+
+                @Override
+                protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) {
+                }
+            }, UiThreadImmediateExecutorService.getInstance());
+        }
+    }
+
     @Override
     protected void onViewBound(@NonNull View view) {
         super.onViewBound(view);
@@ -351,7 +395,6 @@ public class ChatController extends BaseController implements MessagesListAdapte
         boolean adapterWasNull = false;
 
         if (adapter == null) {
-
             loadingProgressBar.setVisibility(View.VISIBLE);
 
             adapterWasNull = true;
@@ -483,6 +526,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
         }
 
         if (currentConversation != null) {
+            loadAvatarForStatusBar();
             checkLobbyState();
         }
 
@@ -691,6 +735,10 @@ public class ChatController extends BaseController implements MessagesListAdapte
             getActivity().findViewById(R.id.toolbar).setOnClickListener(null);
         }
 
+        if (getActionBar() != null) {
+            getActionBar().setIcon(null);
+        }
+
         adapter = null;
         inChat = false;
     }
@@ -1059,6 +1107,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
                     }
 
                     ChatMessage chatMessage = chatMessageList.get(i);
+                    chatMessage.setOneToOneConversation(currentConversation.getType().equals(Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL));
                     chatMessage.setLinkPreviewAllowed(isLinkPreviewAllowed);
                     chatMessage.setActiveUser(conversationUser);
 
@@ -1112,6 +1161,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
 
                     if (adapter != null) {
                         chatMessage.setGrouped(adapter.isPreviousSameAuthor(chatMessage.getActorId(), -1) && (adapter.getSameAuthorLastMessagesCount(chatMessage.getActorId()) % 5) > 0);
+                        chatMessage.setOneToOneConversation(currentConversation.getType().equals(Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL));
                         adapter.addToStart(chatMessage, shouldScroll);
                     }
 
@@ -1176,6 +1226,8 @@ public class ChatController extends BaseController implements MessagesListAdapte
             conversationInfoMenuItem = menu.findItem(R.id.conversation_info);
             conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call);
             conversationVideoMenuItem = menu.findItem(R.id.conversation_video_call);
+
+            loadAvatarForStatusBar();
         }
     }
 

+ 2 - 0
app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java

@@ -45,6 +45,8 @@ public class ChatMessage implements IMessage, MessageContentType, MessageContent
     @JsonIgnore
     public boolean isGrouped;
     @JsonIgnore
+    public boolean isOneToOneConversation;
+    @JsonIgnore
     public UserEntity activeUser;
     @JsonIgnore
     public Map<String, String> selectedIndividualHashMap;

+ 1 - 2
app/src/main/res/layout/activity_main.xml

@@ -42,8 +42,7 @@
             android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
             app:contentInsetStart="24dp"
             app:contentInsetStartWithNavigation="0dp"
-            app:popupTheme="@style/appActionBarPopupMenu"
-            app:titleMarginStart="0dp" />
+            app:popupTheme="@style/appActionBarPopupMenu" />
     </com.google.android.material.appbar.AppBarLayout>
 
 </androidx.coordinatorlayout.widget.CoordinatorLayout>