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:
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user