From f971533a5b7868afb2afba232c0a5687df5f97e0 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 25 Mar 2021 13:52:51 -0300 Subject: [PATCH] Add a way to detect if code runs as instrumentation test and disable some dialogs to make tests easier to write --- .../briar/android/BriarTestComponentApplication.java | 5 +++++ .../org/briarproject/briar/android/BriarApplication.java | 2 ++ .../org/briarproject/briar/android/BriarApplicationImpl.java | 5 +++++ .../java/org/briarproject/briar/android/BriarService.java | 4 +++- .../briarproject/briar/android/activity/BaseActivity.java | 5 +++-- .../briarproject/briar/android/activity/BriarActivity.java | 4 +++- .../briar/android/controller/BriarControllerImpl.java | 4 +++- .../briar/android/navdrawer/NavDrawerActivity.java | 5 +++-- .../briar/android/navdrawer/NavDrawerViewModel.java | 5 ++++- 9 files changed, 31 insertions(+), 8 deletions(-) diff --git a/briar-android/src/androidTest/java/org/briarproject/briar/android/BriarTestComponentApplication.java b/briar-android/src/androidTest/java/org/briarproject/briar/android/BriarTestComponentApplication.java index 239cd05ee..c60e61cb7 100644 --- a/briar-android/src/androidTest/java/org/briarproject/briar/android/BriarTestComponentApplication.java +++ b/briar-android/src/androidTest/java/org/briarproject/briar/android/BriarTestComponentApplication.java @@ -19,4 +19,9 @@ public class BriarTestComponentApplication extends BriarApplicationImpl { return component; } + @Override + public boolean isInstrumentationTest() { + return true; + } + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java index b113a195a..d0d863b65 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java @@ -19,4 +19,6 @@ public interface BriarApplication extends BrambleApplication { SharedPreferences getDefaultSharedPreferences(); boolean isRunningInBackground(); + + boolean isInstrumentationTest(); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java index 927827913..3026d8302 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java @@ -151,4 +151,9 @@ public class BriarApplicationImpl extends Application ActivityManager.getMyMemoryState(info); return (info.importance != IMPORTANCE_FOREGROUND); } + + @Override + public boolean isInstrumentationTest() { + return false; + } } 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 6e36b1390..4014a73db 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 @@ -301,7 +301,9 @@ public class BriarService extends Service { LOG.info("Interrupted while waiting for shutdown"); } LOG.info("Exiting"); - System.exit(0); + if (!app.isInstrumentationTest()) { + System.exit(0); + } }, "BackgroundShutdown"); }, "BackgroundShutdown"); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java index 14a6b9845..da993afed 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java @@ -44,7 +44,6 @@ import static androidx.lifecycle.Lifecycle.State.STARTED; import static java.util.Collections.emptyList; import static java.util.logging.Level.INFO; import static java.util.logging.Logger.getLogger; -import static org.briarproject.briar.BuildConfig.FLAVOR; import static org.briarproject.briar.android.TestingConstants.PREVENT_SCREENSHOTS; import static org.briarproject.briar.android.util.UiUtils.hideSoftKeyboard; @@ -194,7 +193,9 @@ public abstract class BaseActivity extends AppCompatActivity } private boolean showScreenFilterWarning() { - if (FLAVOR == "screenshot") return false; + if (((BriarApplication) getApplication()).isInstrumentationTest()) { + return false; + } // If the dialog is already visible, filter the tap ScreenFilterDialogFragment f = findDialogFragment(); if (f != null && f.isVisible()) return false; 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 baf49a711..eae436236 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 @@ -10,6 +10,7 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.system.AndroidWakeLockManager; import org.briarproject.bramble.api.system.Wakeful; import org.briarproject.briar.R; +import org.briarproject.briar.android.BriarApplication; import org.briarproject.briar.android.account.UnlockActivity; import org.briarproject.briar.android.controller.BriarController; import org.briarproject.briar.android.controller.DbController; @@ -236,7 +237,8 @@ public abstract class BriarActivity extends BaseActivity { if (SDK_INT >= 21) finishAndRemoveTask(); else supportFinishAfterTransition(); LOG.info("Exiting"); - System.exit(0); + BriarApplication app = (BriarApplication) getApplication(); + if (!app.isInstrumentationTest()) System.exit(0); } @Deprecated diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java index 65c3efec4..e0c166bf0 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java @@ -12,6 +12,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.api.system.AndroidWakeLockManager; +import org.briarproject.briar.android.BriarApplication; import org.briarproject.briar.android.BriarService; import org.briarproject.briar.android.BriarService.BriarServiceConnection; import org.briarproject.briar.android.controller.handler.ResultHandler; @@ -104,7 +105,8 @@ public class BriarControllerImpl implements BriarController { @Override public void hasDozed(ResultHandler handler) { - if (!dozeWatchdog.getAndResetDozeFlag() + BriarApplication app = (BriarApplication) activity.getApplication(); + if (app.isInstrumentationTest() || !dozeWatchdog.getAndResetDozeFlag() || !needsDozeWhitelisting(activity)) { handler.onResult(false); return; 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 aa27b6234..d9865871d 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 @@ -27,6 +27,7 @@ import org.briarproject.bramble.api.plugin.Plugin.State; import org.briarproject.bramble.api.plugin.TorConstants; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.briar.R; +import org.briarproject.briar.android.BriarApplication; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; import org.briarproject.briar.android.blog.FeedFragment; @@ -71,7 +72,6 @@ import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleS import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING; import static org.briarproject.bramble.api.plugin.Plugin.State.STARTING_STOPPING; -import static org.briarproject.briar.BuildConfig.FLAVOR; import static org.briarproject.briar.android.BriarService.EXTRA_STARTUP_FAILED; import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD; @@ -135,7 +135,8 @@ public class NavDrawerActivity extends BriarActivity implements navDrawerViewModel = provider.get(NavDrawerViewModel.class); pluginViewModel = provider.get(PluginViewModel.class); - if (IS_DEBUG_BUILD && (FLAVOR != "screenshot")) { + BriarApplication app = (BriarApplication) getApplication(); + if (IS_DEBUG_BUILD && !app.isInstrumentationTest()) { navDrawerViewModel.showExpiryWarning() .observe(this, this::showExpiryWarning); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerViewModel.java index 132cc0b9f..783922c60 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerViewModel.java @@ -10,6 +10,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.api.system.AndroidExecutor; +import org.briarproject.briar.android.BriarApplication; import org.briarproject.briar.android.viewmodel.DbViewModel; import java.util.concurrent.Executor; @@ -120,7 +121,9 @@ public class NavDrawerViewModel extends DbViewModel { @UiThread void checkDozeWhitelisting() { // check this first, to hit the DbThread only when really necessary - if (!needsDozeWhitelisting(getApplication())) { + BriarApplication app = (BriarApplication) getApplication(); + if (app.isInstrumentationTest() || + !needsDozeWhitelisting(getApplication())) { shouldAskForDozeWhitelisting.setValue(false); return; }