mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 02:39:05 +01:00
Show dialog from controller.
This commit is contained in:
@@ -17,7 +17,6 @@ import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||
import org.briarproject.bramble.api.system.LocationUtils;
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||
import org.briarproject.briar.android.activity.BriarActivity;
|
||||
@@ -38,7 +37,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.ActionBarDrawerToggle;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.drawerlayout.widget.DrawerLayout;
|
||||
@@ -55,13 +53,9 @@ import static androidx.fragment.app.FragmentManager.POP_BACK_STACK_INCLUSIVE;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
import static java.util.logging.Logger.getLogger;
|
||||
import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.RUNNING;
|
||||
import static org.briarproject.bramble.api.plugin.TorConstants.REASON_BATTERY;
|
||||
import static org.briarproject.bramble.api.plugin.TorConstants.REASON_COUNTRY_BLOCKED;
|
||||
import static org.briarproject.bramble.api.plugin.TorConstants.REASON_MOBILE_DATA;
|
||||
import static org.briarproject.briar.android.BriarService.EXTRA_STARTUP_FAILED;
|
||||
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD;
|
||||
import static org.briarproject.briar.android.navdrawer.IntentRouter.handleExternalIntent;
|
||||
import static org.briarproject.briar.android.util.UiUtils.getCountryDisplayName;
|
||||
import static org.briarproject.briar.android.util.UiUtils.getDaysUntilExpiry;
|
||||
|
||||
@MethodsNotNullByDefault
|
||||
@@ -94,9 +88,6 @@ public class NavDrawerActivity extends BriarActivity implements
|
||||
@Inject
|
||||
LifecycleManager lifecycleManager;
|
||||
|
||||
@Inject
|
||||
LocationUtils locationUtils;
|
||||
|
||||
private DrawerLayout drawerLayout;
|
||||
private NavigationView navigation;
|
||||
|
||||
@@ -120,10 +111,7 @@ public class NavDrawerActivity extends BriarActivity implements
|
||||
});
|
||||
|
||||
View drawerScrollView = findViewById(R.id.drawerScrollView);
|
||||
PluginViewController pluginViewController =
|
||||
new PluginViewController(drawerScrollView, this, viewModel);
|
||||
pluginViewController.getReasonsTorDisabled().observeEvent(this,
|
||||
this::showTorSettingsDialog);
|
||||
new PluginViewController(drawerScrollView, this, viewModel);
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
drawerLayout = findViewById(R.id.drawer_layout);
|
||||
@@ -362,42 +350,4 @@ public class NavDrawerActivity extends BriarActivity implements
|
||||
expiryWarning.setVisibility(GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private void showTorSettingsDialog(int reasonsDisabled) {
|
||||
boolean battery = (reasonsDisabled & REASON_BATTERY) != 0;
|
||||
boolean mobileData = (reasonsDisabled & REASON_MOBILE_DATA) != 0;
|
||||
boolean location = (reasonsDisabled & REASON_COUNTRY_BLOCKED) != 0;
|
||||
|
||||
StringBuilder s = new StringBuilder();
|
||||
if (location) {
|
||||
s.append("\t\u2022 ");
|
||||
s.append(getString(R.string.tor_override_network_setting,
|
||||
getCountryDisplayName(locationUtils.getCurrentCountry())));
|
||||
s.append('\n');
|
||||
}
|
||||
if (mobileData) {
|
||||
s.append("\t\u2022 ");
|
||||
s.append(getString(R.string.tor_override_mobile_data_setting));
|
||||
s.append('\n');
|
||||
}
|
||||
if (battery) {
|
||||
s.append("\t\u2022 ");
|
||||
s.append(getString(R.string.tor_only_when_charging_title));
|
||||
s.append('\n');
|
||||
}
|
||||
String message =
|
||||
getString(R.string.tor_override_settings_body, s.toString());
|
||||
|
||||
AlertDialog.Builder b =
|
||||
new AlertDialog.Builder(this, R.style.BriarDialogTheme);
|
||||
b.setTitle(R.string.tor_override_settings_title);
|
||||
b.setIcon(R.drawable.ic_settings_black_24dp);
|
||||
b.setMessage(message);
|
||||
b.setPositiveButton(R.string.tor_override_settings_confirm,
|
||||
(dialog, which) ->
|
||||
viewModel.setTorEnabled(battery, mobileData, location));
|
||||
b.setNegativeButton(R.string.cancel, (dialog, which) ->
|
||||
dialog.dismiss());
|
||||
b.show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.briarproject.bramble.api.plugin.TransportId;
|
||||
import org.briarproject.bramble.api.plugin.event.TransportStateEvent;
|
||||
import org.briarproject.bramble.api.settings.Settings;
|
||||
import org.briarproject.bramble.api.settings.SettingsManager;
|
||||
import org.briarproject.bramble.api.system.LocationUtils;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.logging.Logger;
|
||||
@@ -45,6 +46,7 @@ import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE;
|
||||
import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
|
||||
import static org.briarproject.briar.android.controller.BriarControllerImpl.DOZE_ASK_AGAIN;
|
||||
import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
|
||||
import static org.briarproject.briar.android.util.UiUtils.getCountryDisplayName;
|
||||
import static org.briarproject.briar.android.util.UiUtils.needsDozeWhitelisting;
|
||||
|
||||
@NotNullByDefault
|
||||
@@ -62,6 +64,7 @@ public class NavDrawerViewModel extends AndroidViewModel
|
||||
private final Executor dbExecutor;
|
||||
private final SettingsManager settingsManager;
|
||||
private final PluginManager pluginManager;
|
||||
private final LocationUtils locationUtils;
|
||||
private final EventBus eventBus;
|
||||
|
||||
private final MutableLiveData<Boolean> showExpiryWarning =
|
||||
@@ -79,11 +82,12 @@ public class NavDrawerViewModel extends AndroidViewModel
|
||||
@Inject
|
||||
NavDrawerViewModel(Application app, @DatabaseExecutor Executor dbExecutor,
|
||||
SettingsManager settingsManager, PluginManager pluginManager,
|
||||
EventBus eventBus) {
|
||||
LocationUtils locationUtils, EventBus eventBus) {
|
||||
super(app);
|
||||
this.dbExecutor = dbExecutor;
|
||||
this.settingsManager = settingsManager;
|
||||
this.pluginManager = pluginManager;
|
||||
this.locationUtils = locationUtils;
|
||||
this.eventBus = eventBus;
|
||||
eventBus.addListener(this);
|
||||
updatePluginStates();
|
||||
@@ -248,4 +252,7 @@ public class NavDrawerViewModel extends AndroidViewModel
|
||||
});
|
||||
}
|
||||
|
||||
String getCurrentCountryName() {
|
||||
return getCountryDisplayName(locationUtils.getCurrentCountry());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,14 +10,13 @@ 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.viewmodel.LiveEvent;
|
||||
import org.briarproject.briar.android.viewmodel.MutableLiveEvent;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.AppCompatImageButton;
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.constraintlayout.widget.ConstraintSet;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
|
||||
import static android.os.Build.VERSION.SDK_INT;
|
||||
import static android.transition.TransitionManager.beginDelayedTransition;
|
||||
@@ -28,23 +27,26 @@ import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE;
|
||||
import static org.briarproject.bramble.api.plugin.Plugin.State.DISABLED;
|
||||
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.bramble.api.plugin.TorConstants.REASON_BATTERY;
|
||||
import static org.briarproject.bramble.api.plugin.TorConstants.REASON_COUNTRY_BLOCKED;
|
||||
import static org.briarproject.bramble.api.plugin.TorConstants.REASON_MOBILE_DATA;
|
||||
import static org.briarproject.briar.android.navdrawer.NavDrawerViewModel.TRANSPORT_IDS;
|
||||
|
||||
class PluginViewController {
|
||||
|
||||
private final AppCompatActivity activity;
|
||||
private final NavDrawerViewModel viewModel;
|
||||
private final ConstraintLayout drawerContent;
|
||||
private final ConstraintSet collapsedConstraints, expandedConstraints;
|
||||
private final AppCompatImageButton chevronView;
|
||||
private final ImageView torIcon, wifiIcon, btIcon;
|
||||
private final SwitchCompat torSwitch, wifiSwitch, btSwitch;
|
||||
private final MutableLiveEvent<Integer> reasonsTorDisabled =
|
||||
new MutableLiveEvent<>();
|
||||
|
||||
private boolean expanded = false;
|
||||
|
||||
PluginViewController(View v, LifecycleOwner owner,
|
||||
PluginViewController(View v, AppCompatActivity activity,
|
||||
NavDrawerViewModel viewModel) {
|
||||
this.activity = activity;
|
||||
this.viewModel = viewModel;
|
||||
drawerContent = v.findViewById(R.id.drawerContent);
|
||||
|
||||
@@ -88,8 +90,8 @@ class PluginViewController {
|
||||
// changes its state
|
||||
switchCompat.toggle();
|
||||
});
|
||||
viewModel.getPluginState(t)
|
||||
.observe(owner, state -> stateUpdate(t, state));
|
||||
viewModel.getPluginState(t).observe(activity, state ->
|
||||
stateUpdate(t, state));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,17 +107,13 @@ class PluginViewController {
|
||||
expanded = !expanded;
|
||||
}
|
||||
|
||||
LiveEvent<Integer> getReasonsTorDisabled() {
|
||||
return reasonsTorDisabled;
|
||||
}
|
||||
|
||||
private void tryToEnablePlugin(TransportId id) {
|
||||
if (id.equals(TorConstants.ID)) {
|
||||
int reasons = viewModel.getReasonsDisabled(id);
|
||||
if (reasons == 0 || reasons == REASON_USER) {
|
||||
viewModel.setPluginEnabled(id, true);
|
||||
} else {
|
||||
reasonsTorDisabled.setEvent(reasons);
|
||||
showTorSettingsDialog(reasons);
|
||||
}
|
||||
} else {
|
||||
viewModel.setPluginEnabled(id, true);
|
||||
@@ -160,4 +158,42 @@ class PluginViewController {
|
||||
icon.setColorFilter(color);
|
||||
}
|
||||
|
||||
private void showTorSettingsDialog(int reasonsDisabled) {
|
||||
boolean battery = (reasonsDisabled & REASON_BATTERY) != 0;
|
||||
boolean mobileData = (reasonsDisabled & REASON_MOBILE_DATA) != 0;
|
||||
boolean location = (reasonsDisabled & REASON_COUNTRY_BLOCKED) != 0;
|
||||
|
||||
StringBuilder s = new StringBuilder();
|
||||
if (location) {
|
||||
s.append("\t\u2022 ");
|
||||
s.append(activity.getString(R.string.tor_override_network_setting,
|
||||
viewModel.getCurrentCountryName()));
|
||||
s.append('\n');
|
||||
}
|
||||
if (mobileData) {
|
||||
s.append("\t\u2022 ");
|
||||
s.append(activity.getString(
|
||||
R.string.tor_override_mobile_data_setting));
|
||||
s.append('\n');
|
||||
}
|
||||
if (battery) {
|
||||
s.append("\t\u2022 ");
|
||||
s.append(activity.getString(R.string.tor_only_when_charging_title));
|
||||
s.append('\n');
|
||||
}
|
||||
String message = activity.getString(
|
||||
R.string.tor_override_settings_body, s.toString());
|
||||
|
||||
AlertDialog.Builder b =
|
||||
new AlertDialog.Builder(activity, R.style.BriarDialogTheme);
|
||||
b.setTitle(R.string.tor_override_settings_title);
|
||||
b.setIcon(R.drawable.ic_settings_black_24dp);
|
||||
b.setMessage(message);
|
||||
b.setPositiveButton(R.string.tor_override_settings_confirm,
|
||||
(dialog, which) ->
|
||||
viewModel.setTorEnabled(battery, mobileData, location));
|
||||
b.setNegativeButton(R.string.cancel, (dialog, which) ->
|
||||
dialog.dismiss());
|
||||
b.show();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user