diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml index 102de1290c936f258fbc59e2c1714eda23fe5320..cc195722b5ed4d73697f2aff55a7ecfaada950bf 100644 --- a/briar-android/src/main/AndroidManifest.xml +++ b/briar-android/src/main/AndroidManifest.xml @@ -374,7 +374,12 @@ </activity> <activity - android:name="org.briarproject.briar.android.panic.ExitActivity" + android:name="org.briarproject.briar.android.logout.ExitActivity" + android:theme="@android:style/Theme.NoDisplay"> + </activity> + + <activity + android:name=".android.logout.HideUiActivity" android:theme="@android:style/Theme.NoDisplay"> </activity> diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java index 8e1abd66a2ac03720c8190175a7c8308f71a7f3a..633a9f3c21d88a560a52381f109ea5141725a37a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java @@ -17,6 +17,7 @@ import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult; import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.briar.R; +import org.briarproject.briar.android.logout.HideUiActivity; import org.briarproject.briar.android.navdrawer.NavDrawerActivity; import java.util.concurrent.CountDownLatch; @@ -28,8 +29,11 @@ import javax.inject.Inject; import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_NONE; import static android.app.PendingIntent.FLAG_UPDATE_CURRENT; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; +import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; +import static android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION; import static android.os.Build.VERSION.SDK_INT; import static android.support.v4.app.NotificationCompat.CATEGORY_SERVICE; import static android.support.v4.app.NotificationCompat.PRIORITY_MIN; @@ -194,7 +198,29 @@ public class BriarService extends Service { public void onLowMemory() { super.onLowMemory(); LOG.warning("Memory is low"); - // FIXME: Work out what to do about it + shutdownFromBackground(); + } + + private void shutdownFromBackground() { + // Stop the service + stopSelf(); + // Hide the UI + Intent i = new Intent(this, HideUiActivity.class); + i.addFlags(FLAG_ACTIVITY_NEW_TASK + | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + | FLAG_ACTIVITY_NO_ANIMATION + | FLAG_ACTIVITY_CLEAR_TASK); + startActivity(i); + // Wait for shutdown to complete, then exit + new Thread(() -> { + try { + if (started) lifecycleManager.waitForShutdown(); + } catch (InterruptedException e) { + LOG.info("Interrupted while waiting for shutdown"); + } + LOG.info("Exiting"); + System.exit(0); + }).start(); } /** diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java index 4996961820534ddedb08168fda130eb4f455b6a5..d557e717fc423eec24194a87f14f6ec2ffcc230e 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java @@ -16,7 +16,7 @@ import org.briarproject.briar.android.controller.BriarController; import org.briarproject.briar.android.controller.DbController; import org.briarproject.briar.android.controller.handler.UiResultHandler; import org.briarproject.briar.android.login.PasswordActivity; -import org.briarproject.briar.android.panic.ExitActivity; +import org.briarproject.briar.android.logout.ExitActivity; import java.util.logging.Logger; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/panic/ExitActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/logout/ExitActivity.java similarity index 92% rename from briar-android/src/main/java/org/briarproject/briar/android/panic/ExitActivity.java rename to briar-android/src/main/java/org/briarproject/briar/android/logout/ExitActivity.java index bd027c39c0f87eb3cd46d02c7b83f04758bd34b2..78c0a57e9f22bff498532179c3824f7f6ca710f3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/panic/ExitActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/logout/ExitActivity.java @@ -1,4 +1,4 @@ -package org.briarproject.briar.android.panic; +package org.briarproject.briar.android.logout; import android.os.Build; import android.os.Bundle; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/logout/HideUiActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/logout/HideUiActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..3064993f795b8336886e510fd770c1811c262281 --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/logout/HideUiActivity.java @@ -0,0 +1,20 @@ +package org.briarproject.briar.android.logout; + +import android.os.Bundle; + +import org.briarproject.briar.android.activity.ActivityComponent; +import org.briarproject.briar.android.activity.BaseActivity; + +public class HideUiActivity extends BaseActivity { + + @Override + public void onCreate(Bundle state) { + super.onCreate(state); + finish(); + } + + @Override + public void injectActivity(ActivityComponent component) { + + } +} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/fragment/SignOutFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/logout/SignOutFragment.java similarity index 77% rename from briar-android/src/main/java/org/briarproject/briar/android/fragment/SignOutFragment.java rename to briar-android/src/main/java/org/briarproject/briar/android/logout/SignOutFragment.java index 6d122c6df6a5b79a096cd3ec6ccb7f336ac3f650..a0bc316846e8c26b09a03c38d5652334434432a9 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/fragment/SignOutFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/logout/SignOutFragment.java @@ -1,4 +1,4 @@ -package org.briarproject.briar.android.fragment; +package org.briarproject.briar.android.logout; import android.os.Bundle; import android.view.LayoutInflater; @@ -7,7 +7,9 @@ import android.view.ViewGroup; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; +import org.briarproject.briar.android.fragment.BaseFragment; +import javax.annotation.Nonnull; import javax.annotation.Nullable; public class SignOutFragment extends BaseFragment { @@ -15,7 +17,7 @@ public class SignOutFragment extends BaseFragment { public static final String TAG = SignOutFragment.class.getName(); @Override - public View onCreateView(LayoutInflater inflater, + public View onCreateView(@Nonnull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_sign_out, container, false); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java index a42a1071c71586647d34691cf9c8c70004bdca39..af09db700455912c9c9946100a02604937cb43cc 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java @@ -37,7 +37,7 @@ import org.briarproject.briar.android.controller.handler.UiResultHandler; import org.briarproject.briar.android.forum.ForumListFragment; import org.briarproject.briar.android.fragment.BaseFragment; import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener; -import org.briarproject.briar.android.fragment.SignOutFragment; +import org.briarproject.briar.android.logout.SignOutFragment; import org.briarproject.briar.android.navdrawer.NavDrawerController.ExpiryWarning; import org.briarproject.briar.android.privategroup.list.GroupListFragment; import org.briarproject.briar.android.settings.SettingsActivity;