This commit is contained in:
KingLucius 2024-08-12 04:04:33 +02:00 committed by GitHub
commit 1ca68cb8f8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
28 changed files with 276 additions and 41 deletions

View file

@ -18,6 +18,8 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.WindowManager import android.view.WindowManager
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.Toast import android.widget.Toast
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
@ -25,7 +27,9 @@ import androidx.annotation.IdRes
import androidx.annotation.MainThread import androidx.annotation.MainThread
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.cardview.widget.CardView
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.GravityCompat
import androidx.core.view.children import androidx.core.view.children
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.core.view.isInvisible import androidx.core.view.isInvisible
@ -96,6 +100,8 @@ import com.lagradost.cloudstream3.syncproviders.SyncAPI
import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.APIRepository
import com.lagradost.cloudstream3.ui.SyncWatchType import com.lagradost.cloudstream3.ui.SyncWatchType
import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.WatchType
import com.lagradost.cloudstream3.ui.account.AccountHelper.showAccountSelectLinear
import com.lagradost.cloudstream3.ui.account.AccountViewModel
import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO
import com.lagradost.cloudstream3.ui.home.HomeViewModel import com.lagradost.cloudstream3.ui.home.HomeViewModel
import com.lagradost.cloudstream3.ui.library.LibraryViewModel import com.lagradost.cloudstream3.ui.library.LibraryViewModel
@ -329,6 +335,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa
*/ */
val reloadLibraryEvent = Event<Boolean>() val reloadLibraryEvent = Event<Boolean>()
/**
* Used by DataStoreHelper to fully reload Navigation Rail header picture
*/
val reloadAccountEvent = Event<Boolean>()
/** /**
* @return true if the str has launched an app task (be it successful or not) * @return true if the str has launched an app task (be it successful or not)
@ -794,6 +804,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa
lateinit var viewModel: ResultViewModel2 lateinit var viewModel: ResultViewModel2
lateinit var syncViewModel: SyncViewModel lateinit var syncViewModel: SyncViewModel
private var libraryViewModel: LibraryViewModel? = null private var libraryViewModel: LibraryViewModel? = null
private var accountViewModel: AccountViewModel? = null
/** kinda dirty, however it signals that we should use the watch status as sync or not*/ /** kinda dirty, however it signals that we should use the watch status as sync or not*/
var isLocalList: Boolean = false var isLocalList: Boolean = false
@ -1554,14 +1565,15 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa
// we need to run this after we init all apis, otherwise currentSyncApi will fuck itself // we need to run this after we init all apis, otherwise currentSyncApi will fuck itself
this@MainActivity.runOnUiThread { this@MainActivity.runOnUiThread {
// Change library icon with logo of current api in sync // Change library icon with logo of current api in sync
libraryViewModel = ViewModelProvider(this@MainActivity)[LibraryViewModel::class.java] libraryViewModel =
ViewModelProvider(this@MainActivity)[LibraryViewModel::class.java]
libraryViewModel?.currentApiName?.observe(this@MainActivity) { libraryViewModel?.currentApiName?.observe(this@MainActivity) {
val syncAPI = libraryViewModel?.currentSyncApi val syncAPI = libraryViewModel?.currentSyncApi
Log.i("SYNC_API", "${syncAPI?.name}, ${syncAPI?.idPrefix}") Log.i("SYNC_API", "${syncAPI?.name}, ${syncAPI?.idPrefix}")
val icon = if (syncAPI?.idPrefix == localListApi.idPrefix) { val icon = if (syncAPI?.idPrefix == localListApi.idPrefix) {
R.drawable.library_icon R.drawable.library_icon_selector
} else { } else {
syncAPI?.icon ?: R.drawable.library_icon syncAPI?.icon ?: R.drawable.library_icon_selector
} }
binding?.apply { binding?.apply {
@ -1661,7 +1673,27 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa
} }
} }
} }
noFocus(this) //noFocus(this)
val navProfileRoot = findViewById<LinearLayout>(R.id.nav_footer_root)
val navProfilePic = findViewById<ImageView>(R.id.nav_footer_profile_pic)
val navProfileCard = findViewById<CardView>(R.id.nav_footer_profile_card)
navProfileCard?.setOnClickListener {
showAccountSelectLinear()
}
val profileImage = DataStoreHelper.getCurrentAccount()?.image ?: DataStoreHelper.getDefaultAccount(context).image
if (navProfilePic != null) {
navProfilePic.setImage(profileImage)
} else {
navProfileRoot?.isGone = true
}
/*headerView?.findViewById<ImageView>(R.id.nav_header_notification)?.setOnClickListener {
binding?.homeRoot?.openDrawer(GravityCompat.END, true)
}*/
} }
loadCache() loadCache()

