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,
- )
- }
}
}