OSDN Git Service

Update color for permission, settings, pointer
authorLyn Han <lynhan@google.com>
Tue, 2 Apr 2019 23:27:32 +0000 (16:27 -0700)
committerLyn Han <lynhan@google.com>
Sat, 6 Apr 2019 05:44:11 +0000 (05:44 +0000)
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

packages/SystemUI/res/layout/bubble_expanded_view.xml
packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java

index bdc4ebd..65ede3d 100644 (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">
index 56b231b..a4870d4 100644 (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();
         }
     }
 
index e8b1122..6b21526 100644 (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);
-    }
 
-    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);
-
     }
 
     /**
index 00b1c9e..a4e1ad7 100644 (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();
         }
     }