From 1d4460553987cade771bcad424390f7cc32c85ea Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Mon, 3 Mar 2025 02:09:30 -0600 Subject: [PATCH] Move settings to top toolbar --- .../todoroo/astrid/activity/MainActivity.kt | 18 +------- .../astrid/activity/TaskListFragment.kt | 43 +++++++++++++------ .../main/res/layout/fragment_task_list.xml | 1 - .../res/menu/menu_task_list_fragment_top.xml | 7 ++- app/src/main/res/values/strings.xml | 1 + .../org/tasks/compose/drawer/DrawerAction.kt | 2 +- .../tasks/compose/drawer/TaskListDrawer.kt | 9 ---- 7 files changed, 40 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt index a5367acd6..2121a8137 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt @@ -11,10 +11,8 @@ import android.graphics.Color import android.os.Bundle import androidx.activity.SystemBarStyle import androidx.activity.compose.BackHandler -import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ActionMode @@ -200,12 +198,6 @@ class MainActivity : AppCompatActivity() { windowInsets = WindowInsets(0, 0, 0, 0), ) { val context = LocalContext.current - val settingsRequest = rememberLauncherForActivityResult( - ActivityResultContracts.StartActivityForResult() - ) { - // Activity.recreate caused window inset problems - restartActivity() - } val scope = rememberCoroutineScope() val bottomSearchBar = atLeastR() TaskListDrawer( @@ -308,14 +300,6 @@ class MainActivity : AppCompatActivity() { ) ) - DrawerAction.SETTINGS -> - settingsRequest.launch( - Intent( - context, - MainPreferences::class.java - ) - ) - DrawerAction.HELP_AND_FEEDBACK -> context.startActivity( Intent( @@ -557,7 +541,7 @@ class MainActivity : AppCompatActivity() { actionMode = mode } - private fun restartActivity() { + fun restartActivity() { finish() startActivity( Intent(this, MainActivity::class.java), diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index a9bbcbebc..e5d032ce8 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -26,6 +26,7 @@ import androidx.activity.compose.BackHandler import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.content.res.AppCompatResources.getDrawable import androidx.appcompat.view.ActionMode import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar @@ -201,6 +202,9 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL } finishActionMode() } + private val settingsLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + (activity as? MainActivity)?.restartActivity() + } private val sortRequest = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> @@ -356,8 +360,9 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL activity?.hideKeyboard() onClickMenu() } - setupMenu(this) } + setupToolbarMenu() + setupBottomAppBarMenu() binding.banner.setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) binding.banner.setContent { val context = LocalContext.current @@ -492,13 +497,13 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL taskAdapter.setDataSource(adapter) } - private fun setupMenu(appBar: Toolbar) { - val menu = appBar.menu + private fun setupToolbarMenu() { + val toolbar = binding.toolbar + toolbar.setOnMenuItemClickListener(this) + toolbar.overflowIcon = getDrawable(requireContext(), R.drawable.ic_outline_settings_24px) + val menu = toolbar.menu menu.clear() - if (filter is PlaceFilter) { - appBar.inflateMenu(R.menu.menu_location_actions) - } - appBar.inflateMenu(R.menu.menu_task_list_fragment_bottom) + toolbar.inflateMenu(R.menu.menu_task_list_fragment_top) when (filter) { is CaldavFilter -> R.menu.menu_caldav_list_fragment is CustomFilter -> R.menu.menu_custom_filter @@ -506,8 +511,22 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL is PlaceFilter -> R.menu.menu_location_list_fragment else -> null }?.let { - appBar.inflateMenu(it) + toolbar.inflateMenu(it) + } + search = binding.toolbar.menu.findItem(R.id.menu_search).apply { + setOnActionExpandListener(this@TaskListFragment) + isVisible = false + } + } + + private fun setupBottomAppBarMenu() { + val appBar = binding.bottomAppBar + val menu = appBar.menu + menu.clear() + if (filter is PlaceFilter) { + appBar.inflateMenu(R.menu.menu_location_actions) } + appBar.inflateMenu(R.menu.menu_task_list_fragment_bottom) val hidden = menu.findItem(R.id.menu_show_unstarted) val completed = menu.findItem(R.id.menu_show_completed) if (!taskAdapter.supportsHiddenTasks() || !filter.supportsHiddenTasks()) { @@ -529,16 +548,16 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL menu.findItem(R.id.menu_expand_subtasks).isVisible = false } menu.findItem(R.id.menu_voice_add).isVisible = device.voiceInputAvailable() && filter.isWritable - search = binding.toolbar.menu.findItem(R.id.menu_search).apply { - setOnActionExpandListener(this@TaskListFragment) - isVisible = false - } menu.findItem(R.id.menu_clear_completed).isVisible = filter.isWritable } override fun onMenuItemClick(item: MenuItem): Boolean { Timber.d("onMenuItemClick($item)") return when (item.itemId) { + R.id.menu_settings -> { + settingsLauncher.launch(Intent(context, MainPreferences::class.java)) + true + } R.id.menu_search -> { if (!search.isActionViewExpanded) { search.isVisible = true diff --git a/app/src/main/res/layout/fragment_task_list.xml b/app/src/main/res/layout/fragment_task_list.xml index 947554152..2d6a9ca93 100644 --- a/app/src/main/res/layout/fragment_task_list.xml +++ b/app/src/main/res/layout/fragment_task_list.xml @@ -28,7 +28,6 @@ android:theme="@style/ToolbarTheme" app:hideOnScroll="true" app:layout_scrollFlags="scroll|enterAlways" - app:menu="@menu/menu_task_list_fragment_top" tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/menu/menu_task_list_fragment_top.xml b/app/src/main/res/menu/menu_task_list_fragment_top.xml index c95caada5..b448f81b7 100644 --- a/app/src/main/res/menu/menu_task_list_fragment_top.xml +++ b/app/src/main/res/menu/menu_task_list_fragment_top.xml @@ -8,5 +8,10 @@ android:icon="@drawable/ic_outline_search_24px" android:title="@string/TLA_menu_search" app:actionViewClass="androidx.appcompat.widget.SearchView" - app:showAsAction="ifRoom|collapseActionView"/> + app:showAsAction="never|collapseActionView"/> + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4679673c5..7a2324d34 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,6 +28,7 @@ File %1$s contained %2$s.\n\n Sort Search Settings + App settings Edit Customize drawer Drag and drop to rearrange menu items diff --git a/kmp/src/commonMain/kotlin/org/tasks/compose/drawer/DrawerAction.kt b/kmp/src/commonMain/kotlin/org/tasks/compose/drawer/DrawerAction.kt index 71e99d0da..2c012370b 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/compose/drawer/DrawerAction.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/compose/drawer/DrawerAction.kt @@ -1,5 +1,5 @@ package org.tasks.compose.drawer enum class DrawerAction { - PURCHASE, SETTINGS, HELP_AND_FEEDBACK + PURCHASE, HELP_AND_FEEDBACK } \ No newline at end of file diff --git a/kmp/src/commonMain/kotlin/org/tasks/compose/drawer/TaskListDrawer.kt b/kmp/src/commonMain/kotlin/org/tasks/compose/drawer/TaskListDrawer.kt index 9062a9095..b9bd5f393 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/compose/drawer/TaskListDrawer.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/compose/drawer/TaskListDrawer.kt @@ -29,7 +29,6 @@ import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.AttachMoney import androidx.compose.material.icons.outlined.PeopleOutline import androidx.compose.material.icons.outlined.PermIdentity -import androidx.compose.material.icons.outlined.Settings import androidx.compose.material.icons.outlined.SyncProblem import androidx.compose.material3.BottomAppBar import androidx.compose.material3.BottomAppBarDefaults @@ -66,7 +65,6 @@ import org.tasks.kmp.org.tasks.compose.rememberImeState import tasks.kmp.generated.resources.Res import tasks.kmp.generated.resources.help_and_feedback import tasks.kmp.generated.resources.search -import tasks.kmp.generated.resources.settings import tasks.kmp.generated.resources.subscribe import kotlin.math.roundToInt @@ -330,12 +328,5 @@ fun RowScope.MenuSearchBar( tint = MaterialTheme.colorScheme.onSurface, ) } - IconButton(onClick = { onDrawerAction(DrawerAction.SETTINGS) }) { - Icon( - imageVector = Icons.Outlined.Settings, - contentDescription = stringResource(Res.string.settings), - tint = MaterialTheme.colorScheme.onSurface, - ) - } } }