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

Commit aa8ad23f authored by Danny Baumann's avatar Danny Baumann Committed by Gerrit Code Review
Browse files

Clear callback handler queue when unregistering a phone state listener.

The listener is likely to expect no callbacks coming in after
unregistering.

Change-Id: Ia87c45f498eefd32123beed129def08cce125f7a
parent 28258a1f
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -619,12 +619,22 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
        synchronized (mRecords) {
            final int recordCount = mRecords.size();
            for (int i = 0; i < recordCount; i++) {
                if (mRecords.get(i).binder == binder) {
                    if (DBG) {
                Record r = mRecords.get(i);
                if (r.binder == binder) {
                    if (DBG) {
                        log("remove: binder=" + binder + "r.pkgForDebug" + r.pkgForDebug
                                + "r.callback" + r.callback);
                    }
                    try {
                        if (r.callback != null) {
                            r.callback.onUnregistered();
                        }
                        if (r.onSubscriptionsChangedListenerCallback != null) {
                            r.onSubscriptionsChangedListenerCallback.onUnregistered();
                        }
                    } catch (RemoteException ex) {
                        // ignored, we'll remove it anyway
                    }
                    mRecords.remove(i);
                    return;
                }
+4 −0
Original line number Diff line number Diff line
@@ -579,6 +579,10 @@ public class PhoneStateListener {
        public void onOemHookRawEvent(byte[] rawData) {
            Message.obtain(mHandler, LISTEN_OEM_HOOK_RAW_EVENT, 0, 0, rawData).sendToTarget();
        }

        public void onUnregistered() {
            mHandler.removeCallbacksAndMessages(null);
        }
    };

    private void log(String s) {
+4 −0
Original line number Diff line number Diff line
@@ -336,6 +336,10 @@ public class SubscriptionManager {
                if (DBG) log("callback: received, sendEmptyMessage(0) to handler");
                mHandler.sendEmptyMessage(0);
            }
            @Override
            public void onUnregistered() {
                mHandler.removeMessages(0);
            }
        };

        private void log(String s) {
+1 −0
Original line number Diff line number Diff line
@@ -18,5 +18,6 @@ package com.android.internal.telephony;

oneway interface IOnSubscriptionsChangedListener {
    void onSubscriptionsChanged();
    void onUnregistered();
}
+2 −0
Original line number Diff line number Diff line
@@ -44,5 +44,7 @@ oneway interface IPhoneStateListener {
    void onDataConnectionRealTimeInfoChanged(in DataConnectionRealTimeInfo dcRtInfo);
    void onVoLteServiceStateChanged(in VoLteServiceState lteState);
    void onOemHookRawEvent(in byte[] rawData);

    void onUnregistered();
}