Modify the UI of ClearCache dialog

- Change the icon
- Remove the icon on the second loading dialog
- Update the style of the progress bar
- Change the string of the button
- Change the color of the icon
- Remove the bold style for the app name in the message
- Add the delay to avoid the progress dialog is disappeared too fast

Test: manual, attach the video
Bug: 161754467
Change-Id: Ia0cdcdc2f6810d96cc9233f41d195115dfd8bb15
Merged-In: Ia0cdcdc2f6810d96cc9233f41d195115dfd8bb15
(cherry picked from commit 80116187d5e41ab71750465bbf24f086d15684e0)
diff --git a/res/drawable/ic_warning.xml b/res/drawable/ic_delete.xml
similarity index 82%
rename from res/drawable/ic_warning.xml
rename to res/drawable/ic_delete.xml
index 2163203..333cb63 100644
--- a/res/drawable/ic_warning.xml
+++ b/res/drawable/ic_delete.xml
@@ -20,6 +20,6 @@
         android:viewportHeight="24"
         android:viewportWidth="24">
     <path
-        android:fillColor="#1A73E8"
-        android:pathData="M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z" />
+        android:fillColor="@color/clear_cache_icon_color"
+        android:pathData="M15 4V3H9v1H4v2h1v13c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V6h1V4h-5zm2 15H7V6h10v13zM9 8h2v9H9zm4 0h2v9h-2z" />
 </vector>
\ No newline at end of file
diff --git a/res/layout/cache_clearing_dialog.xml b/res/layout/cache_clearing_dialog.xml
index 06f97b8..bf5a60b 100644
--- a/res/layout/cache_clearing_dialog.xml
+++ b/res/layout/cache_clearing_dialog.xml
@@ -20,15 +20,18 @@
         android:theme="@style/CacheClearingAlertDialogTheme"
         android:paddingStart="?android:attr/dialogPreferredPadding"
         android:paddingEnd="?android:attr/dialogPreferredPadding"
+        android:paddingTop="@dimen/dialog_space"
+        android:paddingBottom="10dp"
         android:orientation="vertical">
     <ImageView
         android:adjustViewBounds="true"
+        android:id="@+id/dialog_icon"
         android:layout_gravity="bottom|center_horizontal"
         android:layout_width="24dp"
         android:layout_height="24dp"
-        android:layout_marginTop="20dp"
+        android:layout_marginBottom="7dp"
         android:scaleType="fitCenter"
-        android:src="@drawable/ic_warning"
+        android:src="@drawable/ic_delete"
         android:contentDescription="@null"/>
 
     <TextView
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index 56d8417..1478eb2 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -16,5 +16,6 @@
   -->
 
 <resources>
-    <color name="thumb_gray_color">#3c4043</color>
+    <color name="thumb_gray_color">#3C4043</color>
+    <color name="clear_cache_icon_color">#DADCE0</color>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 28f31ee..ed0c6c2 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -15,5 +15,6 @@
 -->
 
 <resources>
-    <color name="thumb_gray_color">#1f000000</color>
+    <color name="thumb_gray_color">#1F000000</color>
+    <color name="clear_cache_icon_color">#5F6368</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 840135e..c3bdf8f 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -18,4 +18,5 @@
     <dimen name="permission_dialog_width">320dp</dimen>
     <dimen name="permission_thumb_size">64dp</dimen>
     <dimen name="permission_thumb_margin">6dp</dimen>
+    <dimen name="dialog_space">20dp</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 96c086d..d6171ca 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -62,7 +62,7 @@
     </plurals>
 
     <!-- Cache clearing permission dialog warning title. [CHAR LIMIT=NONE] -->
-    <string name="cache_clearing_dialog_title">Clear temporary app files?</string>
+    <string name="cache_clearing_dialog_title">Clear temporary app files</string>
 
     <!-- Cache clearing permission dialog warning text. [CHAR LIMIT=NONE] -->
     <string name="cache_clearing_dialog_text"><xliff:g id="app_seeking_permission" example="File manager">%s</xliff:g> would like to clear some temporary files. This may result in an increased usage of battery or cellular data.</string>
@@ -70,6 +70,9 @@
     <!-- Cache clearing in progress title. [CHAR LIMIT=NONE] -->
     <string name="cache_clearing_in_progress_title">Clearing temporary app files\u2026</string>
 
+    <!--  Cache clearing permission dialog Clear button text. [CHAR LIMIT=30] -->
+    <string name="clear">Clear</string>
+
     <!-- Allow dialog action text. [CHAR LIMIT=30] -->
     <string name="allow">Allow</string>
 
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 7097c8b..771da7c 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -41,6 +41,7 @@
         <item name="android:layout_height">wrap_content</item>
         <item name="android:gravity">center</item>
         <item name="android:textSize">16sp</item>
