[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 (pdbManager != null && !pdbManager.getOemUnlockEnabled()) {
// if OEM unlock is enabled, this will be wiped during FR process. // 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>() { new AsyncTask<Void, Void, Void>() {
int mOldOrientation;
ProgressDialog mProgressDialog;
@Override @Override
protected Void doInBackground(Void... params) { protected Void doInBackground(Void... params) {
pdbManager.wipe(); pdbManager.wipe();
@@ -81,10 +77,21 @@ public class MasterClearConfirm extends InstrumentedFragment {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
progressDialog.hide(); mProgressDialog.hide();
getActivity().setRequestedOrientation(oldOrientation); getActivity().setRequestedOrientation(mOldOrientation);
doMasterClear(); 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(); }.execute();
} else { } else {
doMasterClear(); doMasterClear();
@@ -143,7 +150,8 @@ public class MasterClearConfirm extends InstrumentedFragment {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Bundle args = getArguments(); Bundle args = getArguments();
mEraseSdCard = args != null && args.getBoolean(MasterClear.ERASE_EXTERNAL_EXTRA); mEraseSdCard = args != null
&& args.getBoolean(MasterClear.ERASE_EXTERNAL_EXTRA);
} }
@Override @Override