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

Commit 9cac5ffa authored by Jason Monk's avatar Jason Monk
Browse files

Fixup tinting for keyguard status bar

 - Tint all the things!
 - Simplify onOverlayChangeds
 - Probably some other stuff

Test: manual
Change-Id: I280c60c56e32f3f8c761da95db7737cf6cfcb5bd
Fixes: 62220433
parent d47fa266
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -346,7 +346,7 @@ public class CarStatusBar extends StatusBar implements
     * changes.
     * changes.
     */
     */
    @Override
    @Override
    protected void onDensityOrFontScaleChanged() {
    public void onDensityOrFontScaleChanged() {
        super.onDensityOrFontScaleChanged();
        super.onDensityOrFontScaleChanged();
        mController.onDensityOrFontScaleChanged();
        mController.onDensityOrFontScaleChanged();


+3 −16
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@ package com.android.systemui.statusbar.phone;


import android.content.Context;
import android.content.Context;
import android.content.om.IOverlayManager;
import android.content.om.IOverlayManager;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager;
@@ -32,22 +33,14 @@ public class ConfigurationControllerImpl implements ConfigurationController,
        ConfigurationChangedReceiver {
        ConfigurationChangedReceiver {


    private final ArrayList<ConfigurationListener> mListeners = new ArrayList<>();
    private final ArrayList<ConfigurationListener> mListeners = new ArrayList<>();
    private final IOverlayManager mOverlayManager;
    private final Configuration mLastConfig = new Configuration();
    private int mDensity;
    private int mDensity;
    private float mFontScale;
    private float mFontScale;
    private Map mActiveOverlays;


    public ConfigurationControllerImpl(Context context) {
    public ConfigurationControllerImpl(Context context) {
        Configuration currentConfig = context.getResources().getConfiguration();
        Configuration currentConfig = context.getResources().getConfiguration();
        mOverlayManager = IOverlayManager.Stub.asInterface(
                ServiceManager.getService(Context.OVERLAY_SERVICE));
        mFontScale = currentConfig.fontScale;
        mFontScale = currentConfig.fontScale;
        mDensity = currentConfig.densityDpi;
        mDensity = currentConfig.densityDpi;
        try {
            mActiveOverlays = mOverlayManager.getAllOverlays(UserHandle.getCallingUserId());
        } catch (RemoteException e) {
            mActiveOverlays = new HashMap();
        }
    }
    }


    @Override
    @Override
@@ -72,19 +65,13 @@ public class ConfigurationControllerImpl implements ConfigurationController,
            mFontScale = fontScale;
            mFontScale = fontScale;
        }
        }


        try {
        if ((mLastConfig.updateFrom(newConfig) & ActivityInfo.CONFIG_ASSETS_PATHS) != 0) {
            Map activeOverlays = mOverlayManager.getAllOverlays(UserHandle.getCallingUserId());
            if (!mActiveOverlays.equals(activeOverlays)) {
                mActiveOverlays = activeOverlays;
                listeners.forEach(l -> {
                listeners.forEach(l -> {
                    if (mListeners.contains(l)) {
                    if (mListeners.contains(l)) {
                        l.onOverlayChanged();
                        l.onOverlayChanged();
                    }
                    }
                });
                });
        }
        }
        } catch (RemoteException e) {
            e.rethrowAsRuntimeException();
        }
    }
    }


    @Override
    @Override
+31 −1
Original line number Original line Diff line number Diff line
@@ -22,23 +22,31 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.util.TypedValue;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.TextView;


import com.android.internal.statusbar.StatusBarIcon;
import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.Dependency;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QSPanel;
import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager;
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener;
import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener;
@@ -48,7 +56,7 @@ import com.android.systemui.statusbar.policy.UserSwitcherController;
 * The header group on Keyguard.
 * The header group on Keyguard.
 */
 */
