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

@@ -17,6 +17,9 @@ package com.android.settings.network;
import static android.provider.SettingsSlicesContract.KEY_AIRPLANE_MODE;
import static com.android.settings.network.SatelliteWarningDialogActivity.EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG;
import static com.android.settings.network.SatelliteWarningDialogActivity.TYPE_IS_AIRPLANE_MODE;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
@@ -25,6 +28,7 @@ import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.SettingsSlicesContract;
import android.telephony.TelephonyManager;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
@@ -38,13 +42,20 @@ import com.android.settings.Utils;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnDestroy;
import com.android.settingslib.core.lifecycle.events.OnResume;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
public class AirplaneModePreferenceController extends TogglePreferenceController
implements LifecycleObserver, OnStart, OnStop, OnDestroy,
AirplaneModeEnabler.OnAirplaneModeChangedListener {
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 AirplaneModePreferenceController extends TogglePreferenceController
implements LifecycleObserver, OnStart, OnResume, OnStop, OnDestroy,
AirplaneModeEnabler.OnAirplaneModeChangedListener {
private static final String TAG = AirplaneModePreferenceController.class.getSimpleName();
public static final int REQUEST_CODE_EXIT_ECM = 1;
/**
@@ -60,12 +71,15 @@ public class AirplaneModePreferenceController extends TogglePreferenceController
private Fragment mFragment;
private AirplaneModeEnabler mAirplaneModeEnabler;
private TwoStatePreference mAirplaneModePreference;
private SatelliteRepository mSatelliteRepository;
@VisibleForTesting
AtomicBoolean mIsSatelliteOn = new AtomicBoolean(false);
public AirplaneModePreferenceController(Context context, String key) {
super(context, key);
if (isAvailable(mContext)) {
mAirplaneModeEnabler = new AirplaneModeEnabler(mContext, this);
mSatelliteRepository = new SatelliteRepository(mContext);
}
}
@@ -80,18 +94,28 @@ public class AirplaneModePreferenceController extends TogglePreferenceController
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (KEY_AIRPLANE_MODE.equals(preference.getKey()) && isAvailable()
&& mAirplaneModeEnabler.isInEcmMode()) {
if (KEY_AIRPLANE_MODE.equals(preference.getKey()) && isAvailable()) {
// In ECM mode launch ECM app dialog
if (mFragment != null) {
mFragment.startActivityForResult(
new Intent(TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null)
.setPackage(Utils.PHONE_PACKAGE_NAME),
REQUEST_CODE_EXIT_ECM);
if (mAirplaneModeEnabler.isInEcmMode()) {
if (mFragment != null) {
mFragment.startActivityForResult(
new Intent(TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null)
.setPackage(Utils.PHONE_PACKAGE_NAME),
REQUEST_CODE_EXIT_ECM);
}
return true;
}
return true;
}
if (mIsSatelliteOn.get()) {
mContext.startActivity(
new Intent(mContext, SatelliteWarningDialogActivity.class)
.putExtra(
EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG,
TYPE_IS_AIRPLANE_MODE)
);
return true;
}
}
return false;
}
@@ -134,6 +158,17 @@ public class AirplaneModePreferenceController extends TogglePreferenceController
}
}
@Override
public void onResume() {
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);
}
}
@Override
public void onStop() {
if (isAvailable()) {
@@ -165,7 +200,7 @@ public class AirplaneModePreferenceController extends TogglePreferenceController
@Override
public boolean setChecked(boolean isChecked) {
if (isChecked() == isChecked) {
if (isChecked() == isChecked || mIsSatelliteOn.get()) {
return false;
}
if (isAvailable()) {