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

Commit 522e4994 authored by Steve Kondik's avatar Steve Kondik
Browse files

livedisplay: Fix issue where settings weren't applied

 * Make sure we have a looper before creating the observer.
 * Clarify the logic used for detecting hardware features.
 * Spend less time re-checking CMHW

Change-Id: I4d43e3946702221b86dd06e8c778c03f64e76481
parent e5c19170
Loading
Loading
Loading
Loading
+53 −65
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ public class LiveDisplayController {
    private final TwilightManager mTwilightManager;
    private boolean mSunset = false;

    private final SettingsObserver mObserver = new SettingsObserver();
    private final SettingsObserver mObserver;

    private ValueAnimator mAnimator;

@@ -119,20 +119,6 @@ public class LiveDisplayController {
        mTwilightManager = LocalServices.getService(TwilightManager.class);
        mTwilightManager.registerListener(mTwilightListener, mHandler);


        if (mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_SUNLIGHT_ENHANCEMENT)) {
            mOutdoorMode = mCmHardwareManager.get(CmHardwareManager.FEATURE_SUNLIGHT_ENHANCEMENT);
        }

        if (mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_COLOR_ENHANCEMENT)) {
            mColorEnhancement =
                    mCmHardwareManager.get(CmHardwareManager.FEATURE_COLOR_ENHANCEMENT);
        }

        if (mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_ADAPTIVE_BACKLIGHT)) {
            mLowPower = mCmHardwareManager.get(CmHardwareManager.FEATURE_ADAPTIVE_BACKLIGHT);
        }

        mDefaultDayTemperature = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_dayColorTemperature);
        mDefaultNightTemperature = mContext.getResources().getInteger(
@@ -147,7 +133,25 @@ public class LiveDisplayController {
                -3,
                UserHandle.USER_CURRENT);

        mUseOutdoorMode =
                mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_SUNLIGHT_ENHANCEMENT);

        mUseLowPower =
                mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_ADAPTIVE_BACKLIGHT);
        if (mUseLowPower) {
            mLowPower = mCmHardwareManager.get(CmHardwareManager.FEATURE_ADAPTIVE_BACKLIGHT);
        }

        mUseColorEnhancement =
                mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_COLOR_ENHANCEMENT);
        if (mUseColorEnhancement) {
            mColorEnhancement =
                mCmHardwareManager.get(CmHardwareManager.FEATURE_COLOR_ENHANCEMENT);
        }

        updateSettings();

        mObserver = new SettingsObserver();
        mObserver.register(true);

        PowerManagerInternal pmi = LocalServices.getService(PowerManagerInternal.class);
