From 92cc7a9cf32f82e73dd5640618c99a96de495273 Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Sat, 26 Nov 2022 11:42:46 +0530 Subject: [PATCH] Fix brightness inconsistency Brightness changes affect only when player is in full-screen (landscape) mode. Store brightness value to shared preferences which can be restored for later use. --- .../libretube/constants/PreferenceKeys.kt | 1 + .../libretube/ui/views/CustomExoPlayerView.kt | 21 ++++---- .../github/libretube/util/BrightnessHelper.kt | 51 ++++++++++++++++--- .../github/libretube/util/PreferenceHelper.kt | 8 +++ 4 files changed, 64 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt index 49ade8d59..8565f98af 100644 --- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt @@ -84,6 +84,7 @@ object PreferenceKeys { const val USE_HLS_OVER_DASH = "use_hls" const val QUEUE_AUTO_INSERT_RELATED = "queue_insert_related_videos" const val PLAYER_SWIPE_CONTROLS = "player_swipe_controls" + const val PLAYER_SCREEN_BRIGHTNESS = "player_screen_brightness" const val SHOW_OPEN_WITH = "show_open_with" /** diff --git a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt index c46ad917a..045ec9c66 100644 --- a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt @@ -9,7 +9,6 @@ import android.os.Looper import android.util.AttributeSet import android.view.MotionEvent import android.view.View -import android.view.WindowManager import com.github.libretube.R import com.github.libretube.databinding.DoubleTapOverlayBinding import com.github.libretube.databinding.ExoStyledPlayerControlViewBinding @@ -320,15 +319,12 @@ internal class CustomExoPlayerView( } private fun initializeGestureProgress() { - val brightnessBar = gestureViewBinding.brightnessProgressBar - val volumeBar = gestureViewBinding.volumeProgressBar - - brightnessBar.progress = if (brightnessHelper.brightness == WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE) { - 25.normalize(0, 100, 0, volumeBar.max) - } else { - brightnessHelper.getBrightnessWithScale(brightnessBar.max.toFloat()).toInt() + gestureViewBinding.brightnessProgressBar.let { bar -> + bar.progress = brightnessHelper.getBrightnessWithScale(bar.max.toFloat(), saved = true).toInt() + } + gestureViewBinding.volumeProgressBar.let { bar -> + bar.progress = audioHelper.getVolumeWithScale(bar.max) } - volumeBar.progress = audioHelper.getVolumeWithScale(volumeBar.max) } private fun updateBrightness(distance: Float) { @@ -445,6 +441,13 @@ internal class CustomExoPlayerView( params.bottomMargin = offset.toInt() it.layoutParams = params } + + if (PlayerHelper.swipeGestureEnabled) { + when (newConfig?.orientation) { + Configuration.ORIENTATION_LANDSCAPE -> brightnessHelper.restoreSavedBrightness() + else -> brightnessHelper.resetToSystemBrightness(true) + } + } } override fun onSingleTap() { diff --git a/app/src/main/java/com/github/libretube/util/BrightnessHelper.kt b/app/src/main/java/com/github/libretube/util/BrightnessHelper.kt index e03581191..6c6d88951 100644 --- a/app/src/main/java/com/github/libretube/util/BrightnessHelper.kt +++ b/app/src/main/java/com/github/libretube/util/BrightnessHelper.kt @@ -2,6 +2,7 @@ package com.github.libretube.util import android.app.Activity import android.view.WindowManager +import com.github.libretube.constants.PreferenceKeys import com.github.libretube.extensions.normalize class BrightnessHelper(activity: Activity) { @@ -13,26 +14,60 @@ class BrightnessHelper(activity: Activity) { /** * Wrapper for the current screen brightness */ - var brightness: Float + private var brightness: Float get() = window.attributes.screenBrightness - private set(value) { + set(value) { val lp = window.attributes lp.screenBrightness = value window.attributes = lp } /** - * Restore screen brightness to device system brightness. + * Wrapper for the brightness persisted in the shared preferences. */ - fun resetToSystemBrightness() { + private var savedBrightness: Float + get() = PreferenceHelper.getFloat(PreferenceKeys.PLAYER_SCREEN_BRIGHTNESS, brightness) + set(value) = PreferenceHelper.putFloat(PreferenceKeys.PLAYER_SCREEN_BRIGHTNESS, value) + + /** + * Restore screen brightness to device system brightness. + * [saveOldValue] determines whether the old value should be persisted or not. + */ + fun resetToSystemBrightness(saveOldValue: Boolean = false) { + savedBrightness = if (saveOldValue) { + brightness + } else { + WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE + } + brightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE } - fun setBrightnessWithScale(value: Float, maxValue: Float, minValue: Float = 0.0f) { - brightness = value.normalize(minValue, maxValue, minBrightness, maxBrightness) + /** + * Set current screen brightness to saved brightness value. + */ + fun restoreSavedBrightness() { + brightness = savedBrightness } - fun getBrightnessWithScale(maxValue: Float, minValue: Float = 0.0f): Float { - return brightness.normalize(minBrightness, maxBrightness, minValue, maxValue) + /** + * Set current brightness value with scaling to given range. + * [shouldSave] determines whether the value should be persisted. + */ + fun setBrightnessWithScale(value: Float, maxValue: Float, minValue: Float = 0.0f, shouldSave: Boolean = false) { + brightness = value.normalize(minValue, maxValue, minBrightness, maxBrightness) + if (shouldSave) savedBrightness = brightness + } + + /** + * Get scaled brightness with given range. if [saved] is + * ture value will be retrived from shared preferences. + */ + fun getBrightnessWithScale(maxValue: Float, minValue: Float = 0.0f, saved: Boolean = false): Float { + return if (saved) { + savedBrightness.normalize(minBrightness, maxBrightness, minValue, maxValue) + } else { + brightness.normalize(minBrightness, maxBrightness, minValue, maxValue) + } } } diff --git a/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt b/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt index 2d5a81967..f5f378134 100644 --- a/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt +++ b/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt @@ -41,6 +41,10 @@ object PreferenceHelper { editor.putInt(key, value).commit() } + fun putFloat(key: String, value: Float) { + editor.putFloat(key, value).commit() + } + fun getString(key: String?, defValue: String): String { return settings.getString(key, defValue) ?: defValue } @@ -53,6 +57,10 @@ object PreferenceHelper { return settings.getInt(key, defValue) } + fun getFloat(key: String?, defValue: Float): Float { + return settings.getFloat(key, defValue) + } + fun clearPreferences() { editor.clear().apply() }