diff options
author | 2021-03-25 11:25:00 +0800 | |
---|---|---|
committer | 2021-03-25 13:16:27 +0800 | |
commit | 53f02921f00f2d817093709dfb24556fafce3449 (patch) | |
tree | 49d050626dcb41a951d0483c6d5a8d23b06d67d3 | |
parent | d52daa1629bfebcc059ee7404103f1d578aea203 (diff) |
Delay for showing progress dialog in permissionActivity
Test: manual, record videos.
Bug: 183589702
Change-Id: I3aa42d4cc6a515efd11865484cb4a59b93199a35
-rw-r--r-- | src/com/android/providers/media/PermissionActivity.java | 39 | ||||
-rw-r--r-- | tools/dialogs/AndroidManifest.xml | 1 |
2 files changed, 32 insertions, 8 deletions
diff --git a/src/com/android/providers/media/PermissionActivity.java b/src/com/android/providers/media/PermissionActivity.java index 5daa70bdf..ee374481b 100644 --- a/src/com/android/providers/media/PermissionActivity.java +++ b/src/com/android/providers/media/PermissionActivity.java @@ -110,8 +110,15 @@ public class PermissionActivity extends Activity { private AsyncTask<Void, Void, Void> positiveActionTask; private Dialog progressDialog; private TextView titleView; + private Handler mHandler; + private Runnable mShowProgressDialogRunnable = () -> { + // We will show the progress dialog, add the dim effect back. + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); + progressDialog.show(); + }; private static final Long LEAST_SHOW_PROGRESS_TIME_MS = 300L; + private static final Long BEFORE_SHOW_PROGRESS_TIME_MS = 300L; @VisibleForTesting static final String VERB_WRITE = "write"; @@ -146,6 +153,12 @@ public class PermissionActivity extends Activity { getWindow().addSystemFlags( WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); setFinishOnTouchOutside(false); + // remove the dim effect + // We may not show the progress dialog, if we don't remove the dim effect, + // it may have flicker. + getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); + getWindow().setDimAmount(0.0f); + // All untrusted input values here were validated when generating the // original PendingIntent @@ -164,6 +177,7 @@ public class PermissionActivity extends Activity { return; } + mHandler = new Handler(getMainLooper()); // Create Progress dialog createProgressDialog(); @@ -226,6 +240,7 @@ public class PermissionActivity extends Activity { @Override public void onDestroy() { super.onDestroy(); + mHandler.removeCallbacks(mShowProgressDialogRunnable); // Cancel and interrupt the AsyncTask of the positive action. This avoids // calling the old activity during "onPostExecute", but the AsyncTask could // still finish its background task. For now we are ok with: @@ -251,8 +266,10 @@ public class PermissionActivity extends Activity { ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false); } - progressDialog.show(); final long startTime = System.currentTimeMillis(); + + mHandler.postDelayed(mShowProgressDialogRunnable, BEFORE_SHOW_PROGRESS_TIME_MS); + positiveActionTask = new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { @@ -303,17 +320,23 @@ public class PermissionActivity extends Activity { @Override protected void onPostExecute(Void result) { setResult(Activity.RESULT_OK); - // 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(); + mHandler.removeCallbacks(mShowProgressDialogRunnable); + + if (!progressDialog.isShowing()) { finish(); } else { - Handler handler = new Handler(getMainLooper()); - handler.postDelayed(() -> { + // Don't dismiss the progress dialog too quick, it will cause bad UX. + final long duration = + System.currentTimeMillis() - startTime - BEFORE_SHOW_PROGRESS_TIME_MS; + if (duration > LEAST_SHOW_PROGRESS_TIME_MS) { progressDialog.dismiss(); finish(); - }, LEAST_SHOW_PROGRESS_TIME_MS - duration); + } else { + mHandler.postDelayed(() -> { + progressDialog.dismiss(); + finish(); + }, LEAST_SHOW_PROGRESS_TIME_MS - duration); + } } } }.execute(); diff --git a/tools/dialogs/AndroidManifest.xml b/tools/dialogs/AndroidManifest.xml index 8ee5f2c93..960cb13b1 100644 --- a/tools/dialogs/AndroidManifest.xml +++ b/tools/dialogs/AndroidManifest.xml @@ -5,6 +5,7 @@ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> + <uses-permission android:name="android.permission.MANAGE_MEDIA"/> <application android:label="DialogsTool"> <activity android:name=".DialogsActivity" |