Loading src/com/android/settings/network/DefaultSubscriptionReceiver.java 0 → 100644 +59 −0 Original line number Diff line number Diff line package com.android.settings.network; import static com.android.internal.telephony.TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; public class DefaultSubscriptionReceiver extends BroadcastReceiver { private Context mContext; private DefaultSubscriptionListener mListener; public DefaultSubscriptionReceiver(Context context, DefaultSubscriptionListener listener) { mContext = context; mListener = listener; } public void registerReceiver() { final IntentFilter filter = new IntentFilter(); filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); filter.addAction(SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED); filter.addAction(ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED); filter.addAction(SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED); mContext.registerReceiver(this, filter); } public void unRegisterReceiver() { mContext.unregisterReceiver(this); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED.equals(action)) { mListener.onDefaultDataChanged(SubscriptionManager.getDefaultDataSubscriptionId()); } else if (SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED.equals(action)) { mListener.onDefaultSubInfoChanged(SubscriptionManager.getDefaultSubscriptionId()); } else if (TelephonyManager.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED.equals(action)) { mListener.onDefaultVoiceChanged(SubscriptionManager.getDefaultVoiceSubscriptionId()); } else if (SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED.equals(action)) { mListener.onDefaultSmsChanged(SubscriptionManager.getDefaultSmsSubscriptionId()); } } public interface DefaultSubscriptionListener { default void onDefaultSubInfoChanged(int defaultSubId) { } default void onDefaultDataChanged(int defaultDataSubId) { } default void onDefaultVoiceChanged(int defaultVoiceSubId) { } default void onDefaultSmsChanged(int defaultSmsSubId) { } } } src/com/android/settings/network/InternetPreferenceController.java +21 −7 Original line number Diff line number Diff line Loading @@ -27,9 +27,7 @@ import static com.android.settings.network.InternetUpdater.INTERNET_WIFI; import android.content.Context; import android.graphics.drawable.Drawable; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.util.Log; import androidx.annotation.IdRes; import androidx.annotation.VisibleForTesting; Loading @@ -45,9 +43,7 @@ import com.android.settings.widget.SummaryUpdater; import com.android.settings.wifi.WifiSummaryUpdater; import com.android.settingslib.Utils; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.utils.ThreadUtils; import java.util.ArrayList; Loading @@ -60,7 +56,8 @@ import java.util.Map; */ public class InternetPreferenceController extends AbstractPreferenceController implements LifecycleObserver, SummaryUpdater.OnSummaryChangeListener, InternetUpdater.InternetChangeListener, MobileNetworkRepository.MobileNetworkCallback { InternetUpdater.InternetChangeListener, MobileNetworkRepository.MobileNetworkCallback, DefaultSubscriptionReceiver.DefaultSubscriptionListener { public static final String KEY = "internet_settings"; Loading @@ -71,6 +68,8 @@ public class InternetPreferenceController extends AbstractPreferenceController i private LifecycleOwner mLifecycleOwner; private MobileNetworkRepository mMobileNetworkRepository; private List<SubscriptionInfoEntity> mSubInfoEntityList = new ArrayList<>(); private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private DefaultSubscriptionReceiver mDataSubscriptionChangedReceiver; @VisibleForTesting static Map<Integer, Integer> sIconMap = new HashMap<>(); Loading Loading @@ -102,6 +101,7 @@ public class InternetPreferenceController extends AbstractPreferenceController i mInternetType = mInternetUpdater.getInternetType(); mLifecycleOwner = lifecycleOwner; mMobileNetworkRepository = MobileNetworkRepository.getInstance(context); mDataSubscriptionChangedReceiver = new DefaultSubscriptionReceiver(context, this); lifecycle.addObserver(this); } Loading Loading @@ -160,6 +160,8 @@ public class InternetPreferenceController extends AbstractPreferenceController i SubscriptionManager.INVALID_SUBSCRIPTION_ID); mMobileNetworkRepository.updateEntity(); mSummaryHelper.register(true); mDataSubscriptionChangedReceiver.registerReceiver(); mDefaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId(); } /** @OnLifecycleEvent(ON_PAUSE) */ Loading @@ -167,6 +169,7 @@ public class InternetPreferenceController extends AbstractPreferenceController i public void onPause() { mMobileNetworkRepository.removeRegister(this); mSummaryHelper.register(false); mDataSubscriptionChangedReceiver.unRegisterReceiver(); } /** Loading Loading @@ -212,11 +215,11 @@ public class InternetPreferenceController extends AbstractPreferenceController i if (subInfo.isActiveDataSubscriptionId) { activeSubInfo = subInfo; } if (subInfo.isDefaultDataSubscription) { if (subInfo.getSubId() == getDefaultDataSubscriptionId()) { defaultSubInfo = subInfo; } } if (activeSubInfo == null) { if (activeSubInfo == null || defaultSubInfo == null) { return; } activeSubInfo = activeSubInfo.isSubscriptionVisible ? activeSubInfo : defaultSubInfo; Loading @@ -237,9 +240,20 @@ public class InternetPreferenceController extends AbstractPreferenceController i return mSubInfoEntityList; } @VisibleForTesting protected int getDefaultDataSubscriptionId() { return mDefaultDataSubId; } @Override public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { mSubInfoEntityList = subInfoEntityList; updateState(mPreference); } @Override public void onDefaultDataChanged(int defaultDataSubId) { mDefaultDataSubId = defaultDataSubId; updateState(mPreference); } } src/com/android/settings/network/MobileNetworkRepository.java +1 −23 Original line number Diff line number Diff line Loading @@ -18,14 +18,9 @@ package com.android.settings.network; import static android.telephony.SubscriptionManager.PROFILE_CLASS_PROVISIONING; import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT; import static com.android.internal.telephony.TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED; import android.annotation.NonNull; import android.app.settings.SettingsEnums; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; Loading Loading @@ -99,7 +94,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions private AirplaneModeObserver mAirplaneModeObserver; private Uri mAirplaneModeSettingUri; private MetricsFeatureProvider mMetricsFeatureProvider; private IntentFilter mFilter = new IntentFilter(); private Map<Integer, MobileDataContentObserver> mDataContentObserverMap = new HashMap<>(); private int mPhysicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX; private int mLogicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX; Loading @@ -112,12 +106,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions private Map<Integer, SubscriptionInfo> mSubscriptionInfoMap = new ArrayMap<>(); private Map<Integer, TelephonyManager> mTelephonyManagerMap = new HashMap<>(); private Map<Integer, PhoneCallStateTelephonyCallback> mTelephonyCallbackMap = new HashMap<>(); private BroadcastReceiver mDataSubscriptionChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { onSubscriptionsChanged(); } }; @NonNull public static MobileNetworkRepository getInstance(Context context) { synchronized (sInstanceLock) { Loading @@ -143,10 +132,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions mMobileNetworkInfoDao = mMobileNetworkDatabase.mMobileNetworkInfoDao(); mAirplaneModeObserver = new AirplaneModeObserver(new Handler(Looper.getMainLooper())); mAirplaneModeSettingUri = Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON); mFilter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED); mFilter.addAction(ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED); mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED); } private class AirplaneModeObserver extends ContentObserver { Loading Loading @@ -188,7 +173,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions mSubscriptionManager.addOnSubscriptionsChangedListener(mContext.getMainExecutor(), this); mAirplaneModeObserver.register(mContext); mContext.registerReceiver(mDataSubscriptionChangedReceiver, mFilter); if (DEBUG) { Log.d(TAG, "addRegister done"); } Loading Loading @@ -271,7 +255,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions if (sCallbacks.isEmpty()) { mSubscriptionManager.removeOnSubscriptionsChangedListener(this); mAirplaneModeObserver.unRegister(mContext); mContext.unregisterReceiver(mDataSubscriptionChangedReceiver); mDataContentObserverMap.forEach((id, observer) -> { observer.unRegister(mContext); }); Loading Loading @@ -524,16 +507,11 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions SubscriptionUtil.getFormattedPhoneNumber(context, subInfo), firstRemovableSubInfo == null ? false : firstRemovableSubInfo.getSubscriptionId() == subId, String.valueOf(SubscriptionUtil.getDefaultSimConfig(context, subId)), SubscriptionUtil.isDefaultSubscription(context, subId), mSubscriptionManager.isValidSubscriptionId(subId), mSubscriptionManager.isUsableSubscriptionId(subId), mSubscriptionManager.isActiveSubscriptionId(subId), true /*availableSubInfo*/, mSubscriptionManager.getDefaultVoiceSubscriptionId() == subId, mSubscriptionManager.getDefaultSmsSubscriptionId() == subId, mSubscriptionManager.getDefaultDataSubscriptionId() == subId, mSubscriptionManager.getDefaultSubscriptionId() == subId, mSubscriptionManager.getActiveDataSubscriptionId() == subId); } } Loading src/com/android/settings/network/NetworkProviderCallsSmsController.java +36 −7 Original line number Diff line number Diff line Loading @@ -38,14 +38,13 @@ import com.android.settingslib.RestrictedPreference; import com.android.settingslib.Utils; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import java.util.List; public class NetworkProviderCallsSmsController extends AbstractPreferenceController implements LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback { LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback, DefaultSubscriptionReceiver.DefaultSubscriptionListener { private static final String TAG = "NetworkProviderCallsSmsController"; private static final String KEY = "calls_and_sms"; Loading @@ -58,6 +57,9 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl private LifecycleOwner mLifecycleOwner; private MobileNetworkRepository mMobileNetworkRepository; private List<SubscriptionInfoEntity> mSubInfoEntityList; private int mDefaultVoiceSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mDefaultSmsSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private DefaultSubscriptionReceiver mDataSubscriptionChangedReceiver; /** * The summary text and click behavior of the "Calls & SMS" item on the Loading @@ -73,6 +75,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl == View.LAYOUT_DIRECTION_RTL; mLifecycleOwner = lifecycleOwner; mMobileNetworkRepository = MobileNetworkRepository.getInstance(context); mDataSubscriptionChangedReceiver = new DefaultSubscriptionReceiver(context, this); if (lifecycle != null) { lifecycle.addObserver(this); } Loading @@ -83,11 +86,15 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl mMobileNetworkRepository.addRegister(mLifecycleOwner, this, SubscriptionManager.INVALID_SUBSCRIPTION_ID); mMobileNetworkRepository.updateEntity(); mDataSubscriptionChangedReceiver.registerReceiver(); mDefaultVoiceSubId = SubscriptionManager.getDefaultVoiceSubscriptionId(); mDefaultSmsSubId = SubscriptionManager.getDefaultSmsSubscriptionId(); } @OnLifecycleEvent(Event.ON_PAUSE) public void onPause() { mMobileNetworkRepository.removeRegister(this); mDataSubscriptionChangedReceiver.unRegisterReceiver(); } @Override Loading Loading @@ -145,16 +152,16 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl protected CharSequence getPreferredStatus(SubscriptionInfoEntity subInfo, int subsSize, int subId) { String status = ""; boolean isDataPreferred = subInfo.isDefaultVoiceSubscription; boolean isSmsPreferred = subInfo.isDefaultSmsSubscription; boolean isCallPreferred = subInfo.getSubId() == getDefaultVoiceSubscriptionId(); boolean isSmsPreferred = subInfo.getSubId() == getDefaultSmsSubscriptionId(); if (!subInfo.isValidSubscription || !isInService(subId)) { status = setSummaryResId(subsSize > 1 ? R.string.calls_sms_unavailable : R.string.calls_sms_temp_unavailable); } else { if (isDataPreferred && isSmsPreferred) { if (isCallPreferred && isSmsPreferred) { status = setSummaryResId(R.string.calls_sms_preferred); } else if (isDataPreferred) { } else if (isCallPreferred) { status = setSummaryResId(R.string.calls_sms_calls_preferred); } else if (isSmsPreferred) { status = setSummaryResId(R.string.calls_sms_sms_preferred); Loading Loading @@ -226,4 +233,26 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl mSubInfoEntityList = activeSubInfoList; update(); } @VisibleForTesting protected int getDefaultVoiceSubscriptionId() { return mDefaultVoiceSubId; } @VisibleForTesting protected int getDefaultSmsSubscriptionId() { return mDefaultSmsSubId; } @Override public void onDefaultVoiceChanged(int defaultVoiceSubId) { mDefaultVoiceSubId = defaultVoiceSubId; update(); } @Override public void onDefaultSmsChanged(int defaultSmsSubId) { mDefaultSmsSubId = defaultSmsSubId; update(); } } src/com/android/settings/network/NetworkProviderSimListController.java +26 −5 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.telephony.SubscriptionManager; import android.util.ArrayMap; import android.util.Log; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.LifecycleOwner; Loading @@ -38,16 +37,15 @@ import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import java.util.ArrayList; import java.util.List; import java.util.Map; public class NetworkProviderSimListController extends AbstractPreferenceController implements LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback { LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback, DefaultSubscriptionReceiver.DefaultSubscriptionListener { private static final String TAG = "NetworkProviderSimListCtrl"; private static final String KEY_PREFERENCE_CATEGORY_SIM = "provider_model_sim_category"; private static final String KEY_PREFERENCE_SIM = "provider_model_sim_list"; Loading @@ -58,6 +56,7 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll private LifecycleOwner mLifecycleOwner; private MobileNetworkRepository mMobileNetworkRepository; private List<SubscriptionInfoEntity> mSubInfoEntityList = new ArrayList<>(); private DefaultSubscriptionReceiver mDataSubscriptionChangedReceiver; public NetworkProviderSimListController(Context context, Lifecycle lifecycle, LifecycleOwner lifecycleOwner) { Loading @@ -66,6 +65,7 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll mPreferences = new ArrayMap<>(); mLifecycleOwner = lifecycleOwner; mMobileNetworkRepository = MobileNetworkRepository.getInstance(context); mDataSubscriptionChangedReceiver = new DefaultSubscriptionReceiver(context, this); lifecycle.addObserver(this); } Loading @@ -74,11 +74,13 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll mMobileNetworkRepository.addRegister(mLifecycleOwner, this, SubscriptionManager.INVALID_SUBSCRIPTION_ID); mMobileNetworkRepository.updateEntity(); mDataSubscriptionChangedReceiver.registerReceiver(); } @OnLifecycleEvent(ON_PAUSE) public void onPause() { mMobileNetworkRepository.removeRegister(this); mDataSubscriptionChangedReceiver.unRegisterReceiver(); } @Override Loading Loading @@ -130,7 +132,8 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll public CharSequence getSummary(SubscriptionInfoEntity subInfo, CharSequence displayName) { if (subInfo.isActiveSubscriptionId) { CharSequence config = subInfo.defaultSimConfig; CharSequence config = SubscriptionUtil.getDefaultSimConfig(mContext, subInfo.getSubId()); CharSequence summary = mContext.getResources().getString( R.string.sim_category_active_sim); if (config == "") { Loading Loading @@ -185,4 +188,22 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll refreshSummary(mPreferenceCategory); update(); } @Override public void onDefaultDataChanged(int defaultDataSubId) { refreshSummary(mPreferenceCategory); update(); } @Override public void onDefaultVoiceChanged(int defaultVoiceSubId) { refreshSummary(mPreferenceCategory); update(); } @Override public void onDefaultSmsChanged(int defaultSmsSubId) { refreshSummary(mPreferenceCategory); update(); } } Loading
src/com/android/settings/network/DefaultSubscriptionReceiver.java 0 → 100644 +59 −0 Original line number Diff line number Diff line package com.android.settings.network; import static com.android.internal.telephony.TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; public class DefaultSubscriptionReceiver extends BroadcastReceiver { private Context mContext; private DefaultSubscriptionListener mListener; public DefaultSubscriptionReceiver(Context context, DefaultSubscriptionListener listener) { mContext = context; mListener = listener; } public void registerReceiver() { final IntentFilter filter = new IntentFilter(); filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); filter.addAction(SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED); filter.addAction(ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED); filter.addAction(SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED); mContext.registerReceiver(this, filter); } public void unRegisterReceiver() { mContext.unregisterReceiver(this); } @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED.equals(action)) { mListener.onDefaultDataChanged(SubscriptionManager.getDefaultDataSubscriptionId()); } else if (SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED.equals(action)) { mListener.onDefaultSubInfoChanged(SubscriptionManager.getDefaultSubscriptionId()); } else if (TelephonyManager.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED.equals(action)) { mListener.onDefaultVoiceChanged(SubscriptionManager.getDefaultVoiceSubscriptionId()); } else if (SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED.equals(action)) { mListener.onDefaultSmsChanged(SubscriptionManager.getDefaultSmsSubscriptionId()); } } public interface DefaultSubscriptionListener { default void onDefaultSubInfoChanged(int defaultSubId) { } default void onDefaultDataChanged(int defaultDataSubId) { } default void onDefaultVoiceChanged(int defaultVoiceSubId) { } default void onDefaultSmsChanged(int defaultSmsSubId) { } } }
src/com/android/settings/network/InternetPreferenceController.java +21 −7 Original line number Diff line number Diff line Loading @@ -27,9 +27,7 @@ import static com.android.settings.network.InternetUpdater.INTERNET_WIFI; import android.content.Context; import android.graphics.drawable.Drawable; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.util.Log; import androidx.annotation.IdRes; import androidx.annotation.VisibleForTesting; Loading @@ -45,9 +43,7 @@ import com.android.settings.widget.SummaryUpdater; import com.android.settings.wifi.WifiSummaryUpdater; import com.android.settingslib.Utils; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.utils.ThreadUtils; import java.util.ArrayList; Loading @@ -60,7 +56,8 @@ import java.util.Map; */ public class InternetPreferenceController extends AbstractPreferenceController implements LifecycleObserver, SummaryUpdater.OnSummaryChangeListener, InternetUpdater.InternetChangeListener, MobileNetworkRepository.MobileNetworkCallback { InternetUpdater.InternetChangeListener, MobileNetworkRepository.MobileNetworkCallback, DefaultSubscriptionReceiver.DefaultSubscriptionListener { public static final String KEY = "internet_settings"; Loading @@ -71,6 +68,8 @@ public class InternetPreferenceController extends AbstractPreferenceController i private LifecycleOwner mLifecycleOwner; private MobileNetworkRepository mMobileNetworkRepository; private List<SubscriptionInfoEntity> mSubInfoEntityList = new ArrayList<>(); private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private DefaultSubscriptionReceiver mDataSubscriptionChangedReceiver; @VisibleForTesting static Map<Integer, Integer> sIconMap = new HashMap<>(); Loading Loading @@ -102,6 +101,7 @@ public class InternetPreferenceController extends AbstractPreferenceController i mInternetType = mInternetUpdater.getInternetType(); mLifecycleOwner = lifecycleOwner; mMobileNetworkRepository = MobileNetworkRepository.getInstance(context); mDataSubscriptionChangedReceiver = new DefaultSubscriptionReceiver(context, this); lifecycle.addObserver(this); } Loading Loading @@ -160,6 +160,8 @@ public class InternetPreferenceController extends AbstractPreferenceController i SubscriptionManager.INVALID_SUBSCRIPTION_ID); mMobileNetworkRepository.updateEntity(); mSummaryHelper.register(true); mDataSubscriptionChangedReceiver.registerReceiver(); mDefaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId(); } /** @OnLifecycleEvent(ON_PAUSE) */ Loading @@ -167,6 +169,7 @@ public class InternetPreferenceController extends AbstractPreferenceController i public void onPause() { mMobileNetworkRepository.removeRegister(this); mSummaryHelper.register(false); mDataSubscriptionChangedReceiver.unRegisterReceiver(); } /** Loading Loading @@ -212,11 +215,11 @@ public class InternetPreferenceController extends AbstractPreferenceController i if (subInfo.isActiveDataSubscriptionId) { activeSubInfo = subInfo; } if (subInfo.isDefaultDataSubscription) { if (subInfo.getSubId() == getDefaultDataSubscriptionId()) { defaultSubInfo = subInfo; } } if (activeSubInfo == null) { if (activeSubInfo == null || defaultSubInfo == null) { return; } activeSubInfo = activeSubInfo.isSubscriptionVisible ? activeSubInfo : defaultSubInfo; Loading @@ -237,9 +240,20 @@ public class InternetPreferenceController extends AbstractPreferenceController i return mSubInfoEntityList; } @VisibleForTesting protected int getDefaultDataSubscriptionId() { return mDefaultDataSubId; } @Override public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { mSubInfoEntityList = subInfoEntityList; updateState(mPreference); } @Override public void onDefaultDataChanged(int defaultDataSubId) { mDefaultDataSubId = defaultDataSubId; updateState(mPreference); } }
src/com/android/settings/network/MobileNetworkRepository.java +1 −23 Original line number Diff line number Diff line Loading @@ -18,14 +18,9 @@ package com.android.settings.network; import static android.telephony.SubscriptionManager.PROFILE_CLASS_PROVISIONING; import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT; import static com.android.internal.telephony.TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED; import android.annotation.NonNull; import android.app.settings.SettingsEnums; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; Loading Loading @@ -99,7 +94,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions private AirplaneModeObserver mAirplaneModeObserver; private Uri mAirplaneModeSettingUri; private MetricsFeatureProvider mMetricsFeatureProvider; private IntentFilter mFilter = new IntentFilter(); private Map<Integer, MobileDataContentObserver> mDataContentObserverMap = new HashMap<>(); private int mPhysicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX; private int mLogicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX; Loading @@ -112,12 +106,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions private Map<Integer, SubscriptionInfo> mSubscriptionInfoMap = new ArrayMap<>(); private Map<Integer, TelephonyManager> mTelephonyManagerMap = new HashMap<>(); private Map<Integer, PhoneCallStateTelephonyCallback> mTelephonyCallbackMap = new HashMap<>(); private BroadcastReceiver mDataSubscriptionChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { onSubscriptionsChanged(); } }; @NonNull public static MobileNetworkRepository getInstance(Context context) { synchronized (sInstanceLock) { Loading @@ -143,10 +132,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions mMobileNetworkInfoDao = mMobileNetworkDatabase.mMobileNetworkInfoDao(); mAirplaneModeObserver = new AirplaneModeObserver(new Handler(Looper.getMainLooper())); mAirplaneModeSettingUri = Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON); mFilter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED); mFilter.addAction(ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED); mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED); } private class AirplaneModeObserver extends ContentObserver { Loading Loading @@ -188,7 +173,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions mSubscriptionManager.addOnSubscriptionsChangedListener(mContext.getMainExecutor(), this); mAirplaneModeObserver.register(mContext); mContext.registerReceiver(mDataSubscriptionChangedReceiver, mFilter); if (DEBUG) { Log.d(TAG, "addRegister done"); } Loading Loading @@ -271,7 +255,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions if (sCallbacks.isEmpty()) { mSubscriptionManager.removeOnSubscriptionsChangedListener(this); mAirplaneModeObserver.unRegister(mContext); mContext.unregisterReceiver(mDataSubscriptionChangedReceiver); mDataContentObserverMap.forEach((id, observer) -> { observer.unRegister(mContext); }); Loading Loading @@ -524,16 +507,11 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions SubscriptionUtil.getFormattedPhoneNumber(context, subInfo), firstRemovableSubInfo == null ? false : firstRemovableSubInfo.getSubscriptionId() == subId, String.valueOf(SubscriptionUtil.getDefaultSimConfig(context, subId)), SubscriptionUtil.isDefaultSubscription(context, subId), mSubscriptionManager.isValidSubscriptionId(subId), mSubscriptionManager.isUsableSubscriptionId(subId), mSubscriptionManager.isActiveSubscriptionId(subId), true /*availableSubInfo*/, mSubscriptionManager.getDefaultVoiceSubscriptionId() == subId, mSubscriptionManager.getDefaultSmsSubscriptionId() == subId, mSubscriptionManager.getDefaultDataSubscriptionId() == subId, mSubscriptionManager.getDefaultSubscriptionId() == subId, mSubscriptionManager.getActiveDataSubscriptionId() == subId); } } Loading
src/com/android/settings/network/NetworkProviderCallsSmsController.java +36 −7 Original line number Diff line number Diff line Loading @@ -38,14 +38,13 @@ import com.android.settingslib.RestrictedPreference; import com.android.settingslib.Utils; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import java.util.List; public class NetworkProviderCallsSmsController extends AbstractPreferenceController implements LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback { LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback, DefaultSubscriptionReceiver.DefaultSubscriptionListener { private static final String TAG = "NetworkProviderCallsSmsController"; private static final String KEY = "calls_and_sms"; Loading @@ -58,6 +57,9 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl private LifecycleOwner mLifecycleOwner; private MobileNetworkRepository mMobileNetworkRepository; private List<SubscriptionInfoEntity> mSubInfoEntityList; private int mDefaultVoiceSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mDefaultSmsSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private DefaultSubscriptionReceiver mDataSubscriptionChangedReceiver; /** * The summary text and click behavior of the "Calls & SMS" item on the Loading @@ -73,6 +75,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl == View.LAYOUT_DIRECTION_RTL; mLifecycleOwner = lifecycleOwner; mMobileNetworkRepository = MobileNetworkRepository.getInstance(context); mDataSubscriptionChangedReceiver = new DefaultSubscriptionReceiver(context, this); if (lifecycle != null) { lifecycle.addObserver(this); } Loading @@ -83,11 +86,15 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl mMobileNetworkRepository.addRegister(mLifecycleOwner, this, SubscriptionManager.INVALID_SUBSCRIPTION_ID); mMobileNetworkRepository.updateEntity(); mDataSubscriptionChangedReceiver.registerReceiver(); mDefaultVoiceSubId = SubscriptionManager.getDefaultVoiceSubscriptionId(); mDefaultSmsSubId = SubscriptionManager.getDefaultSmsSubscriptionId(); } @OnLifecycleEvent(Event.ON_PAUSE) public void onPause() { mMobileNetworkRepository.removeRegister(this); mDataSubscriptionChangedReceiver.unRegisterReceiver(); } @Override Loading Loading @@ -145,16 +152,16 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl protected CharSequence getPreferredStatus(SubscriptionInfoEntity subInfo, int subsSize, int subId) { String status = ""; boolean isDataPreferred = subInfo.isDefaultVoiceSubscription; boolean isSmsPreferred = subInfo.isDefaultSmsSubscription; boolean isCallPreferred = subInfo.getSubId() == getDefaultVoiceSubscriptionId(); boolean isSmsPreferred = subInfo.getSubId() == getDefaultSmsSubscriptionId(); if (!subInfo.isValidSubscription || !isInService(subId)) { status = setSummaryResId(subsSize > 1 ? R.string.calls_sms_unavailable : R.string.calls_sms_temp_unavailable); } else { if (isDataPreferred && isSmsPreferred) { if (isCallPreferred && isSmsPreferred) { status = setSummaryResId(R.string.calls_sms_preferred); } else if (isDataPreferred) { } else if (isCallPreferred) { status = setSummaryResId(R.string.calls_sms_calls_preferred); } else if (isSmsPreferred) { status = setSummaryResId(R.string.calls_sms_sms_preferred); Loading Loading @@ -226,4 +233,26 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl mSubInfoEntityList = activeSubInfoList; update(); } @VisibleForTesting protected int getDefaultVoiceSubscriptionId() { return mDefaultVoiceSubId; } @VisibleForTesting protected int getDefaultSmsSubscriptionId() { return mDefaultSmsSubId; } @Override public void onDefaultVoiceChanged(int defaultVoiceSubId) { mDefaultVoiceSubId = defaultVoiceSubId; update(); } @Override public void onDefaultSmsChanged(int defaultSmsSubId) { mDefaultSmsSubId = defaultSmsSubId; update(); } }
src/com/android/settings/network/NetworkProviderSimListController.java +26 −5 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.telephony.SubscriptionManager; import android.util.ArrayMap; import android.util.Log; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.LifecycleOwner; Loading @@ -38,16 +37,15 @@ import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import java.util.ArrayList; import java.util.List; import java.util.Map; public class NetworkProviderSimListController extends AbstractPreferenceController implements LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback { LifecycleObserver, MobileNetworkRepository.MobileNetworkCallback, DefaultSubscriptionReceiver.DefaultSubscriptionListener { private static final String TAG = "NetworkProviderSimListCtrl"; private static final String KEY_PREFERENCE_CATEGORY_SIM = "provider_model_sim_category"; private static final String KEY_PREFERENCE_SIM = "provider_model_sim_list"; Loading @@ -58,6 +56,7 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll private LifecycleOwner mLifecycleOwner; private MobileNetworkRepository mMobileNetworkRepository; private List<SubscriptionInfoEntity> mSubInfoEntityList = new ArrayList<>(); private DefaultSubscriptionReceiver mDataSubscriptionChangedReceiver; public NetworkProviderSimListController(Context context, Lifecycle lifecycle, LifecycleOwner lifecycleOwner) { Loading @@ -66,6 +65,7 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll mPreferences = new ArrayMap<>(); mLifecycleOwner = lifecycleOwner; mMobileNetworkRepository = MobileNetworkRepository.getInstance(context); mDataSubscriptionChangedReceiver = new DefaultSubscriptionReceiver(context, this); lifecycle.addObserver(this); } Loading @@ -74,11 +74,13 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll mMobileNetworkRepository.addRegister(mLifecycleOwner, this, SubscriptionManager.INVALID_SUBSCRIPTION_ID); mMobileNetworkRepository.updateEntity(); mDataSubscriptionChangedReceiver.registerReceiver(); } @OnLifecycleEvent(ON_PAUSE) public void onPause() { mMobileNetworkRepository.removeRegister(this); mDataSubscriptionChangedReceiver.unRegisterReceiver(); } @Override Loading Loading @@ -130,7 +132,8 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll public CharSequence getSummary(SubscriptionInfoEntity subInfo, CharSequence displayName) { if (subInfo.isActiveSubscriptionId) { CharSequence config = subInfo.defaultSimConfig; CharSequence config = SubscriptionUtil.getDefaultSimConfig(mContext, subInfo.getSubId()); CharSequence summary = mContext.getResources().getString( R.string.sim_category_active_sim); if (config == "") { Loading Loading @@ -185,4 +188,22 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll refreshSummary(mPreferenceCategory); update(); } @Override public void onDefaultDataChanged(int defaultDataSubId) { refreshSummary(mPreferenceCategory); update(); } @Override public void onDefaultVoiceChanged(int defaultVoiceSubId) { refreshSummary(mPreferenceCategory); update(); } @Override public void onDefaultSmsChanged(int defaultSmsSubId) { refreshSummary(mPreferenceCategory); update(); } }