Move settings to top toolbar

pull/3385/head
Alex Baker 11 months ago
parent d306dda2f9
commit 1d44605539

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

@ -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

@ -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" />
</com.google.android.material.appbar.AppBarLayout>

@ -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"/>
<item
android:id="@+id/menu_settings"
android:title="@string/app_settings"
app:showAsAction="never" />
</menu>

@ -28,6 +28,7 @@ File %1$s contained %2$s.\n\n
<string name="TLA_menu_sort">Sort</string>
<string name="TLA_menu_search">Search</string>
<string name="TLA_menu_settings">Settings</string>
<string name="app_settings">App settings</string>
<string name="TAd_actionEditTask">Edit</string>
<string name="customize_drawer">Customize drawer</string>
<string name="customize_drawer_summary">Drag and drop to rearrange menu items</string>

@ -1,5 +1,5 @@
package org.tasks.compose.drawer
enum class DrawerAction {
PURCHASE, SETTINGS, HELP_AND_FEEDBACK
PURCHASE, HELP_AND_FEEDBACK
}

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

Loading…
Cancel
Save