mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-11 14:54:09 +01:00
parent
1a8a7cf202
commit
1ebb2e079d
@ -102,7 +102,7 @@ public class MagicIncomingTextMessageViewHolder
|
|||||||
messageAuthor.setText(R.string.nc_nick_guest);
|
messageAuthor.setText(R.string.nc_nick_guest);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!message.isGrouped) {
|
if (!message.isGrouped() && !message.isOneToOneConversation()) {
|
||||||
messageUserAvatarView.setVisibility(View.VISIBLE);
|
messageUserAvatarView.setVisibility(View.VISIBLE);
|
||||||
if (message.getActorType().equals("guests")) {
|
if (message.getActorType().equals("guests")) {
|
||||||
TextDrawable drawable = TextDrawable.builder().beginConfig().bold()
|
TextDrawable drawable = TextDrawable.builder().beginConfig().bold()
|
||||||
@ -125,8 +125,11 @@ public class MagicIncomingTextMessageViewHolder
|
|||||||
messageUserAvatarView.getHierarchy().setPlaceholderImage(drawable);
|
messageUserAvatarView.getHierarchy().setPlaceholderImage(drawable);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (message.isOneToOneConversation()) {
|
||||||
|
messageUserAvatarView.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
messageUserAvatarView.setVisibility(View.INVISIBLE);
|
messageUserAvatarView.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
messageAuthor.setVisibility(View.GONE);
|
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_dark2) :
|
||||||
resources.getColor(R.color.bg_message_list_incoming_bubble);
|
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,
|
Drawable bubbleDrawable = DisplayUtils.getMessageSelector(bg_bubble_color,
|
||||||
resources.getColor(R.color.transparent),
|
resources.getColor(R.color.transparent),
|
||||||
bg_bubble_color, R.drawable.shape_grouped_incoming_message);
|
bg_bubble_color, bubbleResource);
|
||||||
ViewCompat.setBackground(bubble, bubbleDrawable);
|
ViewCompat.setBackground(bubble, bubbleDrawable);
|
||||||
|
|
||||||
HashMap<String, HashMap<String, String>> messageParameters = message.getMessageParameters();
|
HashMap<String, HashMap<String, String>> messageParameters = message.getMessageParameters();
|
||||||
|
|
||||||
Context context = NextcloudTalkApplication.Companion.getSharedApplication().getApplicationContext();
|
|
||||||
itemView.setSelected(false);
|
itemView.setSelected(false);
|
||||||
messageTimeView.setTextColor(context.getResources().getColor(R.color.warm_grey_four));
|
messageTimeView.setTextColor(context.getResources().getColor(R.color.warm_grey_four));
|
||||||
|
|
||||||
|
@ -81,8 +81,12 @@ public class MagicPreviewMessageViewHolder extends MessageHolders.IncomingImageM
|
|||||||
public void onBind(ChatMessage message) {
|
public void onBind(ChatMessage message) {
|
||||||
super.onBind(message);
|
super.onBind(message);
|
||||||
if (userAvatar != null) {
|
if (userAvatar != null) {
|
||||||
if (message.isGrouped) {
|
if (message.isGrouped || message.isOneToOneConversation()) {
|
||||||
|
if (message.isOneToOneConversation()) {
|
||||||
|
userAvatar.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
userAvatar.setVisibility(View.INVISIBLE);
|
userAvatar.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
userAvatar.setVisibility(View.VISIBLE);
|
userAvatar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import android.content.ClipData;
|
|||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
@ -48,6 +49,8 @@ import android.widget.RelativeLayout;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
|
||||||
|
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
|
||||||
import androidx.emoji.widget.EmojiEditText;
|
import androidx.emoji.widget.EmojiEditText;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
@ -55,9 +58,16 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
import com.bluelinelabs.conductor.RouterTransaction;
|
import com.bluelinelabs.conductor.RouterTransaction;
|
||||||
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
|
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
|
||||||
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
|
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.backends.pipeline.Fresco;
|
||||||
import com.facebook.drawee.interfaces.DraweeController;
|
import com.facebook.drawee.interfaces.DraweeController;
|
||||||
import com.facebook.drawee.view.SimpleDraweeView;
|
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.R;
|
||||||
import com.nextcloud.talk.activities.MagicCallActivity;
|
import com.nextcloud.talk.activities.MagicCallActivity;
|
||||||
import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder;
|
import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder;
|
||||||
@ -129,6 +139,7 @@ import java.util.Map;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import autodagger.AutoInjector;
|
import autodagger.AutoInjector;
|
||||||
@ -265,6 +276,8 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
|
|
||||||
currentConversation = roomOverall.getOcs().getData();
|
currentConversation = roomOverall.getOcs().getData();
|
||||||
|
|
||||||
|
loadAvatarForStatusBar();
|
||||||
|
|
||||||
conversationName = currentConversation.getDisplayName();
|
conversationName = currentConversation.getDisplayName();
|
||||||
setTitle();
|
setTitle();
|
||||||
setupMentionAutocomplete();
|
setupMentionAutocomplete();
|
||||||
@ -312,6 +325,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
if (roomId.equals(conversation.getRoomId())) {
|
if (roomId.equals(conversation.getRoomId())) {
|
||||||
roomToken = conversation.getToken();
|
roomToken = conversation.getToken();
|
||||||
currentConversation = conversation;
|
currentConversation = conversation;
|
||||||
|
loadAvatarForStatusBar();
|
||||||
checkLobbyState();
|
checkLobbyState();
|
||||||
checkReadOnlyState();
|
checkReadOnlyState();
|
||||||
conversationName = conversation.getDisplayName();
|
conversationName = conversation.getDisplayName();
|
||||||
@ -343,6 +357,36 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
return inflater.inflate(R.layout.controller_chat, container, false);
|
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
|
@Override
|
||||||
protected void onViewBound(@NonNull View view) {
|
protected void onViewBound(@NonNull View view) {
|
||||||
super.onViewBound(view);
|
super.onViewBound(view);
|
||||||
@ -351,7 +395,6 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
boolean adapterWasNull = false;
|
boolean adapterWasNull = false;
|
||||||
|
|
||||||
if (adapter == null) {
|
if (adapter == null) {
|
||||||
|
|
||||||
loadingProgressBar.setVisibility(View.VISIBLE);
|
loadingProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
adapterWasNull = true;
|
adapterWasNull = true;
|
||||||
@ -483,6 +526,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (currentConversation != null) {
|
if (currentConversation != null) {
|
||||||
|
loadAvatarForStatusBar();
|
||||||
checkLobbyState();
|
checkLobbyState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -691,6 +735,10 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
getActivity().findViewById(R.id.toolbar).setOnClickListener(null);
|
getActivity().findViewById(R.id.toolbar).setOnClickListener(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getActionBar() != null) {
|
||||||
|
getActionBar().setIcon(null);
|
||||||
|
}
|
||||||
|
|
||||||
adapter = null;
|
adapter = null;
|
||||||
inChat = false;
|
inChat = false;
|
||||||
}
|
}
|
||||||
@ -1059,6 +1107,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
}
|
}
|
||||||
|
|
||||||
ChatMessage chatMessage = chatMessageList.get(i);
|
ChatMessage chatMessage = chatMessageList.get(i);
|
||||||
|
chatMessage.setOneToOneConversation(currentConversation.getType().equals(Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL));
|
||||||
chatMessage.setLinkPreviewAllowed(isLinkPreviewAllowed);
|
chatMessage.setLinkPreviewAllowed(isLinkPreviewAllowed);
|
||||||
chatMessage.setActiveUser(conversationUser);
|
chatMessage.setActiveUser(conversationUser);
|
||||||
|
|
||||||
@ -1112,6 +1161,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
|
|
||||||
if (adapter != null) {
|
if (adapter != null) {
|
||||||
chatMessage.setGrouped(adapter.isPreviousSameAuthor(chatMessage.getActorId(), -1) && (adapter.getSameAuthorLastMessagesCount(chatMessage.getActorId()) % 5) > 0);
|
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);
|
adapter.addToStart(chatMessage, shouldScroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1176,6 +1226,8 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
|||||||
conversationInfoMenuItem = menu.findItem(R.id.conversation_info);
|
conversationInfoMenuItem = menu.findItem(R.id.conversation_info);
|
||||||
conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call);
|
conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call);
|
||||||
conversationVideoMenuItem = menu.findItem(R.id.conversation_video_call);
|
conversationVideoMenuItem = menu.findItem(R.id.conversation_video_call);
|
||||||
|
|
||||||
|
loadAvatarForStatusBar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ public class ChatMessage implements IMessage, MessageContentType, MessageContent
|
|||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
public boolean isGrouped;
|
public boolean isGrouped;
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
|
public boolean isOneToOneConversation;
|
||||||
|
@JsonIgnore
|
||||||
public UserEntity activeUser;
|
public UserEntity activeUser;
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
public Map<String, String> selectedIndividualHashMap;
|
public Map<String, String> selectedIndividualHashMap;
|
||||||
|
@ -42,8 +42,7 @@
|
|||||||
android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
|
android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
|
||||||
app:contentInsetStart="24dp"
|
app:contentInsetStart="24dp"
|
||||||
app:contentInsetStartWithNavigation="0dp"
|
app:contentInsetStartWithNavigation="0dp"
|
||||||
app:popupTheme="@style/appActionBarPopupMenu"
|
app:popupTheme="@style/appActionBarPopupMenu" />
|
||||||
app:titleMarginStart="0dp" />
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
Loading…
Reference in New Issue
Block a user