[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:
@@ -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
|
||||
|
Reference in New Issue
Block a user