public class KeyguardStatusBarView extends RelativeLayout
public class KeyguardStatusBarView extends RelativeLayout
        implements BatteryStateChangeCallback, OnUserInfoChangedListener {
        implements BatteryStateChangeCallback, OnUserInfoChangedListener, ConfigurationListener {


    private boolean mBatteryCharging;
    private boolean mBatteryCharging;
    private boolean mKeyguardUserSwitcherShowing;
    private boolean mKeyguardUserSwitcherShowing;
@@ -67,6 +75,7 @@ public class KeyguardStatusBarView extends RelativeLayout
    private int mSystemIconsSwitcherHiddenExpandedMargin;
    private int mSystemIconsSwitcherHiddenExpandedMargin;
    private int mSystemIconsBaseMargin;
    private int mSystemIconsBaseMargin;
    private View mSystemIconsContainer;
    private View mSystemIconsContainer;
    private TintedIconManager mIconManager;


    public KeyguardStatusBarView(Context context, AttributeSet attrs) {
    public KeyguardStatusBarView(Context context, AttributeSet attrs) {
        super(context, attrs);
        super(context, attrs);
@@ -207,12 +216,18 @@ public class KeyguardStatusBarView extends RelativeLayout
        mUserSwitcherController = Dependency.get(UserSwitcherController.class);
        mUserSwitcherController = Dependency.get(UserSwitcherController.class);
        mMultiUserSwitch.setUserSwitcherController(mUserSwitcherController);
        mMultiUserSwitch.setUserSwitcherController(mUserSwitcherController);
        userInfoController.reloadUserInfo();
        userInfoController.reloadUserInfo();
        Dependency.get(ConfigurationController.class).addCallback(this);
        mIconManager = new TintedIconManager(findViewById(R.id.statusIcons));
        Dependency.get(StatusBarIconController.class).addIconGroup(mIconManager);
        onOverlayChanged();
    }
    }


    @Override
    @Override
    protected void onDetachedFromWindow() {
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        super.onDetachedFromWindow();
        Dependency.get(UserInfoController.class).removeCallback(this);
        Dependency.get(UserInfoController.class).removeCallback(this);
        Dependency.get(StatusBarIconController.class).removeIconGroup(mIconManager);
        Dependency.get(ConfigurationController.class).removeCallback(this);
    }
    }


    @Override
    @Override
@@ -321,5 +336,20 @@ public class KeyguardStatusBarView extends RelativeLayout
        @ColorInt int textColor = Utils.getColorAttr(mContext, R.attr.bgProtectTextColor);
        @ColorInt int textColor = Utils.getColorAttr(mContext, R.attr.bgProtectTextColor);
        mCarrierLabel.setTextColor(textColor);
        mCarrierLabel.setTextColor(textColor);
        mBatteryView.setFillColor(textColor);
        mBatteryView.setFillColor(textColor);
        mIconManager.setTint(textColor);

        float intensity = textColor == Color.WHITE ? 0 : 1;
        Rect tintArea = new Rect(0, 0, 0, 0);

        applyDarkness(R.id.signal_cluster, tintArea, intensity, textColor);
        applyDarkness(R.id.battery, tintArea, intensity, textColor);
        applyDarkness(R.id.clock, tintArea, intensity, textColor);
    }

    private void applyDarkness(int id, Rect tintArea, float intensity, int color) {
        View v = findViewById(id);
        if (v instanceof DarkReceiver) {
            ((DarkReceiver) v).onDarkChanged(tintArea, intensity, color);
        }
    }
    }
}
}
+5 −29
Original line number Original line Diff line number Diff line
@@ -267,7 +267,7 @@ public class StatusBar extends SystemUI implements DemoMode,
        ActivatableNotificationView.OnActivatedListener,
        ActivatableNotificationView.OnActivatedListener,
        ExpandableNotificationRow.ExpansionLogger, NotificationData.Environment,
        ExpandableNotificationRow.ExpansionLogger, NotificationData.Environment,
        ExpandableNotificationRow.OnExpandClickListener, InflationCallback,
        ExpandableNotificationRow.OnExpandClickListener, InflationCallback,
        ColorExtractor.OnColorsChangedListener {
        ColorExtractor.OnColorsChangedListener, ConfigurationListener {
    public static final boolean MULTIUSER_DEBUG = false;
    public static final boolean MULTIUSER_DEBUG = false;


    public static final boolean ENABLE_REMOTE_INPUT =
    public static final boolean ENABLE_REMOTE_INPUT =
@@ -431,7 +431,6 @@ public class StatusBar extends SystemUI implements DemoMode,
    Object mQueueLock = new Object();
    Object mQueueLock = new Object();


    protected StatusBarIconController mIconController;
    protected StatusBarIconController mIconController;
    private IconManager mIconManager;


    // expanded notifications
    // expanded notifications
    protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
    protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
@@ -732,7 +731,6 @@ public class StatusBar extends SystemUI implements DemoMode,
    private LogMaker mStatusBarStateLog;
    private LogMaker mStatusBarStateLog;
    private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
    private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
    private NotificationIconAreaController mNotificationIconAreaController;
    private NotificationIconAreaController mNotificationIconAreaController;
    private ConfigurationListener mConfigurationListener;
    private boolean mReinflateNotificationsOnUserSwitched;
    private boolean mReinflateNotificationsOnUserSwitched;
    private HashMap<String, Entry> mPendingNotifications = new HashMap<>();
    private HashMap<String, Entry> mPendingNotifications = new HashMap<>();
    private boolean mClearAllEnabled;
    private boolean mClearAllEnabled;
@@ -971,23 +969,7 @@ public class StatusBar extends SystemUI implements DemoMode,


        Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this);
        Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this);


        mConfigurationListener = new ConfigurationListener() {
        Dependency.get(ConfigurationController.class).addCallback(this);
            @Override
            public void onConfigChanged(Configuration newConfig) {
                StatusBar.this.onConfigurationChanged(newConfig);
            }

            @Override
            public void onDensityOrFontScaleChanged() {
                StatusBar.this.onDensityOrFontScaleChanged();
            }

            @Override
            public void onOverlayChanged() {
                StatusBar.this.onOverlayChanged();
            }
        };
        Dependency.get(ConfigurationController.class).addCallback(mConfigurationListener);


        // Make sure that we're using the correct theme
        // Make sure that we're using the correct theme
        onOverlayChanged();
        onOverlayChanged();
