Skip to content
Snippets Groups Projects
Commit 7310da73 authored by Daniel Bright's avatar Daniel Bright
Browse files

Call on urls changed callback when callback added

Now calling onSubscriberAssociatedUriChanged on IImsRegistrationCallback
when the callback is first added to ImsRegistrationImplBase.

Bug: 159301697
Test: Made phone call
Test: Added unit test
Change-Id: Ibfcb8aaae9d410a09ec98e57d77eccd34fcc222f
Merged-In: Ibfcb8aaae9d410a09ec98e57d77eccd34fcc222f
parent 44550140
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment