From fa216ffc6f2a0a3c35705d3c1130189cbf4e277d Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 28 Jun 2023 14:40:31 -0300 Subject: [PATCH] Move requestEnableWiFi() into AbstractConditionManager --- .../hotspot/AbstractConditionManager.java | 26 ++++++++++++++-- .../android/hotspot/ConditionManager.java | 31 +++---------------- .../android/hotspot/ConditionManager29.java | 28 +++-------------- .../android/hotspot/ConditionManager33.java | 28 +++-------------- .../android/hotspot/HotspotIntroFragment.java | 2 +- 5 files changed, 40 insertions(+), 75 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/AbstractConditionManager.java b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/AbstractConditionManager.java index edfef7303..435a486a8 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/AbstractConditionManager.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/AbstractConditionManager.java @@ -1,21 +1,27 @@ package org.briarproject.briar.android.hotspot; +import android.content.ActivityNotFoundException; import android.content.Context; +import android.content.Intent; import android.net.wifi.WifiManager; +import android.widget.Toast; import org.briarproject.briar.R; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.core.util.Consumer; import androidx.fragment.app.FragmentActivity; import static android.content.Context.WIFI_SERVICE; +import static android.widget.Toast.LENGTH_LONG; /** * Abstract base class for the ConditionManagers that ensure that the conditions * to open a hotspot are fulfilled. There are different extensions of this for - * API levels lower than 29 and 29+. + * API levels lower than 29, 29+ and 33+. */ abstract class AbstractConditionManager { @@ -28,6 +34,7 @@ abstract class AbstractConditionManager { final Consumer permissionUpdateCallback; protected FragmentActivity ctx; WifiManager wifiManager; + private ActivityResultLauncher wifiRequest; AbstractConditionManager(Consumer permissionUpdateCallback) { this.permissionUpdateCallback = permissionUpdateCallback; @@ -38,8 +45,12 @@ abstract class AbstractConditionManager { */ void init(FragmentActivity ctx) { this.ctx = ctx; - this.wifiManager = (WifiManager) ctx.getApplicationContext() + wifiManager = (WifiManager) ctx.getApplicationContext() .getSystemService(WIFI_SERVICE); + wifiRequest = ctx.registerForActivityResult( + new ActivityResultContracts.StartActivityForResult(), + result -> permissionUpdateCallback + .accept(wifiManager.isWifiEnabled())); } /** @@ -57,6 +68,8 @@ abstract class AbstractConditionManager { */ abstract boolean checkAndRequestConditions(); + abstract String getWifiSettingsAction(); + void showRationale(Context ctx, @StringRes int title, @StringRes int body, Runnable onContinueClicked, Runnable onDismiss) { @@ -69,4 +82,13 @@ abstract class AbstractConditionManager { builder.show(); } + void requestEnableWiFi() { + try { + wifiRequest.launch(new Intent(getWifiSettingsAction())); + } catch (ActivityNotFoundException e) { + Toast.makeText(ctx, R.string.error_start_activity, LENGTH_LONG) + .show(); + } + } + } 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 6c0312244..251310c50 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,24 +1,15 @@ package org.briarproject.briar.android.hotspot; -import android.content.ActivityNotFoundException; -import android.content.Intent; import android.provider.Settings; -import android.widget.Toast; import org.briarproject.briar.R; import java.util.logging.Logger; -import androidx.activity.result.ActivityResultCaller; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import androidx.core.util.Consumer; -import static android.widget.Toast.LENGTH_LONG; import static java.util.logging.Level.INFO; -import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; -import static org.briarproject.bramble.util.LogUtils.logException; /** * This class ensures that the conditions to open a hotspot are fulfilled on @@ -32,15 +23,8 @@ class ConditionManager extends AbstractConditionManager { private static final Logger LOG = getLogger(ConditionManager.class.getName()); - private final ActivityResultLauncher wifiRequest; - - ConditionManager(ActivityResultCaller arc, - Consumer permissionUpdateCallback) { - super(permissionUpdateCallback); - wifiRequest = arc.registerForActivityResult( - new StartActivityForResult(), - result -> permissionUpdateCallback - .accept(wifiManager.isWifiEnabled())); + ConditionManager(Consumer permissionUpdateCallback) { + super( permissionUpdateCallback); } @Override @@ -81,14 +65,9 @@ class ConditionManager extends AbstractConditionManager { return false; } - private void requestEnableWiFi() { - try { - wifiRequest.launch(new Intent(Settings.ACTION_WIFI_SETTINGS)); - } catch (ActivityNotFoundException e) { - logException(LOG, WARNING, e); - Toast.makeText(ctx, R.string.error_start_activity, LENGTH_LONG) - .show(); - } + @Override + String getWifiSettingsAction() { + return Settings.ACTION_WIFI_SETTINGS; } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29.java b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29.java index fc5318cc8..381d0a694 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29.java @@ -1,9 +1,6 @@ package org.briarproject.briar.android.hotspot; -import android.content.ActivityNotFoundException; -import android.content.Intent; import android.provider.Settings; -import android.widget.Toast; import org.briarproject.briar.R; import org.briarproject.briar.android.util.Permission; @@ -14,20 +11,16 @@ import java.util.logging.Logger; import androidx.activity.result.ActivityResultCaller; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts.RequestPermission; -import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.core.util.Consumer; import static android.Manifest.permission.ACCESS_FINE_LOCATION; import static android.os.Build.VERSION.SDK_INT; -import static android.widget.Toast.LENGTH_LONG; 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.Level.WARNING; import static java.util.logging.Logger.getLogger; -import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.briar.android.util.PermissionUtils.isLocationEnabledForWiFi; import static org.briarproject.briar.android.util.PermissionUtils.showLocationDialog; @@ -47,7 +40,6 @@ class ConditionManager29 extends AbstractConditionManager { private Permission locationPermission = Permission.UNKNOWN; private final ActivityResultLauncher locationRequest; - private final ActivityResultLauncher wifiRequest; ConditionManager29(ActivityResultCaller arc, Consumer permissionUpdateCallback) { @@ -58,11 +50,6 @@ class ConditionManager29 extends AbstractConditionManager { onRequestPermissionResult(granted); permissionUpdateCallback.accept(TRUE.equals(granted)); }); - wifiRequest = arc.registerForActivityResult( - new StartActivityForResult(), - result -> permissionUpdateCallback - .accept(wifiManager.isWifiEnabled()) - ); } @Override @@ -136,6 +123,11 @@ class ConditionManager29 extends AbstractConditionManager { return false; } + @Override + String getWifiSettingsAction() { + return Settings.Panel.ACTION_WIFI; + } + private void onRequestPermissionResult(@Nullable Boolean granted) { if (granted != null && granted) { locationPermission = Permission.GRANTED; @@ -151,14 +143,4 @@ class ConditionManager29 extends AbstractConditionManager { locationRequest.launch(ACCESS_FINE_LOCATION); } - private void requestEnableWiFi() { - try { - wifiRequest.launch(new Intent(Settings.Panel.ACTION_WIFI)); - } catch (ActivityNotFoundException e) { - logException(LOG, WARNING, e); - Toast.makeText(ctx, R.string.error_start_activity, LENGTH_LONG) - .show(); - } - } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager33.java b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager33.java index 4f4d8b23b..f33427338 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager33.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager33.java @@ -1,9 +1,6 @@ package org.briarproject.briar.android.hotspot; -import android.content.ActivityNotFoundException; -import android.content.Intent; import android.provider.Settings; -import android.widget.Toast; import org.briarproject.briar.R; import org.briarproject.briar.android.util.Permission; @@ -14,19 +11,15 @@ import java.util.logging.Logger; import androidx.activity.result.ActivityResultCaller; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts.RequestPermission; -import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.core.util.Consumer; import static android.Manifest.permission.NEARBY_WIFI_DEVICES; -import static android.widget.Toast.LENGTH_LONG; 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.Level.WARNING; import static java.util.logging.Logger.getLogger; -import static org.briarproject.bramble.util.LogUtils.logException; /** * This class ensures that the conditions to open a hotspot are fulfilled on @@ -44,7 +37,6 @@ class ConditionManager33 extends AbstractConditionManager { private Permission nearbyWifiPermission = Permission.UNKNOWN; private final ActivityResultLauncher nearbyWifiRequest; - private final ActivityResultLauncher wifiRequest; ConditionManager33(ActivityResultCaller arc, Consumer permissionUpdateCallback) { @@ -55,11 +47,6 @@ class ConditionManager33 extends AbstractConditionManager { onRequestPermissionResult(granted); permissionUpdateCallback.accept(TRUE.equals(granted)); }); - wifiRequest = arc.registerForActivityResult( - new StartActivityForResult(), - result -> permissionUpdateCallback - .accept(wifiManager.isWifiEnabled()) - ); } @Override @@ -122,6 +109,11 @@ class ConditionManager33 extends AbstractConditionManager { return false; } + @Override + String getWifiSettingsAction() { + return Settings.Panel.ACTION_WIFI; + } + private void onRequestPermissionResult(@Nullable Boolean granted) { if (granted != null && granted) { nearbyWifiPermission = Permission.GRANTED; @@ -137,14 +129,4 @@ class ConditionManager33 extends AbstractConditionManager { nearbyWifiRequest.launch(NEARBY_WIFI_DEVICES); } - private void requestEnableWiFi() { - try { - wifiRequest.launch(new Intent(Settings.Panel.ACTION_WIFI)); - } catch (ActivityNotFoundException e) { - logException(LOG, WARNING, e); - Toast.makeText(ctx, R.string.error_start_activity, LENGTH_LONG) - .show(); - } - } - } 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 c07c85380..db8e1cf22 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 @@ -49,7 +49,7 @@ public class HotspotIntroFragment extends Fragment { private TextView progressTextView; private final AbstractConditionManager conditionManager = SDK_INT < 29 ? - new ConditionManager(this, this::onPermissionUpdate) : + new ConditionManager(this::onPermissionUpdate) : SDK_INT >= 33 ? new ConditionManager33(this, this::onPermissionUpdate) : new ConditionManager29(this, this::onPermissionUpdate);