diff --git a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager.java b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager.java index 746bc8a21..050bb8a01 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager.java @@ -1,7 +1,13 @@ package org.briarproject.briar.android.hotspot; +import android.content.Context; +import android.content.DialogInterface; import android.net.wifi.WifiManager; +import org.briarproject.briar.R; + +import androidx.annotation.StringRes; +import androidx.appcompat.app.AlertDialog; import androidx.core.util.Consumer; import androidx.fragment.app.FragmentActivity; @@ -50,4 +56,29 @@ abstract class ConditionManager { */ abstract boolean checkAndRequestConditions(); + void showDenialDialog(FragmentActivity ctx, + @StringRes int title, @StringRes int body, + DialogInterface.OnClickListener onOkClicked, Runnable onDismiss) { + AlertDialog.Builder builder = new AlertDialog.Builder(ctx); + builder.setTitle(title); + builder.setMessage(body); + builder.setPositiveButton(R.string.ok, onOkClicked); + builder.setNegativeButton(R.string.cancel, + (dialog, which) -> ctx.supportFinishAfterTransition()); + builder.setOnDismissListener(dialog -> onDismiss.run()); + builder.show(); + } + + void showRationale(Context ctx, @StringRes int title, + @StringRes int body, Runnable onContinueClicked, + Runnable onDismiss) { + AlertDialog.Builder builder = new AlertDialog.Builder(ctx); + builder.setTitle(title); + builder.setMessage(body); + builder.setNeutralButton(R.string.continue_button, + (dialog, which) -> onContinueClicked.run()); + builder.setOnDismissListener(dialog -> onDismiss.run()); + builder.show(); + } + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29Impl.java b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29Impl.java index 94d79f382..464fa4c77 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29Impl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29Impl.java @@ -17,11 +17,10 @@ import androidx.core.util.Consumer; import static android.Manifest.permission.ACCESS_FINE_LOCATION; import static androidx.core.app.ActivityCompat.shouldShowRequestPermissionRationale; +import static java.lang.Boolean.TRUE; import static java.util.logging.Level.INFO; import static java.util.logging.Logger.getLogger; import static org.briarproject.briar.android.util.UiUtils.getGoToSettingsListener; -import static org.briarproject.briar.android.util.UiUtils.showDenialDialog; -import static org.briarproject.briar.android.util.UiUtils.showRationale; /** * This class ensures that the conditions to open a hotspot are fulfilled on @@ -47,11 +46,13 @@ class ConditionManager29Impl extends ConditionManager { locationRequest = arc.registerForActivityResult( new RequestPermission(), granted -> { onRequestPermissionResult(granted); - permissionUpdateCallback.accept(true); + permissionUpdateCallback.accept(TRUE.equals(granted)); }); wifiRequest = arc.registerForActivityResult( new StartActivityForResult(), - result -> permissionUpdateCallback.accept(true)); + result -> permissionUpdateCallback + .accept(wifiManager.isWifiEnabled()) + ); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManagerImpl.java index 456f89ae3..5d7ff1079 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManagerImpl.java @@ -14,7 +14,6 @@ import androidx.core.util.Consumer; import static java.util.logging.Level.INFO; import static java.util.logging.Logger.getLogger; -import static org.briarproject.briar.android.util.UiUtils.showRationale; /** * This class ensures that the conditions to open a hotspot are fulfilled on @@ -35,7 +34,8 @@ class ConditionManagerImpl extends ConditionManager { super(permissionUpdateCallback); wifiRequest = arc.registerForActivityResult( new StartActivityForResult(), - result -> permissionUpdateCallback.accept(true)); + result -> permissionUpdateCallback + .accept(wifiManager.isWifiEnabled())); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/HotspotIntroFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/HotspotIntroFragment.java index e5f9e6b50..716ea4f97 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/HotspotIntroFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/HotspotIntroFragment.java @@ -86,10 +86,10 @@ public class HotspotIntroFragment extends Fragment { private void onButtonClick(View view) { startButton.setEnabled(false); - startHotspot(); + startHotspotIfConditionsFulfilled(); } - private void startHotspot() { + private void startHotspotIfConditionsFulfilled() { if (conditionManager.checkAndRequestConditions()) { showInstallWarningIfNeeded(); beginDelayedTransition((ViewGroup) requireView()); @@ -103,7 +103,7 @@ public class HotspotIntroFragment extends Fragment { private void onPermissionUpdate(boolean recheckPermissions) { startButton.setEnabled(true); if (recheckPermissions) { - startHotspot(); + startHotspotIfConditionsFulfilled(); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java index 22486c4fe..ae1e43131 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java @@ -6,7 +6,6 @@ import android.app.Activity; import android.app.KeyguardManager; import android.content.ActivityNotFoundException; import android.content.Context; -import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.res.Resources; @@ -53,7 +52,6 @@ import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import androidx.annotation.StringRes; import androidx.annotation.UiThread; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; @@ -564,30 +562,4 @@ public class UiUtils { SOFT_INPUT_STATE_HIDDEN); } - public static void showDenialDialog(FragmentActivity ctx, - @StringRes int title, - @StringRes int body, DialogInterface.OnClickListener onOkClicked, - Runnable onDismiss) { - AlertDialog.Builder builder = new AlertDialog.Builder(ctx); - builder.setTitle(title); - builder.setMessage(body); - builder.setPositiveButton(R.string.ok, onOkClicked); - builder.setNegativeButton(R.string.cancel, - (dialog, which) -> ctx.supportFinishAfterTransition()); - builder.setOnDismissListener(dialog -> onDismiss.run()); - builder.show(); - } - - public static void showRationale(Context ctx, @StringRes int title, - @StringRes int body, - Runnable onContinueClicked, Runnable onDismiss) { - AlertDialog.Builder builder = new AlertDialog.Builder(ctx); - builder.setTitle(title); - builder.setMessage(body); - builder.setNeutralButton(R.string.continue_button, - (dialog, which) -> onContinueClicked.run()); - builder.setOnDismissListener(dialog -> onDismiss.run()); - builder.show(); - } - } diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 4fbebca60..421780a9e 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -757,7 +757,7 @@ Error starting web server! Error presenting website.\n\nPlease send feedback (with anonymous data) via the Briar app if the issue persists. Warning: This app was installed with Android Studio and can NOT be installed on another device. - Unable to start the hotspot. If you have another hotspot running or are sharing your internet connection via Wifi, try stopping that and try again afterwards. + Unable to start the hotspot.\n\nIf you have another hotspot running or are sharing your internet connection via Wi-Fi, try stopping that and try again afterwards.