Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2484b2cb authored by Vadym Omelnytskyi's avatar Vadym Omelnytskyi
Browse files

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
parent e78f35a1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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,
+27 −18
Original line number Diff line number Diff line
@@ -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);
    }

+28 −10
Original line number Diff line number Diff line
@@ -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,10 +249,7 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV
        return mView.isVisibleToUser();
    }

    private final SeekBar.OnSeekBarChangeListener mSeekListener =
            new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    protected void handleSliderProgressChange(SeekBar seekBar, int progress, boolean fromUser) {
        if (mListener != null) {
            mListener.onChanged(mTracking, progress, false);
            if (fromUser) {
@@ -259,6 +258,13 @@ public class BrightnessSliderController extends ViewController<BrightnessSliderV
        }
    }

    private final SeekBar.OnSeekBarChangeListener mSeekListener =
            new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            handleSliderProgressChange(seekBar, progress, fromUser);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            mTracking = true;
@@ -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;
        }
    }
+11 −7
Original line number Diff line number Diff line
@@ -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);
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -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();
    }
}
Loading