[Android] Implement the display settings model in the BaseActivity

Nicolas Pomepuy git at videolan.org
Wed Mar 26 13:39:36 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Mar 25 14:25:43 2025 +0100| [982352a9a55a4286784252879043bd158a3d51e9] | committer: Duncan McNamara

Implement the display settings model in the BaseActivity

> https://code.videolan.org/videolan/vlc-android/commit/982352a9a55a4286784252879043bd158a3d51e9
---

 .../src/org/videolan/vlc/gui/BaseActivity.kt       | 23 ++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
index e170ff5c64..ea9ea665e7 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/BaseActivity.kt
@@ -15,11 +15,13 @@ import android.view.Menu
 import android.view.MenuItem
 import android.view.View
 import androidx.activity.result.contract.ActivityResultContracts
+import androidx.activity.viewModels
 import androidx.annotation.RequiresApi
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.app.AppCompatDelegate
 import androidx.appcompat.app.BaseContextWrappingDelegate
 import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.flowWithLifecycle
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.repeatOnLifecycle
 import androidx.window.layout.WindowInfoTracker
@@ -40,6 +42,7 @@ import org.videolan.vlc.media.MediaUtils
 import org.videolan.vlc.util.FileUtils
 import org.videolan.vlc.util.Permissions
 import org.videolan.vlc.util.RemoteAccessUtils
+import org.videolan.vlc.viewmodels.DisplaySettingsViewModel
 
 
 abstract class BaseActivity : AppCompatActivity() {
@@ -49,6 +52,7 @@ abstract class BaseActivity : AppCompatActivity() {
     lateinit var settings: SharedPreferences
     private var lastDisplayedOTPCode = ""
     var windowLayoutInfo: WindowLayoutInfo? = null
+    private val displaySettingsViewModel: DisplaySettingsViewModel by viewModels()
 
     open val displayTitle = false
     open fun forcedTheme():Int? = null
@@ -61,6 +65,14 @@ abstract class BaseActivity : AppCompatActivity() {
         }
     }
 
+    /**
+     * Triggered when a display setting is changed
+     *
+     * @param key the display settings key
+     * @param value the new display settings value
+     */
+    open fun onDisplaySettingChanged(key:String, value:Any) { }
+
     override fun onCreate(savedInstanceState: Bundle?) {
         settings = Settings.getInstance(this)
         /* Theme must be applied before super.onCreate */
@@ -94,6 +106,17 @@ abstract class BaseActivity : AppCompatActivity() {
                 }
             }
         }
+        lifecycleScope.launch {
+            //listen to display settings changes
+            displaySettingsViewModel.settingChangeFlow
+                .flowWithLifecycle(lifecycle, Lifecycle.State.STARTED)
+                .collect {
+                    if (lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) {
+                        onDisplaySettingChanged(it.key, it.value)
+                        displaySettingsViewModel.consume()
+                    }
+                }
+        }
     }
 
     override fun onRequestPermissionsResult(



More information about the Android mailing list