@@ -1039,8 +1021,6 @@ public class StatusBar extends SystemUI implements DemoMode,
                .replace(R.id.status_bar_container, new CollapsedStatusBarFragment(),
                .replace(R.id.status_bar_container, new CollapsedStatusBarFragment(),
                        CollapsedStatusBarFragment.TAG)
                        CollapsedStatusBarFragment.TAG)
                .commit();
                .commit();
        mIconManager = new IconManager(mKeyguardStatusBar.findViewById(R.id.statusIcons));
        Dependency.get(StatusBarIconController.class).addIconGroup(mIconManager);
        mIconController = Dependency.get(StatusBarIconController.class);
        mIconController = Dependency.get(StatusBarIconController.class);


        mHeadsUpManager = new HeadsUpManager(context, mStatusBarWindow, mGroupManager);
        mHeadsUpManager = new HeadsUpManager(context, mStatusBarWindow, mGroupManager);
@@ -1286,7 +1266,7 @@ public class StatusBar extends SystemUI implements DemoMode,
        mNotificationShelf.setStatusBarState(mState);
        mNotificationShelf.setStatusBarState(mState);
    }
    }


    protected void onDensityOrFontScaleChanged() {
    public void onDensityOrFontScaleChanged() {
        // start old BaseStatusBar.onDensityOrFontScaleChanged().
        // start old BaseStatusBar.onDensityOrFontScaleChanged().
        if (!KeyguardUpdateMonitor.getInstance(mContext).isSwitchingUser()) {
        if (!KeyguardUpdateMonitor.getInstance(mContext).isSwitchingUser()) {
            updateNotificationsOnDensityOrFontScaleChanged();
            updateNotificationsOnDensityOrFontScaleChanged();
@@ -1313,7 +1293,7 @@ public class StatusBar extends SystemUI implements DemoMode,
        reevaluateStyles();
        reevaluateStyles();
    }
    }


    protected void onOverlayChanged() {
    public void onOverlayChanged() {
        final boolean usingDarkTheme = isUsingDarkTheme();
        final boolean usingDarkTheme = isUsingDarkTheme();
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "Updating theme because overlay changed. Is theme dark? " + usingDarkTheme);
            Log.d(TAG, "Updating theme because overlay changed. Is theme dark? " + usingDarkTheme);
@@ -1334,10 +1314,6 @@ public class StatusBar extends SystemUI implements DemoMode,
                .setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
                .setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
        mKeyguardIndicationController.setVisible(mState == StatusBarState.KEYGUARD);
        mKeyguardIndicationController.setVisible(mState == StatusBarState.KEYGUARD);
        mKeyguardIndicationController.setDozing(mDozing);
        mKeyguardIndicationController.setDozing(mDozing);

        // Top status bar with system icons and clock
        mKeyguardStatusBar.onOverlayChanged();
        mIconManager.onOverlayChanged();
    }
    }


    protected void reevaluateStyles() {
    protected void reevaluateStyles() {
@@ -4054,7 +4030,7 @@ public class StatusBar extends SystemUI implements DemoMode,
        }
        }
        Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(null);
        Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(null);
        mDeviceProvisionedController.removeCallback(mUserSetupObserver);
        mDeviceProvisionedController.removeCallback(mUserSetupObserver);
        Dependency.get(ConfigurationController.class).removeCallback(mConfigurationListener);
        Dependency.get(ConfigurationController.class).removeCallback(this);
    }
    }


    private boolean mDemoModeAllowed;
    private boolean mDemoModeAllowed;
