Show dialog on Wifi, and APM' entries in Settings

- When satellite mode is switched on Wifi, and APM entry shall show the warning dialog and avoid user uses these functions.

Bug: 337154438
Test: Manual test.
Test: atest pass
Change-Id: I45cd92a8688e7a619613361ea4a8d58a0984d99f
This commit is contained in:
tomhsu
2024-05-06 11:37:46 +00:00
committed by Tom Hsu
parent 412739469c
commit 29b2f16edf
6 changed files with 142 additions and 21 deletions

View File

@@ -16,6 +16,9 @@
package com.android.settings.wifi;
import static com.android.settings.network.SatelliteWarningDialogActivity.EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG;
import static com.android.settings.network.SatelliteWarningDialogActivity.TYPE_IS_WIFI;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -27,19 +30,26 @@ import android.net.wifi.SupplicantState;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.provider.Settings;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.network.SatelliteRepository;
import com.android.settings.network.SatelliteWarningDialogActivity;
import com.android.settings.widget.SwitchWidgetController;
import com.android.settingslib.WirelessUtils;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListener {
private static final String TAG = WifiEnabler.class.getSimpleName();
private final SwitchWidgetController mSwitchWidget;
private final WifiManager mWifiManager;
private final ConnectivityManager mConnectivityManager;
@@ -48,7 +58,9 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
private Context mContext;
private boolean mListeningToOnSwitchChange = false;
private AtomicBoolean mConnected = new AtomicBoolean(false);
private SatelliteRepository mSatelliteRepository;
@VisibleForTesting
AtomicBoolean mIsSatelliteOn = new AtomicBoolean(false);
private boolean mStateMachineEvent;
private final IntentFilter mIntentFilter;
@@ -93,7 +105,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
// The order matters! We really should not depend on this. :(
mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
mSatelliteRepository = new SatelliteRepository(context);
setupSwitchController();
}
@@ -124,6 +136,14 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
mSwitchWidget.startListening();
mListeningToOnSwitchChange = true;
}
// Refresh satellite mode status.
try {
mIsSatelliteOn.set(
mSatelliteRepository.requestIsEnabled(Executors.newSingleThreadExecutor())
.get(2000, TimeUnit.MILLISECONDS));
} catch (ExecutionException | TimeoutException | InterruptedException e) {
Log.e(TAG, "Error to get satellite status : " + e);
}
}
public void pause() {
@@ -185,6 +205,18 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
if (mStateMachineEvent) {
return true;
}
// Show dialog and do nothing under satellite mode.
if (mIsSatelliteOn.get()) {
mContext.startActivity(
new Intent(mContext, SatelliteWarningDialogActivity.class)
.putExtra(
EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG,
TYPE_IS_WIFI)
);
return false;
}
// Show toast message if Wi-Fi is not allowed in airplane mode
if (isChecked && !WirelessUtils.isRadioAllowed(mContext, Settings.Global.RADIO_WIFI)) {
Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show();

View File

@@ -52,6 +52,7 @@ import com.android.settings.SubSettings;
import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.NetworkProviderSettings;
import com.android.settings.network.SatelliteRepository;
import com.android.settings.network.WifiSwitchPreferenceController;
import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBackgroundWorker;
@@ -66,6 +67,10 @@ import com.android.wifitrackerlib.WifiEntry;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
/**
@@ -225,7 +230,8 @@ public class WifiSlice implements CustomSliceable {
.setAccentColor(COLOR_NOT_TINTED)
.setKeywords(getKeywords())
.addRow(getHeaderRow(isWifiEnabled, wifiSliceItem));
if (!isWiFiPermissionGranted || !mWifiRestriction.isChangeWifiStateAllowed(mContext)) {
if (!isWiFiPermissionGranted || !mWifiRestriction.isChangeWifiStateAllowed(mContext)
|| isSatelliteOn()) {
return builder;
}
@@ -416,4 +422,17 @@ public class WifiSlice implements CustomSliceable {
return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context);
}
}
private boolean isSatelliteOn() {
SatelliteRepository satelliteRepository = new SatelliteRepository(mContext);
boolean isSatelliteOn = false;
try {
isSatelliteOn =
satelliteRepository.requestIsEnabled(Executors.newSingleThreadExecutor())
.get(2000, TimeUnit.MILLISECONDS);
} catch (ExecutionException | TimeoutException | InterruptedException e) {
Log.e(TAG, "Error to get satellite status : " + e);
}
return isSatelliteOn;
}
}