Merge "Disallow_airplane_mode should not disable mobile network." into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
cc65760354
@@ -37,7 +37,6 @@
|
||||
android:title="@string/network_settings_title"
|
||||
android:summary="@string/summary_placeholder"
|
||||
android:icon="@drawable/ic_network_cell"
|
||||
android:dependency="toggle_airplane"
|
||||
android:order="-15"
|
||||
settings:keywords="@string/keywords_more_mobile_networks"
|
||||
settings:userRestriction="no_config_mobile_networks"
|
||||
|
@@ -18,8 +18,12 @@ package com.android.settings.network;
|
||||
import static android.os.UserHandle.myUserId;
|
||||
import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
import android.support.annotation.VisibleForTesting;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
@@ -29,6 +33,7 @@ import android.telephony.TelephonyManager;
|
||||
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settings.wrapper.RestrictedLockUtilsWrapper;
|
||||
import com.android.settingslib.RestrictedPreference;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||
@@ -47,11 +52,20 @@ public class MobileNetworkPreferenceController extends AbstractPreferenceControl
|
||||
@VisibleForTesting
|
||||
PhoneStateListener mPhoneStateListener;
|
||||
|
||||
private BroadcastReceiver mAirplanModeChangedReceiver;
|
||||
|
||||
public MobileNetworkPreferenceController(Context context) {
|
||||
super(context);
|
||||
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||
mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
mIsSecondaryUser = !mUserManager.isAdminUser();
|
||||
|
||||
mAirplanModeChangedReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
updateState(mPreference);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -92,6 +106,10 @@ public class MobileNetworkPreferenceController extends AbstractPreferenceControl
|
||||
}
|
||||
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
|
||||
}
|
||||
if (mAirplanModeChangedReceiver != null) {
|
||||
mContext.registerReceiver(mAirplanModeChangedReceiver,
|
||||
new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,6 +117,21 @@ public class MobileNetworkPreferenceController extends AbstractPreferenceControl
|
||||
if (mPhoneStateListener != null) {
|
||||
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
|
||||
}
|
||||
if (mAirplanModeChangedReceiver != null) {
|
||||
mContext.unregisterReceiver(mAirplanModeChangedReceiver);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
super.updateState(preference);
|
||||
|
||||
if (preference instanceof RestrictedPreference &&
|
||||
((RestrictedPreference) preference).isDisabledByAdmin()) {
|
||||
return;
|
||||
}
|
||||
preference.setEnabled(Settings.Global.getInt(
|
||||
mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) == 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -29,6 +29,8 @@ import android.arch.lifecycle.LifecycleOwner;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
import android.provider.Settings.Global;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
import android.telephony.PhoneStateListener;
|
||||
@@ -38,6 +40,8 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.testutils.shadow.ShadowConnectivityManager;
|
||||
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsWrapper;
|
||||
import com.android.settings.testutils.shadow.ShadowUserManager;
|
||||
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||
import com.android.settingslib.RestrictedPreference;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -138,4 +142,36 @@ public class MobileNetworkPreferenceControllerTest {
|
||||
// Carrier name should be set.
|
||||
verify(mPreference).setSummary(testCarrierName);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void airplaneModeTurnedOn_shouldDisablePreference() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Global.AIRPLANE_MODE_ON, 1);
|
||||
mController = spy(new MobileNetworkPreferenceController(mContext));
|
||||
final RestrictedPreference mPreference = new RestrictedPreference(mContext);
|
||||
mController.updateState(mPreference);
|
||||
assertThat(mPreference.isEnabled()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void airplaneModeTurnedOffAndNoUserRestriction_shouldEnablePreference() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Global.AIRPLANE_MODE_ON, 0);
|
||||
mController = spy(new MobileNetworkPreferenceController(mContext));
|
||||
final RestrictedPreference mPreference = new RestrictedPreference(mContext);
|
||||
mPreference.setDisabledByAdmin(null);
|
||||
mController.updateState(mPreference);
|
||||
assertThat(mPreference.isEnabled()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void airplaneModeTurnedOffAndHasUserRestriction_shouldDisablePreference() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Global.AIRPLANE_MODE_ON, 0);
|
||||
mController = spy(new MobileNetworkPreferenceController(mContext));
|
||||
final RestrictedPreference mPreference = new RestrictedPreference(mContext);
|
||||
mPreference.setDisabledByAdmin(EnforcedAdmin.MULTIPLE_ENFORCED_ADMIN);
|
||||
mController.updateState(mPreference);
|
||||
assertThat(mPreference.isEnabled()).isFalse();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user