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 942bd22d1..42c802267 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -20,6 +20,9 @@ import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.app.ShareCompat +import androidx.core.view.forEach +import androidx.core.view.isVisible +import androidx.core.view.setMargins import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope @@ -30,6 +33,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.bottomappbar.BottomAppBar import com.google.android.material.snackbar.Snackbar import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.DateUtilities @@ -178,7 +182,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL coordinatorLayout = taskListCoordinator recyclerView = bodyStandard.recyclerView fab.setOnClickListener { createNewTask() } - bottomAppBar.setNavigationOnClickListener { callbacks.onNavigationIconClicked() } } filter = getFilter() themeColor = if (filter.tint != 0) colorProvider.getThemeColor(filter.tint, true) else defaultThemeColor @@ -206,14 +209,31 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL setupRefresh(swipeRefreshLayout) setupRefresh(emptyRefreshLayout) binding.toolbar.title = filter.listingTitle - binding.toolbar.navigationIcon = null - binding.bottomAppBar.setOnMenuItemClickListener(this) binding.appbarlayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { _, verticalOffset -> if (verticalOffset == 0 && binding.bottomAppBar.isScrolledDown) { binding.bottomAppBar.performShow() } }) - setupBottomMenu() + val toolbar = if (preferences.isTopAppBar) { + binding.bottomAppBar.isVisible = false + with (binding.fab) { + layoutParams = (layoutParams as CoordinatorLayout.LayoutParams).apply { + setMargins(resources.getDimensionPixelSize(R.dimen.keyline_first)) + anchorId = View.NO_ID + gravity = Gravity.BOTTOM or Gravity.END + } + } + binding.toolbar.setNavigationIcon(R.drawable.ic_outline_menu_24px) + binding.toolbar + } else { + themeColor.apply(binding.bottomAppBar) + binding.bottomAppBar.isVisible = true + binding.toolbar.navigationIcon = null + binding.bottomAppBar + } + toolbar.setOnMenuItemClickListener(this) + toolbar.setNavigationOnClickListener { callbacks.onNavigationIconClicked() } + setupMenu(toolbar) search = binding.toolbar.menu.findItem(R.id.menu_search).setOnActionExpandListener(this) return binding.root } @@ -241,16 +261,18 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL taskAdapter.setDataSource(adapter) } - private fun setupBottomMenu() { - val menu = binding.bottomAppBar.menu - val bottomAppBar = binding.bottomAppBar + private fun setupMenu(appBar: Toolbar) { + val menu = appBar.menu menu.clear() if (filter.hasBeginningMenu()) { - bottomAppBar.inflateMenu(filter.beginningMenu) + appBar.inflateMenu(filter.beginningMenu) } - bottomAppBar.inflateMenu(R.menu.menu_task_list_fragment_bottom) + appBar.inflateMenu(R.menu.menu_task_list_fragment_bottom) if (filter.hasMenu()) { - bottomAppBar.inflateMenu(filter.menu) + appBar.inflateMenu(filter.menu) + } + if (appBar is BottomAppBar) { + menu.removeItem(R.id.menu_search) } val hidden = menu.findItem(R.id.menu_show_unstarted) val completed = menu.findItem(R.id.menu_show_completed) @@ -275,7 +297,6 @@ 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() - themeColor.apply(bottomAppBar) } private fun openFilter(filter: Filter?) { @@ -571,6 +592,9 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL if (searchQuery == null) { searchByQuery("") } + if (preferences.isTopAppBar) { + binding.toolbar.menu.forEach { it.isVisible = false } + } return true } @@ -579,7 +603,9 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL listViewModel.searchByFilter(filter) searchJob?.cancel() searchQuery = null - setupBottomMenu() + if (preferences.isTopAppBar) { + setupMenu(binding.toolbar) + } return true } diff --git a/app/src/main/java/org/tasks/extensions/Number.kt b/app/src/main/java/org/tasks/extensions/Number.kt new file mode 100644 index 000000000..f7be061fb --- /dev/null +++ b/app/src/main/java/org/tasks/extensions/Number.kt @@ -0,0 +1,11 @@ +package org.tasks.extensions + +import android.content.res.Resources +import android.util.TypedValue + +val Number.dp: Float + get() = TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, + this.toFloat(), + Resources.getSystem().displayMetrics + ) \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt index 448af898d..7c803d4cb 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.kt +++ b/app/src/main/java/org/tasks/preferences/Preferences.kt @@ -519,6 +519,9 @@ class Preferences @JvmOverloads constructor( val markdown: Boolean get() = getBoolean(R.string.p_markdown, false) + val isTopAppBar: Boolean + get() = getIntegerFromString(R.string.p_app_bar_position, 1) == 0 + companion object { private const val PREF_SORT_SORT = "sort_sort" // $NON-NLS-1$ diff --git a/app/src/main/res/layout/fragment_task_list.xml b/app/src/main/res/layout/fragment_task_list.xml index e633d8200..6589bc210 100644 --- a/app/src/main/res/layout/fragment_task_list.xml +++ b/app/src/main/res/layout/fragment_task_list.xml @@ -84,8 +84,6 @@ android:contentDescription="@string/action_create_new_task" app:backgroundTint="?attr/colorAccent" app:layout_anchor="@id/bottomAppBar" - app:hideOnScroll="true" - app:layout_scrollFlags="scroll|enterAlways" app:srcCompat="@drawable/ic_outline_add_24px" /> diff --git a/app/src/main/res/menu/menu_task_list_fragment_bottom.xml b/app/src/main/res/menu/menu_task_list_fragment_bottom.xml index ccecef7d7..38d3a8dc7 100644 --- a/app/src/main/res/menu/menu_task_list_fragment_bottom.xml +++ b/app/src/main/res/menu/menu_task_list_fragment_bottom.xml @@ -33,6 +33,12 @@ android:icon="@drawable/ic_outline_mic_none_24px" android:title="@string/EPr_voiceInputEnabled_title" app:showAsAction="ifRoom" /> + + + 1 + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index ca480759a..02693aeba 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -286,4 +286,10 @@ 0 1 + + + @string/top + @string/bottom + + \ No newline at end of file diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index 730e0a441..4c7fffaea 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -1,5 +1,6 @@ + 0 79200000 36000000 64800000 diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 64bd2af66..b3965ef2c 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -446,4 +446,5 @@ picker_mode_date picker_mode_time markdown + app_bar_position diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9361092be..16337c119 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -710,4 +710,7 @@ File %1$s contained %2$s.\n\n Markdown Enable Markdown in title and description Play completion sound + App bar position + Top + Bottom diff --git a/app/src/main/res/xml/preferences_look_and_feel.xml b/app/src/main/res/xml/preferences_look_and_feel.xml index 5ef8b6d64..3f74b4292 100644 --- a/app/src/main/res/xml/preferences_look_and_feel.xml +++ b/app/src/main/res/xml/preferences_look_and_feel.xml @@ -54,6 +54,14 @@ android:key="@string/task_list_options" android:title="@string/task_list_options"> + +