mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 00:10:32 +05:30
add option to set default start tab
This commit is contained in:
parent
a5b1c77eeb
commit
77be9424fc
@ -22,6 +22,7 @@ object PreferenceKeys {
|
|||||||
const val BREAK_REMINDER = "break_reminder"
|
const val BREAK_REMINDER = "break_reminder"
|
||||||
const val SAVE_FEED = "save_feed"
|
const val SAVE_FEED = "save_feed"
|
||||||
const val NAVBAR_ITEMS = "navbar_items"
|
const val NAVBAR_ITEMS = "navbar_items"
|
||||||
|
const val START_FRAGMENT = "start_fragment"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appearance
|
* Appearance
|
||||||
|
@ -10,7 +10,8 @@ import com.github.libretube.databinding.NavOptionsItemBinding
|
|||||||
import com.github.libretube.ui.viewholders.NavBarOptionsViewHolder
|
import com.github.libretube.ui.viewholders.NavBarOptionsViewHolder
|
||||||
|
|
||||||
class NavBarOptionsAdapter(
|
class NavBarOptionsAdapter(
|
||||||
val items: MutableList<MenuItem>
|
val items: MutableList<MenuItem>,
|
||||||
|
var selectedHomeTabId: Int
|
||||||
) : RecyclerView.Adapter<NavBarOptionsViewHolder>() {
|
) : RecyclerView.Adapter<NavBarOptionsViewHolder>() {
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NavBarOptionsViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NavBarOptionsViewHolder {
|
||||||
@ -31,7 +32,28 @@ class NavBarOptionsAdapter(
|
|||||||
holder.binding.apply {
|
holder.binding.apply {
|
||||||
title.text = item.title
|
title.text = item.title
|
||||||
checkbox.isChecked = item.isVisible
|
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 {
|
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) {
|
if (!checkbox.isChecked && getVisibleItemsCount() < 2) {
|
||||||
checkbox.isChecked = true
|
checkbox.isChecked = true
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
@ -41,7 +63,7 @@ class NavBarOptionsAdapter(
|
|||||||
).show()
|
).show()
|
||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
items[position].isVisible = checkbox.isChecked
|
item.isVisible = checkbox.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ class NavBarOptionsDialog : DialogFragment() {
|
|||||||
|
|
||||||
val options = NavBarHelper.getNavBarItems(requireContext())
|
val options = NavBarHelper.getNavBarItems(requireContext())
|
||||||
|
|
||||||
val adapter = NavBarOptionsAdapter(options.toMutableList())
|
val adapter = NavBarOptionsAdapter(options.toMutableList(), NavBarHelper.getStartFragmentId(requireContext()))
|
||||||
|
|
||||||
val itemTouchCallback = object : ItemTouchHelper.Callback() {
|
val itemTouchCallback = object : ItemTouchHelper.Callback() {
|
||||||
override fun getMovementFlags(
|
override fun getMovementFlags(
|
||||||
@ -63,6 +63,7 @@ class NavBarOptionsDialog : DialogFragment() {
|
|||||||
.setView(binding.root)
|
.setView(binding.root)
|
||||||
.setPositiveButton(R.string.okay) { _, _ ->
|
.setPositiveButton(R.string.okay) { _, _ ->
|
||||||
NavBarHelper.setNavBarItems(adapter.items, requireContext())
|
NavBarHelper.setNavBarItems(adapter.items, requireContext())
|
||||||
|
NavBarHelper.setStartFragment(requireContext(), adapter.selectedHomeTabId)
|
||||||
RequireRestartDialog()
|
RequireRestartDialog()
|
||||||
.show(requireParentFragment().childFragmentManager, null)
|
.show(requireParentFragment().childFragmentManager, null)
|
||||||
}
|
}
|
||||||
|
@ -106,6 +106,21 @@ object NavBarHelper {
|
|||||||
).icon = menuItem.icon
|
).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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,10 @@ object PreferenceHelper {
|
|||||||
editor.putBoolean(key, value).commit()
|
editor.putBoolean(key, value).commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun putInt(key: String, value: Int) {
|
||||||
|
editor.putInt(key, value).commit()
|
||||||
|
}
|
||||||
|
|
||||||
fun getString(key: String?, defValue: String): String {
|
fun getString(key: String?, defValue: String): String {
|
||||||
return settings.getString(key, defValue) ?: defValue
|
return settings.getString(key, defValue) ?: defValue
|
||||||
}
|
}
|
||||||
|
10
app/src/main/res/drawable/ic_home_outlined.xml
Normal file
10
app/src/main/res/drawable/ic_home_outlined.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:tint="?attr/colorControlNormal"
|
||||||
|
android:viewportWidth="48"
|
||||||
|
android:viewportHeight="48">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M11,39h7.5L18.5,26.5h11L29.5,39L37,39L37,19.5L24,9.75 11,19.5ZM8,42L8,18L24,6l16,12v24L26.5,42L26.5,29.5h-5L21.5,42ZM24,24.35Z" />
|
||||||
|
</vector>
|
@ -11,6 +11,14 @@
|
|||||||
android:paddingEnd="0dp"
|
android:paddingEnd="0dp"
|
||||||
tools:gravity="start|center_vertical">
|
tools:gravity="start|center_vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/home"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:paddingHorizontal="10dp"
|
||||||
|
android:src="@drawable/ic_home_outlined"/>
|
||||||
|
|
||||||
<com.google.android.material.checkbox.MaterialCheckBox
|
<com.google.android.material.checkbox.MaterialCheckBox
|
||||||
android:id="@+id/checkbox"
|
android:id="@+id/checkbox"
|
||||||
style="@style/Widget.Material3.CompoundButton.CheckBox"
|
style="@style/Widget.Material3.CompoundButton.CheckBox"
|
||||||
|
@ -387,6 +387,8 @@
|
|||||||
<string name="bookmarks_empty">No bookmarks yet!</string>
|
<string name="bookmarks_empty">No bookmarks yet!</string>
|
||||||
<string name="queue_insert_related_videos">Insert related videos</string>
|
<string name="queue_insert_related_videos">Insert related videos</string>
|
||||||
<string name="local_playlists">Local playlists</string>
|
<string name="local_playlists">Local playlists</string>
|
||||||
|
<string name="not_enabled">Menu item not enabled!</string>
|
||||||
|
<string name="select_other_start_tab">Please select an other start tab first!</string>
|
||||||
|
|
||||||
<!-- Notification channel strings -->
|
<!-- Notification channel strings -->
|
||||||
<string name="download_channel_name">Download Service</string>
|
<string name="download_channel_name">Download Service</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user