diff --git a/packages/SystemUI/res/layout/brightness_mirror.xml b/packages/SystemUI/res/layout/brightness_mirror.xml new file mode 100644 index 0000000000000..bbaff6a4aee7b --- /dev/null +++ b/packages/SystemUI/res/layout/brightness_mirror.xml @@ -0,0 +1,32 @@ + + + + + + + diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml index 9df5dbf746099..d17601c1c0540 100644 --- a/packages/SystemUI/res/layout/signal_cluster_view.xml +++ b/packages/SystemUI/res/layout/signal_cluster_view.xml @@ -19,6 +19,7 @@ - - - - - + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index 7c6c641cb7c9c..cb1128bfca497 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -910,7 +910,7 @@ public abstract class BaseStatusBar extends SystemUI implements final float fontScale = newConfig.fontScale; final int density = newConfig.densityDpi; if (density != mDensity || mFontScale != fontScale) { - reInflateViews(); + onDensityOrFontScaleChanged(); mDensity = density; mFontScale = fontScale; } @@ -926,7 +926,7 @@ public abstract class BaseStatusBar extends SystemUI implements } } - protected void reInflateViews() { + protected void onDensityOrFontScaleChanged() { ArrayList activeNotifications = mNotificationData.getActiveNotifications(); for (int i = 0; i < activeNotifications.size(); i++) { Entry entry = activeNotifications.get(i); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index e4accf58a3c95..870447acf6e85 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -18,6 +18,7 @@ package com.android.systemui.statusbar; import android.app.Notification; import android.content.Context; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Paint; @@ -39,6 +40,7 @@ import java.text.NumberFormat; public class StatusBarIconView extends AnimatedImageView { private static final String TAG = "StatusBarIconView"; + private boolean mAlwaysScaleIcon; private StatusBarIcon mIcon; @ViewDebug.ExportedProperty private String mSlot; @@ -49,6 +51,7 @@ public class StatusBarIconView extends AnimatedImageView { private String mNumberText; private Notification mNotification; private final boolean mBlocked; + private int mDensity; public StatusBarIconView(Context context, String slot, Notification notification) { this(context, slot, notification, false); @@ -57,7 +60,6 @@ public class StatusBarIconView extends AnimatedImageView { public StatusBarIconView(Context context, String slot, Notification notification, boolean blocked) { super(context); - final Resources res = context.getResources(); mBlocked = blocked; mSlot = slot; mNumberPain = new Paint(); @@ -65,18 +67,37 @@ public class StatusBarIconView extends AnimatedImageView { mNumberPain.setColor(context.getColor(R.drawable.notification_number_text_color)); mNumberPain.setAntiAlias(true); setNotification(notification); + maybeUpdateIconScale(); + setScaleType(ScaleType.CENTER); + mDensity = context.getResources().getDisplayMetrics().densityDpi; + } + private void maybeUpdateIconScale() { // We do not resize and scale system icons (on the right), only notification icons (on the // left). - if (notification != null) { - final int outerBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_size); - final int imageBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size); - final float scale = (float)imageBounds / (float)outerBounds; - setScaleX(scale); - setScaleY(scale); + if (mNotification != null || mAlwaysScaleIcon) { + updateIconScale(); } + } - setScaleType(ScaleType.CENTER); + private void updateIconScale() { + Resources res = mContext.getResources(); + final int outerBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_size); + final int imageBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size); + final float scale = (float)imageBounds / (float)outerBounds; + setScaleX(scale); + setScaleY(scale); + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + int density = newConfig.densityDpi; + if (density != mDensity) { + mDensity = density; + maybeUpdateIconScale(); + updateDrawable(); + } } public void setNotification(Notification notification) { @@ -87,12 +108,9 @@ public class StatusBarIconView extends AnimatedImageView { public StatusBarIconView(Context context, AttributeSet attrs) { super(context, attrs); mBlocked = false; - final Resources res = context.getResources(); - final int outerBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_size); - final int imageBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size); - final float scale = (float)imageBounds / (float)outerBounds; - setScaleX(scale); - setScaleY(scale); + mAlwaysScaleIcon = true; + updateIconScale(); + mDensity = context.getResources().getDisplayMetrics().densityDpi; } private static boolean streq(String a, String b) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/IconMerger.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/IconMerger.java index 225751a627b23..f86badb2970b1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/IconMerger.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/IconMerger.java @@ -17,6 +17,7 @@ package com.android.systemui.statusbar.phone; import android.content.Context; +import android.content.res.Configuration; import android.content.res.Resources; import android.util.AttributeSet; import android.view.View; @@ -28,23 +29,31 @@ public class IconMerger extends LinearLayout { private static final String TAG = "IconMerger"; private static final boolean DEBUG = false; - private final int mIconSize; - private final int mIconHPadding; + private int mIconSize; + private int mIconHPadding; private View mMoreView; public IconMerger(Context context, AttributeSet attrs) { super(context, attrs); - - Resources res = context.getResources(); - mIconSize = res.getDimensionPixelSize(R.dimen.status_bar_icon_size); - mIconHPadding = res.getDimensionPixelSize(R.dimen.status_bar_icon_padding); - + reloadDimens(); if (DEBUG) { setBackgroundColor(0x800099FF); } } + private void reloadDimens() { + Resources res = mContext.getResources(); + mIconSize = res.getDimensionPixelSize(R.dimen.status_bar_icon_size); + mIconHPadding = res.getDimensionPixelSize(R.dimen.status_bar_icon_padding); + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + reloadDimens(); + } + public void setOverflowIndicator(View v) { mMoreView = v; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java index c4917a1c80fcd..cbaab14652fee 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java @@ -5,6 +5,7 @@ import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; +import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; @@ -17,7 +18,6 @@ import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.notification.NotificationUtils; import java.util.ArrayList; -import java.util.List; /** * A controller for the space in the status bar to the left of the system icons. This area is @@ -51,9 +51,7 @@ public class NotificationIconAreaController { * Initializes the views that will represent the notification area. */ protected void initializeNotificationAreaViews(Context context) { - Resources res = context.getResources(); - mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size); - mIconHPadding = res.getDimensionPixelSize(R.dimen.status_bar_icon_padding); + reloadDimens(context); LayoutInflater layoutInflater = LayoutInflater.from(context); mNotificationIconArea = inflateIconArea(layoutInflater); @@ -68,6 +66,27 @@ public class NotificationIconAreaController { } } + public void onDensityOrFontScaleChanged(Context context) { + reloadDimens(context); + final LinearLayout.LayoutParams params = generateIconLayoutParams(); + for (int i = 0; i < mNotificationIcons.getChildCount(); i++) { + View child = mNotificationIcons.getChildAt(i); + child.setLayoutParams(params); + } + } + + @NonNull + private LinearLayout.LayoutParams generateIconLayoutParams() { + return new LinearLayout.LayoutParams( + mIconSize + 2 * mIconHPadding, getHeight()); + } + + private void reloadDimens(Context context) { + Resources res = context.getResources(); + mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size); + mIconHPadding = res.getDimensionPixelSize(R.dimen.status_bar_icon_padding); + } + /** * Returns the view that represents the notification area. */ @@ -125,8 +144,7 @@ public class NotificationIconAreaController { * Updates the notifications with the given list of notifications to display. */ public void updateNotificationIcons(NotificationData notificationData) { - final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( - mIconSize + 2 * mIconHPadding, getHeight()); + final LinearLayout.LayoutParams params = generateIconLayoutParams(); ArrayList activeNotifications = notificationData.getActiveNotifications(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 82806fdc60817..b75c29165b0af 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -86,6 +86,7 @@ import android.view.ThreadedRenderer; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.view.ViewParent; import android.view.ViewStub; import android.view.WindowManager; import android.view.WindowManagerGlobal; @@ -762,14 +763,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mStackScroller.setHeadsUpManager(mHeadsUpManager); mGroupManager.setOnGroupChangeListener(mStackScroller); - mKeyguardIconOverflowContainer = - (NotificationOverflowContainer) LayoutInflater.from(mContext).inflate( - R.layout.status_bar_notification_keyguard_overflow, mStackScroller, false); - mKeyguardIconOverflowContainer.setOnActivatedListener(this); - mKeyguardIconOverflowContainer.setOnClickListener(mOverflowClickListener); - mStackScroller.setOverflowContainer(mKeyguardIconOverflowContainer); - - + inflateOverflowContainer(); inflateEmptyShadeView(); inflateDismissView(); mExpandedContents = mStackScroller; @@ -950,13 +944,62 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, return new BatteryControllerImpl(mContext); } + private void inflateOverflowContainer() { + mKeyguardIconOverflowContainer = + (NotificationOverflowContainer) LayoutInflater.from(mContext).inflate( + R.layout.status_bar_notification_keyguard_overflow, mStackScroller, false); + mKeyguardIconOverflowContainer.setOnActivatedListener(this); + mKeyguardIconOverflowContainer.setOnClickListener(mOverflowClickListener); + mStackScroller.setOverflowContainer(mKeyguardIconOverflowContainer); + } + @Override - protected void reInflateViews() { - super.reInflateViews(); + protected void onDensityOrFontScaleChanged() { + super.onDensityOrFontScaleChanged(); + mScrimController.onDensityOrFontScaleChanged(); + mStatusBarView.onDensityOrFontScaleChanged(); + mBrightnessMirrorController.onDensityOrFontScaleChanged(); + inflateSignalClusters(); + mIconController.onDensityOrFontScaleChanged(); inflateDismissView(); updateClearAll(); inflateEmptyShadeView(); updateEmptyShadeView(); + inflateOverflowContainer(); + } + + private void inflateSignalClusters() { + SignalClusterView signalClusterView = reinflateSignalCluster(mStatusBarView); + mIconController.setSignalCluster(signalClusterView); + reinflateSignalCluster(mKeyguardStatusView); + } + + private SignalClusterView reinflateSignalCluster(View view) { + SignalClusterView signalCluster = + (SignalClusterView) view.findViewById(R.id.signal_cluster); + if (signalCluster != null) { + ViewParent parent = signalCluster.getParent(); + if (parent instanceof ViewGroup) { + ViewGroup viewParent = (ViewGroup) parent; + int index = viewParent.indexOfChild(signalCluster); + viewParent.removeView(signalCluster); + SignalClusterView newCluster = (SignalClusterView) LayoutInflater.from(mContext) + .inflate(R.layout.signal_cluster_view, viewParent, false); + ViewGroup.MarginLayoutParams layoutParams = + (ViewGroup.MarginLayoutParams) viewParent.getLayoutParams(); + layoutParams.setMarginsRelative( + mContext.getResources().getDimensionPixelSize( + R.dimen.signal_cluster_margin_start), + 0, 0, 0); + newCluster.setLayoutParams(layoutParams); + newCluster.setSecurityController(mSecurityController); + newCluster.setNetworkController(mNetworkController); + viewParent.addView(newCluster, index); + return newCluster; + } + return signalCluster; + } + return null; } private void inflateEmptyShadeView() { @@ -3250,17 +3293,17 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, // SystemUIService notifies SystemBars of configuration changes, which then calls down here @Override protected void onConfigurationChanged(Configuration newConfig) { + updateResources(); + updateDisplaySize(); // populates mDisplayMetrics super.onConfigurationChanged(newConfig); // calls refreshLayout if (DEBUG) { Log.v(TAG, "configuration changed: " + mContext.getResources().getConfiguration()); } - updateDisplaySize(); // populates mDisplayMetrics - updateResources(); repositionNavigationBar(); updateRowStates(); - mIconController.updateResources(); + mIconController.defineSlots(); mScreenPinningRequest.onConfigurationChanged(); mNetworkController.onConfigurationChanged(); } @@ -3331,7 +3374,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mMaxAllowedKeyguardNotifications = res.getInteger( R.integer.keyguard_max_notification_count); - if (DEBUG) Log.v(TAG, "updateResources"); + if (DEBUG) Log.v(TAG, "defineSlots"); } // Visibility reporting diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index cc3b4bddb7879..c80b3ad47a4a5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -21,10 +21,12 @@ import android.util.AttributeSet; import android.util.EventLog; import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import com.android.systemui.DejankUtils; import com.android.systemui.EventLogTags; +import com.android.systemui.R; public class PhoneStatusBarView extends PanelBar { private static final String TAG = "PhoneStatusBarView"; @@ -185,4 +187,11 @@ public class PhoneStatusBarView extends PanelBar { float scrimFraction = Math.max(mPanelFraction, mMinFraction); mScrimController.setPanelExpansion(scrimFraction); } + + public void onDensityOrFontScaleChanged() { + ViewGroup.LayoutParams layoutParams = getLayoutParams(); + layoutParams.height = getResources().getDimensionPixelSize( + R.dimen.status_bar_height); + setLayoutParams(layoutParams); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 3eda3204d7a37..cf5277f26535e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -24,6 +24,7 @@ import android.content.Context; import android.graphics.Color; import android.graphics.Rect; import android.view.View; +import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; @@ -519,4 +520,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, public void setScrimBehindChangeRunnable(Runnable changeRunnable) { mScrimBehind.setChangeRunnable(changeRunnable); } + + public void onDensityOrFontScaleChanged() { + ViewGroup.LayoutParams layoutParams = mHeadsUpScrim.getLayoutParams(); + layoutParams.height = mHeadsUpScrim.getResources().getDimensionPixelSize( + R.dimen.heads_up_scrim_height); + mHeadsUpScrim.setLayoutParams(layoutParams); + } } 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 a40aa8338d89f..f415ae588c4e6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -76,6 +76,7 @@ public class StatusBarIconController extends StatusBarIconList implements Tunabl private View mNotificationIconAreaInner; private BatteryMeterView mBatteryMeterView; + private BatteryMeterView mBatteryMeterViewKeyguard; private TextView mClock; private int mIconSize; @@ -129,39 +130,43 @@ public class StatusBarIconController extends StatusBarIconList implements Tunabl mStatusIconsKeyguard = (LinearLayout) keyguardStatusBar.findViewById(R.id.statusIcons); mBatteryMeterView = (BatteryMeterView) statusBar.findViewById(R.id.battery); - maybeScaleBatteryMeterView(context); + mBatteryMeterViewKeyguard = (BatteryMeterView) keyguardStatusBar.findViewById(R.id.battery); + scaleBatteryMeterViews(context); mClock = (TextView) statusBar.findViewById(R.id.clock); mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone); mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone); mHandler = new Handler(); - updateResources(); + defineSlots(); + loadDimens(); TunerService.get(mContext).addTunable(this, ICON_BLACKLIST); } + public void setSignalCluster(SignalClusterView signalCluster) { + mSignalCluster = signalCluster; + } + /** - * Looks up the scale factor for status bar icons and scales the battery view by that amount - * if appropriate. + * Looks up the scale factor for status bar icons and scales the battery view by that amount. */ - private void maybeScaleBatteryMeterView(Context context) { + private void scaleBatteryMeterViews(Context context) { Resources res = context.getResources(); TypedValue typedValue = new TypedValue(); res.getValue(R.dimen.status_bar_icon_scale_factor, typedValue, true); float iconScaleFactor = typedValue.getFloat(); - if (iconScaleFactor == 1.f) { - return; - } - - float batteryHeight = res.getDimension(R.dimen.status_bar_battery_icon_height); - float batteryWidth = res.getDimension(R.dimen.status_bar_battery_icon_width); + int batteryHeight = res.getDimensionPixelSize(R.dimen.status_bar_battery_icon_height); + int batteryWidth = res.getDimensionPixelSize(R.dimen.status_bar_battery_icon_width); + int marginBottom = res.getDimensionPixelSize(R.dimen.battery_margin_bottom); LinearLayout.LayoutParams scaledLayoutParams = new LinearLayout.LayoutParams( (int) (batteryWidth * iconScaleFactor), (int) (batteryHeight * iconScaleFactor)); + scaledLayoutParams.setMarginsRelative(0, 0, 0, marginBottom); mBatteryMeterView.setLayoutParams(scaledLayoutParams); + mBatteryMeterViewKeyguard.setLayoutParams(scaledLayoutParams); } @Override @@ -185,15 +190,16 @@ public class StatusBarIconController extends StatusBarIconList implements Tunabl setIcon(views.get(i).getSlot(), views.get(i).getStatusBarIcon()); } } - - public void updateResources() { + private void loadDimens() { mIconSize = mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_icon_size); mIconHPadding = mContext.getResources().getDimensionPixelSize( R.dimen.status_bar_icon_padding); + } + + public void defineSlots() { defineSlots(mContext.getResources().getStringArray( com.android.internal.R.array.config_statusBarIcons)); - FontSizeUtils.updateFontSize(mClock, R.dimen.status_bar_clock_size); } private void addSystemIcon(int index, StatusBarIcon icon) { @@ -571,4 +577,35 @@ public class StatusBarIconController extends StatusBarIconList implements Tunabl } return ret; } + + public void onDensityOrFontScaleChanged() { + loadDimens(); + mNotificationIconAreaController.onDensityOrFontScaleChanged(mContext); + updateClock(); + for (int i = 0; i < mStatusIcons.getChildCount(); i++) { + View child = mStatusIcons.getChildAt(i); + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize); + lp.setMargins(mIconHPadding, 0, mIconHPadding, 0); + child.setLayoutParams(lp); + } + for (int i = 0; i < mStatusIconsKeyguard.getChildCount(); i++) { + View child = mStatusIconsKeyguard.getChildAt(i); + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize); + child.setLayoutParams(lp); + } + scaleBatteryMeterViews(mContext); + } + + private void updateClock() { + FontSizeUtils.updateFontSize(mClock, R.dimen.status_bar_clock_size); + mClock.setPaddingRelative( + mContext.getResources().getDimensionPixelSize( + R.dimen.status_bar_clock_starting_padding), + 0, + mContext.getResources().getDimensionPixelSize( + R.dimen.status_bar_clock_end_padding), + 0); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java index 62d6b7675a051..97b31f248fa16 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java @@ -26,10 +26,13 @@ public class StatusBarIconList { private ArrayList mIcons = new ArrayList<>(); public void defineSlots(String[] slots) { + mSlots.clear(); final int N = slots.length; for (int i=0; i < N; i++) { mSlots.add(slots[i]); - mIcons.add(null); + if (mIcons.size() < mSlots.size()) { + mIcons.add(null); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java index ab347686be81b..7a6d080a58242 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.policy; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewPropertyAnimator; import android.widget.FrameLayout; @@ -33,12 +34,14 @@ public class BrightnessMirrorController { public long TRANSITION_DURATION_OUT = 150; public long TRANSITION_DURATION_IN = 200; + private final StatusBarWindowView mStatusBarWindow; private final ScrimView mScrimBehind; - private final View mBrightnessMirror; private final View mNotificationPanel; private final int[] mInt2Cache = new int[2]; + private View mBrightnessMirror; public BrightnessMirrorController(StatusBarWindowView statusBarWindow) { + mStatusBarWindow = statusBarWindow; mScrimBehind = (ScrimView) statusBarWindow.findViewById(R.id.scrim_behind); mBrightnessMirror = statusBarWindow.findViewById(R.id.brightness_mirror); mNotificationPanel = statusBarWindow.findViewById(R.id.notification_panel); @@ -56,11 +59,11 @@ public class BrightnessMirrorController { inAnimation(mNotificationPanel.animate()) .withLayer() .withEndAction(new Runnable() { - @Override - public void run() { - mBrightnessMirror.setVisibility(View.INVISIBLE); - } - }); + @Override + public void run() { + mBrightnessMirror.setVisibility(View.INVISIBLE); + } + }); } private ViewPropertyAnimator outAnimation(ViewPropertyAnimator a) { @@ -104,4 +107,12 @@ public class BrightnessMirrorController { R.integer.notification_panel_layout_gravity); mBrightnessMirror.setLayoutParams(lp); } + + public void onDensityOrFontScaleChanged() { + int index = mStatusBarWindow.indexOfChild(mBrightnessMirror); + mStatusBarWindow.removeView(mBrightnessMirror); + mBrightnessMirror = LayoutInflater.from(mBrightnessMirror.getContext()).inflate( + R.layout.brightness_mirror, mStatusBarWindow, false); + mStatusBarWindow.addView(mBrightnessMirror, index); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 4986740ebc3f8..c962606633daf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -3116,8 +3116,13 @@ public class NotificationStackScrollLayout extends ViewGroup } public void setOverflowContainer(NotificationOverflowContainer overFlowContainer) { + int index = -1; + if (mOverflowContainer != null) { + index = indexOfChild(mOverflowContainer); + removeView(mOverflowContainer); + } mOverflowContainer = overFlowContainer; - addView(mOverflowContainer); + addView(mOverflowContainer, index); } public void updateOverflowContainerVisibility(boolean visible) {