diff options
author | Tyler Gunn <tgunn@google.com> | 2016-07-22 08:46:49 -0700 |
---|---|---|
committer | Tyler Gunn <tgunn@google.com> | 2016-07-22 08:46:49 -0700 |
commit | 359bcd029c232605fbed6df66c6c3b220474c026 (patch) | |
tree | ef0174e627818f42d38b8b6246584db6b0b72839 | |
parent | 4effdca336ead475a90ac1529ff4007f7218dfd7 (diff) | |
download | ims-359bcd029c232605fbed6df66c6c3b220474c026.tar.gz |
Add ImsVideoProviderWrapperCallback to notify local components.
Added a callback class in ImsVideoProviderWrapperCallback so that local
components such as ImsPhoneConnection can listen to incoming session
modification responses.
Bug: 29381561
Change-Id: I38e5be1996c22be2e5f8797c825e0ab90d49fda1
-rw-r--r-- | src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java b/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java index ea0469f8..3f0e6290 100644 --- a/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java +++ b/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java @@ -29,6 +29,10 @@ import android.view.Surface; import com.android.internal.os.SomeArgs; +import java.util.Collections; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + /** * Subclass implementation of {@link Connection.VideoProvider}. This intermediates and * communicates with the actual implementation of the video call provider in the IMS service; it is @@ -41,6 +45,12 @@ import com.android.internal.os.SomeArgs; * @hide */ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider { + + public interface ImsVideoProviderWrapperCallback { + void onReceiveSessionModifyResponse(int status, VideoProfile requestProfile, + VideoProfile responseProfile); + } + private static final int MSG_RECEIVE_SESSION_MODIFY_REQUEST = 1; private static final int MSG_RECEIVE_SESSION_MODIFY_RESPONSE = 2; private static final int MSG_HANDLE_CALL_SESSION_EVENT = 3; @@ -52,6 +62,8 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider { private final IImsVideoCallProvider mVideoCallProvider; private final ImsVideoCallCallback mBinder; private RegistrantList mDataUsageUpdateRegistrants = new RegistrantList(); + private final Set<ImsVideoProviderWrapperCallback> mCallbacks = Collections.newSetFromMap( + new ConcurrentHashMap<ImsVideoProviderWrapperCallback, Boolean>(8, 0.9f, 1)); private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() { @Override @@ -119,6 +131,14 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider { mDataUsageUpdateRegistrants.remove(h); } + public void addImsVideoProviderCallback(ImsVideoProviderWrapperCallback callback) { + mCallbacks.add(callback); + } + + public void removeImsVideoProviderCallback(ImsVideoProviderWrapperCallback callback) { + mCallbacks.remove(callback); + } + /** Default handler used to consolidate binder method calls onto a single thread. */ private final Handler mHandler = new Handler(Looper.getMainLooper()) { @Override @@ -136,6 +156,14 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider { VideoProfile responseProfile = (VideoProfile) args.arg3; receiveSessionModifyResponse(status, requestProfile, responseProfile); + + // Notify any local Telephony components interested in upgrade responses. + for (ImsVideoProviderWrapperCallback callback : mCallbacks) { + if (callback != null) { + callback.onReceiveSessionModifyResponse(status, requestProfile, + responseProfile); + } + } } finally { args.recycle(); } |