Fix crash on installation if activity destroyed

If the activity had been destroyed waiting for the installation to
finish the code would crash trying to display welcome dialogs (on
success) or error dialogs (on error).
This commit is contained in:
Fredrik Fornwall
2015-11-13 00:10:21 +01:00
parent 3b4e3b0e42
commit 89912be500
2 changed files with 40 additions and 26 deletions

View File

@@ -52,6 +52,7 @@ import android.view.View.OnClickListener;
import android.view.View.OnKeyListener; import android.view.View.OnKeyListener;
import android.view.View.OnLongClickListener; import android.view.View.OnLongClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemClickListener;
@@ -414,6 +415,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
TermuxInstaller.setupIfNeeded(TermuxActivity.this, new Runnable() { TermuxInstaller.setupIfNeeded(TermuxActivity.this, new Runnable() {
@Override @Override
public void run() { public void run() {
try {
if (TermuxPreferences.isShowWelcomeDialog(TermuxActivity.this)) { if (TermuxPreferences.isShowWelcomeDialog(TermuxActivity.this)) {
new AlertDialog.Builder(TermuxActivity.this).setTitle(R.string.welcome_dialog_title).setMessage(R.string.welcome_dialog_body) 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) .setCancelable(false).setPositiveButton(android.R.string.ok, null)
@@ -426,6 +428,9 @@ public final class TermuxActivity extends Activity implements ServiceConnection
}).show(); }).show();
} }
addNewSession(false, null); addNewSession(false, null);
} catch (WindowManager.BadTokenException e) {
// Activity finished - ignore.
}
} }
}); });
} else { } else {

View File

@@ -21,6 +21,7 @@ import android.content.DialogInterface.OnDismissListener;
import android.system.Os; import android.system.Os;
import android.util.Log; import android.util.Log;
import android.util.Pair; import android.util.Pair;
import android.view.WindowManager;
import com.termux.R; import com.termux.R;
import com.termux.terminal.EmulatorDebug; import com.termux.terminal.EmulatorDebug;
@@ -138,6 +139,7 @@ final class TermuxInstaller {
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
try {
new AlertDialog.Builder(activity).setTitle(R.string.bootstrap_error_title).setMessage(R.string.bootstrap_error_body) new AlertDialog.Builder(activity).setTitle(R.string.bootstrap_error_title).setMessage(R.string.bootstrap_error_body)
.setNegativeButton(R.string.bootstrap_error_abort, new OnClickListener() { .setNegativeButton(R.string.bootstrap_error_abort, new OnClickListener() {
@Override @Override
@@ -152,13 +154,20 @@ final class TermuxInstaller {
TermuxInstaller.setupIfNeeded(activity, whenDone); TermuxInstaller.setupIfNeeded(activity, whenDone);
} }
}).show(); }).show();
} catch (WindowManager.BadTokenException e) {
// Activity already dismissed - ignore.
}
} }
}); });
} finally { } finally {
activity.runOnUiThread(new Runnable() { activity.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
try {
progress.dismiss(); progress.dismiss();
} catch (RuntimeException e) {
// Activity already dismissed - ignore.
}
} }
}); });
} }