Merge "Add the progress dialog for Bulk edit dialog" into rvc-dev
diff --git a/src/com/android/providers/media/PermissionActivity.java b/src/com/android/providers/media/PermissionActivity.java
index 0845fdd..041d89f 100644
--- a/src/com/android/providers/media/PermissionActivity.java
+++ b/src/com/android/providers/media/PermissionActivity.java
@@ -25,6 +25,7 @@
 
 import android.app.Activity;
 import android.app.AlertDialog;
+import android.app.ProgressDialog;
 import android.content.ContentProviderOperation;
 import android.content.ContentResolver;
 import android.content.ContentValues;
@@ -43,6 +44,7 @@
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Handler;
 import android.provider.MediaStore;
 import android.provider.MediaStore.MediaColumns;
 import android.text.TextUtils;
@@ -95,8 +97,11 @@
     private String volumeName;
     private ApplicationInfo appInfo;
 
+    private ProgressDialog progressDialog;
     private TextView titleView;
 
+    private static final Long LEAST_SHOW_PROGRESS_TIME_MS = 300L;
+
     private static final String VERB_WRITE = "write";
     private static final String VERB_TRASH = "trash";
     private static final String VERB_UNTRASH = "untrash";
@@ -174,6 +179,8 @@
         titleView = (TextView) findViewByPredicate(dialog.getWindow().getDecorView(), (view) -> {
             return (view instanceof TextView) && view.isImportantForAccessibility();
         });
+
+        progressDialog = new ProgressDialog(this);
     }
 
     private void onPositiveAction(DialogInterface dialog, int which) {
@@ -181,6 +188,8 @@
         ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
         ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
 
+        progressDialog.show();
+        final long startTime = System.currentTimeMillis();
         new AsyncTask<Void, Void, Void>() {
             @Override
             protected Void doInBackground(Void... params) {
@@ -230,7 +239,18 @@
             @Override
             protected void onPostExecute(Void result) {
                 setResult(Activity.RESULT_OK);
-                finish();
+                // Don't dismiss the progress dialog too quick, it will cause bad UX.
+                final long duration = System.currentTimeMillis() - startTime;
+                if (duration > LEAST_SHOW_PROGRESS_TIME_MS) {
+                    progressDialog.dismiss();
+                    finish();
+                } else {
+                    Handler handler = new Handler(getMainLooper());
+                    handler.postDelayed(() -> {
+                        progressDialog.dismiss();
+                        finish();
+                    }, LEAST_SHOW_PROGRESS_TIME_MS - duration);
+                }
             }
         }.execute();
     }