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">
+
+