[Android] Force TV UI on certain devices

Nicolas Pomepuy git at videolan.org
Tue May 20 12:12:28 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Mon May 19 11:57:32 2025 +0200| [13f416ca0e19a58bfd2d9a4eb89248d1393480d5] | committer: Duncan McNamara

Force TV UI on certain devices

For now only used on Amazon Echo 15

> https://code.videolan.org/videolan/vlc-android/commit/13f416ca0e19a58bfd2d9a4eb89248d1393480d5
---

 .../src/main/java/org/videolan/resources/AndroidDevices.kt         | 7 +++++++
 application/vlc-android/src/org/videolan/vlc/StartActivity.kt      | 4 ++++
 2 files changed, 11 insertions(+)

diff --git a/application/resources/src/main/java/org/videolan/resources/AndroidDevices.kt b/application/resources/src/main/java/org/videolan/resources/AndroidDevices.kt
index 56978dac42..e57386396f 100644
--- a/application/resources/src/main/java/org/videolan/resources/AndroidDevices.kt
+++ b/application/resources/src/main/java/org/videolan/resources/AndroidDevices.kt
@@ -72,6 +72,9 @@ object AndroidDevices {
     private val mountWL = arrayOf("/mnt", "/Removable", "/storage")
     val mountBL = arrayOf(EXTERNAL_PUBLIC_DIRECTORY, "/mnt/secure", "/mnt/shell", "/mnt/asec", "/mnt/nand", "/mnt/runtime", "/mnt/obb", "/mnt/media_rw/extSdCard", "/mnt/media_rw/sdcard", "/storage/emulated", "/var/run/arc")
     private val deviceWL = arrayOf("/dev/block/vold", "/dev/fuse", "/mnt/media_rw", "passthrough", "//")
+    // Some devices should be considered as TVs
+    // Amazon Echo 15 (AEOHY): has touch screen but main navigation is done by remote
+    val forcedTVModels = arrayOf("AEOHY")
 
     /**
      * hasCombBar test if device has Combined Bar : only for tablet with Honeycomb or ICS
@@ -193,6 +196,10 @@ object AndroidDevices {
 
     }
 
+    fun hasToForceTV(): Boolean {
+        return Build.MODEL in forcedTVModels
+    }
+
     object MediaFolders {
         private val EXTERNAL_PUBLIC_MOVIES_DIRECTORY_FILE: File = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)
         private val EXTERNAL_PUBLIC_MUSIC_DIRECTORY_FILE: File = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
diff --git a/application/vlc-android/src/org/videolan/vlc/StartActivity.kt b/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
index 88eef20613..69585c4b22 100644
--- a/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/StartActivity.kt
@@ -65,6 +65,7 @@ import org.videolan.tools.BETA_WELCOME
 import org.videolan.tools.KEY_CURRENT_SETTINGS_VERSION
 import org.videolan.tools.KEY_TV_ONBOARDING_DONE
 import org.videolan.tools.PREF_SHOW_VIDEO_SETTINGS_DISCLAIMER
+import org.videolan.tools.PREF_TV_UI
 import org.videolan.tools.Settings
 import org.videolan.tools.awaitAppIsForegroung
 import org.videolan.tools.getContextWithLocale
@@ -185,6 +186,9 @@ class StartActivity : FragmentActivity() {
         /* Check if it's the first run */
         val firstRun = savedVersionNumber == -1
         Settings.firstRun = firstRun
+        if (firstRun && AndroidDevices.hasToForceTV()) {
+            settings.putSingle(PREF_TV_UI, true)
+        }
         val upgrade = firstRun || savedVersionNumber != currentVersionNumber
         val tv = showTvUi()
         if (upgrade && (tv || !firstRun)) settings.putSingle(PREF_FIRST_RUN, currentVersionNumber)



More information about the Android mailing list