Avoid android.view.WindowLeaked issue with lingering popups

- Was seeing android.view.WindowLeaked issue on certain devices if the main popup menu was left lingering (which was
      previously by design ... bad design apparently)
    - Simplifies lifecycle pause/resume (should be no Android UI showing now)
    - Emulation resumes automatically, will handle pausing-CPU-on-resume on native side in subsequent commit
This commit is contained in:
Aaron Culliney 2015-04-14 21:51:43 -07:00
parent ee8660e394
commit 883403e6e8

View File

@ -190,55 +190,45 @@ public class Apple2Activity extends Activity {
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
Log.d(TAG, "onResume()");
mView.onResume(); mView.onResume();
Apple2MainMenu mainMenu = mView.getMainMenu();
boolean noMenusShowing = !(
(mainMenu != null && mainMenu.isShowing()) ||
(mQuitDialog != null && mQuitDialog.isShowing()) ||
(mRebootDialog != null && mRebootDialog.isShowing())
);
if (noMenusShowing) {
nativeOnResume(); nativeOnResume();
} }
}
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
Log.d(TAG, "onPause()");
mView.onPause(); mView.onPause();
Apple2MainMenu mainMenu = mView.getMainMenu();
if (mainMenu == null) {
// wow, early onPause, just quit and restart later
nativeOnQuit();
return;
}
nativeOnPause();
if (isSoftKeyboardShowing()) { if (isSoftKeyboardShowing()) {
mView.toggleKeyboard(); mView.toggleKeyboard();
} }
// Apparently not good to leave popup/dialog windows showing when backgrounding.
// Dismiss these popups to avoid android.view.WindowLeaked issues
Apple2MainMenu mainMenu = mView.getMainMenu();
if (mainMenu != null) {
mainMenu.dismiss();
}
if (mQuitDialog != null && mQuitDialog.isShowing()) {
mQuitDialog.dismiss();
}
if (mRebootDialog != null && mRebootDialog.isShowing()) {
mRebootDialog.dismiss();
}
// For good measure, get rid of other menus too
Apple2SettingsMenu settingsMenu = mView.getSettingsMenu(); Apple2SettingsMenu settingsMenu = mView.getSettingsMenu();
Apple2DisksMenu disksMenu = mView.getDisksMenu();
if (settingsMenu != null) { if (settingsMenu != null) {
settingsMenu.dismissWithoutResume(); settingsMenu.dismissWithoutResume();
} }
Apple2DisksMenu disksMenu = mView.getDisksMenu();
if (disksMenu != null) { if (disksMenu != null) {
disksMenu.dismissWithoutResume(); disksMenu.dismissWithoutResume();
} }
boolean someMenuShowing = mainMenu.isShowing() || nativeOnPause();
(mQuitDialog != null && mQuitDialog.isShowing()) ||
(mRebootDialog != null && mRebootDialog.isShowing());
if (!someMenuShowing) {
// show main menu on pause
mView.showMainMenu();
}
} }
@Override @Override