From 6337b8626663bd3980be097b5cf38f69bcf92ddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Wed, 21 Jul 2021 16:29:23 +0200 Subject: [PATCH] Rename ConditionManager classes --- .../hotspot/AbstractConditionManager.java | 84 ++++++++++++ .../android/hotspot/ConditionManager.java | 121 +++++++++--------- ...ger29Impl.java => ConditionManager29.java} | 6 +- .../android/hotspot/ConditionManagerImpl.java | 83 ------------ .../android/hotspot/HotspotIntroFragment.java | 6 +- 5 files changed, 150 insertions(+), 150 deletions(-) create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/hotspot/AbstractConditionManager.java rename briar-android/src/main/java/org/briarproject/briar/android/hotspot/{ConditionManager29Impl.java => ConditionManager29.java} (96%) delete mode 100644 briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManagerImpl.java 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 new file mode 100644 index 000000000..855fd845d --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/AbstractConditionManager.java @@ -0,0 +1,84 @@ +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; + +import static android.content.Context.WIFI_SERVICE; + +/** + * 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+. + */ +abstract class AbstractConditionManager { + + enum Permission { + UNKNOWN, GRANTED, SHOW_RATIONALE, PERMANENTLY_DENIED + } + + protected final Consumer permissionUpdateCallback; + protected FragmentActivity ctx; + WifiManager wifiManager; + + AbstractConditionManager(Consumer permissionUpdateCallback) { + this.permissionUpdateCallback = permissionUpdateCallback; + } + + /** + * Pass a FragmentActivity context here during `onCreateView()`. + */ + void init(FragmentActivity ctx) { + this.ctx = ctx; + this.wifiManager = (WifiManager) ctx.getApplicationContext() + .getSystemService(WIFI_SERVICE); + } + + /** + * Call this during onStart() in the fragment where the ConditionManager + * is used. + */ + abstract void onStart(); + + /** + * Check if all required conditions are met such that the hotspot can be + * started. If any precondition is not met yet, bring up relevant dialogs + * asking the user to grant relevant permissions or take relevant actions. + * + * @return true if conditions are fulfilled and flow can continue. + */ + 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/ConditionManager.java b/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager.java index 050bb8a01..95c0d57fe 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,84 +1,83 @@ package org.briarproject.briar.android.hotspot; -import android.content.Context; -import android.content.DialogInterface; -import android.net.wifi.WifiManager; +import android.content.Intent; +import android.provider.Settings; import org.briarproject.briar.R; -import androidx.annotation.StringRes; -import androidx.appcompat.app.AlertDialog; -import androidx.core.util.Consumer; -import androidx.fragment.app.FragmentActivity; +import java.util.logging.Logger; -import static android.content.Context.WIFI_SERVICE; +import androidx.activity.result.ActivityResultCaller; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; +import androidx.core.util.Consumer; + +import static java.util.logging.Level.INFO; +import static java.util.logging.Logger.getLogger; /** - * 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+. + * This class ensures that the conditions to open a hotspot are fulfilled on + * API levels < 29. + *

+ * As soon as {@link #checkAndRequestConditions()} returns true, + * all conditions are fulfilled. */ -abstract class ConditionManager { +class ConditionManager extends AbstractConditionManager { - enum Permission { - UNKNOWN, GRANTED, SHOW_RATIONALE, PERMANENTLY_DENIED + 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())); } - protected final Consumer permissionUpdateCallback; - protected FragmentActivity ctx; - WifiManager wifiManager; - - ConditionManager(Consumer permissionUpdateCallback) { - this.permissionUpdateCallback = permissionUpdateCallback; + @Override + void onStart() { + // nothing to do here } - /** - * Pass a FragmentActivity context here during `onCreateView()`. - */ - void init(FragmentActivity ctx) { - this.ctx = ctx; - this.wifiManager = (WifiManager) ctx.getApplicationContext() - .getSystemService(WIFI_SERVICE); + private boolean areEssentialPermissionsGranted() { + if (LOG.isLoggable(INFO)) { + LOG.info(String.format("areEssentialPermissionsGranted(): " + + "wifiManager.isWifiEnabled()? %b", + wifiManager.isWifiEnabled())); + } + return wifiManager.isWifiEnabled(); } - /** - * Call this during onStart() in the fragment where the ConditionManager - * is used. - */ - abstract void onStart(); + @Override + boolean checkAndRequestConditions() { + if (areEssentialPermissionsGranted()) return true; - /** - * Check if all required conditions are met such that the hotspot can be - * started. If any precondition is not met yet, bring up relevant dialogs - * asking the user to grant relevant permissions or take relevant actions. - * - * @return true if conditions are fulfilled and flow can continue. - */ - abstract boolean checkAndRequestConditions(); + if (!wifiManager.isWifiEnabled()) { + // Try enabling the Wifi and return true if that seems to have been + // successful, i.e. "Wifi is either already in the requested state, or + // in progress toward the requested state". + if (wifiManager.setWifiEnabled(true)) { + LOG.info("Enabled wifi"); + return true; + } - 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(); + // Wifi is not enabled and we can't seem to enable it, so ask the user + // to enable it for us. + showRationale(ctx, R.string.wifi_settings_title, + R.string.wifi_settings_request_enable_body, + this::requestEnableWiFi, + () -> permissionUpdateCallback.accept(false)); + } + + return false; } - 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(); + private void requestEnableWiFi() { + wifiRequest.launch(new Intent(Settings.ACTION_WIFI_SETTINGS)); } } 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/ConditionManager29.java similarity index 96% rename from briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29Impl.java rename to briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManager29.java index 464fa4c77..a895e6188 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/ConditionManager29.java @@ -30,17 +30,17 @@ import static org.briarproject.briar.android.util.UiUtils.getGoToSettingsListene * all conditions are fulfilled. */ @RequiresApi(29) -class ConditionManager29Impl extends ConditionManager { +class ConditionManager29 extends AbstractConditionManager { private static final Logger LOG = - getLogger(ConditionManager29Impl.class.getName()); + getLogger(ConditionManager29.class.getName()); private Permission locationPermission = Permission.UNKNOWN; private final ActivityResultLauncher locationRequest; private final ActivityResultLauncher wifiRequest; - ConditionManager29Impl(ActivityResultCaller arc, + ConditionManager29(ActivityResultCaller arc, Consumer permissionUpdateCallback) { super(permissionUpdateCallback); locationRequest = arc.registerForActivityResult( 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 deleted file mode 100644 index 5d7ff1079..000000000 --- a/briar-android/src/main/java/org/briarproject/briar/android/hotspot/ConditionManagerImpl.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.briarproject.briar.android.hotspot; - -import android.content.Intent; -import android.provider.Settings; - -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 java.util.logging.Level.INFO; -import static java.util.logging.Logger.getLogger; - -/** - * This class ensures that the conditions to open a hotspot are fulfilled on - * API levels < 29. - *

- * As soon as {@link #checkAndRequestConditions()} returns true, - * all conditions are fulfilled. - */ -class ConditionManagerImpl extends ConditionManager { - - private static final Logger LOG = - getLogger(ConditionManagerImpl.class.getName()); - - private final ActivityResultLauncher wifiRequest; - - ConditionManagerImpl(ActivityResultCaller arc, - Consumer permissionUpdateCallback) { - super(permissionUpdateCallback); - wifiRequest = arc.registerForActivityResult( - new StartActivityForResult(), - result -> permissionUpdateCallback - .accept(wifiManager.isWifiEnabled())); - } - - @Override - void onStart() { - // nothing to do here - } - - private boolean areEssentialPermissionsGranted() { - if (LOG.isLoggable(INFO)) { - LOG.info(String.format("areEssentialPermissionsGranted(): " + - "wifiManager.isWifiEnabled()? %b", - wifiManager.isWifiEnabled())); - } - return wifiManager.isWifiEnabled(); - } - - @Override - boolean checkAndRequestConditions() { - if (areEssentialPermissionsGranted()) return true; - - if (!wifiManager.isWifiEnabled()) { - // Try enabling the Wifi and return true if that seems to have been - // successful, i.e. "Wifi is either already in the requested state, or - // in progress toward the requested state". - if (wifiManager.setWifiEnabled(true)) { - LOG.info("Enabled wifi"); - return true; - } - - // Wifi is not enabled and we can't seem to enable it, so ask the user - // to enable it for us. - showRationale(ctx, R.string.wifi_settings_title, - R.string.wifi_settings_request_enable_body, - this::requestEnableWiFi, - () -> permissionUpdateCallback.accept(false)); - } - - return false; - } - - private void requestEnableWiFi() { - wifiRequest.launch(new Intent(Settings.ACTION_WIFI_SETTINGS)); - } - -} 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 716ea4f97..fd6112bd0 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 @@ -47,9 +47,9 @@ public class HotspotIntroFragment extends Fragment { private ProgressBar progressBar; private TextView progressTextView; - private final ConditionManager conditionManager = SDK_INT < 29 ? - new ConditionManagerImpl(this, this::onPermissionUpdate) : - new ConditionManager29Impl(this, this::onPermissionUpdate); + private final AbstractConditionManager conditionManager = SDK_INT < 29 ? + new ConditionManager(this, this::onPermissionUpdate) : + new ConditionManager29(this, this::onPermissionUpdate); @Override public void onAttach(Context context) {