[MasterClear] fix race in showing dialog

Wiping the PDB effectively starves all other threads from
accessing flash, and freezes the UI. We throw up a dialog
but there's a race between drawing the dialog and starting the
wipe.

Show the dialog in onPreExecute to fix this.

Bug: 20854355
Change-Id: I8462f5ed3ff53ed574ebc1be416a821c2086b4f5
This commit is contained in:
Andres Morales
2015-06-01 16:23:41 -07:00
parent 47ed6ca004
commit c17ec1be19

View File

@@ -65,14 +65,10 @@ public class MasterClearConfirm extends InstrumentedFragment {
if (pdbManager != null && !pdbManager.getOemUnlockEnabled()) {
// if OEM unlock is enabled, this will be wiped during FR process.
final ProgressDialog progressDialog = getProgressDialog();
progressDialog.show();
// need to prevent orientation changes as we're about to go into
// a long IO request, so we won't be able to access inflate resources on flash
final int oldOrientation = getActivity().getRequestedOrientation();
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
new AsyncTask<Void, Void, Void>() {
int mOldOrientation;
ProgressDialog mProgressDialog;
@Override
protected Void doInBackground(Void... params) {
pdbManager.wipe();
@@ -81,10 +77,21 @@ public class MasterClearConfirm extends InstrumentedFragment {
@Override
protected void onPostExecute(Void aVoid) {
progressDialog.hide();
getActivity().setRequestedOrientation(oldOrientation);
mProgressDialog.hide();
getActivity().setRequestedOrientation(mOldOrientation);
doMasterClear();
}
@Override
protected void onPreExecute() {
mProgressDialog = getProgressDialog();
mProgressDialog.show();
// need to prevent orientation changes as we're about to go into
// a long IO request, so we won't be able to access inflate resources on flash
mOldOrientation = getActivity().getRequestedOrientation();
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
}.execute();
} else {
doMasterClear();
@@ -143,7 +150,8 @@ public class MasterClearConfirm extends InstrumentedFragment {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
mEraseSdCard = args != null && args.getBoolean(MasterClear.ERASE_EXTERNAL_EXTRA);
mEraseSdCard = args != null
&& args.getBoolean(MasterClear.ERASE_EXTERNAL_EXTRA);
}
@Override