Move requestEnableWiFi() into AbstractConditionManager

This commit is contained in:
Torsten Grote
2023-06-28 14:40:31 -03:00
parent a34631d36c
commit fa216ffc6f
5 changed files with 40 additions and 75 deletions

View File

@@ -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<Boolean> permissionUpdateCallback;
protected FragmentActivity ctx;
WifiManager wifiManager;
private ActivityResultLauncher<Intent> wifiRequest;
AbstractConditionManager(Consumer<Boolean> 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();
}
}
}

View File

@@ -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<Intent> wifiRequest;
ConditionManager(ActivityResultCaller arc,
Consumer<Boolean> permissionUpdateCallback) {
super(permissionUpdateCallback);
wifiRequest = arc.registerForActivityResult(
new StartActivityForResult(),
result -> permissionUpdateCallback
.accept(wifiManager.isWifiEnabled()));
ConditionManager(Consumer<Boolean> 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;
}
}

View File

@@ -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<String> locationRequest;
private final ActivityResultLauncher<Intent> wifiRequest;
ConditionManager29(ActivityResultCaller arc,
Consumer<Boolean> 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();
}
}
}

View File

@@ -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<String> nearbyWifiRequest;
private final ActivityResultLauncher<Intent> wifiRequest;
ConditionManager33(ActivityResultCaller arc,
Consumer<Boolean> 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();
}
}
}

View File

@@ -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);