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 SAVE_FEED = "save_feed"
|
||||
const val NAVBAR_ITEMS = "navbar_items"
|
||||
const val START_FRAGMENT = "start_fragment"
|
||||
|
||||
/**
|
||||
* Appearance
|
||||
|
@ -10,7 +10,8 @@ import com.github.libretube.databinding.NavOptionsItemBinding
|
||||
import com.github.libretube.ui.viewholders.NavBarOptionsViewHolder
|
||||
|
||||
class NavBarOptionsAdapter(
|
||||
val items: MutableList<MenuItem>
|
||||
val items: MutableList<MenuItem>,
|
||||
var selectedHomeTabId: Int
|
||||
) : RecyclerView.Adapter<NavBarOptionsViewHolder>() {
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
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"
|
||||
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
|
||||
android:id="@+id/checkbox"
|
||||
style="@style/Widget.Material3.CompoundButton.CheckBox"
|
||||
|
@ -387,6 +387,8 @@
|
||||
<string name="bookmarks_empty">No bookmarks yet!</string>
|
||||
<string name="queue_insert_related_videos">Insert related videos</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 -->
|
||||
<string name="download_channel_name">Download Service</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user