Add ImsVideoProviderWrapperCallback to notify local components.
Tyler Gunn [Fri, 22 Jul 2016 15:46:49 +0000 (08:46 -0700)]
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

src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java

index ea0469f..3f0e629 100644 (file)
@@ -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();
                     }