diff --git a/app/gplay.gradle b/app/gplay.gradle index 076f6bf84..78daf24e5 100644 --- a/app/gplay.gradle +++ b/app/gplay.gradle @@ -19,6 +19,6 @@ */ dependencies { - implementation "androidx.work:work-gcm:$work_version" + implementation "androidx.work:work-gcm:2.3.0-alpha02" implementation "com.google.firebase:firebase-messaging:20.0.0" } diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt index ecb3d7625..5000e9266 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt @@ -47,6 +47,14 @@ import eu.davidea.flexibleadapter.items.IFilterable import eu.davidea.flexibleadapter.items.IFlexible import eu.davidea.flexibleadapter.utils.FlexibleUtils import eu.davidea.viewholders.FlexibleViewHolder +import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.actionProgressBar +import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.dialogAvatar +import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.dialogDate +import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.dialogLastMessage +import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.dialogName +import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.dialogUnreadBubble +import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.favoriteConversationImageView +import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.passwordProtectedRoomImageView import java.util.Objects import java.util.regex.Pattern @@ -104,57 +112,57 @@ class ConversationItem( val appContext = NextcloudTalkApplication.sharedApplication!!.applicationContext if (model.changing) { - holder.progressBar!!.visibility = View.VISIBLE + holder.itemView.actionProgressBar!!.visibility = View.VISIBLE } else { - holder.progressBar!!.visibility = View.GONE + holder.itemView.actionProgressBar!!.visibility = View.GONE } if (adapter.hasFilter()) { FlexibleUtils.highlightText( - holder.dialogName!!, model.displayName, + holder.itemView.dialogName!!, model.displayName, adapter.getFilter(String::class.java).toString(), NextcloudTalkApplication.sharedApplication!! .resources.getColor(R.color.colorPrimary) ) } else { - holder.dialogName!!.text = model.displayName + holder.itemView.dialogName!!.text = model.displayName } if (model.unreadMessages > 0) { - holder.dialogUnreadBubble!!.visibility = View.VISIBLE + holder.itemView.dialogUnreadBubble!!.visibility = View.VISIBLE if (model.unreadMessages < 100) { - holder.dialogUnreadBubble!!.text = model.unreadMessages.toLong() + holder.itemView.dialogUnreadBubble!!.text = model.unreadMessages.toLong() .toString() } else { - holder.dialogUnreadBubble!!.text = context.getString(R.string.nc_99_plus) + holder.itemView.dialogUnreadBubble!!.text = context.getString(R.string.nc_99_plus) } if (model.unreadMention) { - holder.dialogUnreadBubble!!.background = + holder.itemView.dialogUnreadBubble!!.background = context.getDrawable(R.drawable.bubble_circle_unread_mention) } else { - holder.dialogUnreadBubble!!.background = + holder.itemView.dialogUnreadBubble!!.background = context.getDrawable(R.drawable.bubble_circle_unread) } } else { - holder.dialogUnreadBubble!!.visibility = View.GONE + holder.itemView.dialogUnreadBubble!!.visibility = View.GONE } if (model.hasPassword) { - holder.passwordProtectedRoomImageView!!.visibility = View.VISIBLE + holder.itemView.passwordProtectedRoomImageView!!.visibility = View.VISIBLE } else { - holder.passwordProtectedRoomImageView!!.visibility = View.GONE + holder.itemView.passwordProtectedRoomImageView!!.visibility = View.GONE } if (model.favorite) { - holder.pinnedConversationImageView!!.visibility = View.VISIBLE + holder.itemView.favoriteConversationImageView!!.visibility = View.VISIBLE } else { - holder.pinnedConversationImageView!!.visibility = View.GONE + holder.itemView.favoriteConversationImageView!!.visibility = View.GONE } if (model.lastMessage != null) { - holder.dialogDate!!.visibility = View.VISIBLE - holder.dialogDate!!.text = DateUtils.getRelativeTimeSpanString( + holder.itemView.dialogDate!!.visibility = View.VISIBLE + holder.itemView.dialogDate!!.text = DateUtils.getRelativeTimeSpanString( model.lastActivity * 1000L, System.currentTimeMillis(), 0, DateUtils.FORMAT_ABBREV_RELATIVE ) @@ -163,7 +171,7 @@ class ConversationItem( model.lastMessage!!.systemMessage ) || Conversation.ConversationType.SYSTEM_CONVERSATION == model.type ) { - holder.dialogLastMessage!!.text = model.lastMessage!!.text + holder.itemView.dialogLastMessage!!.text = model.lastMessage!!.text } else { var authorDisplayName = "" model.lastMessage!!.activeUser = userEntity @@ -194,14 +202,14 @@ class ConversationItem( text = model.lastMessage!!.lastMessageDisplayText } - holder.dialogLastMessage?.text = text + holder.itemView.dialogLastMessage.text = text } } else { - holder.dialogDate?.visibility = View.GONE - holder.dialogLastMessage!!.setText(R.string.nc_no_messages_yet) + holder.itemView.dialogDate.visibility = View.GONE + holder.itemView.dialogLastMessage.setText(R.string.nc_no_messages_yet) } - holder.dialogAvatar?.visibility = View.VISIBLE + holder.itemView.dialogAvatar.visibility = View.VISIBLE var shouldLoadAvatar = true val objectType: String? = model.objectType @@ -209,13 +217,13 @@ class ConversationItem( when (objectType) { "share:password" -> { shouldLoadAvatar = false - holder.dialogAvatar?.load(R.drawable.ic_file_password_request) { + holder.itemView.dialogAvatar.load(R.drawable.ic_file_password_request) { transformations(CircleCropTransformation()) } } "file" -> { shouldLoadAvatar = false - holder.dialogAvatar?.load(R.drawable.ic_file_icon) { + holder.itemView.dialogAvatar.load(R.drawable.ic_file_icon) { transformations(CircleCropTransformation()) } @@ -231,7 +239,7 @@ class ConversationItem( layers[1] = context.getDrawable(R.drawable.ic_launcher_foreground) val layerDrawable = LayerDrawable(layers) - holder.dialogAvatar?.load(layerDrawable) { + holder.itemView.dialogAvatar.load(layerDrawable) { transformations(CircleCropTransformation()) } @@ -240,11 +248,11 @@ class ConversationItem( if (shouldLoadAvatar) { when (model.type) { - Conversation.ConversationType.ONE_TO_ONE_CONVERSATION -> if (!TextUtils.isEmpty( + ONE_TO_ONE_CONVERSATION -> if (!TextUtils.isEmpty( model.name ) ) { - holder.dialogAvatar?.load( + holder.itemView.dialogAvatar.load( ApiUtils.getUrlForAvatarWithName( userEntity.baseUrl, model.name, R.dimen.avatar_size @@ -254,17 +262,17 @@ class ConversationItem( } } else { - holder.dialogAvatar?.visibility = View.GONE + holder.itemView.dialogAvatar.visibility = View.GONE } Conversation.ConversationType.GROUP_CONVERSATION -> - holder.dialogAvatar?.load(R.drawable.ic_people_group_white_24px) { + holder.itemView.dialogAvatar.load(R.drawable.ic_people_group_white_24px) { transformations(CircleCropTransformation()) } Conversation.ConversationType.PUBLIC_CONVERSATION -> - holder.dialogAvatar?.load(R.drawable.ic_link_white_24px) { + holder.itemView.dialogAvatar.load(R.drawable.ic_link_white_24px) { transformations(CircleCropTransformation()) } - else -> holder.dialogAvatar?.visibility = View.GONE + else -> holder.itemView.dialogAvatar.visibility = View.GONE } } } @@ -281,33 +289,5 @@ class ConversationItem( view: View, adapter: FlexibleAdapter<*> ) : FlexibleViewHolder(view, adapter) { - @JvmField - @BindView(R.id.dialogAvatar) - var dialogAvatar: ImageView? = null - @JvmField - @BindView(R.id.dialogName) - var dialogName: EmojiTextView? = null - @JvmField - @BindView(R.id.dialogDate) - var dialogDate: TextView? = null - @JvmField - @BindView(R.id.dialogLastMessage) - var dialogLastMessage: EmojiTextView? = null - @JvmField - @BindView(R.id.dialogUnreadBubble) - var dialogUnreadBubble: TextView? = null - @JvmField - @BindView(R.id.passwordProtectedRoomImageView) - var passwordProtectedRoomImageView: ImageView? = null - @JvmField - @BindView(R.id.favoriteConversationImageView) - var pinnedConversationImageView: ImageView? = null - @JvmField - @BindView(R.id.actionProgressBar) - var progressBar: ProgressBar? = null - - init { - ButterKnife.bind(this, view) - } } } diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.java deleted file mode 100644 index ebd5922da..000000000 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * 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.items; - -import android.content.res.Resources; -import android.graphics.drawable.ColorDrawable; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import butterknife.BindView; -import butterknife.ButterKnife; -import com.facebook.drawee.view.SimpleDraweeView; -import com.nextcloud.talk.R; -import com.nextcloud.talk.application.NextcloudTalkApplication; -import eu.davidea.flexibleadapter.FlexibleAdapter; -import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; -import eu.davidea.flexibleadapter.items.IFlexible; -import eu.davidea.viewholders.FlexibleViewHolder; -import java.util.List; - -public class NotificationSoundItem - extends AbstractFlexibleItem { - - private String notificationSoundName; - private String notificationSoundUri; - - public NotificationSoundItem(String notificationSoundName, String notificationSoundUri) { - this.notificationSoundName = notificationSoundName; - this.notificationSoundUri = notificationSoundUri; - } - - public String getNotificationSoundUri() { - return notificationSoundUri; - } - - public String getNotificationSoundName() { - return notificationSoundName; - } - - @Override - public boolean equals(Object o) { - return false; - } - - @Override - public int getLayoutRes() { - return R.layout.rv_item_notification_sound; - } - - @Override - public NotificationSoundItemViewHolder createViewHolder(View view, - FlexibleAdapter adapter) { - return new NotificationSoundItemViewHolder(view, adapter); - } - - @Override - public void bindViewHolder(FlexibleAdapter adapter, - NotificationSoundItemViewHolder holder, int position, List payloads) { - holder.notificationName.setText(notificationSoundName); - - if (adapter.isSelected(position)) { - holder.checkedImageView.setVisibility(View.VISIBLE); - } else { - holder.checkedImageView.setVisibility(View.GONE); - } - - Resources resources = NextcloudTalkApplication.Companion.getSharedApplication().getResources(); - holder.simpleDraweeView.getHierarchy() - .setBackgroundImage(new ColorDrawable(resources.getColor(R.color.colorPrimary))); - if (position == 0) { - holder.simpleDraweeView.getHierarchy() - .setImage(resources.getDrawable(R.drawable.ic_stop_white_24dp), 100, - true); - } else { - holder.simpleDraweeView.getHierarchy() - .setImage(resources.getDrawable(R.drawable.ic_play_circle_outline_white_24dp), 100, - true); - } - } - - static class NotificationSoundItemViewHolder extends FlexibleViewHolder { - @BindView(R.id.notificationNameTextView) - public TextView notificationName; - @BindView(R.id.simpleDraweeView) - SimpleDraweeView simpleDraweeView; - @BindView(R.id.checkedImageView) - ImageView checkedImageView; - - /** - * Default constructor. - */ - NotificationSoundItemViewHolder(View view, FlexibleAdapter adapter) { - super(view, adapter); - ButterKnife.bind(this, view); - } - } -} diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.kt new file mode 100644 index 000000000..cd90e378c --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.kt @@ -0,0 +1,114 @@ +/* + * 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.items + +import android.content.res.Resources +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import butterknife.BindView +import butterknife.ButterKnife +import coil.Coil +import coil.api.load +import coil.request.LoadRequest +import coil.request.Request +import coil.request.RequestBuilder +import coil.target.Target +import coil.transform.CircleCropTransformation +import com.nextcloud.talk.R +import com.nextcloud.talk.R.color +import com.nextcloud.talk.R.drawable +import com.nextcloud.talk.R.id +import com.nextcloud.talk.R.layout +import com.nextcloud.talk.adapters.items.NotificationSoundItem.NotificationSoundItemViewHolder +import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication +import com.nextcloud.talk.newarch.utils.Images +import eu.davidea.flexibleadapter.FlexibleAdapter +import eu.davidea.flexibleadapter.items.AbstractFlexibleItem +import eu.davidea.flexibleadapter.items.IFlexible +import eu.davidea.viewholders.FlexibleViewHolder + +class NotificationSoundItem( + val notificationSoundName: String, + val notificationSoundUri: String? +) : AbstractFlexibleItem() { + + override fun equals(o: Any?): Boolean { + return false + } + + override fun getLayoutRes(): Int { + return layout.rv_item_notification_sound + } + + override fun createViewHolder( + view: View, + adapter: FlexibleAdapter?> + ): NotificationSoundItemViewHolder { + return NotificationSoundItemViewHolder(view, adapter) + } + + override fun bindViewHolder( + adapter: FlexibleAdapter?>, + holder: NotificationSoundItemViewHolder, + position: Int, + payloads: List + ) { + holder.notificationName!!.text = notificationSoundName + if (adapter.isSelected(position)) { + holder.checkedImageView!!.visibility = View.VISIBLE + } else { + holder.checkedImageView!!.visibility = View.GONE + } + + if (position == 0) { + holder.imageView!!.load(drawable.ic_stop_white_24dp) + } else { + holder.imageView!!.load(drawable.ic_play_circle_outline_white_24dp) + } + } + + class NotificationSoundItemViewHolder( + view: View, + adapter: FlexibleAdapter<*> + ) : FlexibleViewHolder(view, adapter) { + @JvmField + @BindView(id.notificationNameTextView) + var notificationName: TextView? = null + @JvmField + @BindView(id.imageView) + var imageView: ImageView? = null + @JvmField + @BindView(id.checkedImageView) + var checkedImageView: ImageView? = null + + /** + * Default constructor. + */ + + init { + ButterKnife.bind(this, view) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.kt index a587c6d2c..222fc6125 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.kt @@ -21,8 +21,6 @@ package com.nextcloud.talk.adapters.items import android.content.Context -import android.content.res.Resources -import android.graphics.drawable.BitmapDrawable import android.text.TextUtils import android.view.View import android.widget.ImageView @@ -32,16 +30,12 @@ import butterknife.BindView import butterknife.ButterKnife import coil.api.load import coil.transform.CircleCropTransformation -import com.facebook.drawee.backends.pipeline.Fresco -import com.facebook.drawee.interfaces.DraweeController -import com.facebook.drawee.view.SimpleDraweeView import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter import com.nextcloud.talk.models.json.participants.Participant import com.nextcloud.talk.utils.ApiUtils -import com.nextcloud.talk.utils.DisplayUtils import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractFlexibleItem import eu.davidea.flexibleadapter.items.IFilterable diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.kt index b22ac8826..fcc2d9ac6 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.kt @@ -72,10 +72,10 @@ class MagicPreviewMessageViewHolder(itemView: View?) : IncomingImageMessageViewH var messageText: EmojiTextView? = null @JvmField @Inject - internal var context: Context? = null + var context: Context? = null @JvmField @Inject - internal var okHttpClient: OkHttpClient? = null + var okHttpClient: OkHttpClient? = null @SuppressLint("SetTextI18n") override fun onBind(message: ChatMessage) { diff --git a/app/src/main/res/drawable/primary_circle.xml b/app/src/main/res/drawable/primary_circle.xml new file mode 100644 index 000000000..3c6519214 --- /dev/null +++ b/app/src/main/res/drawable/primary_circle.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/app/src/main/res/layout/rv_item_conversation_info_participant.xml b/app/src/main/res/layout/rv_item_conversation_info_participant.xml index 32f523b85..f26838dcc 100644 --- a/app/src/main/res/layout/rv_item_conversation_info_participant.xml +++ b/app/src/main/res/layout/rv_item_conversation_info_participant.xml @@ -32,11 +32,10 @@ android:layout_centerVertical="true" android:layout_marginStart="@dimen/activity_horizontal_margin"> - diff --git a/app/src/main/res/layout/rv_item_conversation_with_last_message.xml b/app/src/main/res/layout/rv_item_conversation_with_last_message.xml index 2b39983c5..1890d8906 100644 --- a/app/src/main/res/layout/rv_item_conversation_with_last_message.xml +++ b/app/src/main/res/layout/rv_item_conversation_with_last_message.xml @@ -1,4 +1,5 @@ - - - - - diff --git a/app/src/main/res/layout/rv_item_mention.xml b/app/src/main/res/layout/rv_item_mention.xml index 2834cd1af..16534d1ef 100644 --- a/app/src/main/res/layout/rv_item_mention.xml +++ b/app/src/main/res/layout/rv_item_mention.xml @@ -21,7 +21,6 @@ --> diff --git a/app/src/main/res/layout/rv_item_notification_sound.xml b/app/src/main/res/layout/rv_item_notification_sound.xml index baa319c6e..5d54d7a49 100644 --- a/app/src/main/res/layout/rv_item_notification_sound.xml +++ b/app/src/main/res/layout/rv_item_notification_sound.xml @@ -26,7 +26,6 @@ android:animateLayoutChanges="true" android:orientation="vertical"> - - + android:layout_marginEnd="8dp" />