+25 −11
Original line number Original line Diff line number Diff line
@@ -111,6 +111,31 @@ public interface StatusBarIconController {
        }
        }
    }
    }


    public static class TintedIconManager extends IconManager {
        private int mColor;

        public TintedIconManager(ViewGroup group) {
            super(group);
        }

        @Override
        protected void onIconAdded(int index, String slot, boolean blocked, StatusBarIcon icon) {
            StatusBarIconView v = addIcon(index, slot, blocked, icon);
            v.setStaticDrawableColor(mColor);
        }

        public void setTint(int color) {
            mColor = color;
            for (int i = 0; i < mGroup.getChildCount(); i++) {
                View child = mGroup.getChildAt(i);
                if (child instanceof StatusBarIconView) {
                    StatusBarIconView icon = (StatusBarIconView) child;
                    icon.setStaticDrawableColor(mColor);
                }
            }
        }
    }

    /**
    /**
     * Turns info from StatusBarIconController into ImageViews in a ViewGroup.
     * Turns info from StatusBarIconController into ImageViews in a ViewGroup.
     */
     */
@@ -168,17 +193,6 @@ public interface StatusBarIconController {
            }
            }
        }
        }


        protected void onOverlayChanged() {
            @ColorInt int iconColor = Utils.getColorAttr(mContext, R.attr.bgProtectTextColor);
            for (int i = 0; i < mGroup.getChildCount(); i++) {
                View child = mGroup.getChildAt(i);
                if (child instanceof StatusBarIconView) {
                    StatusBarIconView icon = (StatusBarIconView) child;
                    icon.setStaticDrawableColor(iconColor);
                }
            }
        }

        private void setHeightAndCenter(ImageView imageView, int height) {
        private void setHeightAndCenter(ImageView imageView, int height) {
            ViewGroup.LayoutParams params = imageView.getLayoutParams();
            ViewGroup.LayoutParams params = imageView.getLayoutParams();
            params.height = height;
            params.height = height;