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

Commit b2107c9b authored by Adrian Roos's avatar Adrian Roos Committed by Android (Google) Code Review
Browse files

Merge "AOD: Add support for dimming in software" into oc-dr1-dev

parents 5a800cf0 c8e29e78
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -277,6 +277,18 @@
        <item>28</item> <!-- 4: SUN -->
    </integer-array>

    <!-- Doze: Table that translates sensor values from the doze_brightness_sensor_type sensor
               to an opacity value for a black scrim that is overlayed in AOD1.
               Valid range is from 0 (transparent) to 255 (opaque).
               -1 means keeping the current opacity. -->
    <integer-array name="config_doze_brightness_sensor_to_scrim_opacity">
        <item>-1</item> <!-- 0: OFF -->
        <item>0</item> <!-- 1: NIGHT -->
        <item>0</item> <!-- 2: LOW -->
        <item>0</item> <!-- 3: HIGH -->
        <item>0</item> <!-- 4: SUN -->
    </integer-array>

    <!-- Doze: whether the double tap sensor reports 2D touch coordinates -->
    <bool name="doze_double_tap_reports_touch_coordinates">false</bool>

+4 −3
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ public class DozeFactory {
                        handler, wakeLock, machine),
                createDozeUi(context, host, wakeLock, machine, handler, alarmManager),
                createDozeScreenState(wrappedService),
                createDozeScreenBrightness(context, wrappedService, sensorManager, handler),
                createDozeScreenBrightness(context, wrappedService, sensorManager, host, handler),
        });

        return machine;
@@ -76,10 +76,11 @@ public class DozeFactory {
    }

    private DozeMachine.Part createDozeScreenBrightness(Context context,
            DozeMachine.Service service, SensorManager sensorManager, Handler handler) {
            DozeMachine.Service service, SensorManager sensorManager, DozeHost host,
            Handler handler) {
        Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
                context.getString(R.string.doze_brightness_sensor_type));
        return new DozeScreenBrightness(context, service, sensorManager, sensor, handler);
        return new DozeScreenBrightness(context, service, sensorManager, sensor, host, handler);
    }

    private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager,
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ public interface DozeHost {

    void onDoubleTap(float x, float y);

    default void setAodDimmingScrim(float scrimOpacity) {}
    void setDozeScreenBrightness(int value);

    void onIgnoreTouchWhilePulsing(boolean ignore);
+21 −2
Original line number Diff line number Diff line
@@ -32,22 +32,28 @@ import com.android.systemui.R;
public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener {
    private final Context mContext;
    private final DozeMachine.Service mDozeService;
    private final DozeHost mDozeHost;
    private final Handler mHandler;
    private final SensorManager mSensorManager;
    private final Sensor mLightSensor;
    private final int[] mSensorToBrightness;
    private final int[] mSensorToScrimOpacity;
    private boolean mRegistered;

    public DozeScreenBrightness(Context context, DozeMachine.Service service,
            SensorManager sensorManager, Sensor lightSensor, Handler handler) {
            SensorManager sensorManager, Sensor lightSensor, DozeHost host,
            Handler handler) {
        mContext = context;
        mDozeService = service;
        mSensorManager = sensorManager;
        mLightSensor = lightSensor;
        mDozeHost = host;
        mHandler = handler;

        mSensorToBrightness = context.getResources().getIntArray(
                R.array.config_doze_brightness_sensor_to_brightness);
        mSensorToScrimOpacity = context.getResources().getIntArray(
                R.array.config_doze_brightness_sensor_to_scrim_opacity);
    }

    @Override
@@ -74,11 +80,24 @@ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListen
    @Override
    public void onSensorChanged(SensorEvent event) {
        if (mRegistered) {
            int brightness = computeBrightness((int) event.values[0]);
            int sensorValue = (int) event.values[0];
            int brightness = computeBrightness(sensorValue);
            if (brightness > 0) {
                mDozeService.setDozeScreenBrightness(brightness);
            }

            int scrimOpacity = computeScrimOpacity(sensorValue);
            if (scrimOpacity >= 0) {
                mDozeHost.setAodDimmingScrim(scrimOpacity / 255f);
            }
        }
    }

    private int computeScrimOpacity(int sensorValue) {
        if (sensorValue < 0 || sensorValue >= mSensorToScrimOpacity.length) {
            return -1;
        }
        return mSensorToScrimOpacity[sensorValue];
    }

    private int computeBrightness(int sensorValue) {
+20 −3
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@ public class DozeScrimController {
    private boolean mWakeAndUnlocking;
    private boolean mFullyPulsing;

    private float mAodFrontScrimOpacity = 0;

    public DozeScrimController(ScrimController scrimController, Context context) {
        mContext = context;
        mScrimController = scrimController;
@@ -70,7 +72,8 @@ public class DozeScrimController {
            mDozingAborted = false;
            abortAnimations();
            mScrimController.setDozeBehindAlpha(1f);
            mScrimController.setDozeInFrontAlpha(mDozeParameters.getAlwaysOn() ? 0f : 1f);
            mScrimController.setDozeInFrontAlpha(
                    mDozeParameters.getAlwaysOn() ? mAodFrontScrimOpacity : 1f);
        } else {
            cancelPulsing();
            if (animate) {
@@ -88,6 +91,19 @@ public class DozeScrimController {
        }
    }

    /**
     * Set the opacity of the front scrim when showing AOD1
     *
     * Used to emulate lower brightness values than the hardware supports natively.
     */
    public void setAodDimmingScrim(float scrimOpacity) {
        mAodFrontScrimOpacity = scrimOpacity;
        if (mDozing && !isPulsing() && !mDozingAborted && !mWakeAndUnlocking
                && mDozeParameters.getAlwaysOn()) {
            mScrimController.setDozeInFrontAlpha(mAodFrontScrimOpacity);
        }
    }

    public void setWakeAndUnlocking() {
        // Immediately abort the doze scrims in case of wake-and-unlock
        // for pulsing so the Keyguard fade-out animation scrim can take over.
@@ -126,7 +142,8 @@ public class DozeScrimController {
        if (mDozing && !mWakeAndUnlocking) {
            mScrimController.setDozeBehindAlpha(1f);
            mScrimController.setDozeInFrontAlpha(
                    mDozeParameters.getAlwaysOn() && !mDozingAborted ? 0f : 1f);
                    mDozeParameters.getAlwaysOn() && !mDozingAborted ?
                            mAodFrontScrimOpacity : 1f);
        }
    }

@@ -337,7 +354,7 @@ public class DozeScrimController {
            // Signal that the pulse is all finished so we can turn the screen off now.
            pulseFinished();
            if (mDozeParameters.getAlwaysOn()) {
                mScrimController.setDozeInFrontAlpha(0);
                mScrimController.setDozeInFrontAlpha(mAodFrontScrimOpacity);
            }
        }
    };
Loading