diff options
7 files changed, 107 insertions, 38 deletions
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<BrightnessSliderV } }; - BrightnessSliderController( + protected BrightnessSliderController( BrightnessSliderView brightnessSliderView, FalsingManager falsingManager, UiEventLogger uiEventLogger, @@ -247,16 +249,20 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV return mView.isVisibleToUser(); } + protected void handleSliderProgressChange(SeekBar seekBar, int progress, boolean fromUser) { + if (mListener != null) { + mListener.onChanged(mTracking, progress, false); + if (fromUser) { + mBrightnessSliderHapticPlugin.onProgressChanged(progress, true); + } + } + } + private final SeekBar.OnSeekBarChangeListener mSeekListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - if (mListener != null) { - mListener.onChanged(mTracking, progress, false); - if (fromUser) { - mBrightnessSliderHapticPlugin.onProgressChanged(progress, true); - } - } + handleSliderProgressChange(seekBar, progress, fromUser); } @Override @@ -289,11 +295,21 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV } }; + /** Factory interface for creating a {@link BrightnessSliderController}. */ + public interface Factory { + @NonNull + BrightnessSliderController create( + Context context, + @Nullable ViewGroup viewRoot); + + int getLayout(); + } + /** * Creates a {@link BrightnessSliderController} with its associated view. */ - public static class Factory { + public static class BrightnessSliderControllerFactory implements Factory { private final FalsingManager mFalsingManager; private final UiEventLogger mUiEventLogger; private final VibratorHelper mVibratorHelper; @@ -303,7 +319,7 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV private final BrightnessWarningToast mBrightnessWarningToast; @Inject - public Factory( + public BrightnessSliderControllerFactory( FalsingManager falsingManager, UiEventLogger uiEventLogger, VibratorHelper vibratorHelper, @@ -328,6 +344,8 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV * @param viewRoot the {@link ViewGroup} that will contain the hierarchy. The inflated * hierarchy will not be attached */ + @Override + @NonNull public BrightnessSliderController create( Context context, @Nullable ViewGroup viewRoot) { @@ -345,7 +363,7 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV } /** Get the layout to inflate based on what slider to use */ - private int getLayout() { + public int getLayout() { return R.layout.quick_settings_brightness_dialog; } } diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java index a39d25a5ef30..550ac62c0bde 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java @@ -43,12 +43,12 @@ import java.util.Collections; public class BrightnessSliderView extends FrameLayout { @NonNull - private ToggleSeekBar mSlider; + protected ToggleSeekBar mSlider; private DispatchTouchEventListener mListener; private Gefingerpoken mOnInterceptListener; @Nullable - private Drawable mProgressDrawable; - private float mScale = 1f; + protected Drawable mProgressDrawable; + protected float mScale = 1f; private final Rect mSystemGestureExclusionRect = new Rect(); public BrightnessSliderView(Context context) { @@ -65,6 +65,10 @@ public class BrightnessSliderView extends FrameLayout { super.onFinishInflate(); setLayerType(LAYER_TYPE_HARDWARE, null); + initBrightnessViewComponents(); + } + + protected void initBrightnessViewComponents() { mSlider = requireViewById(R.id.slider); mSlider.setAccessibilityLabel(getContentDescription().toString()); setBoundaryOffset(); @@ -81,7 +85,7 @@ public class BrightnessSliderView extends FrameLayout { } } - private void setBoundaryOffset() { + protected void setBoundaryOffset() { // BrightnessSliderView uses hardware layer; if the background of its children exceed its // boundary, it'll be cropped. We need to expand its boundary so that the background of // ToggleSeekBar (i.e. the focus state) can be correctly rendered. @@ -131,7 +135,7 @@ public class BrightnessSliderView extends FrameLayout { * @param admin * @see ToggleSeekBar#setEnforcedAdmin */ - void setAdminBlocker(ToggleSeekBar.AdminBlocker blocker) { + protected void setAdminBlocker(ToggleSeekBar.AdminBlocker blocker) { mSlider.setAdminBlocker(blocker); } @@ -211,7 +215,7 @@ public class BrightnessSliderView extends FrameLayout { } } - private void applySliderScale() { + protected void applySliderScale() { if (mProgressDrawable != null) { final Rect r = mProgressDrawable.getBounds(); int height = (int) (mProgressDrawable.getIntrinsicHeight() * mScale); @@ -229,7 +233,7 @@ public class BrightnessSliderView extends FrameLayout { * Interface to attach a listener for {@link View#dispatchTouchEvent}. */ @FunctionalInterface - interface DispatchTouchEventListener { + public interface DispatchTouchEventListener { boolean onDispatchTouchEvent(MotionEvent ev); } } diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/ToggleSeekBar.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/ToggleSeekBar.java index c241f2165c8f..a0985fc61b07 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/ToggleSeekBar.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/ToggleSeekBar.java @@ -85,12 +85,12 @@ public class ToggleSeekBar extends SeekBar { } } - void setAdminBlocker(AdminBlocker blocker) { + public void setAdminBlocker(AdminBlocker blocker) { mAdminBlocker = blocker; setEnabled(blocker == null); } - interface AdminBlocker { + public interface AdminBlocker { boolean block(); } } diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/dagger/BrightnessSliderModule.kt b/packages/SystemUI/src/com/android/systemui/settings/brightness/dagger/BrightnessSliderModule.kt new file mode 100644 index 000000000000..fbe442eb4b5e --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/dagger/BrightnessSliderModule.kt @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.settings.brightness.dagger + +import com.android.systemui.settings.brightness.BrightnessController +import com.android.systemui.settings.brightness.BrightnessSliderController +import dagger.Binds +import dagger.Module + +@Module +abstract class BrightnessSliderModule { + + @Binds + abstract fun bindBrightnessSliderControllerFactory( + factory: BrightnessSliderController.BrightnessSliderControllerFactory + ): BrightnessSliderController.Factory + + @Binds + abstract fun bindBrightnessControllerFactory( + factory: BrightnessController.BrightnessControllerFactory + ): BrightnessController.Factory +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/settings/BrightnessSliderControllerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/settings/BrightnessSliderControllerKosmos.kt index 5d146fbffaca..3d45a51b9f3b 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/settings/BrightnessSliderControllerKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/settings/BrightnessSliderControllerKosmos.kt @@ -29,7 +29,7 @@ import com.android.systemui.util.time.systemClock /** This factory creates empty mocks. */ var Kosmos.brightnessSliderControllerFactory by Kosmos.Fixture<BrightnessSliderController.Factory> { - BrightnessSliderController.Factory( + BrightnessSliderController.BrightnessSliderControllerFactory( falsingManager, uiEventLogger, vibratorHelper, |