From 11fd27b774da0404024b6f80ef54c010196e313d Mon Sep 17 00:00:00 2001 From: Kai Date: Fri, 13 Jun 2025 14:51:48 -0500 Subject: [PATCH] Fix https://github.com/futo-org/grayjay-android/issues/2055 Use app level screen brightness instead of changing the system brightness This also fixes an issue where we don't correctly restore the auto brightness state of the device Changelog: changed --- app/src/main/AndroidManifest.xml | 1 - .../java/com/futo/platformplayer/Settings.kt | 11 ++-- .../mainactivity/main/VideoDetailFragment.kt | 8 --- .../mainactivity/main/VideoDetailView.kt | 11 +--- .../views/behavior/GestureControlView.kt | 50 ++--------------- .../views/video/FutoVideoPlayer.kt | 53 ++++++++++--------- app/src/main/res/values/strings.xml | 6 +-- 7 files changed, 41 insertions(+), 99 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ea6f3e5b..00d051b4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,7 +14,6 @@ - (); val onBrightnessAdjusted = Event1(); + val onBrightnessCleared = Event0(); val onPan = Event2(); val onZoom = Event1(); val onSoundAdjusted = Event1(); @@ -781,60 +778,21 @@ class GestureControlView : LinearLayout { _animatorBrightness?.start(); } - fun saveBrightness() { - try { - _originalBrightnessMode = android.provider.Settings.System.getInt(context.contentResolver, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE) - - val brightness = android.provider.Settings.System.getInt(context.contentResolver, android.provider.Settings.System.SCREEN_BRIGHTNESS) - _brightnessFactor = brightness / 255.0f; - Log.i(TAG, "Starting brightness brightness: $brightness, _brightnessFactor: $_brightnessFactor, _originalBrightnessMode: $_originalBrightnessMode") - - _originalBrightnessFactor = _brightnessFactor - } catch (e: Throwable) { - Settings.instance.gestureControls.useSystemBrightness = false - Settings.instance.save() - UIDialogs.toast(context, "useSystemBrightness disabled due to an error") - } - } - fun restoreBrightness() { - if (Settings.instance.gestureControls.restoreSystemBrightness) { - onBrightnessAdjusted.emit(_originalBrightnessFactor) - - if (android.provider.Settings.System.canWrite(context)) { - Log.i(TAG, "Restoring system brightness mode _originalBrightnessMode: $_originalBrightnessMode") - - android.provider.Settings.System.putInt( - context.contentResolver, - android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, - _originalBrightnessMode - ) - } - } - } - fun setFullscreen(isFullScreen: Boolean) { resetZoomPan() - if (isFullScreen) { - if (Settings.instance.gestureControls.useSystemBrightness) { - saveBrightness() - } + onBrightnessCleared.emit() + _brightnessFactor = 1.0f + if (isFullScreen) { if (Settings.instance.gestureControls.useSystemVolume) { val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager val currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) _soundFactor = currentVolume.toFloat() / maxVolume.toFloat() } - - onBrightnessAdjusted.emit(_brightnessFactor); onSoundAdjusted.emit(_soundFactor); } else { - if (Settings.instance.gestureControls.useSystemBrightness) { - restoreBrightness() - } else { - onBrightnessAdjusted.emit(1.0f); - } //onSoundAdjusted.emit(1.0f); stopAdjustingBrightness(); stopAdjustingSound(); diff --git a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayer.kt b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayer.kt index b1ba431a..9e26b71d 100644 --- a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayer.kt +++ b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayer.kt @@ -13,6 +13,7 @@ import android.util.TypedValue import android.view.LayoutInflater import android.view.View import android.view.ViewGroup.LayoutParams.MATCH_PARENT +import android.view.WindowManager import android.widget.FrameLayout import android.widget.ImageButton import android.widget.TextView @@ -40,6 +41,7 @@ import com.futo.platformplayer.constructs.Event1 import com.futo.platformplayer.constructs.Event2 import com.futo.platformplayer.constructs.Event3 import com.futo.platformplayer.formatDuration +import com.futo.platformplayer.fragment.mainactivity.main.VideoDetailFragment import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.states.StatePlayer @@ -62,6 +64,8 @@ class FutoVideoPlayer : FutoVideoPlayerBase { var isFullScreen: Boolean = false private set; + var fragment: VideoDetailFragment? = null + //Views private val _root: ConstraintLayout; private val _videoView: PlayerView; @@ -283,17 +287,25 @@ class FutoVideoPlayer : FutoVideoPlayerBase { }; gestureControl.onToggleFullscreen.subscribe { setFullScreen(!isFullScreen) }; gestureControl.onBrightnessAdjusted.subscribe { - if (Settings.instance.gestureControls.useSystemBrightness) { - setSystemBrightness(it) + if (Settings.instance.gestureControls.controlScreenBrightness) { + setScreenBrightness(it) } else { + setBrightnessOverlay(it) if (it == 1.0f) { _overlay_brightness.visibility = View.GONE; } else { _overlay_brightness.visibility = View.VISIBLE; - _overlay_brightness.setBackgroundColor(Color.valueOf(0.0f, 0.0f, 0.0f, (1.0f - it)).toArgb()); } } - }; + } + gestureControl.onBrightnessCleared.subscribe { + if (Settings.instance.gestureControls.controlScreenBrightness) { + clearCustomScreenBrightness() + } else { + setBrightnessOverlay(1.0f) + _overlay_brightness.visibility = View.GONE + } + } gestureControl.onPan.subscribe { x, y -> _videoView.translationX = x _videoView.translationY = y @@ -476,33 +488,26 @@ class FutoVideoPlayer : FutoVideoPlayerBase { } } + private fun setBrightnessOverlay(brightness: Float) { + _overlay_brightness.setBackgroundColor( + Color.valueOf(0.0f, 0.0f, 0.0f, (1.0f - brightness)).toArgb() + ) + } + private fun updateAutoplayButton() { _control_autoplay.setColorFilter(ContextCompat.getColor(context, if (StatePlayer.instance.autoplay) com.futo.futopay.R.color.primary else R.color.white)) _control_autoplay_fullscreen.setColorFilter(ContextCompat.getColor(context, if (StatePlayer.instance.autoplay) com.futo.futopay.R.color.primary else R.color.white)) } - private fun setSystemBrightness(brightness: Float) { - Log.i(TAG, "setSystemBrightness $brightness") - if (android.provider.Settings.System.canWrite(context)) { - Log.i(TAG, "setSystemBrightness canWrite $brightness") - android.provider.Settings.System.putInt(context.contentResolver, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); - android.provider.Settings.System.putInt(context.contentResolver, android.provider.Settings.System.SCREEN_BRIGHTNESS, (brightness * 255.0f).toInt().coerceAtLeast(1).coerceAtMost(255)); - } else if (!_promptedForPermissions) { - Log.i(TAG, "setSystemBrightness prompt $brightness") - _promptedForPermissions = true - UIDialogs.showConfirmationDialog(context, "System brightness controls require explicit permission", action = { - openAndroidPermissionsMenu() - }) - } else { - Log.i(TAG, "setSystemBrightness no permission?") - //No permissions but already prompted, ignore - } + private fun clearCustomScreenBrightness() { + setScreenBrightness(null) } - private fun openAndroidPermissionsMenu() { - val intent = Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS) - intent.setData(Uri.parse("package:" + context.packageName)) - context.startActivity(intent) + private fun setScreenBrightness(brightness: Float?) { + val layoutParams: WindowManager.LayoutParams? = fragment?.activity?.window?.attributes + layoutParams?.screenBrightness = + brightness ?: WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE + fragment?.activity?.window?.attributes = layoutParams } fun updateNextPrevious() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f4a51bd0..65972fad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -397,10 +397,8 @@ Enable slide gesture to change brightness Toggle full screen Enable swipe gesture to toggle full screen - System brightness - Gesture controls adjust system brightness - Restore system brightness - Restore system brightness when exiting full screen + Control screen brightness + Gesture controls adjust the device screen brightness instead of an overlay filter Enable zoom Enable two finger pinch zoom gesture Enable pan