diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index e277c7f2..c2b3248d 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -52,6 +52,7 @@ import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; +import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; @@ -414,18 +415,22 @@ public final class TermuxActivity extends Activity implements ServiceConnection TermuxInstaller.setupIfNeeded(TermuxActivity.this, new Runnable() { @Override public void run() { - if (TermuxPreferences.isShowWelcomeDialog(TermuxActivity.this)) { - new AlertDialog.Builder(TermuxActivity.this).setTitle(R.string.welcome_dialog_title).setMessage(R.string.welcome_dialog_body) - .setCancelable(false).setPositiveButton(android.R.string.ok, null) - .setNegativeButton(R.string.welcome_dialog_dont_show_again_button, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - TermuxPreferences.disableWelcomeDialog(TermuxActivity.this); - dialog.dismiss(); - } - }).show(); + try { + if (TermuxPreferences.isShowWelcomeDialog(TermuxActivity.this)) { + new AlertDialog.Builder(TermuxActivity.this).setTitle(R.string.welcome_dialog_title).setMessage(R.string.welcome_dialog_body) + .setCancelable(false).setPositiveButton(android.R.string.ok, null) + .setNegativeButton(R.string.welcome_dialog_dont_show_again_button, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + TermuxPreferences.disableWelcomeDialog(TermuxActivity.this); + dialog.dismiss(); + } + }).show(); + } + addNewSession(false, null); + } catch (WindowManager.BadTokenException e) { + // Activity finished - ignore. } - addNewSession(false, null); } }); } else { diff --git a/app/src/main/java/com/termux/app/TermuxInstaller.java b/app/src/main/java/com/termux/app/TermuxInstaller.java index ce277d2f..1e76b916 100644 --- a/app/src/main/java/com/termux/app/TermuxInstaller.java +++ b/app/src/main/java/com/termux/app/TermuxInstaller.java @@ -21,6 +21,7 @@ import android.content.DialogInterface.OnDismissListener; import android.system.Os; import android.util.Log; import android.util.Pair; +import android.view.WindowManager; import com.termux.R; import com.termux.terminal.EmulatorDebug; @@ -138,27 +139,35 @@ final class TermuxInstaller { activity.runOnUiThread(new Runnable() { @Override public void run() { - new AlertDialog.Builder(activity).setTitle(R.string.bootstrap_error_title).setMessage(R.string.bootstrap_error_body) - .setNegativeButton(R.string.bootstrap_error_abort, new OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - activity.finish(); - } - }).setPositiveButton(R.string.bootstrap_error_try_again, new OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - TermuxInstaller.setupIfNeeded(activity, whenDone); - } - }).show(); + try { + new AlertDialog.Builder(activity).setTitle(R.string.bootstrap_error_title).setMessage(R.string.bootstrap_error_body) + .setNegativeButton(R.string.bootstrap_error_abort, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + activity.finish(); + } + }).setPositiveButton(R.string.bootstrap_error_try_again, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + TermuxInstaller.setupIfNeeded(activity, whenDone); + } + }).show(); + } catch (WindowManager.BadTokenException e) { + // Activity already dismissed - ignore. + } } }); } finally { activity.runOnUiThread(new Runnable() { @Override public void run() { - progress.dismiss(); + try { + progress.dismiss(); + } catch (RuntimeException e) { + // Activity already dismissed - ignore. + } } }); }