Fix potential issue where sub info change listener is not registered.
SubscriptionManager#addOnSubscriptionsChangedListener can fail to register a listener if the TELEPHONY_REGISTRY system service is not up. Currently this is just silently ignored. Adding a callback method on the listener to notify the registrant that the listener failed to be registered, and adding exponential backoff code in TelecomAccountRegistry to retry registration. Test: Manual; edited code in Subscriptionmanager to fail the first attempts to add a listener for TelecomAccountRegistry. Verified the backoff took place and registration still occurred for the listener. Test: Tried to write a mockito test but gave up because this code has far too many intertwined dependencies and is not inherently testable Bug: 152217039 Fixes: 153376310 Change-Id: Icf3133cdeca526979cb621f29659b880127b680a Merged-In: Ib032072dcfd2d3d5e700e380af08b7b3142ebb8e
This commit is contained in:
@@ -948,6 +948,18 @@ public class SubscriptionManager {
|
||||
if (DBG) log("onSubscriptionsChanged: NOT OVERRIDDEN");
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback invoked when {@link SubscriptionManager#addOnSubscriptionsChangedListener(
|
||||
* Executor, OnSubscriptionsChangedListener)} or
|
||||
* {@link SubscriptionManager#addOnSubscriptionsChangedListener(
|
||||
* OnSubscriptionsChangedListener)} fails to complete due to the
|
||||
* {@link Context#TELEPHONY_REGISTRY_SERVICE} being unavailable.
|
||||
* @hide
|
||||
*/
|
||||
public void onAddListenerFailed() {
|
||||
Rlog.w(LOG_TAG, "onAddListenerFailed not overridden");
|
||||
}
|
||||
|
||||
private void log(String s) {
|
||||
Rlog.d(LOG_TAG, s);
|
||||
}
|
||||
@@ -1028,6 +1040,12 @@ public class SubscriptionManager {
|
||||
if (telephonyRegistryManager != null) {
|
||||
telephonyRegistryManager.addOnSubscriptionsChangedListener(listener,
|
||||
executor);
|
||||
} else {
|
||||
// If the telephony registry isn't available, we will inform the caller on their
|
||||
// listener that it failed so they can try to re-register.
|
||||
loge("addOnSubscriptionsChangedListener: pkgname=" + pkgName + " failed to be added "
|
||||
+ " due to TELEPHONY_REGISTRY_SERVICE being unavailable.");
|
||||
executor.execute(() -> listener.onAddListenerFailed());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user