From 26887f202554449603dd5e18847ef8766e3a5dd3 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Thu, 14 Mar 2024 17:28:32 +0200
Subject: [PATCH] Add filter quick menu access

---
 .../timeline/TimelineDialogFragment.kt        |  3 +++
 .../feature/timeline/TimelineNavigator.kt     |  6 ++++++
 .../res/navigation/timeline_nav_graph.xml     | 14 +++++++++++++-
 core/src/main/res/menu/timeline_menu.xml      |  7 +++++++
 .../navigation/filter_timelines_nav_graph.xml | 19 +++++++++++++++++++
 .../navigation/timeline_options_nav_graph.xml | 13 ++-----------
 6 files changed, 50 insertions(+), 12 deletions(-)
 create mode 100644 core/src/main/res/navigation/filter_timelines_nav_graph.xml

diff --git a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
index 709b03c0a..85459f36f 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/TimelineDialogFragment.kt
@@ -143,9 +143,12 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
     private fun setupMenuClickListener() {
         binding.toolbar.apply {
             setOnClickListener { navigateToTimelineOptions() }
+            menu.findItem(org.futo.circles.core.R.id.filter).isVisible =
+                args.timelineId != null && !isThread
             setOnMenuItemClickListener { item ->
                 when (item.itemId) {
                     org.futo.circles.core.R.id.settings -> navigateToTimelineOptions()
+                    org.futo.circles.core.R.id.filter -> navigator.navigateToTimelinesFilter(args.roomId)
                 }
                 return@setOnMenuItemClickListener true
             }
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/TimelineNavigator.kt b/app/src/main/java/org/futo/circles/feature/timeline/TimelineNavigator.kt
index c50ed998b..ffb3eb139 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/TimelineNavigator.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/TimelineNavigator.kt
@@ -21,6 +21,12 @@ class TimelineNavigator(private val fragment: TimelineDialogFragment) {
         )
     }
 
+    fun navigateToTimelinesFilter(roomId: String) {
+        fragment.findNavController().navigateSafe(
+            TimelineDialogFragmentDirections.toFilterTimelinesDialogFragment(roomId)
+        )
+    }
+
     fun navigateToCreatePoll(roomId: String) {
         fragment.findNavController().navigateSafe(
             TimelineDialogFragmentDirections.toCreatePoll(roomId, null)
diff --git a/app/src/main/res/navigation/timeline_nav_graph.xml b/app/src/main/res/navigation/timeline_nav_graph.xml
index d202290c3..fd75cf9a0 100644
--- a/app/src/main/res/navigation/timeline_nav_graph.xml
+++ b/app/src/main/res/navigation/timeline_nav_graph.xml
@@ -28,6 +28,17 @@
             app:argType="string"
             app:nullable="true" />
 
+        <action
+            android:id="@+id/to_filterTimelinesDialogFragment"
+            app:destination="@id/filter_timelines_nav_graph">
+
+            <argument
+                android:name="circleId"
+                app:argType="string"
+                app:nullable="false" />
+
+        </action>
+
         <action
             android:id="@+id/to_createPostBottomSheet"
             app:destination="@id/createPostBottomSheet">
@@ -419,7 +430,8 @@
                 app:nullable="true" />
 
         </action>
+    </dialog>
 
+    <include app:graph="@navigation/filter_timelines_nav_graph" />
 
-    </dialog>
 </navigation>
\ No newline at end of file
diff --git a/core/src/main/res/menu/timeline_menu.xml b/core/src/main/res/menu/timeline_menu.xml
index e90ba6ffb..9e90a3ac8 100644
--- a/core/src/main/res/menu/timeline_menu.xml
+++ b/core/src/main/res/menu/timeline_menu.xml
@@ -2,6 +2,13 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
+    <item
+        android:id="@+id/filter"
+        android:icon="@drawable/ic_filter"
+        android:title="@string/filter_timelines"
+        android:visible="false"
+        app:showAsAction="ifRoom" />
+
     <item
         android:id="@+id/settings"
         android:icon="@drawable/ic_settings"
diff --git a/core/src/main/res/navigation/filter_timelines_nav_graph.xml b/core/src/main/res/navigation/filter_timelines_nav_graph.xml
new file mode 100644
index 000000000..0c24962c5
--- /dev/null
+++ b/core/src/main/res/navigation/filter_timelines_nav_graph.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<navigation xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/filter_timelines_nav_graph"
+    app:startDestination="@id/filterTimelinesDialogFragment">
+
+    <dialog
+        android:id="@+id/filterTimelinesDialogFragment"
+        android:name="org.futo.circles.core.feature.circles.filter.FilterTimelinesDialogFragment"
+        tools:layout="@layout/dialog_fragment_filter_timeline">
+
+        <argument
+            android:name="circleId"
+            app:argType="string"
+            app:nullable="false" />
+
+    </dialog>
+</navigation>
\ No newline at end of file
diff --git a/core/src/main/res/navigation/timeline_options_nav_graph.xml b/core/src/main/res/navigation/timeline_options_nav_graph.xml
index f8f290a78..6ddca8828 100644
--- a/core/src/main/res/navigation/timeline_options_nav_graph.xml
+++ b/core/src/main/res/navigation/timeline_options_nav_graph.xml
@@ -116,7 +116,7 @@
         </action>
         <action
             android:id="@+id/to_filterTimelinesDialogFragment"
-            app:destination="@id/filterTimelinesDialogFragment">
+            app:destination="@id/filter_timelines_nav_graph">
 
             <argument
                 android:name="circleId"
@@ -263,16 +263,7 @@
         android:id="@+id/userDialogFragment"
         android:name="org.futo.circles.core.feature.user.UserDialogFragment"
         tools:layout="@layout/dialog_fragment_user" />
-    <dialog
-        android:id="@+id/filterTimelinesDialogFragment"
-        android:name="org.futo.circles.core.feature.circles.filter.FilterTimelinesDialogFragment"
-        tools:layout="@layout/dialog_fragment_filter_timeline">
-
-        <argument
-            android:name="circleId"
-            app:argType="string"
-            app:nullable="false" />
 
-    </dialog>
+    <include app:graph="@navigation/filter_timelines_nav_graph" />
 
 </navigation>
-- 
GitLab