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

Commit 755e6c88 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fixup tinting for keyguard status bar"

parents 1598dc53 9cac5ffa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -346,7 +346,7 @@ public class CarStatusBar extends StatusBar implements
     * changes.
     */
    @Override
    protected void onDensityOrFontScaleChanged() {
    public void onDensityOrFontScaleChanged() {
        super.onDensityOrFontScaleChanged();
        mController.onDensityOrFontScaleChanged();

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

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

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

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

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

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

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

import com.android.internal.statusbar.StatusBarIcon;
import com.android.settingslib.Utils;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
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.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.UserInfoController;
import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener;
@@ -48,7 +56,7 @@ import com.android.systemui.statusbar.policy.UserSwitcherController;
 * The header group on Keyguard.
 */
public class KeyguardStatusBarView extends RelativeLayout
        implements BatteryStateChangeCallback, OnUserInfoChangedListener {
        implements BatteryStateChangeCallback, OnUserInfoChangedListener, ConfigurationListener {

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

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

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

    @Override
@@ -321,5 +336,20 @@ public class KeyguardStatusBarView extends RelativeLayout
        @ColorInt int textColor = Utils.getColorAttr(mContext, R.attr.bgProtectTextColor);
        mCarrierLabel.setTextColor(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 Diff line number Diff line
@@ -267,7 +267,7 @@ public class StatusBar extends SystemUI implements DemoMode,
        ActivatableNotificationView.OnActivatedListener,
        ExpandableNotificationRow.ExpansionLogger, NotificationData.Environment,
        ExpandableNotificationRow.OnExpandClickListener, InflationCallback,
        ColorExtractor.OnColorsChangedListener {
        ColorExtractor.OnColorsChangedListener, ConfigurationListener {
    public static final boolean MULTIUSER_DEBUG = false;

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

    protected StatusBarIconController mIconController;
    private IconManager mIconManager;

    // expanded notifications
    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 LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
    private NotificationIconAreaController mNotificationIconAreaController;
    private ConfigurationListener mConfigurationListener;
    private boolean mReinflateNotificationsOnUserSwitched;
    private HashMap<String, Entry> mPendingNotifications = new HashMap<>();
    private boolean mClearAllEnabled;
@@ -971,23 +969,7 @@ public class StatusBar extends SystemUI implements DemoMode,

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

        mConfigurationListener = new ConfigurationListener() {
            @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);
        Dependency.get(ConfigurationController.class).addCallback(this);

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

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

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

    protected void onOverlayChanged() {
    public void onOverlayChanged() {
        final boolean usingDarkTheme = isUsingDarkTheme();
        if (DEBUG) {
            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);
        mKeyguardIndicationController.setVisible(mState == StatusBarState.KEYGUARD);
        mKeyguardIndicationController.setDozing(mDozing);

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

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

    private boolean mDemoModeAllowed;
+25 −11
Original line number 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.
     */
@@ -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) {
            ViewGroup.LayoutParams params = imageView.getLayoutParams();
            params.height = height;