@@ -168,30 +172,6 @@ public class LiveDisplayController {
                Settings.System.DISPLAY_TEMPERATURE_MODE,
                MODE_OFF,
                UserHandle.USER_CURRENT);
        if (!mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_SUNLIGHT_ENHANCEMENT)) {
            mUseOutdoorMode = false;
        } else {
            mUseOutdoorMode = Settings.System.getIntForUser(mContext.getContentResolver(),
                    Settings.System.DISPLAY_AUTO_OUTDOOR_MODE,
                    1,
                    UserHandle.USER_CURRENT) == 1;
        }
        if (!mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_ADAPTIVE_BACKLIGHT)) {
            mUseLowPower = false;
        } else {
            mUseLowPower = Settings.System.getIntForUser(mContext.getContentResolver(),
                    Settings.System.DISPLAY_LOW_POWER,
                    1,
                    UserHandle.USER_CURRENT) == 1;
        }
        if (!mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_COLOR_ENHANCEMENT)) {
            mColorEnhancement = false;
        } else {
            mColorEnhancement = Settings.System.getIntForUser(mContext.getContentResolver(),
                    Settings.System.DISPLAY_COLOR_ENHANCE,
                    1,
                    UserHandle.USER_CURRENT) == 1;
        }

        // Clear the hint forever
        if (mMode != MODE_OFF) {
@@ -358,9 +338,18 @@ public class LiveDisplayController {
     * TODO: Use the camera or RGB sensor to determine if it's really sunlight
     */
    private synchronized void updateOutdoorMode(TwilightState twilight) {
        if (!mUseOutdoorMode) {
            return;
        }

        boolean value = Settings.System.getIntForUser(mContext.getContentResolver(),
                Settings.System.DISPLAY_AUTO_OUTDOOR_MODE,
                1,
                UserHandle.USER_CURRENT) == 1;

        boolean enabled = !mLowPerformance &&
                ((mMode == MODE_OUTDOOR) ||
                 (mUseOutdoorMode && mMode == MODE_AUTO &&
                 (value && mMode == MODE_AUTO &&
                  twilight != null && !twilight.isNight() &&
                  mCurrentLux > mDefaultOutdoorLux));

@@ -376,9 +365,18 @@ public class LiveDisplayController {
     * Color enhancement is optional, but can look bad with night mode
     */
    private synchronized void updateColorEnhancement(TwilightState twilight) {
        boolean enabled = !mLowPerformance && (mUseColorEnhancement &&
        if (!mUseColorEnhancement) {
            return;
        }

        boolean value = Settings.System.getIntForUser(mContext.getContentResolver(),
                Settings.System.DISPLAY_COLOR_ENHANCE,
                1,
                UserHandle.USER_CURRENT) == 1;

        boolean enabled = !mLowPerformance && value &&
                !(mMode == MODE_NIGHT ||
                 (mMode == MODE_AUTO && twilight != null && twilight.isNight())));
                 (mMode == MODE_AUTO && twilight != null && twilight.isNight()));

        if (enabled == mColorEnhancement) {
            return;
@@ -392,7 +390,16 @@ public class LiveDisplayController {
     * Adaptive backlight / low power mode. Turn it off when under very bright light.
     */
    private synchronized void updateLowPowerMode() {
        boolean enabled = mUseLowPower && mCurrentLux < mDefaultOutdoorLux;
        if (!mUseLowPower) {
            return;
        }

        boolean value = Settings.System.getIntForUser(mContext.getContentResolver(),
                Settings.System.DISPLAY_LOW_POWER,
                1,
                UserHandle.USER_CURRENT) == 1;

        boolean enabled = value && (mCurrentLux < mDefaultOutdoorLux);

        if (enabled == mLowPower) {
            return;
@@ -582,23 +589,10 @@ public class LiveDisplayController {
    }

    public void dump(PrintWriter pw) {
        boolean hasSunlightEnhancement =
                mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_SUNLIGHT_ENHANCEMENT);
        boolean hasColorEnhancement =
                mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_COLOR_ENHANCEMENT);
        boolean hasAdaptiveBacklight =
                mCmHardwareManager.isSupported(CmHardwareManager.FEATURE_ADAPTIVE_BACKLIGHT);

        pw.println();
        pw.println("LiveDisplay Controller Configuration:");
        pw.println("  mDayTemperature=" + mDayTemperature);
        pw.println("  mNightTemperature=" + mNightTemperature);
        pw.println("  mUseOutdoorMode=" +
                (hasSunlightEnhancement ? mUseOutdoorMode : "not available"));
        pw.println("  mUseColorEnhancement=" +
                (hasColorEnhancement ? mUseColorEnhancement : "not available"));
        pw.println("  mUseLowPower=" +
                (hasAdaptiveBacklight ? mUseLowPower : "not available"));
        pw.println();
        pw.println("LiveDisplay Controller State:");
        pw.println("  mMode=" + (mLowPerformance ? "disabled in powersave mode" : mMode));
@@ -607,15 +601,9 @@ public class LiveDisplayController {
        pw.println("  mColorAdjustment=[r: " + mColorAdjustment[0] + " g:" + mColorAdjustment[1] +
                " b:" + mColorAdjustment[2] + "]");
        pw.println("  mRGB=[r:" + mRGB[0] + " g:" + mRGB[1] + " b:" + mRGB[2] + "]");
        if (hasSunlightEnhancement) {
            pw.println("  mOutdoorMode=" + mOutdoorMode);
        }
        if (hasColorEnhancement) {
            pw.println("  mColorEnhancement=" + mColorEnhancement);
        }
        if (hasAdaptiveBacklight) {
            pw.println("  mLowPower=" + mLowPower);
        }
        pw.println("  mOutdoorMode=" + (mUseOutdoorMode ? mOutdoorMode : "N/A"));
        pw.println("  mColorEnhancement=" + (mUseColorEnhancement ? mColorEnhancement : "N/A"));
        pw.println("  mLowPower=" + (mUseLowPower ? mLowPower : "N/A"));
    }

    /**