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

Commit 6e415b69 authored by Ruben Brunk's avatar Ruben Brunk Committed by Android (Google) Code Review
Browse files

Merge "Update LightsService to use low-persistence mode."

parents 9c844b13 8ad3f208
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -31,6 +31,11 @@ public abstract class Light {
     */
    public static final int BRIGHTNESS_MODE_SENSOR = 1;

    /**
     * Low-persistence light mode.
     */
    public static final int BRIGHTNESS_MODE_LOW_PERSISTENCE = 2;

    public abstract void setBrightness(int brightness);
    public abstract void setBrightness(int brightness, int brightnessMode);
    public abstract void setColor(int color);
+51 −2
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.server.lights;

import com.android.server.SystemService;
import com.android.server.vr.VrManagerInternal;
import com.android.server.vr.VrStateListener;

import android.content.Context;
import android.os.Handler;
@@ -72,6 +74,9 @@ public class LightsService extends SystemService {
        @Override
        public void pulse(int color, int onMS) {
            synchronized (this) {
                if (mBrightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) {
                    return;
                }
                if (mColor == 0 && !mFlashing) {
                    setLightLocked(color, LIGHT_FLASH_HARDWARE, onMS, 1000, BRIGHTNESS_MODE_USER);
                    mColor = 0;
@@ -87,6 +92,20 @@ public class LightsService extends SystemService {
            }
        }

        void enableLowPersistence() {
            synchronized(this) {
                setLightLocked(0, LIGHT_FLASH_NONE, 0, 0, BRIGHTNESS_MODE_LOW_PERSISTENCE);
                mLocked = true;
            }
        }

        void disableLowPersistence() {
            synchronized(this) {
                mLocked = false;
                setLightLocked(mLastColor, LIGHT_FLASH_NONE, 0, 0, mLastBrightnessMode);
            }
        }

        private void stopFlashing() {
            synchronized (this) {
                setLightLocked(mColor, LIGHT_FLASH_NONE, 0, 0, BRIGHTNESS_MODE_USER);
@@ -94,13 +113,17 @@ public class LightsService extends SystemService {
        }

        private void setLightLocked(int color, int mode, int onMS, int offMS, int brightnessMode) {
            if (color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS) {
            if (!mLocked && (color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS ||
                    mBrightnessMode != brightnessMode)) {
                if (DEBUG) Slog.v(TAG, "setLight #" + mId + ": color=#"
                        + Integer.toHexString(color));
                        + Integer.toHexString(color) + ": brightnessMode=" + brightnessMode);
                mLastColor = mColor;
                mColor = color;
                mMode = mode;
                mOnMS = onMS;
                mOffMS = offMS;
                mLastBrightnessMode = mBrightnessMode;
                mBrightnessMode = brightnessMode;
                Trace.traceBegin(Trace.TRACE_TAG_POWER, "setLight(" + mId + ", 0x"
                        + Integer.toHexString(color) + ")");
                try {
@@ -117,6 +140,10 @@ public class LightsService extends SystemService {
        private int mOnMS;
        private int mOffMS;
        private boolean mFlashing;
        private int mBrightnessMode;
        private int mLastBrightnessMode;
        private int mLastColor;
        private boolean mLocked;
    }

    public LightsService(Context context) {
@@ -134,6 +161,28 @@ public class LightsService extends SystemService {
        publishLocalService(LightsManager.class, mService);
    }

    @Override
    public void onBootPhase(int phase) {
        if (phase == PHASE_SYSTEM_SERVICES_READY) {
            getLocalService(VrManagerInternal.class).registerListener(mVrStateListener);
        }
    }

    private final VrStateListener mVrStateListener = new VrStateListener() {
        @Override
        public void onVrStateChanged(boolean enabled) {
            LightImpl l = mLights[LightsManager.LIGHT_ID_BACKLIGHT];
            if (enabled) {
                if (DEBUG) Slog.v(TAG, "VR mode enabled, setting brightness to low persistence");
                l.enableLowPersistence();

            } else {
                if (DEBUG) Slog.v(TAG, "VR mode disabled, resetting brightnes");
                l.disableLowPersistence();
            }
        }
    };

    private final LightsManager mService = new LightsManager() {
        @Override
        public Light getLight(int id) {
+20 −4
Original line number Diff line number Diff line
@@ -113,11 +113,27 @@ static void setLight_native(JNIEnv* /* env */, jobject /* clazz */, jlong ptr,
        return ;
    }

    uint32_t version = devices->lights[light]->common.version;

    memset(&state, 0, sizeof(light_state_t));

    if (brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) {
        if (light != LIGHT_INDEX_BACKLIGHT) {
            ALOGE("Cannot set low-persistence mode for non-backlight device.");
            return;
        }
        if (version < LIGHTS_DEVICE_API_VERSION_2_0) {
            // HAL impl has not been upgraded to support this.
            return;
        }
    } else {
        // Only set non-brightness settings when not in low-persistence mode
        state.color = colorARGB;
        state.flashMode = flashMode;
        state.flashOnMS = onMS;
        state.flashOffMS = offMS;
    }

    state.brightnessMode = brightnessMode;

    {