+        <item name="android:textStyle">bold</item>
     </style>
 
 </resources>
diff --git a/src/com/android/providers/media/CacheClearingActivity.java b/src/com/android/providers/media/CacheClearingActivity.java
index d65a4a2..e3aff15 100644
--- a/src/com/android/providers/media/CacheClearingActivity.java
+++ b/src/com/android/providers/media/CacheClearingActivity.java
@@ -25,6 +25,7 @@
 import android.graphics.Typeface;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Handler;
 import android.text.BidiFormatter;
 import android.text.SpannableString;
 import android.text.TextPaint;
@@ -43,6 +44,7 @@
     private static final String TAG = "CacheClearingActivity";
     private static final float MAX_APP_NAME_SIZE_PX = 500f;
     private static final float TEXT_SIZE = 42f;
+    private static final Long LEAST_SHOW_PROGRESS_TIME_MS = 300L;
 
     private AlertDialog mActionDialog;
     private Dialog mLoadingDialog;
@@ -102,11 +104,14 @@
     }
 
     private class CacheClearingTask extends AsyncTask<Void, Void, Integer> {
+        private long mStartTime;
+
         @Override
         protected void onPreExecute() {
             dismissDialogs(mActionDialog);
             createLoadingDialog();
             mLoadingDialog.show();
+            mStartTime = System.currentTimeMillis();
         }
 
         @Override
@@ -118,13 +123,25 @@
         protected void onPostExecute(Integer result) {
             // We take the convention of not using primitive wrapper pretty seriously
             int status = result.intValue();
-            dismissDialogs(mLoadingDialog);
+
             if (result == 0) {
                 setResult(RESULT_OK);
             } else {
                 setResult(status);
             }
-            finish();
+
+            // Don't dismiss the progress dialog too quick, it will cause bad UX.
+            final long duration = System.currentTimeMillis() - mStartTime;
+            if (duration > LEAST_SHOW_PROGRESS_TIME_MS) {
+                dismissDialogs(mLoadingDialog);
+                finish();
+            } else {
+                Handler handler = new Handler(getMainLooper());
+                handler.postDelayed(() -> {
+                    dismissDialogs(mLoadingDialog);
+                    finish();
+                }, LEAST_SHOW_PROGRESS_TIME_MS - duration);
+            }
         }
     }
 
@@ -132,12 +149,19 @@
         final CharSequence dialogTitle = getString(R.string.cache_clearing_in_progress_title);
         final View dialogTitleView = View.inflate(this, R.layout.cache_clearing_dialog, null);
         final TextView titleText = dialogTitleView.findViewById(R.id.dialog_title);
+        final ProgressBar progressBar = new ProgressBar(CacheClearingActivity.this);
+        final int padding = getResources().getDimensionPixelOffset(R.dimen.dialog_space);
+
+        progressBar.setIndeterminate(true);
+        progressBar.setPadding(0, padding / 2, 0, padding);
         titleText.setText(dialogTitle);
         mLoadingDialog = new AlertDialog.Builder(this)
                 .setCustomTitle(dialogTitleView)
-                .setView(new ProgressBar(CacheClearingActivity.this))
+                .setView(progressBar)
                 .setCancelable(false)
                 .create();
+
+        dialogTitleView.findViewById(R.id.dialog_icon).setVisibility(View.GONE);
         mLoadingDialog.create();
         setDialogOverlaySettings(mActionDialog);
     }
@@ -149,16 +173,7 @@
         final String unsanitizedAppName = TextUtils.ellipsize(appLabel,
                 paint, MAX_APP_NAME_SIZE_PX, TextUtils.TruncateAt.END).toString();
         final String appName = BidiFormatter.getInstance().unicodeWrap(unsanitizedAppName);
-
         final String actionText = getString(R.string.cache_clearing_dialog_text, appName);
-        final SpannableString message = new SpannableString(actionText);
-
-        int appNameIndex = actionText.indexOf(appName);
-        if (appNameIndex >= 0) {
-            message.setSpan(new StyleSpan(Typeface.BOLD),
-                    appNameIndex, appNameIndex + appName.length(), 0);
-        }
-
         final CharSequence dialogTitle = getString(R.string.cache_clearing_dialog_title);
 
         final View dialogTitleView = View.inflate(this, R.layout.cache_clearing_dialog, null);
@@ -166,9 +181,9 @@
         titleText.setText(dialogTitle);
         mActionDialog = new AlertDialog.Builder(this)
                 .setCustomTitle(dialogTitleView)
-                .setMessage(message)
-                .setPositiveButton(R.string.allow, this)
-                .setNegativeButton(R.string.deny, this)
+                .setMessage(actionText)
+                .setPositiveButton(R.string.clear, this)
+                .setNegativeButton(android.R.string.cancel, this)
                 .setCancelable(false)
                 .create();