mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 14:49:53 +01:00
Show Doze Dialog only after startup and provide "don't ask again" option
This commit is contained in:
@@ -19,6 +19,7 @@ import android.view.MenuItem;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
|
import android.widget.CheckBox;
|
||||||
import android.widget.GridView;
|
import android.widget.GridView;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
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.GONE;
|
||||||
import static android.view.View.VISIBLE;
|
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_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.NO;
|
||||||
import static org.briarproject.briar.android.navdrawer.NavDrawerController.ExpiryWarning.UPDATE;
|
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.getDaysUntilExpiry;
|
||||||
import static org.briarproject.briar.android.util.UiUtils.getDozeWhitelistingIntent;
|
import static org.briarproject.briar.android.util.UiUtils.getDozeWhitelistingIntent;
|
||||||
import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting;
|
|
||||||
|
|
||||||
public class NavDrawerActivity extends BriarActivity implements
|
public class NavDrawerActivity extends BriarActivity implements
|
||||||
BaseFragmentListener, TransportStateListener,
|
BaseFragmentListener, TransportStateListener,
|
||||||
@@ -151,7 +152,21 @@ public class NavDrawerActivity extends BriarActivity implements
|
|||||||
if (expiry != NO) showExpiryWarning(expiry);
|
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) {
|
private void exitIfStartupFailed(Intent intent) {
|
||||||
@@ -315,16 +330,24 @@ public class NavDrawerActivity extends BriarActivity implements
|
|||||||
|
|
||||||
@TargetApi(23)
|
@TargetApi(23)
|
||||||
private void requestDozeWhitelisting() {
|
private void requestDozeWhitelisting() {
|
||||||
new AlertDialog.Builder(this, R.style.BriarDialogTheme)
|
AlertDialog.Builder b =
|
||||||
.setMessage(R.string.setup_doze_intro)
|
new AlertDialog.Builder(this, R.style.BriarDialogTheme);
|
||||||
.setPositiveButton(R.string.ok,
|
b.setMessage(R.string.setup_doze_intro);
|
||||||
(dialog, which) -> {
|
b.setView(R.layout.checkbox);
|
||||||
Intent i = getDozeWhitelistingIntent(
|
b.setPositiveButton(R.string.ok,
|
||||||
NavDrawerActivity.this);
|
(dialog, which) -> {
|
||||||
startActivityForResult(i,
|
Intent i = getDozeWhitelistingIntent(
|
||||||
REQUEST_DOZE_WHITELISTING);
|
NavDrawerActivity.this);
|
||||||
})
|
startActivityForResult(i, REQUEST_DOZE_WHITELISTING);
|
||||||
.show();
|
});
|
||||||
|
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) {
|
private void initializeTransports(LayoutInflater inflater) {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package org.briarproject.briar.android.navdrawer;
|
package org.briarproject.briar.android.navdrawer;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.plugin.TransportId;
|
import org.briarproject.bramble.api.plugin.TransportId;
|
||||||
import org.briarproject.briar.android.controller.ActivityLifecycleController;
|
import org.briarproject.briar.android.controller.ActivityLifecycleController;
|
||||||
@@ -16,4 +18,9 @@ public interface NavDrawerController extends ActivityLifecycleController {
|
|||||||
|
|
||||||
void expiryWarningDismissed();
|
void expiryWarningDismissed();
|
||||||
|
|
||||||
|
void askDozeWhitelisting(final Context ctx,
|
||||||
|
final ResultHandler<Boolean> handler);
|
||||||
|
|
||||||
|
void doNotAskAgainForDozeWhiteListing();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.briarproject.briar.android.navdrawer;
|
package org.briarproject.briar.android.navdrawer;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
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.SHOW;
|
||||||
import static org.briarproject.briar.android.navdrawer.NavDrawerController.ExpiryWarning.UPDATE;
|
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.settings.SettingsFragment.SETTINGS_NAMESPACE;
|
||||||
|
import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting;
|
||||||
|
|
||||||
@MethodsNotNullByDefault
|
@MethodsNotNullByDefault
|
||||||
@ParametersNotNullByDefault
|
@ParametersNotNullByDefault
|
||||||
@@ -42,6 +44,7 @@ public class NavDrawerControllerImpl extends DbControllerImpl
|
|||||||
Logger.getLogger(NavDrawerControllerImpl.class.getName());
|
Logger.getLogger(NavDrawerControllerImpl.class.getName());
|
||||||
private static final String EXPIRY_DATE_WARNING = "expiryDateWarning";
|
private static final String EXPIRY_DATE_WARNING = "expiryDateWarning";
|
||||||
private static final String EXPIRY_SHOW_UPDATE = "expiryShowUpdate";
|
private static final String EXPIRY_SHOW_UPDATE = "expiryShowUpdate";
|
||||||
|
private static final String DOZE_ASK_AGAIN = "dozeAskAgain";
|
||||||
|
|
||||||
private final PluginManager pluginManager;
|
private final PluginManager pluginManager;
|
||||||
private final SettingsManager settingsManager;
|
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
|
@Override
|
||||||
public boolean isTransportRunning(TransportId transportId) {
|
public boolean isTransportRunning(TransportId transportId) {
|
||||||
Plugin plugin = pluginManager.getPlugin(transportId);
|
Plugin plugin = pluginManager.getPlugin(transportId);
|
||||||
|
|||||||
16
briar-android/src/main/res/layout/checkbox.xml
Normal file
16
briar-android/src/main/res/layout/checkbox.xml
Normal file
@@ -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>
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
<string name="passwords_do_not_match">Passwords do not match</string>
|
<string name="passwords_do_not_match">Passwords do not match</string>
|
||||||
<string name="create_account_button">Create Account</string>
|
<string name="create_account_button">Create Account</string>
|
||||||
<string name="more_info">More Information</string>
|
<string name="more_info">More Information</string>
|
||||||
|
<string name="don_t_ask_again">Don\'t ask again</string>
|
||||||
|
|
||||||
<!-- Login -->
|
<!-- Login -->
|
||||||
<string name="enter_password">Enter your password:</string>
|
<string name="enter_password">Enter your password:</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user