Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76ab5fb2 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

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
parent 6e478ee4
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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());
        }
    }