From 2484b2cbfae2b61a647af7481737db5ed15fb9d1 Mon Sep 17 00:00:00 2001 From: Vadym Omelnytskyi Date: Mon, 30 Sep 2024 22:46:28 +0000 Subject: Brightness Slider: changes for extension Decomposed SystemUI brightness slider and provided DI for related classes in order to provide functionality to change brightness slider behavior for Google devices only. Manual tests: 1. Manually interacted with Google brightness slider and confirm that brightness changed accordingly. 2. Changed brightness via `adb` commands and confirmed that brightness slider was reacting as expected. 3. Provided the same tests for both QS and Settings brightness slider. 4. Provided Screen Record and confirmed that brightness slider mirror original slider behavior. 5. Checked AConfig flag works as expected and provide SystemUI slider classes when AConfig flag is disabled. Bug: 376788704 Flag: EXEMPT refactor Test: Manual tests Test: atest com.android.systemui.settings.brightness Change-Id: Ia4f2ef3272a2110de522df912166f6f46211c1e0 --- .../systemui/dagger/ReferenceSystemUIModule.java | 2 + .../settings/brightness/BrightnessController.java | 45 +++++++++++++--------- .../brightness/BrightnessSliderController.java | 38 +++++++++++++----- .../settings/brightness/BrightnessSliderView.java | 18 +++++---- .../settings/brightness/ToggleSeekBar.java | 4 +- .../brightness/dagger/BrightnessSliderModule.kt | 36 +++++++++++++++++ .../settings/BrightnessSliderControllerKosmos.kt | 2 +- 7 files changed, 107 insertions(+), 38 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/settings/brightness/dagger/BrightnessSliderModule.kt diff --git a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java index 1fc549469b55..3050cba12f09 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java @@ -61,6 +61,7 @@ import com.android.systemui.scene.SceneContainerFrameworkModule; import com.android.systemui.screenshot.ReferenceScreenshotModule; import com.android.systemui.settings.MultiUserUtilsModule; import com.android.systemui.settings.UserTracker; +import com.android.systemui.settings.brightness.dagger.BrightnessSliderModule; import com.android.systemui.shade.NotificationShadeWindowControllerImpl; import com.android.systemui.shade.ShadeModule; import com.android.systemui.startable.Dependencies; @@ -124,6 +125,7 @@ import javax.inject.Named; AccessibilityRepositoryModule.class, AospPolicyModule.class, BatterySaverModule.class, + BrightnessSliderModule.class, CentralSurfacesModule.class, ClipboardOverlayOverrideModule.class, CollapsedStatusBarFragmentStartableModule.class, diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java index 90d27f4b33e9..c65c3b854b82 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java @@ -21,7 +21,6 @@ import static com.android.settingslib.display.BrightnessUtils.convertGammaToLine import static com.android.settingslib.display.BrightnessUtils.convertLinearToGammaFloat; import android.animation.ValueAnimator; -import android.annotation.NonNull; import android.content.Context; import android.database.ContentObserver; import android.hardware.display.BrightnessInfo; @@ -42,6 +41,7 @@ import android.service.vr.IVrStateCallbacks; import android.util.Log; import android.util.MathUtils; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; @@ -72,19 +72,19 @@ import java.util.concurrent.Executor; public class BrightnessController implements ToggleSlider.Listener, MirroredBrightnessController { private static final String TAG = "CentralSurfaces.BrightnessController"; - private static final int SLIDER_ANIMATION_DURATION = 3000; + protected static final int SLIDER_ANIMATION_DURATION = 3000; - private static final int MSG_UPDATE_SLIDER = 1; - private static final int MSG_ATTACH_LISTENER = 2; - private static final int MSG_DETACH_LISTENER = 3; - private static final int MSG_VR_MODE_CHANGED = 4; + protected static final int MSG_UPDATE_SLIDER = 1; + protected static final int MSG_ATTACH_LISTENER = 2; + protected static final int MSG_DETACH_LISTENER = 3; + protected static final int MSG_VR_MODE_CHANGED = 4; - private static final Uri BRIGHTNESS_MODE_URI = + protected static final Uri BRIGHTNESS_MODE_URI = Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE); private final int mDisplayId; private final Context mContext; - private final ToggleSlider mControl; + protected final ToggleSlider mControl; private final DisplayManager mDisplayManager; private final UserTracker mUserTracker; private final DisplayTracker mDisplayTracker; @@ -109,10 +109,10 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig private boolean mTrackingTouch = false; // Brightness adjusted via touch events. private volatile boolean mIsVrModeEnabled; private boolean mListening; - private boolean mExternalChange; + protected boolean mExternalChange; private boolean mControlValueInitialized; - private float mBrightnessMin = PowerManager.BRIGHTNESS_MIN; - private float mBrightnessMax = PowerManager.BRIGHTNESS_MAX; + protected float mBrightnessMin = PowerManager.BRIGHTNESS_MIN; + protected float mBrightnessMax = PowerManager.BRIGHTNESS_MAX; private boolean mIsBrightnessOverriddenByWindow = false; private ValueAnimator mSliderAnimator; @@ -253,10 +253,8 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig if (info == null) { return; } - mBrightnessMax = info.brightnessMaximum; - mBrightnessMin = info.brightnessMinimum; - mIsBrightnessOverriddenByWindow = info.isBrightnessOverrideByWindow; + updateBrightnessInfo(info); // Value is passed as intbits, since this is what the message takes. final int valueAsIntBits = Float.floatToIntBits(info.brightness); mMainHandler.obtainMessage(MSG_UPDATE_SLIDER, valueAsIntBits, @@ -264,6 +262,12 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig } }; + protected void updateBrightnessInfo(BrightnessInfo info) { + mBrightnessMax = info.brightnessMaximum; + mBrightnessMin = info.brightnessMinimum; + mIsBrightnessOverriddenByWindow = info.isBrightnessOverrideByWindow; + } + private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() { @Override public void onVrStateChanged(boolean enabled) { @@ -301,7 +305,7 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig } }; - private final Handler mMainHandler; + protected final Handler mMainHandler; private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { @@ -459,7 +463,7 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig return !mAutomatic && !mTrackingTouch; } - private void updateSlider(float brightnessValue, boolean inVrMode) { + protected void updateSlider(float brightnessValue, boolean inVrMode) { final float min = mBrightnessMin; final float max = mBrightnessMax; @@ -502,12 +506,17 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig mSliderAnimator.start(); } - + /** Factory interface for creating a {@link BrightnessController}. */ + public interface Factory { + @NonNull + BrightnessController create(ToggleSlider toggleSlider); + } /** Factory for creating a {@link BrightnessController}. */ @AssistedFactory - public interface Factory { + public interface BrightnessControllerFactory extends Factory { /** Create a {@link BrightnessController} */ + @NonNull BrightnessController create(ToggleSlider toggleSlider); } diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java index 503d0bfbc301..02eca74fd751 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java @@ -25,6 +25,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.SeekBar; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.internal.logging.UiEventLogger; @@ -42,6 +43,7 @@ import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.util.ViewController; import com.android.systemui.util.time.SystemClock; + import com.google.android.msdl.domain.MSDLPlayer; import javax.inject.Inject; @@ -89,7 +91,7 @@ public class BrightnessSliderController extends ViewController { - BrightnessSliderController.Factory( + BrightnessSliderController.BrightnessSliderControllerFactory( falsingManager, uiEventLogger, vibratorHelper, -- cgit v1.2.3-59-g8ed1b