From 77be9424fc3e321be23d8cbc942a2edb641d631f Mon Sep 17 00:00:00 2001 From: Bnyro Date: Thu, 24 Nov 2022 17:38:14 +0100 Subject: [PATCH] add option to set default start tab --- .../libretube/constants/PreferenceKeys.kt | 1 + .../ui/adapters/NavBarOptionsAdapter.kt | 26 +++++++++++++++++-- .../ui/dialogs/NavBarOptionsDialog.kt | 3 ++- .../com/github/libretube/util/NavBarHelper.kt | 17 +++++++++++- .../github/libretube/util/PreferenceHelper.kt | 4 +++ .../main/res/drawable/ic_home_outlined.xml | 10 +++++++ app/src/main/res/layout/nav_options_item.xml | 8 ++++++ app/src/main/res/values/strings.xml | 2 ++ 8 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/drawable/ic_home_outlined.xml diff --git a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt index e87a00604..b28968f45 100644 --- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt @@ -22,6 +22,7 @@ object PreferenceKeys { const val BREAK_REMINDER = "break_reminder" const val SAVE_FEED = "save_feed" const val NAVBAR_ITEMS = "navbar_items" + const val START_FRAGMENT = "start_fragment" /** * Appearance diff --git a/app/src/main/java/com/github/libretube/ui/adapters/NavBarOptionsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/NavBarOptionsAdapter.kt index cdb366228..a58ad475d 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/NavBarOptionsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/NavBarOptionsAdapter.kt @@ -10,7 +10,8 @@ import com.github.libretube.databinding.NavOptionsItemBinding import com.github.libretube.ui.viewholders.NavBarOptionsViewHolder class NavBarOptionsAdapter( - val items: MutableList + val items: MutableList, + var selectedHomeTabId: Int ) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NavBarOptionsViewHolder { @@ -31,7 +32,28 @@ class NavBarOptionsAdapter( holder.binding.apply { title.text = item.title checkbox.isChecked = item.isVisible + home.setImageResource( + if (item.itemId == selectedHomeTabId) R.drawable.ic_home else R.drawable.ic_home_outlined + ) + home.setOnClickListener { + if (selectedHomeTabId == item.itemId) { + return@setOnClickListener + } + if (!item.isVisible) { + Toast.makeText(root.context, R.string.not_enabled, Toast.LENGTH_SHORT).show() + return@setOnClickListener + } + val oldSelection = items.indexOfFirst { it.itemId == selectedHomeTabId } + selectedHomeTabId = item.itemId + listOf(position, oldSelection).forEach { + notifyItemChanged(it) + } + } checkbox.setOnClickListener { + if (item.itemId == selectedHomeTabId) { + Toast.makeText(root.context, R.string.select_other_start_tab, Toast.LENGTH_SHORT).show() + return@setOnClickListener + } if (!checkbox.isChecked && getVisibleItemsCount() < 2) { checkbox.isChecked = true Toast.makeText( @@ -41,7 +63,7 @@ class NavBarOptionsAdapter( ).show() return@setOnClickListener } - items[position].isVisible = checkbox.isChecked + item.isVisible = checkbox.isChecked } } } diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/NavBarOptionsDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/NavBarOptionsDialog.kt index 391766a6d..686ac218e 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/NavBarOptionsDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/NavBarOptionsDialog.kt @@ -20,7 +20,7 @@ class NavBarOptionsDialog : DialogFragment() { val options = NavBarHelper.getNavBarItems(requireContext()) - val adapter = NavBarOptionsAdapter(options.toMutableList()) + val adapter = NavBarOptionsAdapter(options.toMutableList(), NavBarHelper.getStartFragmentId(requireContext())) val itemTouchCallback = object : ItemTouchHelper.Callback() { override fun getMovementFlags( @@ -63,6 +63,7 @@ class NavBarOptionsDialog : DialogFragment() { .setView(binding.root) .setPositiveButton(R.string.okay) { _, _ -> NavBarHelper.setNavBarItems(adapter.items, requireContext()) + NavBarHelper.setStartFragment(requireContext(), adapter.selectedHomeTabId) RequireRestartDialog() .show(requireParentFragment().childFragmentManager, null) } diff --git a/app/src/main/java/com/github/libretube/util/NavBarHelper.kt b/app/src/main/java/com/github/libretube/util/NavBarHelper.kt index b1dc00330..f95a2f5fe 100644 --- a/app/src/main/java/com/github/libretube/util/NavBarHelper.kt +++ b/app/src/main/java/com/github/libretube/util/NavBarHelper.kt @@ -106,6 +106,21 @@ object NavBarHelper { ).icon = menuItem.icon } } - return navBarItems.first { it.isVisible }.itemId + return getStartFragmentId(bottomNav.context) + } + + fun getStartFragmentId(context: Context): Int { + val pref = PreferenceHelper.getInt(PreferenceKeys.START_FRAGMENT, Int.MAX_VALUE) + val defaultNavItems = getDefaultNavBarItems(context) + return if (pref == Int.MAX_VALUE) { + getNavBarItems(context).first { it.isVisible }.itemId + } else { + defaultNavItems.get(pref).itemId + } + } + + fun setStartFragment(context: Context, itemId: Int) { + val index = getDefaultNavBarItems(context).indexOfFirst { it.itemId == itemId } + PreferenceHelper.putInt(PreferenceKeys.START_FRAGMENT, index) } } diff --git a/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt b/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt index e9ac81e0d..2d5a81967 100644 --- a/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt +++ b/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt @@ -37,6 +37,10 @@ object PreferenceHelper { editor.putBoolean(key, value).commit() } + fun putInt(key: String, value: Int) { + editor.putInt(key, value).commit() + } + fun getString(key: String?, defValue: String): String { return settings.getString(key, defValue) ?: defValue } diff --git a/app/src/main/res/drawable/ic_home_outlined.xml b/app/src/main/res/drawable/ic_home_outlined.xml new file mode 100644 index 000000000..e1b9248ab --- /dev/null +++ b/app/src/main/res/drawable/ic_home_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/nav_options_item.xml b/app/src/main/res/layout/nav_options_item.xml index b0acb177a..a20ceacab 100644 --- a/app/src/main/res/layout/nav_options_item.xml +++ b/app/src/main/res/layout/nav_options_item.xml @@ -11,6 +11,14 @@ android:paddingEnd="0dp" tools:gravity="start|center_vertical"> + + No bookmarks yet! Insert related videos Local playlists + Menu item not enabled! + Please select an other start tab first! Download Service