From 92cc7a9cf32f82e73dd5640618c99a96de495273 Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Sat, 26 Nov 2022 11:42:46 +0530 Subject: [PATCH 1/2] 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() } From 612a23c1dcd67ba6d8b40e57adc91866553d23a9 Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Sat, 26 Nov 2022 14:07:03 +0530 Subject: [PATCH 2/2] Fix pip mode brightness issue Check if activity is in pip mode then use system brightness. Don't force to store brightness while returning from pip mode. Since it contains system brightness. --- .../libretube/ui/views/CustomExoPlayerView.kt | 2 +- .../github/libretube/util/BrightnessHelper.kt | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) 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 045ec9c66..ccb198f29 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 @@ -445,7 +445,7 @@ internal class CustomExoPlayerView( if (PlayerHelper.swipeGestureEnabled) { when (newConfig?.orientation) { Configuration.ORIENTATION_LANDSCAPE -> brightnessHelper.restoreSavedBrightness() - else -> brightnessHelper.resetToSystemBrightness(true) + else -> brightnessHelper.resetToSystemBrightness(false) } } } 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 6c6d88951..02aec92a1 100644 --- a/app/src/main/java/com/github/libretube/util/BrightnessHelper.kt +++ b/app/src/main/java/com/github/libretube/util/BrightnessHelper.kt @@ -1,11 +1,12 @@ package com.github.libretube.util import android.app.Activity +import android.os.Build import android.view.WindowManager import com.github.libretube.constants.PreferenceKeys import com.github.libretube.extensions.normalize -class BrightnessHelper(activity: Activity) { +class BrightnessHelper(private val activity: Activity) { private val window = activity.window private val minBrightness = 0.0f @@ -31,15 +32,13 @@ class BrightnessHelper(activity: Activity) { /** * Restore screen brightness to device system brightness. - * [saveOldValue] determines whether the old value should be persisted or not. + * if [forced] is false then value will be stored only if it's not + * [WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE] value. */ - fun resetToSystemBrightness(saveOldValue: Boolean = false) { - savedBrightness = if (saveOldValue) { - brightness - } else { - WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE + fun resetToSystemBrightness(forced: Boolean = true) { + if (forced || brightness != WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE) { + savedBrightness = brightness } - brightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE } @@ -47,6 +46,9 @@ class BrightnessHelper(activity: Activity) { * Set current screen brightness to saved brightness value. */ fun restoreSavedBrightness() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && activity.isInPictureInPictureMode) { + return + } brightness = savedBrightness }