Make EnabledNetworkModePreferenceController listen to setting changes
The controller for the "Preferred network type" preference on the SIM details page wasn't listening for changes to the underlying global setting, so changes to the setting would be reflected in SysUI but not on this page if it happened to be showing. Bug: 135667565 Test: make RunSettingsRoboTests Change-Id: I5dfe4843a681c613f49caf4584e9dbebc54e708a
This commit is contained in:
@@ -16,7 +16,13 @@
|
||||
|
||||
package com.android.settings.network.telephony;
|
||||
|
||||
import static androidx.lifecycle.Lifecycle.Event.ON_START;
|
||||
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.ContentObserver;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.PersistableBundle;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.CarrierConfigManager;
|
||||
@@ -25,8 +31,12 @@ import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.lifecycle.LifecycleObserver;
|
||||
import androidx.lifecycle.OnLifecycleEvent;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.internal.telephony.Phone;
|
||||
import com.android.internal.telephony.PhoneConstants;
|
||||
@@ -37,17 +47,27 @@ import com.android.settings.R;
|
||||
*/
|
||||
public class EnabledNetworkModePreferenceController extends
|
||||
TelephonyBasePreferenceController implements
|
||||
ListPreference.OnPreferenceChangeListener {
|
||||
ListPreference.OnPreferenceChangeListener, LifecycleObserver {
|
||||
|
||||
private CarrierConfigManager mCarrierConfigManager;
|
||||
private ContentObserver mPreferredNetworkModeObserver;
|
||||
private TelephonyManager mTelephonyManager;
|
||||
private boolean mIsGlobalCdma;
|
||||
@VisibleForTesting
|
||||
boolean mShow4GForLTE;
|
||||
private Preference mPreference;
|
||||
|
||||
public EnabledNetworkModePreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||
mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
|
||||
@Override
|
||||
public void onChange(boolean selfChange) {
|
||||
if (mPreference != null) {
|
||||
updateState(mPreference);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -78,6 +98,24 @@ public class EnabledNetworkModePreferenceController extends
|
||||
return visible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
|
||||
@OnLifecycleEvent(ON_START)
|
||||
public void onStart() {
|
||||
mContext.getContentResolver().registerContentObserver(
|
||||
Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId), true,
|
||||
mPreferredNetworkModeObserver);
|
||||
}
|
||||
|
||||
@OnLifecycleEvent(ON_STOP)
|
||||
public void onStop() {
|
||||
mContext.getContentResolver().unregisterContentObserver(mPreferredNetworkModeObserver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
super.displayPreference(screen);
|
||||
mPreference = screen.findPreference(getPreferenceKey());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
super.updateState(preference);
|
||||
@@ -102,7 +140,7 @@ public class EnabledNetworkModePreferenceController extends
|
||||
return false;
|
||||
}
|
||||
|
||||
public void init(int subId) {
|
||||
public void init(Lifecycle lifecycle, int subId) {
|
||||
mSubId = subId;
|
||||
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||
mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
|
||||
@@ -115,6 +153,7 @@ public class EnabledNetworkModePreferenceController extends
|
||||
? carrierConfig.getBoolean(
|
||||
CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL)
|
||||
: false;
|
||||
lifecycle.addObserver(this);
|
||||
}
|
||||
|
||||
private int getPreferredNetworkMode() {
|
||||
|
@@ -150,7 +150,7 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment {
|
||||
use(CarrierPreferenceController.class).init(mSubId);
|
||||
use(DataUsagePreferenceController.class).init(mSubId);
|
||||
use(PreferredNetworkModePreferenceController.class).init(mSubId);
|
||||
use(EnabledNetworkModePreferenceController.class).init(mSubId);
|
||||
use(EnabledNetworkModePreferenceController.class).init(getLifecycle(), mSubId);
|
||||
use(DataServiceSetupPreferenceController.class).init(mSubId);
|
||||
if (!FeatureFlagPersistent.isEnabled(getContext(), FeatureFlags.NETWORK_INTERNET_V2)) {
|
||||
use(EuiccPreferenceController.class).init(mSubId);
|
||||
|
Reference in New Issue
Block a user