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
This commit is contained in:
Lyn Han
2019-04-02 16:27:32 -07:00
parent 2b67a2b31d
commit 02cca81c10
4 changed files with 68 additions and 51 deletions

View File

@@ -28,7 +28,7 @@
/>
<FrameLayout
android:id="@+id/header_permission_wrapper"
android:id="@+id/permission_or_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true">

View File

@@ -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();
}
}

View File

@@ -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);
// 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 updateHeaderView() {
mSettingsIcon.setContentDescription(getResources().getString(
R.string.bubbles_settings_button_description, mAppName));
}
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);
}
/**

View File

@@ -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();
}
}