diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml index 27956ce43..edcea26a7 100644 --- a/briar-android/src/main/AndroidManifest.xml +++ b/briar-android/src/main/AndroidManifest.xml @@ -99,6 +99,10 @@ android:name="org.briarproject.briar.android.splash.ExpiredActivity" android:label="@string/app_name" /> + + diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java index 8c0a30735..43baf5816 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java @@ -80,6 +80,7 @@ import org.briarproject.briar.android.sharing.ShareBlogFragment; import org.briarproject.briar.android.sharing.ShareForumActivity; import org.briarproject.briar.android.sharing.ShareForumFragment; import org.briarproject.briar.android.sharing.SharingModule; +import org.briarproject.briar.android.splash.ExpiredOldAndroidActivity; import org.briarproject.briar.android.splash.SplashScreenActivity; import org.briarproject.briar.android.test.TestDataActivity; @@ -182,6 +183,8 @@ public interface ActivityComponent { void inject(RemovableDriveActivity activity); + void inject(ExpiredOldAndroidActivity activity); + // Fragments void inject(SetupFragment fragment); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredOldAndroidActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredOldAndroidActivity.java new file mode 100644 index 000000000..43cf53988 --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredOldAndroidActivity.java @@ -0,0 +1,57 @@ +package org.briarproject.briar.android.splash; + +import android.content.Intent; +import android.os.Bundle; + +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.system.AndroidWakeLockManager; +import org.briarproject.briar.R; +import org.briarproject.briar.android.activity.ActivityComponent; +import org.briarproject.briar.android.activity.BaseActivity; +import org.briarproject.briar.android.controller.BriarController; +import org.briarproject.briar.android.logout.ExitActivity; + +import javax.annotation.Nullable; +import javax.inject.Inject; + +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; +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; + +@MethodsNotNullByDefault +@ParametersNotNullByDefault +public class ExpiredOldAndroidActivity extends BaseActivity { + + @Inject + BriarController briarController; + @Inject + AndroidWakeLockManager wakeLockManager; + + @Override + public void onCreate(@Nullable Bundle state) { + super.onCreate(state); + + setContentView(R.layout.activity_expired_old_android); + findViewById(R.id.delete_account_button).setOnClickListener(v -> { + // Hold a wake lock to ensure we exit before the device goes to sleep + wakeLockManager.runWakefully(() -> { + // we're not signed in, just go ahead and delete + briarController.deleteAccount(); + // remove from recent apps + Intent i = new Intent(this, ExitActivity.class); + i.addFlags(FLAG_ACTIVITY_NEW_TASK + | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + | FLAG_ACTIVITY_NO_ANIMATION + | FLAG_ACTIVITY_CLEAR_TASK); + startActivity(i); + }, "DeleteAccount"); + }); + } + + @Override + public void injectActivity(ActivityComponent component) { + component.inject(this); + } +} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java index 81b3e75c6..b8905f764 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java @@ -65,9 +65,14 @@ public class SplashScreenActivity extends BaseActivity { int duration = getResources().getInteger(R.integer.splashScreenDuration); new Handler().postDelayed(() -> { - if (IS_DEBUG_BUILD && currentTimeMillis() >= EXPIRY_DATE) { - LOG.info("Expired"); - startNextActivity(ExpiredActivity.class); + if (currentTimeMillis() >= EXPIRY_DATE) { + if (IS_DEBUG_BUILD) { + LOG.info("Expired: debug build"); + startNextActivity(ExpiredActivity.class); + } else { + LOG.info("Expired: running on old Android"); + startNextActivity(ExpiredOldAndroidActivity.class); + } } else { startNextActivity(ENTRY_ACTIVITY); } diff --git a/briar-android/src/main/res/layout/activity_expired_old_android.xml b/briar-android/src/main/res/layout/activity_expired_old_android.xml new file mode 100644 index 000000000..2d21398ae --- /dev/null +++ b/briar-android/src/main/res/layout/activity_expired_old_android.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + +