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

Commit 02f70c74 authored by Sooraj Sasindran's avatar Sooraj Sasindran
Browse files

Do not use hidden broadcast API of RemoteCallbackList

Do not use hidden broadcast API of RemoteCallbackList
Bug: 140908357
Bug: 146349977
Test: Build
Merged-In: I5fa9b0f36f18c6073ad20867f6bf62d573f823b8
Change-Id: I5fa9b0f36f18c6073ad20867f6bf62d573f823b8
parent c1fbe4dd
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.content.Context;
import android.os.IInterface;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.telephony.SubscriptionManager;
import android.telephony.ims.aidl.IImsCapabilityCallback;
@@ -31,6 +30,7 @@ import android.util.Log;

import com.android.ims.internal.IImsFeatureStatusCallback;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.util.RemoteCallbackListExt;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -326,12 +326,12 @@ public abstract class ImsFeature {
    /** @hide */
    protected final Object mLock = new Object();

    private final RemoteCallbackList<IImsFeatureStatusCallback> mStatusCallbacks =
            new RemoteCallbackList<>();
    private final RemoteCallbackListExt<IImsFeatureStatusCallback> mStatusCallbacks =
            new RemoteCallbackListExt<>();
    private @ImsState int mState = STATE_UNAVAILABLE;
    private int mSlotId = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
    private final RemoteCallbackList<IImsCapabilityCallback> mCapabilityCallbacks =
            new RemoteCallbackList<>();
    private final RemoteCallbackListExt<IImsCapabilityCallback> mCapabilityCallbacks =
            new RemoteCallbackListExt<>();
    private Capabilities mCapabilityStatus = new Capabilities();

    /**
@@ -412,7 +412,7 @@ public abstract class ImsFeature {
     * Internal method called by ImsFeature when setFeatureState has changed.
     */
    private void notifyFeatureState(@ImsState int state) {
        mStatusCallbacks.broadcast((c) -> {
        mStatusCallbacks.broadcastAction((c) -> {
            try {
                c.notifyImsFeatureStatus(state);
            } catch (RemoteException e) {
@@ -491,7 +491,7 @@ public abstract class ImsFeature {
        synchronized (mLock) {
            mCapabilityStatus = caps.copy();
        }
        mCapabilityCallbacks.broadcast((callback) -> {
        mCapabilityCallbacks.broadcastAction((callback) -> {
            try {
                callback.onCapabilitiesStatusChanged(caps.mCapabilities);
            } catch (RemoteException e) {
+5 −4
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.content.Context;
import android.os.PersistableBundle;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.aidl.IImsConfig;
@@ -31,6 +30,7 @@ import android.util.Log;

import com.android.ims.ImsConfig;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.util.RemoteCallbackListExt;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -257,7 +257,8 @@ public class ImsConfigImplBase {
    })
    public @interface SetConfigResult {}

    private final RemoteCallbackList<IImsConfigCallback> mCallbacks = new RemoteCallbackList<>();
    private final RemoteCallbackListExt<IImsConfigCallback> mCallbacks =
            new RemoteCallbackListExt<>();
    ImsConfigStub mImsConfigStub;

    /**
@@ -298,7 +299,7 @@ public class ImsConfigImplBase {
        if (mCallbacks == null) {
            return;
        }
        mCallbacks.broadcast(c -> {
        mCallbacks.broadcastAction(c -> {
            try {
                c.onIntConfigChanged(item, value);
            } catch (RemoteException e) {
@@ -312,7 +313,7 @@ public class ImsConfigImplBase {
        if (mCallbacks == null) {
            return;
        }
        mCallbacks.broadcast(c -> {
        mCallbacks.broadcastAction(c -> {
            try {
                c.onStringConfigChanged(item, value);
            } catch (RemoteException e) {
+8 −8
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.net.Uri;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.RegistrationManager;
@@ -29,6 +28,7 @@ import android.telephony.ims.aidl.IImsRegistrationCallback;
import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.util.RemoteCallbackListExt;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -94,8 +94,8 @@ public class ImsRegistrationImplBase {
        }
    };

    private final RemoteCallbackList<IImsRegistrationCallback> mCallbacks
            = new RemoteCallbackList<>();
    private final RemoteCallbackListExt<IImsRegistrationCallback> mCallbacks =
            new RemoteCallbackListExt<>();
    private final Object mLock = new Object();
    // Locked on mLock
    private @ImsRegistrationTech
@@ -129,7 +129,7 @@ public class ImsRegistrationImplBase {
     */
    public final void onRegistered(@ImsRegistrationTech int imsRadioTech) {
        updateToState(imsRadioTech, RegistrationManager.REGISTRATION_STATE_REGISTERED);
        mCallbacks.broadcast((c) -> {
        mCallbacks.broadcastAction((c) -> {
            try {
                c.onRegistered(imsRadioTech);
            } catch (RemoteException e) {
@@ -147,7 +147,7 @@ public class ImsRegistrationImplBase {
     */
    public final void onRegistering(@ImsRegistrationTech int imsRadioTech) {
        updateToState(imsRadioTech, RegistrationManager.REGISTRATION_STATE_REGISTERING);
        mCallbacks.broadcast((c) -> {
        mCallbacks.broadcastAction((c) -> {
            try {
                c.onRegistering(imsRadioTech);
            } catch (RemoteException e) {
@@ -175,7 +175,7 @@ public class ImsRegistrationImplBase {
     */
    public final void onDeregistered(ImsReasonInfo info) {
        updateToDisconnectedState(info);
        mCallbacks.broadcast((c) -> {
        mCallbacks.broadcastAction((c) -> {
            try {
                c.onDeregistered(info);
            } catch (RemoteException e) {
@@ -194,7 +194,7 @@ public class ImsRegistrationImplBase {
     */
    public final void onTechnologyChangeFailed(@ImsRegistrationTech int imsRadioTech,
            ImsReasonInfo info) {
        mCallbacks.broadcast((c) -> {
        mCallbacks.broadcastAction((c) -> {
            try {
                c.onTechnologyChangeFailed(imsRadioTech, info);
            } catch (RemoteException e) {
@@ -210,7 +210,7 @@ public class ImsRegistrationImplBase {
     * @param uris
     */
    public final void onSubscriberAssociatedUriChanged(Uri[] uris) {
        mCallbacks.broadcast((c) -> {
        mCallbacks.broadcastAction((c) -> {
            try {
                c.onSubscriberAssociatedUriChanged(uris);
            } catch (RemoteException e) {
+46 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.telephony.util;

import android.os.IInterface;
import android.os.RemoteCallbackList;

import java.util.function.Consumer;

/**
 * Extension of RemoteCallbackList
 * @param <E> defines the type of registered callbacks
 */
public class RemoteCallbackListExt<E extends IInterface> extends RemoteCallbackList<E> {
    /**
     * Performs {@code action} on each callback, calling
     * {@link RemoteCallbackListExt#beginBroadcast()}
     * /{@link RemoteCallbackListExt#finishBroadcast()} before/after looping
     * @param action to be performed on each callback
     *
     */
    public void broadcastAction(Consumer<E> action) {
        int itemCount = beginBroadcast();
        try {
            for (int i = 0; i < itemCount; i++) {
                action.accept(getBroadcastItem(i));
            }
        } finally {
            finishBroadcast();
        }
    }
}