diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0184b2fbe..742c9383e 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -185,6 +185,18 @@ + + + + + + + - = 21) { + finishAndRemoveTask(); + } else { + finish(); + } + + System.exit(0); + } + + public static void exitAndRemoveFromRecentApps(Activity activity) { + Intent intent = new Intent(activity, ExitActivity.class); + + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + | Intent.FLAG_ACTIVITY_CLEAR_TASK + | Intent.FLAG_ACTIVITY_NO_ANIMATION); + + activity.startActivity(intent); + } +} diff --git a/src/info/guardianproject/otr/app/im/app/NewChatActivity.java b/src/info/guardianproject/otr/app/im/app/NewChatActivity.java index 34d302a7e..b38714fd1 100644 --- a/src/info/guardianproject/otr/app/im/app/NewChatActivity.java +++ b/src/info/guardianproject/otr/app/im/app/NewChatActivity.java @@ -982,6 +982,7 @@ public boolean onMenuItemClick(MenuItem item) { case R.id.menu_exit: WelcomeActivity.shutdownAndLock(NewChatActivity.this); + ExitActivity.exitAndRemoveFromRecentApps(NewChatActivity.this); return true; case R.id.menu_add_contact: diff --git a/src/info/guardianproject/otr/app/im/app/PanicResponderActivity.java b/src/info/guardianproject/otr/app/im/app/PanicResponderActivity.java new file mode 100644 index 000000000..c4b85394d --- /dev/null +++ b/src/info/guardianproject/otr/app/im/app/PanicResponderActivity.java @@ -0,0 +1,31 @@ + +package info.guardianproject.otr.app.im.app; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; + +public class PanicResponderActivity extends Activity { + + public static final String PANIC_TRIGGER_ACTION = "info.guardianproject.panic.action.TRIGGER"; + + @SuppressLint("NewApi") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = getIntent(); + if (intent != null && PANIC_TRIGGER_ACTION.equals(intent.getAction())) { + WelcomeActivity.shutdownAndLock(this); + ExitActivity.exitAndRemoveFromRecentApps(this); + } + + if (Build.VERSION.SDK_INT >= 21) { + finishAndRemoveTask(); + } else { + finish(); + } + } +} diff --git a/src/info/guardianproject/otr/app/im/app/WelcomeActivity.java b/src/info/guardianproject/otr/app/im/app/WelcomeActivity.java index aad4f8478..4b5febacb 100644 --- a/src/info/guardianproject/otr/app/im/app/WelcomeActivity.java +++ b/src/info/guardianproject/otr/app/im/app/WelcomeActivity.java @@ -61,6 +61,8 @@ public class WelcomeActivity extends ThemeableActivity implements ICacheWordSubs private boolean mDoSignIn = true; + private ProgressDialog dialog; + static final String[] PROVIDER_PROJECTION = { Imps.Provider._ID, Imps.Provider.NAME, Imps.Provider.FULLNAME, Imps.Provider.CATEGORY, Imps.Provider.ACTIVE_ACCOUNT_ID, @@ -218,6 +220,9 @@ protected void onDestroy() { if (mCacheWord != null) mCacheWord.disconnect(); + + if (dialog != null) + dialog.dismiss(); } @Override @@ -445,9 +450,6 @@ private void completeShutdown () } new AsyncTask() { - private ProgressDialog dialog; - - @Override protected void onPreExecute() { if (mApp.getActiveConnections().size() > 0)