diff --git a/src/com/android/settings/network/InternetPreferenceController.java b/src/com/android/settings/network/InternetPreferenceController.java index b886ff04230..ad1a5f04d56 100644 --- a/src/com/android/settings/network/InternetPreferenceController.java +++ b/src/com/android/settings/network/InternetPreferenceController.java @@ -240,17 +240,4 @@ public class InternetPreferenceController extends AbstractPreferenceController i mSubInfoEntityList = subInfoEntityList; updateState(mPreference); } - - @Override - public void onActiveSubInfoChanged(List activeSubInfoList) { - } - - @Override - public void onAllUiccInfoChanged(List uiccInfoEntityList) { - } - - @Override - public void onAllMobileNetworkInfoChanged( - List mobileNetworkInfoEntityList) { - } } diff --git a/src/com/android/settings/network/MobileNetworkRepository.java b/src/com/android/settings/network/MobileNetworkRepository.java index 0671c8d9fc6..01c763f7c65 100644 --- a/src/com/android/settings/network/MobileNetworkRepository.java +++ b/src/com/android/settings/network/MobileNetworkRepository.java @@ -32,6 +32,7 @@ import android.os.Looper; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; +import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; import android.telephony.UiccCardInfo; import android.telephony.UiccPortInfo; @@ -52,6 +53,7 @@ import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; @@ -92,8 +94,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions private Uri mAirplaneModeSettingUri; private MetricsFeatureProvider mMetricsFeatureProvider; private IntentFilter mFilter = new IntentFilter(); - private MobileDataContentObserver mDataContentObserver; - + private Map mDataContentObserverMap = new HashMap<>(); private int mPhysicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX; private int mLogicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX; private int mCardState = UiccSlotInfo.CARD_STATE_INFO_ABSENT; @@ -104,6 +105,8 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions private boolean mIsRemovable = false; private boolean mIsActive = false; private Map mSubscriptionInfoMap = new ArrayMap<>(); + private Map mTelephonyManagerMap = new HashMap<>(); + private Map mTelephonyCallbackMap = new HashMap<>(); public static MobileNetworkRepository create(Context context, MobileNetworkCallback mobileNetworkCallback) { @@ -130,13 +133,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); - mDataContentObserver = new MobileDataContentObserver( - new Handler(Looper.getMainLooper())); - mDataContentObserver.setOnMobileDataChangedListener(() -> { - sExecutor.execute(() -> { - insertMobileNetworkInfo(context, String.valueOf(mSubId)); - }); - }); mFilter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED); mFilter.addAction(ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED); @@ -175,24 +171,68 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions public void addRegister(LifecycleOwner lifecycleOwner) { mSubscriptionManager.addOnSubscriptionsChangedListener(mContext.getMainExecutor(), this); mAirplaneModeObserver.register(mContext); - if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { - mDataContentObserver.register(mContext, mSubId); - } mContext.registerReceiver(mDataSubscriptionChangedReceiver, mFilter); observeAllSubInfo(lifecycleOwner); observeAllUiccInfo(lifecycleOwner); observeAllMobileNetworkInfo(lifecycleOwner); } + private void addRegisterBySubId(int subId) { + if (!mTelephonyCallbackMap.containsKey(subId)) { + PhoneCallStateTelephonyCallback + telephonyCallback = new PhoneCallStateTelephonyCallback(); + mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(), + telephonyCallback); + mTelephonyCallbackMap.put(subId, telephonyCallback); + mTelephonyManagerMap.put(subId, mTelephonyManager); + } + if (!mDataContentObserverMap.containsKey(subId)) { + MobileDataContentObserver dataContentObserver = new MobileDataContentObserver( + new Handler(Looper.getMainLooper())); + dataContentObserver.register(mContext, subId); + dataContentObserver.setOnMobileDataChangedListener(() -> { + sExecutor.execute(() -> { + insertMobileNetworkInfo(mContext, String.valueOf(subId)); + }); + }); + mDataContentObserverMap.put(subId, dataContentObserver); + } + } + + private void removerRegisterBySubId(int subId) { + if (mTelephonyCallbackMap.containsKey(subId)) { + TelephonyManager tm = mTelephonyManagerMap.get(subId); + PhoneCallStateTelephonyCallback callback = mTelephonyCallbackMap.get(subId); + if (callback != null) { + tm.unregisterTelephonyCallback(callback); + mTelephonyCallbackMap.remove(subId); + } + } + if (mDataContentObserverMap.containsKey(subId)) { + mDataContentObserverMap.get(subId).unRegister(mContext); + mDataContentObserverMap.remove(subId); + } + } + public void removeRegister() { mSubscriptionManager.removeOnSubscriptionsChangedListener(this); - if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { - mDataContentObserver.unRegister(mContext); - } mAirplaneModeObserver.unRegister(mContext); if (mDataSubscriptionChangedReceiver != null) { mContext.unregisterReceiver(mDataSubscriptionChangedReceiver); } + mDataContentObserverMap.forEach((id, observer) -> { + observer.unRegister(mContext); + }); + mDataContentObserverMap.clear(); + + mTelephonyManagerMap.forEach((id, manager) -> { + TelephonyCallback callback = mTelephonyCallbackMap.get(manager.getSubscriptionId()); + if (callback != null) { + manager.unregisterTelephonyCallback(callback); + } + }); + mTelephonyCallbackMap.clear(); + mTelephonyManagerMap.clear(); } private void observeAllSubInfo(LifecycleOwner lifecycleOwner) { @@ -344,6 +384,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions + subInfoEntity); } mMobileNetworkDatabase.insertSubsInfo(subInfoEntity); + addRegisterBySubId(mSubId); insertUiccInfo(subId); insertMobileNetworkInfo(context, subId); mMetricsFeatureProvider.action(mContext, @@ -365,7 +406,10 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions mActiveSubInfoEntityList.removeIf(info -> info.subId.equals(subId)); mUiccInfoEntityList.removeIf(info -> info.subId.equals(subId)); mMobileNetworkInfoEntityList.removeIf(info -> info.subId.equals(subId)); - mSubscriptionInfoMap.remove(Integer.parseInt(subId)); + int id = Integer.parseInt(subId); + removerRegisterBySubId(id); + mSubscriptionInfoMap.remove(id); + mTelephonyManagerMap.remove(id); sCacheSubscriptionInfoEntityMap.remove(subId); sCacheUiccInfoEntityMap.remove(subId); sCacheMobileNetworkInfoEntityMap.remove(subId); @@ -550,6 +594,15 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions Settings.Global.AIRPLANE_MODE_ON, 0) != 0; } + private class PhoneCallStateTelephonyCallback extends TelephonyCallback implements + TelephonyCallback.CallStateListener { + + @Override + public void onCallStateChanged(int state) { + mCallback.onCallStateChanged(state); + } + } + /** * Callback for clients to get the latest info changes if the framework or content observers. * updates the relevant info. @@ -570,5 +623,8 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions default void onAirplaneModeChanged(boolean enabled) { } + + default void onCallStateChanged(int state) { + } } } diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java index a2fb986ec58..449323dd4cb 100644 --- a/src/com/android/settings/network/MobileNetworkSummaryController.java +++ b/src/com/android/settings/network/MobileNetworkSummaryController.java @@ -206,10 +206,6 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController update(); } - @Override - public void onActiveSubInfoChanged(List activeSubInfoList) { - } - @Override public void onAllUiccInfoChanged(List uiccInfoEntityList) { mUiccInfoEntityList = uiccInfoEntityList; diff --git a/src/com/android/settings/network/NetworkProviderCallsSmsController.java b/src/com/android/settings/network/NetworkProviderCallsSmsController.java index 1fb2ebc5d2c..4ad04705cdb 100644 --- a/src/com/android/settings/network/NetworkProviderCallsSmsController.java +++ b/src/com/android/settings/network/NetworkProviderCallsSmsController.java @@ -217,22 +217,9 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl return Utils.isInService(serviceState); } - @Override - public void onAvailableSubInfoChanged(List subInfoEntityList) { - } - @Override public void onActiveSubInfoChanged(List activeSubInfoList) { mSubInfoEntityList = activeSubInfoList; update(); } - - @Override - public void onAllUiccInfoChanged(List uiccInfoEntityList) { - } - - @Override - public void onAllMobileNetworkInfoChanged( - List mobileNetworkInfoEntityList) { - } } diff --git a/src/com/android/settings/network/NetworkProviderSimListController.java b/src/com/android/settings/network/NetworkProviderSimListController.java index 0b58846519a..46249abaf08 100644 --- a/src/com/android/settings/network/NetworkProviderSimListController.java +++ b/src/com/android/settings/network/NetworkProviderSimListController.java @@ -171,10 +171,6 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll return KEY_PREFERENCE_SIM; } - @Override - public void onAirplaneModeChanged(boolean airplaneModeEnabled) { - } - @Override public void onAvailableSubInfoChanged(List subInfoEntityList) { mSubInfoEntityList = subInfoEntityList; @@ -182,19 +178,6 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll update(); } - @Override - public void onActiveSubInfoChanged(List activeSubInfoList) { - } - - @Override - public void onAllUiccInfoChanged(List uiccInfoEntityList) { - } - - @Override - public void onAllMobileNetworkInfoChanged( - List mobileNetworkInfoEntityList) { - } - @Override public void updateState(Preference preference) { super.updateState(preference); diff --git a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java index 8a1cb18c8ef..4f9e138ffb1 100644 --- a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java +++ b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java @@ -111,14 +111,6 @@ public class ConvertToEsimPreferenceController extends TelephonyBasePreferenceCo mSubscriptionInfoEntity = subscriptionInfoEntity; } - @Override - public void onAirplaneModeChanged(boolean airplaneModeEnabled) { - } - - @Override - public void onAvailableSubInfoChanged(List subInfoEntityList) { - } - @Override public void onActiveSubInfoChanged(List subInfoEntityList) { // TODO(b/262195754): Need the intent to enabled the feature. @@ -133,13 +125,4 @@ public class ConvertToEsimPreferenceController extends TelephonyBasePreferenceCo // }); // } } - - @Override - public void onAllUiccInfoChanged(List uiccInfoEntityList) { - } - - @Override - public void onAllMobileNetworkInfoChanged( - List mobileNetworkInfoEntityList) { - } } diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java index f36831d49ae..106929b2928 100644 --- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java +++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java @@ -293,18 +293,10 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere return true; } - @Override - public void onAirplaneModeChanged(boolean airplaneModeEnabled) { - } - boolean isRtlMode() { return mIsRtlMode; } - @Override - public void onAvailableSubInfoChanged(List subInfoEntityList) { - } - @Override public void onActiveSubInfoChanged(List subInfoEntityList) { mSubInfoEntityList = subInfoEntityList; @@ -312,12 +304,5 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere refreshSummary(mPreference); } - @Override - public void onAllUiccInfoChanged(List uiccInfoEntityList) { - } - @Override - public void onAllMobileNetworkInfoChanged( - List mobileNetworkInfoEntityList) { - } } diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java index 3fcc25981f2..971bb498ba9 100644 --- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java +++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java @@ -232,14 +232,6 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon mMobileNetworkInfoEntity = mobileNetworkInfoEntity; } - @Override - public void onAirplaneModeChanged(boolean airplaneModeEnabled) { - } - - @Override - public void onAvailableSubInfoChanged(List subInfoEntityList) { - } - @Override public void onActiveSubInfoChanged(List subInfoEntityList) { mSubscriptionInfoEntityList = subInfoEntityList; @@ -256,9 +248,6 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon refreshSummary(mPreference); } - @Override - public void onAllUiccInfoChanged(List uiccInfoEntityList) { - } @Override public void onAllMobileNetworkInfoChanged( diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java index d7043e83f64..1ff5e17d650 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java @@ -497,21 +497,4 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme } }); } - - @Override - public void onActiveSubInfoChanged(List subInfoEntityList) { - } - - @Override - public void onAllUiccInfoChanged(List uiccInfoEntityList) { - } - - @Override - public void onAllMobileNetworkInfoChanged( - List mobileNetworkInfoEntityList) { - } - - @Override - public void onAirplaneModeChanged(boolean enabled) { - } } diff --git a/src/com/android/settings/network/telephony/RoamingPreferenceController.java b/src/com/android/settings/network/telephony/RoamingPreferenceController.java index 9243c99a49f..af56a88a98d 100644 --- a/src/com/android/settings/network/telephony/RoamingPreferenceController.java +++ b/src/com/android/settings/network/telephony/RoamingPreferenceController.java @@ -237,22 +237,6 @@ public class RoamingPreferenceController extends TelephonyTogglePreferenceContro mMobileNetworkInfoEntity = mobileNetworkInfoEntity; } - @Override - public void onAirplaneModeChanged(boolean airplaneModeEnabled) { - } - - @Override - public void onAvailableSubInfoChanged(List subInfoEntityList) { - } - - @Override - public void onActiveSubInfoChanged(List subInfoEntityList) { - } - - @Override - public void onAllUiccInfoChanged(List uiccInfoEntityList) { - } - @Override public void onAllMobileNetworkInfoChanged( List mobileNetworkInfoEntityList) {