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