Loading packages/SystemUI/res/layout/bubble_expanded_view.xml +1 −1 Original line number Diff line number Diff line Loading @@ -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"> Loading packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); } } Loading packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java +61 −44 Original line number Diff line number Diff line Loading @@ -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"; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -311,8 +320,8 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList if (mAppIcon == null) { mAppIcon = mPm.getDefaultActivityIcon(); } updateHeaderView(); updatePermissionView(); updateTheme(); togglePermissionOrSettings(); updateExpandedView(); } Loading @@ -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: " Loading @@ -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}); int backgroundColor = ta.getColor(0, Color.WHITE /* default */); int foregroundColor = ta.getColor(1, Color.BLACK /* default */); ta.recycle(); mPermissionView.setBackground(createHeaderPermissionBackground(backgroundColor)); Drawable settingsIcon = mSettingsIcon.getDrawable(); settingsIcon.setTint(foregroundColor); // Must clear tint first - otherwise tint updates inconsistently. mSettingsIconDrawable.setTintList(null); mSettingsIconDrawable.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 = Loading @@ -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); } } Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } /** Loading packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +3 −3 Original line number Diff line number Diff line Loading @@ -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(); } } Loading Loading
packages/SystemUI/res/layout/bubble_expanded_view.xml +1 −1 Original line number Diff line number Diff line Loading @@ -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"> Loading
packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); } } Loading
packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java +61 −44 Original line number Diff line number Diff line Loading @@ -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"; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -311,8 +320,8 @@ public class BubbleExpandedView extends LinearLayout implements View.OnClickList if (mAppIcon == null) { mAppIcon = mPm.getDefaultActivityIcon(); } updateHeaderView(); updatePermissionView(); updateTheme(); togglePermissionOrSettings(); updateExpandedView(); } Loading @@ -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: " Loading @@ -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}); int backgroundColor = ta.getColor(0, Color.WHITE /* default */); int foregroundColor = ta.getColor(1, Color.BLACK /* default */); ta.recycle(); mPermissionView.setBackground(createHeaderPermissionBackground(backgroundColor)); Drawable settingsIcon = mSettingsIcon.getDrawable(); settingsIcon.setTint(foregroundColor); // Must clear tint first - otherwise tint updates inconsistently. mSettingsIconDrawable.setTintList(null); mSettingsIconDrawable.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 = Loading @@ -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); } } Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } /** Loading
packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +3 −3 Original line number Diff line number Diff line Loading @@ -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(); } } Loading