diff --git a/library/ui-styles/src/main/res/values/dimens.xml b/library/ui-styles/src/main/res/values/dimens.xml index 8dd7188327..81d5a77297 100644 --- a/library/ui-styles/src/main/res/values/dimens.xml +++ b/library/ui-styles/src/main/res/values/dimens.xml @@ -40,6 +40,7 @@ 24dp 48dp 48dp + 38dp 56dp diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt index d7b51cfd2e..ffb6ab6d26 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt @@ -40,6 +40,7 @@ import android.widget.TextView import android.widget.Toast import androidx.annotation.DrawableRes import androidx.annotation.StringRes +import androidx.appcompat.view.menu.MenuBuilder import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.DrawableCompat import androidx.core.net.toUri @@ -998,7 +999,11 @@ class TimelineFragment @Inject constructor( } } + @SuppressLint("RestrictedApi") override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + if (isThreadTimeLine()) { + if (menu is MenuBuilder) menu.setOptionalIconsVisible(true) + } super.onCreateOptionsMenu(menu, inflater) // We use a custom layout for this menu item, so we need to set a ClickListener menu.findItem(R.id.open_matrix_apps)?.let { menuItem -> @@ -1474,6 +1479,10 @@ class TimelineFragment @Inject constructor( views.composerLayout.views.composerEmojiButton.isVisible = vectorPreferences.showEmojiKeyboard() + if (isThreadTimeLine() && timelineArgs.threadTimelineArgs?.startsThread == true) { + // Show keyboard when the user started a thread + views.composerLayout.views.composerEditText.showKeyboard(andRequestFocus = true) + } views.composerLayout.callback = object : MessageComposerView.Callback { override fun onAddAttachment() { if (!::attachmentTypeSelector.isInitialized) { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt index 91c567285b..77284edba0 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt @@ -710,8 +710,10 @@ class TimelineViewModel @AssistedInject constructor( if (initialState.isThreadTimeline()) { when (itemId) { - R.id.menu_thread_timeline_more -> true - else -> false + R.id.menu_thread_timeline_view_in_room, + R.id.menu_thread_timeline_copy_link, + R.id.menu_thread_timeline_share -> true + else -> false } } else { when (itemId) { diff --git a/vector/src/main/java/im/vector/app/features/home/room/threads/list/model/ThreadListItem.kt b/vector/src/main/java/im/vector/app/features/home/room/threads/list/model/ThreadListItem.kt index 2364e86166..385bb226a1 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/threads/list/model/ThreadListItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/threads/list/model/ThreadListItem.kt @@ -33,6 +33,7 @@ import im.vector.app.core.extensions.setLeftDrawable import im.vector.app.core.utils.DimensionConverter import im.vector.app.features.displayname.getBestName import im.vector.app.features.home.AvatarRenderer +import im.vector.app.features.themes.ThemeUtils import org.matrix.android.sdk.api.session.threads.ThreadNotificationState import org.matrix.android.sdk.api.util.MatrixItem @@ -60,9 +61,11 @@ abstract class ThreadListItem : VectorEpoxyModel() { holder.dateTextView.text = date if (rootMessageDeleted) { holder.rootMessageTextView.text = holder.view.context.getString(R.string.event_redacted) + holder.rootMessageTextView.setTextColor(ThemeUtils.getColor(holder.view.context, R.attr.vctr_content_secondary)) holder.rootMessageTextView.setLeftDrawable(R.drawable.ic_trash_16, R.attr.vctr_content_tertiary) holder.rootMessageTextView.compoundDrawablePadding = DimensionConverter(holder.view.context.resources).dpToPx(10) } else { + holder.rootMessageTextView.setTextColor(ThemeUtils.getColor(holder.view.context, R.attr.vctr_content_primary)) holder.rootMessageTextView.text = rootMessage holder.rootMessageTextView.clearDrawables() } diff --git a/vector/src/main/java/im/vector/app/features/home/room/threads/list/views/ThreadListBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/threads/list/views/ThreadListBottomSheet.kt index 7ad4804e5b..07684a796e 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/threads/list/views/ThreadListBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/threads/list/views/ThreadListBottomSheet.kt @@ -61,11 +61,11 @@ class ThreadListBottomSheet : VectorBaseBottomSheetDialogFragment + when (threadListViewModel.canHomeserverUseThreading()) { + true -> menu.findItem(R.id.menu_thread_list_filter).isVisible = !state.threadSummaryList.invoke().isNullOrEmpty() + false -> menu.findItem(R.id.menu_thread_list_filter).isVisible = !state.rootThreadEventList.invoke().isNullOrEmpty() + } + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initToolbar() @@ -102,6 +112,7 @@ class ThreadListFragment @Inject constructor( } override fun invalidate() = withState(threadListViewModel) { state -> + invalidateOptionsMenu() renderEmptyStateIfNeeded(state) threadListController.update(state) renderLoaderIfNeeded(state) diff --git a/vector/src/main/res/layout/bottom_sheet_thread_list.xml b/vector/src/main/res/layout/bottom_sheet_thread_list.xml index e736f30edc..4d1f1eb043 100644 --- a/vector/src/main/res/layout/bottom_sheet_thread_list.xml +++ b/vector/src/main/res/layout/bottom_sheet_thread_list.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:background="?colorSurface" android:orientation="vertical" - android:padding="8dp"> + android:padding="16dp"> @@ -152,16 +152,18 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/informationBottom" - android:layout_marginEnd="32dp" + android:layout_marginEnd="48dp" android:layout_marginBottom="4dp" - android:paddingStart="13dp" - android:paddingEnd="13dp" + android:layout_marginTop="4dp" + android:layout_marginStart="8dp" android:layout_toEndOf="@id/messageStartGuideline" android:background="@drawable/rounded_rect_shape_8" android:contentDescription="@string/room_threads_filter" android:maxWidth="496dp" android:minWidth="144dp" + android:paddingStart="12dp" android:paddingTop="8dp" + android:paddingEnd="12dp" android:paddingBottom="8dp" android:visibility="gone" tools:visibility="visible"> diff --git a/vector/src/main/res/layout/view_room_detail_thread_toolbar.xml b/vector/src/main/res/layout/view_room_detail_thread_toolbar.xml index e16912246e..c58a8cd837 100644 --- a/vector/src/main/res/layout/view_room_detail_thread_toolbar.xml +++ b/vector/src/main/res/layout/view_room_detail_thread_toolbar.xml @@ -26,8 +26,8 @@ - @@ -66,35 +67,23 @@ tools:visible="true" /> - - - - - - - - - + app:showAsAction="withText" /> + + \ No newline at end of file diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 37b1d19795..5e32ec9c2c 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1550,7 +1550,7 @@ Edit Reply - Reply In Thread + Reply in thread View In Room Retry