[Settings] The receiver should be registered with all clients instead of

the client which init the repository

Bug: 274748033
Test: local test
Change-Id: I9981d39f5407f02684585354d1fc0de0bd8b0873
This commit is contained in:
Zoey Chen
2023-03-22 13:01:23 +00:00
parent a311ae81fc
commit 5c4d79154e
2 changed files with 26 additions and 19 deletions

View File

@@ -111,8 +111,12 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
private Map<Integer, SubscriptionInfo> mSubscriptionInfoMap = new ArrayMap<>(); private Map<Integer, SubscriptionInfo> mSubscriptionInfoMap = new ArrayMap<>();
private Map<Integer, TelephonyManager> mTelephonyManagerMap = new HashMap<>(); private Map<Integer, TelephonyManager> mTelephonyManagerMap = new HashMap<>();
private Map<Integer, PhoneCallStateTelephonyCallback> mTelephonyCallbackMap = new HashMap<>(); private Map<Integer, PhoneCallStateTelephonyCallback> mTelephonyCallbackMap = new HashMap<>();
private BroadcastReceiver mDataSubscriptionChangedReceiver = null; private BroadcastReceiver mDataSubscriptionChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onSubscriptionsChanged();
}
};
@NonNull @NonNull
public static MobileNetworkRepository getInstance(Context context) { public static MobileNetworkRepository getInstance(Context context) {
synchronized (sInstanceLock) { synchronized (sInstanceLock) {
@@ -142,8 +146,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED); mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SUBSCRIPTION_CHANGED);
mFilter.addAction(ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED); mFilter.addAction(ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED);
mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED); mFilter.addAction(SubscriptionManager.ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED);
mDataSubscriptionChangedReceiver = new DataSubscriptionChangedReceiver();
mContext.registerReceiver(mDataSubscriptionChangedReceiver, mFilter);
} }
private class AirplaneModeObserver extends ContentObserver { private class AirplaneModeObserver extends ContentObserver {
@@ -171,13 +173,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
} }
} }
private class DataSubscriptionChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
onSubscriptionsChanged();
}
}
/** /**
* Register all callbacks and listener. * Register all callbacks and listener.
* *
@@ -188,9 +183,16 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
*/ */
public void addRegister(LifecycleOwner lifecycleOwner, public void addRegister(LifecycleOwner lifecycleOwner,
MobileNetworkCallback mobileNetworkCallback, int subId) { MobileNetworkCallback mobileNetworkCallback, int subId) {
if (sCallbacks.isEmpty()) {
mSubscriptionManager.addOnSubscriptionsChangedListener(mContext.getMainExecutor(),
this);
mAirplaneModeObserver.register(mContext);
mContext.registerReceiver(mDataSubscriptionChangedReceiver, mFilter);
if (DEBUG) {
Log.d(TAG, "addRegister done");
}
}
sCallbacks.add(mobileNetworkCallback); sCallbacks.add(mobileNetworkCallback);
mSubscriptionManager.addOnSubscriptionsChangedListener(mContext.getMainExecutor(), this);
mAirplaneModeObserver.register(mContext);
observeAllSubInfo(lifecycleOwner); observeAllSubInfo(lifecycleOwner);
observeAllUiccInfo(lifecycleOwner); observeAllUiccInfo(lifecycleOwner);
observeAllMobileNetworkInfo(lifecycleOwner); observeAllMobileNetworkInfo(lifecycleOwner);
@@ -200,7 +202,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
} }
} }
private void addRegisterBySubId(int subId) { public void addRegisterBySubId(int subId) {
MobileDataContentObserver dataContentObserver = new MobileDataContentObserver( MobileDataContentObserver dataContentObserver = new MobileDataContentObserver(
new Handler(Looper.getMainLooper())); new Handler(Looper.getMainLooper()));
dataContentObserver.setOnMobileDataChangedListener(() -> { dataContentObserver.setOnMobileDataChangedListener(() -> {
@@ -268,10 +270,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
if (sCallbacks.isEmpty()) { if (sCallbacks.isEmpty()) {
mSubscriptionManager.removeOnSubscriptionsChangedListener(this); mSubscriptionManager.removeOnSubscriptionsChangedListener(this);
mAirplaneModeObserver.unRegister(mContext); mAirplaneModeObserver.unRegister(mContext);
if (mDataSubscriptionChangedReceiver != null) { mContext.unregisterReceiver(mDataSubscriptionChangedReceiver);
mContext.unregisterReceiver(mDataSubscriptionChangedReceiver);
mDataSubscriptionChangedReceiver = null;
}
mDataContentObserverMap.forEach((id, observer) -> { mDataContentObserverMap.forEach((id, observer) -> {
observer.unRegister(mContext); observer.unRegister(mContext);
}); });
@@ -285,6 +284,9 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
}); });
mTelephonyCallbackMap.clear(); mTelephonyCallbackMap.clear();
mTelephonyManagerMap.clear(); mTelephonyManagerMap.clear();
if (DEBUG) {
Log.d(TAG, "removeRegister done");
}
} }
} }

View File

@@ -104,8 +104,13 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
@OnLifecycleEvent(ON_RESUME) @OnLifecycleEvent(ON_RESUME)
public void onResume() { public void onResume() {
mMobileNetworkRepository.addRegister(mLifecycleOwner, this, getDefaultSubscriptionId()); mMobileNetworkRepository.addRegister(mLifecycleOwner, this,
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
mMobileNetworkRepository.updateEntity(); mMobileNetworkRepository.updateEntity();
// Can not get default subId from database until get the callback, add register by subId
// later.
mMobileNetworkRepository.addRegisterBySubId(getDefaultSubscriptionId());
} }
@OnLifecycleEvent(ON_PAUSE) @OnLifecycleEvent(ON_PAUSE)