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

Commit 8ead6b4f authored by dianlujitao's avatar dianlujitao Committed by Luca Stefani
Browse files

LiveDisplayTile: Enable for outdoor mode and skip night display on HWC2

Change-Id: I00ab654033827388f8063eafb98a89315cb47aa9

LiveDisplayTile: Refresh state after livedisplay initialization

 * SystemUI starts earlier than LiveDisplayConfig initialized, so
   there's no easy way to determin whether to make it available.
 * Instead, receive broadcast incicating initialization completed from
   LiveDisplayService and gray out on desire.
 * Outdoor mode gets fixed by the way.

Change-Id: I55cea14c9248da1186e6c0c1b9e719a2bcf5444d

LiveDisplayTile: Remove tile if unavailable

Change-Id: Ic05ff73c57d3f02cd2752acb1b1df2564c0d4b6b

Change-Id: I311275ea6bc1ad31aa5d3962c9532d1d93fb2283
parent c856333c
Loading
Loading
Loading
Loading
+52 −14
Original line number Original line Diff line number Diff line
@@ -20,17 +20,20 @@ package com.android.systemui.qs.tiles;
import static lineageos.hardware.LiveDisplayManager.FEATURE_MANAGED_OUTDOOR_MODE;
import static lineageos.hardware.LiveDisplayManager.FEATURE_MANAGED_OUTDOOR_MODE;
import static lineageos.hardware.LiveDisplayManager.MODE_AUTO;
import static lineageos.hardware.LiveDisplayManager.MODE_AUTO;
import static lineageos.hardware.LiveDisplayManager.MODE_DAY;
import static lineageos.hardware.LiveDisplayManager.MODE_DAY;
import static lineageos.hardware.LiveDisplayManager.MODE_NIGHT;
import static lineageos.hardware.LiveDisplayManager.MODE_OFF;
import static lineageos.hardware.LiveDisplayManager.MODE_OFF;
import static lineageos.hardware.LiveDisplayManager.MODE_OUTDOOR;
import static lineageos.hardware.LiveDisplayManager.MODE_OUTDOOR;


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.database.ContentObserver;
import android.database.ContentObserver;
import android.hardware.display.ColorDisplayManager;
import android.hardware.display.ColorDisplayManager;
import android.os.Handler;
import android.os.Handler;
import android.os.UserHandle;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.service.quicksettings.Tile;


