Report VT data usage to the client

Report the aggregated VT data usage per call to the registered
client.

bug: 20888836
Change-Id: I6d9629aebfde641f96fbfe2071346ae3bc362cdb
diff --git a/src/java/com/android/ims/ImsCall.java b/src/java/com/android/ims/ImsCall.java
index 6c45417..7118636 100644
--- a/src/java/com/android/ims/ImsCall.java
+++ b/src/java/com/android/ims/ImsCall.java
@@ -31,6 +31,7 @@
 import android.telecom.ConferenceParticipant;
 import android.telecom.Connection;
 import java.util.Objects;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import android.telephony.ServiceState;
 import android.util.Log;
@@ -546,6 +547,16 @@
     private boolean mWasVideoCall = false;
 
     /**
+     * Unique id generator used to generate call id.
+     */
+    private static final AtomicInteger sUniqueIdGenerator = new AtomicInteger();
+
+    /**
+     * Unique identifier.
+     */
+    public final int uniqueId;
+
+    /**
      * Create an IMS call object.
      *
      * @param context the context for accessing system services
@@ -554,6 +565,7 @@
     public ImsCall(Context context, ImsCallProfile profile) {
         mContext = context;
         setCallProfile(profile);
+        uniqueId = sUniqueIdGenerator.getAndIncrement();
     }
 
     /**
@@ -3295,5 +3307,4 @@
     private void loge(String s, Throwable t) {
         Log.e(TAG, appendImsCallInfoToString(s), t);
     }
-
 }
diff --git a/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java b/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
index 57f74fa..ea0469f 100644
--- a/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
+++ b/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java
@@ -21,10 +21,10 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
+import android.os.RegistrantList;
 import android.os.RemoteException;
 import android.telecom.Connection;
 import android.telecom.VideoProfile;
-import android.telecom.VideoProfile.CameraCapabilities;
 import android.view.Surface;
 
 import com.android.internal.os.SomeArgs;
@@ -51,6 +51,7 @@
 
     private final IImsVideoCallProvider mVideoCallProvider;
     private final ImsVideoCallCallback mBinder;
+    private RegistrantList mDataUsageUpdateRegistrants = new RegistrantList();
 
     private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
         @Override
@@ -110,6 +111,14 @@
         }
     }
 
+    public void registerForDataUsageUpdate(Handler h, int what, Object obj) {
+        mDataUsageUpdateRegistrants.addUnique(h, what, obj);
+    }
+
+    public void unregisterForDataUsageUpdate(Handler h) {
+        mDataUsageUpdateRegistrants.remove(h);
+    }
+
     /** Default handler used to consolidate binder method calls onto a single thread. */
     private final Handler mHandler = new Handler(Looper.getMainLooper()) {
         @Override
@@ -145,7 +154,9 @@
                     }
                     break;
                 case MSG_CHANGE_CALL_DATA_USAGE:
-                    changeCallDataUsage((long) msg.obj);
+                    // TODO: We should use callback in the future.
+                    setCallDataUsage((long) msg.obj);
+                    mDataUsageUpdateRegistrants.notifyResult(msg.obj);
                     break;
                 case MSG_CHANGE_CAMERA_CAPABILITIES:
                     changeCameraCapabilities((VideoProfile.CameraCapabilities) msg.obj);