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 e0ad7d8c9cb03e2c799b850cb01f3eb23071a3ff..4ce1d18b2e73749daa0016d7f059ebc41bd847fd 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 @@ -19,6 +19,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.CheckBox; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; @@ -54,11 +55,11 @@ import static android.support.v4.widget.DrawerLayout.LOCK_MODE_LOCKED_CLOSED; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_DOZE_WHITELISTING; +import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD; import static org.briarproject.briar.android.navdrawer.NavDrawerController.ExpiryWarning.NO; import static org.briarproject.briar.android.navdrawer.NavDrawerController.ExpiryWarning.UPDATE; import static org.briarproject.briar.android.util.UiUtils.getDaysUntilExpiry; import static org.briarproject.briar.android.util.UiUtils.getDozeWhitelistingIntent; -import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting; public class NavDrawerActivity extends BriarActivity implements BaseFragmentListener, TransportStateListener, @@ -151,7 +152,21 @@ public class NavDrawerActivity extends BriarActivity implements if (expiry != NO) showExpiryWarning(expiry); } }); - if (needsDozeWhitelisting(this)) requestDozeWhitelisting(); + } + + @Override + protected void onActivityResult(int request, int result, Intent data) { + super.onActivityResult(request, result, data); + if (request == REQUEST_PASSWORD && result == RESULT_OK) { + controller.askDozeWhitelisting(this, + new UiResultHandler<Boolean>(this) { + @Override + public void onResultUi(Boolean ask) { + if (!ask) return; + requestDozeWhitelisting(); + } + }); + } } private void exitIfStartupFailed(Intent intent) { @@ -315,16 +330,24 @@ public class NavDrawerActivity extends BriarActivity implements @TargetApi(23) private void requestDozeWhitelisting() { - new AlertDialog.Builder(this, R.style.BriarDialogTheme) - .setMessage(R.string.setup_doze_intro) - .setPositiveButton(R.string.ok, - (dialog, which) -> { - Intent i = getDozeWhitelistingIntent( - NavDrawerActivity.this); - startActivityForResult(i, - REQUEST_DOZE_WHITELISTING); - }) - .show(); + AlertDialog.Builder b = + new AlertDialog.Builder(this, R.style.BriarDialogTheme); + b.setMessage(R.string.setup_doze_intro); + b.setView(R.layout.checkbox); + b.setPositiveButton(R.string.ok, + (dialog, which) -> { + Intent i = getDozeWhitelistingIntent( + NavDrawerActivity.this); + startActivityForResult(i, REQUEST_DOZE_WHITELISTING); + }); + b.setNegativeButton(R.string.cancel, + (dialog, which) -> { + CheckBox checkBox = (CheckBox) ((AlertDialog) dialog) + .findViewById(R.id.checkbox); + if (checkBox.isChecked()) + controller.doNotAskAgainForDozeWhiteListing(); + }); + b.show(); } private void initializeTransports(LayoutInflater inflater) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java index 4b7c5a52ab5a88ad488ec219e408e968b29973a2..21c220d6aafdcf9409f78c0219264c61f8c38699 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerController.java @@ -1,5 +1,7 @@ package org.briarproject.briar.android.navdrawer; +import android.content.Context; + import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.briar.android.controller.ActivityLifecycleController; @@ -16,4 +18,9 @@ public interface NavDrawerController extends ActivityLifecycleController { void expiryWarningDismissed(); + void askDozeWhitelisting(final Context ctx, + final ResultHandler<Boolean> handler); + + void doNotAskAgainForDozeWhiteListing(); + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java index 00a62705cf07933bf973e896bb454381702febe8..0e25288d005367543ec061e42bd19cb3a4b2a781 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerControllerImpl.java @@ -1,6 +1,7 @@ package org.briarproject.briar.android.navdrawer; import android.app.Activity; +import android.content.Context; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; @@ -32,6 +33,7 @@ import static org.briarproject.briar.android.navdrawer.NavDrawerController.Expir import static org.briarproject.briar.android.navdrawer.NavDrawerController.ExpiryWarning.SHOW; import static org.briarproject.briar.android.navdrawer.NavDrawerController.ExpiryWarning.UPDATE; import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE; +import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting; @MethodsNotNullByDefault @ParametersNotNullByDefault @@ -42,6 +44,7 @@ public class NavDrawerControllerImpl extends DbControllerImpl Logger.getLogger(NavDrawerControllerImpl.class.getName()); private static final String EXPIRY_DATE_WARNING = "expiryDateWarning"; private static final String EXPIRY_SHOW_UPDATE = "expiryShowUpdate"; + private static final String DOZE_ASK_AGAIN = "dozeAskAgain"; private final PluginManager pluginManager; private final SettingsManager settingsManager; @@ -154,6 +157,47 @@ public class NavDrawerControllerImpl extends DbControllerImpl }); } + @Override + public void askDozeWhitelisting(final Context ctx, + final ResultHandler<Boolean> handler) { + if (!needsDozeWhitelisting(ctx)) { + handler.onResult(false); + return; + } + runOnDbThread(new Runnable() { + @Override + public void run() { + try { + Settings settings = + settingsManager.getSettings(SETTINGS_NAMESPACE); + boolean ask = settings.getBoolean(DOZE_ASK_AGAIN, true); + handler.onResult(ask); + } catch (DbException e) { + if (LOG.isLoggable(WARNING)) + LOG.log(WARNING, e.toString(), e); + handler.onResult(true); + } + } + }); + } + + @Override + public void doNotAskAgainForDozeWhiteListing() { + runOnDbThread(new Runnable() { + @Override + public void run() { + try { + Settings settings = new Settings(); + settings.putBoolean(DOZE_ASK_AGAIN, false); + settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE); + } catch (DbException e) { + if (LOG.isLoggable(WARNING)) + LOG.log(WARNING, e.toString(), e); + } + } + }); + } + @Override public boolean isTransportRunning(TransportId transportId) { Plugin plugin = pluginManager.getPlugin(transportId); diff --git a/briar-android/src/main/res/layout/checkbox.xml b/briar-android/src/main/res/layout/checkbox.xml new file mode 100644 index 0000000000000000000000000000000000000000..eb3dfe6a44b0f61eaff19e08dbb4970d7592d24e --- /dev/null +++ b/briar-android/src/main/res/layout/checkbox.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <CheckBox + android:id="@+id/checkbox" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/margin_activity_horizontal" + android:layout_marginTop="@dimen/margin_activity_vertical" + android:checked="false" + android:text="@string/don_t_ask_again"/> + +</FrameLayout> diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 98c44d56c0f9327f86d1290b7885f891414b8630..e9d5d2ef15c7d543b56f4d7e825cb4bf7db91116 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -19,6 +19,7 @@ <string name="passwords_do_not_match">Passwords do not match</string> <string name="create_account_button">Create Account</string> <string name="more_info">More Information</string> + <string name="don_t_ask_again">Don\'t ask again</string> <!-- Login --> <string name="enter_password">Enter your password:</string>