import com.android.internal.util.ArrayUtils;
import com.android.internal.util.ArrayUtils;
@@ -62,9 +65,11 @@ public class LiveDisplayTile extends QSTileImpl<LiveDisplayState> {


    private boolean mListening;
    private boolean mListening;


    private int mDayTemperature;
    private int mDayTemperature = -1;


    private final boolean mOutdoorModeAvailable;
    private final boolean mNightDisplayAvailable;
    private boolean mOutdoorModeAvailable = true;
    private boolean mReceiverRegistered;


    private final LiveDisplayManager mLiveDisplay;
    private final LiveDisplayManager mLiveDisplay;


@@ -73,7 +78,7 @@ public class LiveDisplayTile extends QSTileImpl<LiveDisplayState> {
    @Inject
    @Inject
    public LiveDisplayTile(QSHost host) {
    public LiveDisplayTile(QSHost host) {
        super(host);
        super(host);

        mNightDisplayAvailable = ColorDisplayManager.isNightDisplayAvailable(mContext);
        Resources res = mContext.getResources();
        Resources res = mContext.getResources();
        TypedArray typedArray = res.obtainTypedArray(R.array.live_display_drawables);
        TypedArray typedArray = res.obtainTypedArray(R.array.live_display_drawables);
        mEntryIconRes = new int[typedArray.length()];
        mEntryIconRes = new int[typedArray.length()];
@@ -85,17 +90,40 @@ public class LiveDisplayTile extends QSTileImpl<LiveDisplayState> {
        updateEntries();
        updateEntries();


        mLiveDisplay = LiveDisplayManager.getInstance(mContext);
        mLiveDisplay = LiveDisplayManager.getInstance(mContext);
        if (!updateConfig()) {
            mContext.registerReceiver(mReceiver, new IntentFilter(
                    lineageos.content.Intent.ACTION_INITIALIZE_LIVEDISPLAY));
            mReceiverRegistered = true;
        }

        mObserver = new LiveDisplayObserver(mHandler);
        mObserver.startObserving();
    }

    @Override
    protected void handleDestroy() {
        super.handleDestroy();
        unregisterReceiver();
    }

    private void unregisterReceiver() {
        if (mReceiverRegistered) {
            mContext.unregisterReceiver(mReceiver);
            mReceiverRegistered = false;
        }
    }

    private boolean updateConfig() {
        if (mLiveDisplay.getConfig() != null) {
        if (mLiveDisplay.getConfig() != null) {
            mOutdoorModeAvailable = mLiveDisplay.getConfig().hasFeature(MODE_OUTDOOR) &&
            mOutdoorModeAvailable = mLiveDisplay.getConfig().hasFeature(MODE_OUTDOOR) &&
                    !mLiveDisplay.getConfig().hasFeature(FEATURE_MANAGED_OUTDOOR_MODE);
                    !mLiveDisplay.getConfig().hasFeature(FEATURE_MANAGED_OUTDOOR_MODE);
            mDayTemperature = mLiveDisplay.getDayColorTemperature();
            mDayTemperature = mLiveDisplay.getDayColorTemperature();
        } else {
            if (!isAvailable()) {
            mOutdoorModeAvailable = false;
                mHost.removeTile(getTileSpec());
            mDayTemperature = -1;
            }
            }

            return true;
        mObserver = new LiveDisplayObserver(mHandler);
        }
        mObserver.startObserving();
        return false;
    }
    }


    private void updateEntries() {
    private void updateEntries() {
@@ -109,7 +137,7 @@ public class LiveDisplayTile extends QSTileImpl<LiveDisplayState> {


    @Override
    @Override
    public boolean isAvailable() {
    public boolean isAvailable() {
        return !ColorDisplayManager.isNightDisplayAvailable(mContext);
        return !mNightDisplayAvailable || mOutdoorModeAvailable;
    }
    }


    @Override
    @Override
@@ -187,10 +215,12 @@ public class LiveDisplayTile extends QSTileImpl<LiveDisplayState> {


        while (true) {
        while (true) {
            nextMode = Integer.valueOf(mValues[next]);
            nextMode = Integer.valueOf(mValues[next]);
            // Skip outdoor mode if it's unsupported, and skip the day setting
            // Skip outdoor mode if it's unsupported, skip the day setting
            // if it's the same as the off setting
            // if it's the same as the off setting, and skip night display
            // on HWC2
            if ((!mOutdoorModeAvailable && nextMode == MODE_OUTDOOR) ||
            if ((!mOutdoorModeAvailable && nextMode == MODE_OUTDOOR) ||
                    (mDayTemperature == OFF_TEMPERATURE && nextMode == MODE_DAY)) {
                    (mDayTemperature == OFF_TEMPERATURE && nextMode == MODE_DAY) ||
                    (mNightDisplayAvailable && (nextMode == MODE_DAY || nextMode == MODE_NIGHT))) {
                next++;
                next++;
                if (next >= mValues.length) {
                if (next >= mValues.length) {
                    next = 0;
                    next = 0;
@@ -227,4 +257,12 @@ public class LiveDisplayTile extends QSTileImpl<LiveDisplayState> {
            mContext.getContentResolver().unregisterContentObserver(this);
            mContext.getContentResolver().unregisterContentObserver(this);
        }
        }
    }
    }

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            updateConfig();
            unregisterReceiver();
        }
    };
}
}