From 693f69f25f32faf5555fd84e20d54746502cc7a1 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Thu, 21 Aug 2025 03:51:52 +0200 Subject: [PATCH] Feat: Expandable navigation rail on focus --- .../lagradost/cloudstream3/MainActivity.kt | 29 +++++++++++++++++++ app/src/main/res/layout/activity_main_tv.xml | 8 +++-- gradle/libs.versions.toml | 2 +- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index ed3db1493..4bf26ceed 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -1709,6 +1709,35 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa } } + val rail = binding?.navRailView + if (rail != null && isLayout(TV)) { + val focus = mutableSetOf() + for (id in arrayOf( + R.id.navigation_home, + R.id.navigation_library, + R.id.navigation_search, + R.id.navigation_downloads, + R.id.navigation_settings + )) { + rail.findViewById(id)?.onFocusChangeListener = + View.OnFocusChangeListener { v, hasFocus -> + if (hasFocus) { + focus += id + binding?.navRailView?.labelVisibilityMode = NavigationRailView.LABEL_VISIBILITY_LABELED + binding?.navRailView?.expand() + } else { + focus -= id + v.post { + if(focus.isEmpty()) { + binding?.navRailView?.labelVisibilityMode = NavigationRailView.LABEL_VISIBILITY_UNLABELED + binding?.navRailView?.collapse() + } + } + } + } + } + } + // Navigation button long click functionality to scroll to top for (view in listOf(binding?.navView, binding?.navRailView)) { view?.findViewById(R.id.navigation_home)?.setOnLongClickListener { diff --git a/app/src/main/res/layout/activity_main_tv.xml b/app/src/main/res/layout/activity_main_tv.xml index 0003b2618..e36aacbcd 100644 --- a/app/src/main/res/layout/activity_main_tv.xml +++ b/app/src/main/res/layout/activity_main_tv.xml @@ -25,14 +25,18 @@