diff options
5 files changed, 65 insertions, 58 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index f1d3e8c2c705..76177a310a06 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -346,7 +346,7 @@ public class CarStatusBar extends StatusBar implements * changes. */ @Override - protected void onDensityOrFontScaleChanged() { + public void onDensityOrFontScaleChanged() { super.onDensityOrFontScaleChanged(); mController.onDensityOrFontScaleChanged(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java index e0f577da5100..85d2d73d7c28 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java @@ -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,18 +65,12 @@ 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(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java index 6d6250e66e49..f7c2fc8633ab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -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); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 7564c8275ce4..30673cdfc086 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -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; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index 64b21b457715..c2407652b2df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -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; |