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

Commit 045de63a authored by Adrian Roos's avatar Adrian Roos Committed by android-build-merger
Browse files

Merge "AOD: Refactor doze brigthness controllers, add AOD auto brightness...

Merge "AOD: Refactor doze brigthness controllers, add AOD auto brightness support" into oc-dr1-dev am: 857b0ff5
am: 0a65f272

Change-Id: Ie0980604e89d8dde45b4e11ce8dd66f0a9f9c669
parents 645482f2 0a65f272
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -247,6 +247,11 @@
    -->
    -->
    <string name="doze_pickup_subtype_performs_proximity_check"></string>
    <string name="doze_pickup_subtype_performs_proximity_check"></string>


    <!-- Type of a sensor that provides a low-power estimate of the desired display
         brightness, suitable to listen to while the device is asleep (e.g. during
         always-on display) -->
    <string name="doze_brightness_sensor_type" translatable="false"></string>

    <!-- Doze: pulse parameter - how long does it take to fade in? -->
    <!-- Doze: pulse parameter - how long does it take to fade in? -->
    <integer name="doze_pulse_duration_in">900</integer>
    <integer name="doze_pulse_duration_in">900</integer>


+18 −5
Original line number Original line Diff line number Diff line
@@ -19,10 +19,12 @@ package com.android.systemui.doze;
import android.app.AlarmManager;
import android.app.AlarmManager;
import android.app.Application;
import android.app.Application;
import android.content.Context;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.hardware.SensorManager;
import android.os.Handler;
import android.os.Handler;


import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.systemui.R;
import com.android.systemui.SystemUIApplication;
import com.android.systemui.SystemUIApplication;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.wakelock.DelayedWakeLock;
import com.android.systemui.util.wakelock.DelayedWakeLock;
@@ -46,21 +48,32 @@ public class DozeFactory {
        WakeLock wakeLock = new DelayedWakeLock(handler,
        WakeLock wakeLock = new DelayedWakeLock(handler,
                WakeLock.createPartial(context, "Doze"));
                WakeLock.createPartial(context, "Doze"));


        DozeMachine machine = new DozeMachine(
        DozeMachine.Service wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(
                DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(
                DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params);
                        DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params),
        DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock);
                config,
                wakeLock);
        machine.setParts(new DozeMachine.Part[]{
        machine.setParts(new DozeMachine.Part[]{
                new DozePauser(handler, machine, alarmManager),
                new DozePauser(handler, machine, alarmManager),
                createDozeTriggers(context, sensorManager, host, alarmManager, config, params,
                createDozeTriggers(context, sensorManager, host, alarmManager, config, params,
                        handler, wakeLock, machine),
                        handler, wakeLock, machine),
                createDozeUi(context, host, wakeLock, machine, handler, alarmManager),
                createDozeUi(context, host, wakeLock, machine, handler, alarmManager),
                createDozeScreenState(wrappedService),
                createDozeScreenBrightness(context, wrappedService, sensorManager, handler),
        });
        });


        return machine;
        return machine;
    }
    }


    private DozeMachine.Part createDozeScreenState(DozeMachine.Service service) {
        return new DozeScreenState(service);
    }

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

    private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager,
    private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager,
            DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config,
            DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config,
            DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) {
            DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) {
+31 −8
Original line number Original line Diff line number Diff line
@@ -226,7 +226,6 @@ public class DozeMachine {


        updatePulseReason(newState, oldState, pulseReason);
        updatePulseReason(newState, oldState, pulseReason);
        performTransitionOnComponents(oldState, newState);
        performTransitionOnComponents(oldState, newState);
        updateScreenState(newState);
        updateWakeLockState(newState);
        updateWakeLockState(newState);


        resolveIntermediateState(newState);
        resolveIntermediateState(newState);
@@ -312,13 +311,6 @@ public class DozeMachine {
        }
        }
    }
    }


    private void updateScreenState(State newState) {
        int state = newState.screenState();
        if (state != Display.STATE_UNKNOWN) {
            mDozeService.setDozeScreenState(state);
        }
    }

    private void resolveIntermediateState(State state) {
    private void resolveIntermediateState(State state) {
        switch (state) {
        switch (state) {
            case INITIALIZED:
            case INITIALIZED:
@@ -365,5 +357,36 @@ public class DozeMachine {


        /** Request waking up. */
        /** Request waking up. */
        void requestWakeUp();
        void requestWakeUp();

        /** Set screen brightness */
        void setDozeScreenBrightness(int brightness);

        class Delegate implements Service {
            private final Service mDelegate;

            public Delegate(Service delegate) {
                mDelegate = delegate;
            }

            @Override
            public void finish() {
                mDelegate.finish();
            }

            @Override
            public void setDozeScreenState(int state) {
                mDelegate.setDozeScreenState(state);
            }

            @Override
            public void requestWakeUp() {
                mDelegate.requestWakeUp();
            }

            @Override
            public void setDozeScreenBrightness(int brightness) {
                mDelegate.setDozeScreenBrightness(brightness);
            }
        }
    }
    }
}
}
+92 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2017 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.doze;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Handler;

/**
 * Controls the screen brightness when dozing.
 */
public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener {
    private final Context mContext;
    private final DozeMachine.Service mDozeService;
    private final Handler mHandler;
    private final SensorManager mSensorManager;
    private final Sensor mLightSensor;
    private boolean mRegistered;

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

    @Override
    public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
        switch (newState) {
            case INITIALIZED:
                resetBrightnessToDefault();
                break;
            case DOZE_AOD:
            case DOZE_REQUEST_PULSE:
                setLightSensorEnabled(true);
                break;
            case DOZE:
            case DOZE_AOD_PAUSED:
                setLightSensorEnabled(false);
                resetBrightnessToDefault();
                break;
            case FINISH:
                setLightSensorEnabled(false);
                break;
        }
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (mRegistered) {
            mDozeService.setDozeScreenBrightness(Math.max(1, (int) event.values[0]));
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    private void resetBrightnessToDefault() {
        mDozeService.setDozeScreenBrightness(mContext.getResources().getInteger(
                com.android.internal.R.integer.config_screenBrightnessDoze));
    }

    private void setLightSensorEnabled(boolean enabled) {
        if (enabled && !mRegistered && mLightSensor != null) {
            mRegistered = mSensorManager.registerListener(this, mLightSensor,
                    SensorManager.SENSOR_DELAY_NORMAL, mHandler);
        } else if (!enabled && mRegistered) {
            mSensorManager.unregisterListener(this);
            mRegistered = false;
        }
    }
}
+39 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2017 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.doze;

import android.content.Context;
import android.view.Display;

/**
 * Controls the screen when dozing.
 */
public class DozeScreenState implements DozeMachine.Part {
    private final DozeMachine.Service mDozeService;

    public DozeScreenState(DozeMachine.Service service) {
        mDozeService = service;
    }

    @Override
    public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
        int screenState = newState.screenState();
        if (screenState != Display.STATE_UNKNOWN) {
            mDozeService.setDozeScreenState(screenState);
        }
    }
}
Loading