From 02cca81c10665fcd5dcd8cbdad6b16ca0f2e1e4a Mon Sep 17 00:00:00 2001 From: Lyn Han Date: Tue, 2 Apr 2019 16:27:32 -0700 Subject: [PATCH] Update color for permission, settings, pointer Fix bug where we created inset drawable from adaptive icon drawable, instead of the original settings drawable. And refactors. Test: manual Bug: 123829494 Bug: 123663905 Change-Id: I9342213365cf3679facd22da8592325777d3d17f --- .../SystemUI/res/layout/bubble_expanded_view.xml | 2 +- .../android/systemui/bubbles/BubbleController.java | 4 +- .../systemui/bubbles/BubbleExpandedView.java | 105 ++++++++++++--------- .../android/systemui/bubbles/BubbleStackView.java | 6 +- 4 files changed, 67 insertions(+), 50 deletions(-) diff --git a/packages/SystemUI/res/layout/bubble_expanded_view.xml b/packages/SystemUI/res/layout/bubble_expanded_view.xml index bdc4ebdee054..65ede3def821 100644 --- a/packages/SystemUI/res/layout/bubble_expanded_view.xml +++ b/packages/SystemUI/res/layout/bubble_expanded_view.xml @@ -28,7 +28,7 @@ /> diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 56b231bba83e..a4870d4b7e50 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -222,14 +222,14 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe @Override public void onUiModeChanged() { if (mStackView != null) { - mStackView.onConfigChanged(); + mStackView.onThemeChanged(); } } @Override public void onOverlayChanged() { if (mStackView != null) { - mStackView.onConfigChanged(); + mStackView.onThemeChanged(); } } diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java index e8b11226539a..6b21526a70c9 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java @@ -69,7 +69,7 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.stack.ExpandableViewState; /** - * Container for the expanded bubble view, handles rendering the caret and header of the view. + * Container for the expanded bubble view, handles rendering the caret and settings icon. */ public class BubbleExpandedView extends LinearLayout implements View.OnClickListener { private static final String TAG = "BubbleExpandedView"; @@ -82,6 +82,7 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList // Permission view private View mPermissionView; + private TextView mPermissionPrompt; // Views for expanded state private ExpandableNotificationRow mNotifRow; @@ -94,9 +95,13 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList private boolean mNeedsNewHeight; private int mMinHeight; - private int mHeaderHeight; + private int mSettingsIconHeight; private int mBubbleHeight; private int mPermissionHeight; + private int mIconInset; + private Drawable mSettingsIconDrawable; + private int mPointerWidth; + private int mPointerHeight; private NotificationEntry mEntry; private PackageManager mPm; @@ -173,20 +178,21 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList Resources res = getResources(); mPointerView = findViewById(R.id.pointer_view); - int width = res.getDimensionPixelSize(R.dimen.bubble_pointer_width); - int height = res.getDimensionPixelSize(R.dimen.bubble_pointer_height); + mPointerWidth = res.getDimensionPixelSize(R.dimen.bubble_pointer_width); + mPointerHeight = res.getDimensionPixelSize(R.dimen.bubble_pointer_height); TypedArray ta = getContext().obtainStyledAttributes( new int[] {android.R.attr.colorBackgroundFloating}); int bgColor = ta.getColor(0, Color.WHITE); ta.recycle(); - ShapeDrawable triangleDrawable = new ShapeDrawable( - TriangleShape.create(width, height, false /* pointUp */)); + ShapeDrawable triangleDrawable = new ShapeDrawable(TriangleShape.create( + mPointerWidth, mPointerHeight, false /* pointUp */)); + triangleDrawable.setTint(bgColor); mPointerView.setBackground(triangleDrawable); - FrameLayout viewWrapper = findViewById(R.id.header_permission_wrapper); + FrameLayout permissionOrSettings = findViewById(R.id.permission_or_settings); LayoutTransition transition = new LayoutTransition(); transition.setDuration(200); @@ -200,18 +206,21 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList transition.setInterpolator(LayoutTransition.DISAPPEARING, Interpolators.ALPHA_OUT); transition.setAnimateParentHierarchy(false); - viewWrapper.setLayoutTransition(transition); - viewWrapper.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); + permissionOrSettings.setLayoutTransition(transition); + permissionOrSettings.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); - mHeaderHeight = getContext().getResources().getDimensionPixelSize( + mSettingsIconHeight = getContext().getResources().getDimensionPixelSize( R.dimen.bubble_expanded_header_height); + mSettingsIcon = findViewById(R.id.settings_button); + mIconInset = getResources().getDimensionPixelSize(R.dimen.bubble_icon_inset); + mSettingsIcon.setOnClickListener(this); + // Save initial drawable to create adaptive icons that will take its place. + mSettingsIconDrawable = mSettingsIcon.getDrawable(); + mPermissionHeight = getContext().getResources().getDimensionPixelSize( R.dimen.bubble_permission_height); - mPermissionView = findViewById(R.id.permission_layout); - mSettingsIcon = findViewById(R.id.settings_button); - mSettingsIcon.setOnClickListener(this); - updateHeaderColor(); + mPermissionPrompt = mPermissionView.findViewById(R.id.prompt); findViewById(R.id.no_bubbles_button).setOnClickListener(this); findViewById(R.id.yes_bubbles_button).setOnClickListener(this); @@ -264,7 +273,7 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList /** * Creates a background with corners rounded based on how the view is configured to display */ - private Drawable createHeaderPermissionBackground(int bgColor) { + private Drawable createPermissionBackground(int bgColor) { TypedArray ta2 = getContext().obtainStyledAttributes( new int[] {android.R.attr.dialogCornerRadius}); final float cr = ta2.getDimension(0, 0f); @@ -311,8 +320,8 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList if (mAppIcon == null) { mAppIcon = mPm.getDefaultActivityIcon(); } - updateHeaderView(); - updatePermissionView(); + updateTheme(); + togglePermissionOrSettings(); updateExpandedView(); } @@ -338,12 +347,12 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList /** * Updates the entry backing this view. This will not re-populate ActivityView, it will - * only update the deep-links in the header, the title, and the height of the view. + * only update the deep-links in the title, and the height of the view. */ public void update(NotificationEntry entry) { if (entry.key.equals(mEntry.key)) { mEntry = entry; - updateHeaderView(); + updateSettingsContentDescription(); updateHeight(); } else { Log.w(TAG, "Trying to update entry with different key, new entry: " @@ -351,35 +360,36 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList } } - /** - * Update header color and icon shape when theme changes. - */ - void updateHeaderColor() { + void updateTheme() { + // Get new colors. TypedArray ta = mContext.obtainStyledAttributes( - new int[] {android.R.attr.colorBackgroundFloating, android.R.attr.colorForeground}); + new int[]{android.R.attr.colorBackgroundFloating, android.R.attr.colorForeground}); int backgroundColor = ta.getColor(0, Color.WHITE /* default */); int foregroundColor = ta.getColor(1, Color.BLACK /* default */); ta.recycle(); - mPermissionView.setBackground(createHeaderPermissionBackground(backgroundColor)); + // Must clear tint first - otherwise tint updates inconsistently. + mSettingsIconDrawable.setTintList(null); + mSettingsIconDrawable.setTint(foregroundColor); - Drawable settingsIcon = mSettingsIcon.getDrawable(); - settingsIcon.setTint(foregroundColor); - - int mIconInset = getResources().getDimensionPixelSize(R.dimen.bubble_icon_inset); - InsetDrawable foreground = new InsetDrawable(settingsIcon, mIconInset); + InsetDrawable foreground = new InsetDrawable(mSettingsIconDrawable, mIconInset); ColorDrawable background = new ColorDrawable(backgroundColor); AdaptiveIconDrawable adaptiveIcon = new AdaptiveIconDrawable(background, foreground); mSettingsIcon.setImageDrawable(adaptiveIcon); - } - private void updateHeaderView() { - mSettingsIcon.setContentDescription(getResources().getString( - R.string.bubbles_settings_button_description, mAppName)); + // Update permission prompt color. + mPermissionView.setBackground(createPermissionBackground(backgroundColor)); + mPermissionPrompt.setTextColor(foregroundColor); + + // Update triangle color. + ShapeDrawable triangleDrawable = new ShapeDrawable( + TriangleShape.create(mPointerWidth, mPointerHeight, false /* pointUp */)); + triangleDrawable.setTint(backgroundColor); + mPointerView.setBackground(triangleDrawable); } - private void updatePermissionView() { + void togglePermissionOrSettings() { boolean hasUserApprovedBubblesForPackage = false; try { hasUserApprovedBubblesForPackage = @@ -392,12 +402,6 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList showSettingsIcon(); } else { showPermissionView(); - ((ImageView) mPermissionView.findViewById(R.id.pkgicon)).setImageDrawable(mAppIcon); - ((TextView) mPermissionView.findViewById(R.id.pkgname)).setText(mAppName); - ((TextView) mPermissionView.findViewById(R.id.prompt)).setText( - getResources().getString(R.string.bubbles_prompt, mAppName)); - logBubbleClickEvent(mEntry, - StatsLog.BUBBLE_UICHANGED__ACTION__PERMISSION_DIALOG_SHOWN); } } @@ -432,7 +436,7 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList */ int getExpandedSize() { int chromeHeight = mPermissionView.getVisibility() != View.VISIBLE - ? mHeaderHeight + ? mSettingsIconHeight : mPermissionHeight; return mBubbleHeight + mPointerView.getHeight() + mPointerMargin + chromeHeight; @@ -460,7 +464,7 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList desiredHeight = desiredPx > 0 ? desiredPx : mMinHeight; } int chromeHeight = mPermissionView.getVisibility() != View.VISIBLE - ? mHeaderHeight + ? mSettingsIconHeight : mPermissionHeight; int max = mStackView.getMaxExpandedHeight() - chromeHeight - mPointerView.getHeight() - mPointerMargin; @@ -523,15 +527,28 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList } } + private void updateSettingsContentDescription() { + mSettingsIcon.setContentDescription(getResources().getString( + R.string.bubbles_settings_button_description, mAppName)); + } + void showSettingsIcon() { + updateSettingsContentDescription(); + mPermissionView.setVisibility(GONE); mSettingsIcon.setVisibility(VISIBLE); } void showPermissionView() { + ((ImageView) mPermissionView.findViewById(R.id.pkgicon)).setImageDrawable(mAppIcon); + ((TextView) mPermissionView.findViewById(R.id.pkgname)).setText(mAppName); + mPermissionPrompt.setText( + getResources().getString(R.string.bubbles_prompt, mAppName)); + logBubbleClickEvent(mEntry, + StatsLog.BUBBLE_UICHANGED__ACTION__PERMISSION_DIALOG_SHOWN); + mSettingsIcon.setVisibility(GONE); mPermissionView.setVisibility(VISIBLE); - } /** diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index 00b1c9e5ced4..a4e1ad723720 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java @@ -309,12 +309,12 @@ public class BubbleStackView extends FrameLayout { } /** - * Handle config changes. + * Handle theme changes. */ - public void onConfigChanged() { + public void onThemeChanged() { for (Bubble b: mBubbleData.getBubbles()) { b.iconView.updateViews(); - b.expandedView.updateHeaderColor(); + b.expandedView.updateTheme(); } } -- 2.11.0