Merge "Call on urls changed callback when callback added" am: 62e4a9516d am: 0c8c709bd5

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1352923

Change-Id: I2bda1a15d0fd774f3022b30a1ef07c166814f4de
This commit is contained in:
Daniel Bright
2020-06-30 22:39:44 +00:00
committed by Automerger Merge Worker

View File

@@ -29,6 +29,7 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.util.RemoteCallbackListExt;
import com.android.internal.util.ArrayUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -105,6 +106,11 @@ public class ImsRegistrationImplBase {
// Locked on mLock, create unspecified disconnect cause.
private ImsReasonInfo mLastDisconnectCause = new ImsReasonInfo();
// We hold onto the uris each time they change so that we can send it to a callback when its
// first added.
private Uri[] mUris = new Uri[0];
private boolean mUrisSet = false;
/**
* @hide
*/
@@ -208,19 +214,27 @@ public class ImsRegistrationImplBase {
}
/**
* The this device's subscriber associated {@link Uri}s have changed, which are used to filter
* out this device's {@link Uri}s during conference calling.
* @param uris
* Invoked when the {@link Uri}s associated to this device's subscriber have changed.
* These {@link Uri}s' are filtered out during conference calls.
*
* The {@link Uri}s are not guaranteed to be different between subsequent calls.
* @param uris changed uris
*/
public final void onSubscriberAssociatedUriChanged(Uri[] uris) {
mCallbacks.broadcastAction((c) -> {
try {
c.onSubscriberAssociatedUriChanged(uris);
} catch (RemoteException e) {
Log.w(LOG_TAG, e + " " + "onSubscriberAssociatedUriChanged() - Skipping " +
"callback.");
}
});
synchronized (mLock) {
mUris = ArrayUtils.cloneOrNull(uris);
mUrisSet = true;
}
mCallbacks.broadcastAction((c) -> onSubscriberAssociatedUriChanged(c, uris));
}
private void onSubscriberAssociatedUriChanged(IImsRegistrationCallback callback, Uri[] uris) {
try {
callback.onSubscriberAssociatedUriChanged(uris);
} catch (RemoteException e) {
Log.w(LOG_TAG, e + " " + "onSubscriberAssociatedUriChanged() - Skipping "
+ "callback.");
}
}
private void updateToState(@ImsRegistrationTech int connType, int newState) {
@@ -233,6 +247,10 @@ public class ImsRegistrationImplBase {
private void updateToDisconnectedState(ImsReasonInfo info) {
synchronized (mLock) {
//We don't want to send this info over if we are disconnected
mUrisSet = false;
mUris = null;
updateToState(REGISTRATION_TECH_NONE,
RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED);
if (info != null) {
@@ -260,12 +278,17 @@ public class ImsRegistrationImplBase {
* @param c the newly registered callback that will be updated with the current registration
* state.
*/
private void updateNewCallbackWithState(IImsRegistrationCallback c) throws RemoteException {
private void updateNewCallbackWithState(IImsRegistrationCallback c)
throws RemoteException {
int state;
ImsReasonInfo disconnectInfo;
boolean urisSet;
Uri[] uris;
synchronized (mLock) {
state = mRegistrationState;
disconnectInfo = mLastDisconnectCause;
urisSet = mUrisSet;
uris = mUris;
}
switch (state) {
case RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED: {
@@ -285,5 +308,8 @@ public class ImsRegistrationImplBase {
break;
}
}
if (urisSet) {
onSubscriberAssociatedUriChanged(c, uris);
}
}
}