Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2019-09-02 16:22:37 +02:00
parent 1a8a7cf202
commit 1ebb2e079d
5 changed files with 75 additions and 10 deletions

View File

@ -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 {
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));

View File

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

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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>