View file

@ -294,6 +294,9 @@ object PluginManager {
main { main {
val uitext = txt(R.string.plugins_updated, updatedPlugins.size) val uitext = txt(R.string.plugins_updated, updatedPlugins.size)
createNotification(activity, uitext, updatedPlugins) createNotification(activity, uitext, updatedPlugins)
/*val navBadge = (activity as MainActivity).binding?.navRailView?.getOrCreateBadge(R.id.navigation_settings)
navBadge?.isVisible = true
navBadge?.number = 5*/
} }
// ioSafe { // ioSafe {

View file

@ -22,6 +22,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import com.lagradost.api.Log
import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.*
import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.APIHolder.apis
import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.CommonActivity.showToast
@ -57,6 +58,7 @@ import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes
import com.lagradost.cloudstream3.utils.UIHelper.setImage
import java.util.* import java.util.*
@ -555,6 +557,13 @@ class HomeFragment : Fragment() {
binding?.homeChangeApi?.text = apiName binding?.homeChangeApi?.text = apiName
} }
observe(homeViewModel.currentAccount) { currentAccount ->
val navProfilePic = (activity as MainActivity).binding?.navRailView?.findViewById<ImageView>(R.id.nav_footer_profile_pic)
navProfilePic?.setImage(
currentAccount?.image
)
}
observe(homeViewModel.page) { data -> observe(homeViewModel.page) { data ->
binding?.apply { binding?.apply {
when (data) { when (data) {

View file

@ -16,6 +16,8 @@ import androidx.viewbinding.ViewBinding
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import com.google.android.material.chip.ChipGroup import com.google.android.material.chip.ChipGroup
import com.google.android.material.navigation.NavigationBarItemView
import com.google.android.material.navigationrail.NavigationRailMenuView
import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity import com.lagradost.cloudstream3.AcraApplication.Companion.getActivity
import com.lagradost.cloudstream3.CommonActivity.activity import com.lagradost.cloudstream3.CommonActivity.activity
import com.lagradost.cloudstream3.HomePageList import com.lagradost.cloudstream3.HomePageList
@ -476,7 +478,8 @@ class HomeParentItemAdapterPreview(
homePreviewHiddenPrevFocus.setOnFocusChangeListener { _, hasFocus -> homePreviewHiddenPrevFocus.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus) return@setOnFocusChangeListener if (!hasFocus) return@setOnFocusChangeListener
if (previewViewpager.currentItem <= 0) { if (previewViewpager.currentItem <= 0) {
(activity as? MainActivity)?.binding?.navRailView?.requestFocus() //Focus the Home item as the default focus will be the header item
(activity as? MainActivity)?.binding?.navRailView?.findViewById<NavigationBarItemView>(R.id.navigation_home)?.requestFocus()
} else { } else {
previewViewpager.setCurrentItem(previewViewpager.currentItem - 1, true) previewViewpager.setCurrentItem(previewViewpager.currentItem - 1, true)
binding.homePreviewPlayBtt.requestFocus() binding.homePreviewPlayBtt.requestFocus()

View file

@ -45,6 +45,7 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.deleteAllResumeStateIds
import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllResumeStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllResumeStateIds
import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllWatchStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllWatchStateIds
import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData
import com.lagradost.cloudstream3.utils.DataStoreHelper.getCurrentAccount
import com.lagradost.cloudstream3.utils.DataStoreHelper.getLastWatched import com.lagradost.cloudstream3.utils.DataStoreHelper.getLastWatched
import com.lagradost.cloudstream3.utils.DataStoreHelper.getResultWatchState import com.lagradost.cloudstream3.utils.DataStoreHelper.getResultWatchState
import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos
@ -108,6 +109,9 @@ class HomeViewModel : ViewModel() {
private val _apiName = MutableLiveData<String>() private val _apiName = MutableLiveData<String>()
val apiName: LiveData<String> = _apiName val apiName: LiveData<String> = _apiName
private val _currentAccount = MutableLiveData<DataStoreHelper.Account?>()
val currentAccount: MutableLiveData<DataStoreHelper.Account?> = _currentAccount
private val _randomItems = MutableLiveData<List<SearchResponse>?>(null) private val _randomItems = MutableLiveData<List<SearchResponse>?>(null)
val randomItems: LiveData<List<SearchResponse>?> = _randomItems val randomItems: LiveData<List<SearchResponse>?> = _randomItems
@ -404,7 +408,6 @@ class HomeViewModel : ViewModel() {
} }
} }
private val _popup = MutableLiveData<Pair<ExpandableHomepageList, (() -> Unit)?>?>(null) private val _popup = MutableLiveData<Pair<ExpandableHomepageList, (() -> Unit)?>?>(null)
val popup: LiveData<Pair<ExpandableHomepageList, (() -> Unit)?>?> = _popup val popup: LiveData<Pair<ExpandableHomepageList, (() -> Unit)?>?> = _popup
@ -431,11 +434,18 @@ class HomeViewModel : ViewModel() {
loadAndCancel(DataStoreHelper.currentHomePage, true) loadAndCancel(DataStoreHelper.currentHomePage, true)
} }
private fun reloadAccount(unused: Boolean = false) {
_currentAccount.postValue(
getCurrentAccount()
)
}
init { init {
MainActivity.bookmarksUpdatedEvent += ::bookmarksUpdated MainActivity.bookmarksUpdatedEvent += ::bookmarksUpdated
MainActivity.afterPluginsLoadedEvent += ::afterPluginsLoaded MainActivity.afterPluginsLoadedEvent += ::afterPluginsLoaded
MainActivity.mainPluginsLoadedEvent += ::afterMainPluginsLoaded MainActivity.mainPluginsLoadedEvent += ::afterMainPluginsLoaded
MainActivity.reloadHomeEvent += ::reloadHome MainActivity.reloadHomeEvent += ::reloadHome
MainActivity.reloadAccountEvent += ::reloadAccount
} }
override fun onCleared() { override fun onCleared() {
@ -443,6 +453,7 @@ class HomeViewModel : ViewModel() {
MainActivity.afterPluginsLoadedEvent -= ::afterPluginsLoaded MainActivity.afterPluginsLoadedEvent -= ::afterPluginsLoaded
MainActivity.mainPluginsLoadedEvent -= ::afterMainPluginsLoaded MainActivity.mainPluginsLoadedEvent -= ::afterMainPluginsLoaded
MainActivity.reloadHomeEvent -= ::reloadHome MainActivity.reloadHomeEvent -= ::reloadHome
MainActivity.reloadAccountEvent -= ::reloadAccount
super.onCleared() super.onCleared()
} }

View file

@ -166,6 +166,7 @@ object DataStoreHelper {
showToast(context?.getString(R.string.logged_account, account.name) ?: account.name) showToast(context?.getString(R.string.logged_account, account.name) ?: account.name)
MainActivity.bookmarksUpdatedEvent(true) MainActivity.bookmarksUpdatedEvent(true)
MainActivity.reloadLibraryEvent(true) MainActivity.reloadLibraryEvent(true)
MainActivity.reloadAccountEvent(true)
val oldAccount = accounts.find { it.keyIndex == account.keyIndex } val oldAccount = accounts.find { it.keyIndex == account.keyIndex }
if (oldAccount != null && currentHomePage != homepage) { if (oldAccount != null && currentHomePage != homepage) {
// This is not a new account, and the homepage has changed, reload it // This is not a new account, and the homepage has changed, reload it
@ -191,6 +192,18 @@ object DataStoreHelper {
} }
} }
fun getAccount(accountIndex: Int): Account? {
return accounts.firstOrNull {
it.keyIndex == accountIndex
}
}
fun getCurrentAccount(): Account? {
return accounts.firstOrNull {
it.keyIndex == selectedKeyIndex
}
}
data class PosDur( data class PosDur(
@JsonProperty("position") val position: Long, @JsonProperty("position") val position: Long,
@JsonProperty("duration") val duration: Long @JsonProperty("duration") val duration: Long

View file

@ -3,5 +3,5 @@
<item android:color="?attr/colorPrimary" android:state_checked="true"/> <item android:color="?attr/colorPrimary" android:state_checked="true"/>
<item android:color="?attr/colorPrimary" android:state_focused="true"/> <item android:color="?attr/colorPrimary" android:state_focused="true"/>
<item android:color="?attr/colorPrimary" android:state_selected="true"/> <item android:color="?attr/colorPrimary" android:state_selected="true"/>
<item android:color="?attr/grayTextColor" android:state_checked="false"/> <item android:color="@color/whiteSmoke" android:state_checked="false"/>
</selector> </selector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M160,840v-480l320,-240 320,240v480L560,840v-280L400,560v280L160,840Z"
android:fillColor="#e8eaed"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M240,760h120v-240h240v240h120v-360L480,220 240,400v360ZM160,840v-480l320,-240 320,240v480L520,840v-240h-80v240L160,840ZM480,490Z"
android:fillColor="#e8eaed"/>
</vector>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/home_icon_filled_24" android:state_checked="true"/>
<item android:drawable="@drawable/home_icon_filled_24" android:state_focused="true"/>
<item android:drawable="@drawable/home_icon_outline_24"/>
</selector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M160,760v-80h80v-280q0,-83 50,-147.5T420,168v-28q0,-25 17.5,-42.5T480,80q25,0 42.5,17.5T540,140v28q80,20 130,84.5T720,400v280h80v80L160,760ZM480,880q-33,0 -56.5,-23.5T400,800h160q0,33 -23.5,56.5T480,880Z"
android:fillColor="#e8eaed"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M160,760v-80h80v-280q0,-83 50,-147.5T420,168v-28q0,-25 17.5,-42.5T480,80q25,0 42.5,17.5T540,140v28q80,20 130,84.5T720,400v280h80v80L160,760ZM480,460ZM480,880q-33,0 -56.5,-23.5T400,800h160q0,33 -23.5,56.5T480,880ZM320,680h320v-280q0,-66 -47,-113t-113,-47q-66,0 -113,47t-47,113v280Z"
android:fillColor="#e8eaed"/>
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/white">
<path
android:pathData="M160,800q-33,0 -56.5,-23.5T80,720v-480q0,-33 23.5,-56.5T160,160h240l80,80h320q33,0 56.5,23.5T880,320L160,320v400l96,-320h684L837,743q-8,26 -29.5,41.5T760,800L160,800Z"
android:fillColor="@android:color/white"/>
</vector>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/library_icon_filled" android:state_checked="true"/>
<item android:drawable="@drawable/library_icon_filled" android:state_focused="true"/>
<item android:drawable="@drawable/library_icon"/>
</selector>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_filled_notifications_24dp" android:state_checked="true"/>
<item android:drawable="@drawable/ic_filled_notifications_24dp" android:state_focused="true"/>
<item android:drawable="@drawable/ic_outline_notifications_24dp"/>
</selector>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<stroke android:width="2dp"
android:color="?attr/white"/>
<corners
android:bottomLeftRadius="20dp"
android:bottomRightRadius="20dp"
android:topLeftRadius="20dp"
android:topRightRadius="20dp" />
</shape>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:drawable="@drawable/outline_big_20"/> <!-- focused -->
</selector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="m370,880 l-16,-128q-13,-5 -24.5,-12T307,725l-119,50L78,585l103,-78q-1,-7 -1,-13.5v-27q0,-6.5 1,-13.5L78,375l110,-190 119,50q11,-8 23,-15t24,-12l16,-128h220l16,128q13,5 24.5,12t22.5,15l119,-50 110,190 -103,78q1,7 1,13.5v27q0,6.5 -2,13.5l103,78 -110,190 -118,-50q-11,8 -23,15t-24,12L590,880L370,880ZM482,620q58,0 99,-41t41,-99q0,-58 -41,-99t-99,-41q-59,0 -99.5,41T342,480q0,58 40.5,99t99.5,41Z"
android:fillColor="#e8eaed"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="m370,880 l-16,-128q-13,-5 -24.5,-12T307,725l-119,50L78,585l103,-78q-1,-7 -1,-13.5v-27q0,-6.5 1,-13.5L78,375l110,-190 119,50q11,-8 23,-15t24,-12l16,-128h220l16,128q13,5 24.5,12t22.5,15l119,-50 110,190 -103,78q1,7 1,13.5v27q0,6.5 -2,13.5l103,78 -110,190 -118,-50q-11,8 -23,15t-24,12L590,880L370,880ZM440,800h79l14,-106q31,-8 57.5,-23.5T639,633l99,41 39,-68 -86,-65q5,-14 7,-29.5t2,-31.5q0,-16 -2,-31.5t-7,-29.5l86,-65 -39,-68 -99,42q-22,-23 -48.5,-38.5T533,266l-13,-106h-79l-14,106q-31,8 -57.5,23.5T321,327l-99,-41 -39,68 86,64q-5,15 -7,30t-2,32q0,16 2,31t7,30l-86,65 39,68 99,-42q22,23 48.5,38.5T427,694l13,106ZM482,620q58,0 99,-41t41,-99q0,-58 -41,-99t-99,-41q-59,0 -99.5,41T342,480q0,58 40.5,99t99.5,41ZM480,480Z"
android:fillColor="#e8eaed"/>
</vector>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/settings_icon_filled" android:state_checked="true"/>
<item android:drawable="@drawable/settings_icon_filled" android:state_focused="true"/>
<item android:drawable="@drawable/settings_icon_outline"/>
</selector>

View file

@ -14,20 +14,21 @@
<com.google.android.material.navigationrail.NavigationRailView <com.google.android.material.navigationrail.NavigationRailView
android:id="@+id/nav_rail_view" android:id="@+id/nav_rail_view"
android:layout_width="@dimen/navbar_width" android:layout_width="62dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/primaryGrayBackground" android:background="?attr/primaryGrayBackground"
app:itemIconTint="@color/item_select_color"
android:descendantFocusability="afterDescendants" android:descendantFocusability="afterDescendants"
app:itemIconTint="@color/item_select_color"
app:itemTextColor="@color/item_select_color" app:itemTextColor="@color/item_select_color"
app:headerLayout="@layout/rail_header"
app:labelVisibilityMode="unlabeled" app:labelVisibilityMode="unlabeled"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/bottom_nav_menu" app:menu="@menu/bottom_nav_menu"
app:menuGravity="center"> app:menuGravity="center">
<include layout="@layout/rail_footer"/>
</com.google.android.material.navigationrail.NavigationRailView> </com.google.android.material.navigationrail.NavigationRailView>
<!-- android:layout_height="65dp" <!-- android:layout_height="65dp"
app:labelVisibilityMode="unlabeled" app:labelVisibilityMode="unlabeled"

View file

@ -26,19 +26,20 @@
<com.google.android.material.navigationrail.NavigationRailView <com.google.android.material.navigationrail.NavigationRailView
android:id="@+id/nav_rail_view" android:id="@+id/nav_rail_view"
android:layout_width="62dp" android:layout_width="62dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/primaryGrayBackground"
android:descendantFocusability="afterDescendants"
app:itemIconTint="@color/item_select_color" app:itemIconTint="@color/item_select_color"
app:itemTextColor="@color/item_select_color" app:itemTextColor="@color/item_select_color"
android:background="?attr/primaryGrayBackground"
android:descendantFocusability="afterDescendants"
app:headerLayout="@layout/rail_header"
app:labelVisibilityMode="unlabeled" app:labelVisibilityMode="unlabeled"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/bottom_nav_menu" app:menu="@menu/bottom_nav_menu"
app:menuGravity="center"> app:menuGravity="center">
<include layout="@layout/rail_footer"/>
</com.google.android.material.navigationrail.NavigationRailView> </com.google.android.material.navigationrail.NavigationRailView>
<com.google.android.material.bottomnavigation.BottomNavigationView <com.google.android.material.bottomnavigation.BottomNavigationView

View file

@ -44,9 +44,11 @@
android:layout_marginEnd="0dp" android:layout_marginEnd="0dp"
android:background="@drawable/player_button_tv_attr_no_bg" android:background="@drawable/player_button_tv_attr_no_bg"
android:gravity="center_vertical" android:gravity="center_vertical"
android:nextFocusLeft="@id/nav_rail_view" android:nextFocusLeft="@id/home_preview_play_btt"
android:nextFocusRight="@id/home_preview_search_button" android:nextFocusRight="@id/home_preview_search_button"
android:nextFocusDown="@id/home_preview_play_btt" /> android:nextFocusDown="@id/home_preview_play_btt" >
<requestFocus />
</com.google.android.material.button.MaterialButton>
<ImageView <ImageView
android:id="@+id/home_preview_search_button" android:id="@+id/home_preview_search_button"
@ -65,6 +67,7 @@
app:tint="@color/player_on_button_tv_attr" /> app:tint="@color/player_on_button_tv_attr" />
<ImageView <ImageView
android:visibility="gone"
android:id="@+id/home_preview_switch_account" android:id="@+id/home_preview_switch_account"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -114,7 +114,9 @@
android:gravity="center_vertical" android:gravity="center_vertical"
android:nextFocusLeft="@id/nav_rail_view" android:nextFocusLeft="@id/nav_rail_view"
android:nextFocusRight="@id/home_preview_search_button" android:nextFocusRight="@id/home_preview_search_button"
android:nextFocusDown="@id/home_preview_play_btt" /> android:nextFocusDown="@id/home_preview_play_btt" >
<requestFocus />
</com.google.android.material.button.MaterialButton>
<ImageView <ImageView
android:id="@+id/home_preview_search_button" android:id="@+id/home_preview_search_button"
@ -134,6 +136,7 @@
app:tint="@color/player_on_button_tv_attr" /> app:tint="@color/player_on_button_tv_attr" />
<ImageView <ImageView
android:visibility="gone"
android:id="@+id/home_switch_account" android:id="@+id/home_switch_account"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/nav_footer_root"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:layout_marginBottom="10dp"
android:layout_gravity="bottom|center_horizontal"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.cardview.widget.CardView
android:id="@+id/nav_footer_profile_card"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@color/transparent"
app:cardCornerRadius="20dp"
android:focusable="true"
android:foreground="@drawable/outline_drawable_round_20">
<ImageView
android:id="@+id/nav_footer_profile_pic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/profile_bg_orange"
android:contentDescription="@string/account"/>
</androidx.cardview.widget.CardView>
</LinearLayout>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:visibility="gone"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:id="@+id/nav_header_notification"
android:layout_width="24dp"
android:layout_height="24dp"
app:itemIconTint="@color/item_select_color"
android:focusable="true"
android:nextFocusRight="@id/home_preview_play_btt"
android:src="@drawable/notifications_icon_selector"
android:contentDescription="@string/account"
app:tint="@color/item_select_color" />
</LinearLayout>

View file

@ -1,23 +1,23 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item <item
android:id="@+id/navigation_home" android:id="@+id/navigation_home"
android:icon="@drawable/home_alt" android:icon="@drawable/home_icon_selector"
android:title="@string/title_home" /> android:title="@string/title_home" />
<item <item
android:id="@+id/navigation_search" android:id="@+id/navigation_search"
android:icon="@drawable/search_icon" android:icon="@drawable/search_icon"
android:title="@string/title_search" /> android:title="@string/title_search" />
<item <item
android:id="@+id/navigation_library" android:id="@+id/navigation_library"
android:icon="@drawable/library_icon" android:icon="@drawable/library_icon_selector"
android:title="@string/library" /> android:title="@string/library" />
<item <item
android:id="@+id/navigation_downloads" android:id="@+id/navigation_downloads"
android:icon="@drawable/netflix_download" android:icon="@drawable/netflix_download"
android:title="@string/title_downloads" /> android:title="@string/title_downloads" />
<item <item
android:id="@+id/navigation_settings" android:id="@+id/navigation_settings"
android:icon="@drawable/ic_outline_settings_24" android:icon="@drawable/settings_icon_selector"
android:title="@string/title_settings" /> android:title="@string/title_settings" />
</menu> </menu>

View file

@ -89,4 +89,5 @@
<color name="colorTestPass">#48E484</color> <color name="colorTestPass">#48E484</color>
<color name="colorTestFail">#ea596e</color> <color name="colorTestFail">#ea596e</color>
<color name="colorTestWarning">#FF9800</color> <color name="colorTestWarning">#FF9800</color>
<color name="whiteSmoke">#F5F5F5</color>
</resources> </resources>