IMS: Support Video Online Service

- Handle video online service elements:
Add new VosActionInfo class.
Add new VosMoveInfo class.
Add new VosTouchInfo class.
Add new Coordinate2D class.

- Introduce new request and response api to send vos support status.
- Introduce new request and response api to send vos action info.
- Add new extra to provide isVosSupported to upper layer.
- Add carrier config to control vos feature for carriers.

Change-Id: I09a7b15cbd7788fb74ecbf40842ad6607d816cd5
CRs-Fixed: 3380218
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/Coordinate2D.aidl b/ims/ims-ext-common/src/org/codeaurora/ims/Coordinate2D.aidl
new file mode 100644
index 0000000..8ffc0c4
--- /dev/null
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/Coordinate2D.aidl
@@ -0,0 +1,8 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
+ */
+
+package org.codeaurora.ims;
+
+parcelable Coordinate2D;
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/Coordinate2D.java b/ims/ims-ext-common/src/org/codeaurora/ims/Coordinate2D.java
new file mode 100644
index 0000000..251366a
--- /dev/null
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/Coordinate2D.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
+ */
+
+package org.codeaurora.ims;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Parcelable object to handle Coordinate2D info
+ * @hide
+ */
+
+public class Coordinate2D implements Parcelable {
+
+    private int mX;
+    private int mY;
+
+    public Coordinate2D(int x, int y) {
+        mX = x;
+        mY = y;
+    }
+
+    public Coordinate2D(Parcel in) {
+        readFromParcel(in);
+    }
+
+    public int getX() {
+        return mX;
+    }
+
+    public int getY() {
+        return mY;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flag) {
+        dest.writeInt(mX);
+        dest.writeInt(mY);
+    }
+
+    public void readFromParcel(Parcel in) {
+        mX = in.readInt();
+        mY = in.readInt();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+
+    public static final Creator<Coordinate2D> CREATOR =
+            new Creator<Coordinate2D>() {
+        @Override
+        public Coordinate2D createFromParcel(Parcel in) {
+            return new Coordinate2D(in);
+        }
+
+        @Override
+        public Coordinate2D[] newArray(int size) {
+            return new Coordinate2D[size];
+        }
+    };
+
+    public String toString() {
+        return ("{Coordinate2D: " + "x = " + mX + " , y = " + mY + "}");
+    }
+}
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/QtiCallConstants.java b/ims/ims-ext-common/src/org/codeaurora/ims/QtiCallConstants.java
index b52efde..b6c0002 100755
--- a/ims/ims-ext-common/src/org/codeaurora/ims/QtiCallConstants.java
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/QtiCallConstants.java
@@ -27,7 +27,7 @@
  *
  * Changes from Qualcomm Innovation Center are provided under the following license:
  *
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted (subject to the limitations in the
@@ -553,4 +553,7 @@
     // Data Channel call information
     public static final String EXTRA_DATA_CHANNEL_MODEM_CALL_ID = "modemCallId";
     public static final String EXTRA_IS_DATA_CHANNEL_CALL = "isDcCall";
+
+    // Video online service
+    public static final String EXTRA_VIDEO_ONLINE_SERVICE_SUPPORTED = "isVosSupported";
 }
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/QtiCarrierConfigs.java b/ims/ims-ext-common/src/org/codeaurora/ims/QtiCarrierConfigs.java
index ebdc1b6..543aaab 100755
--- a/ims/ims-ext-common/src/org/codeaurora/ims/QtiCarrierConfigs.java
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/QtiCarrierConfigs.java
@@ -27,7 +27,7 @@
  *
  * Changes from Qualcomm Innovation Center are provided under the following license:
  *
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted (subject to the limitations in the
@@ -145,25 +145,25 @@
             "allow_one_way_accept_video_call";
 
     /* Config to determine if Carrier supports call composer
-     * true - if call composer is support else false
+     * true - if call composer is supported else false
      */
     public static final String KEY_CARRIER_CALL_COMPOSER_SUPPORTED =
             "carrier_call_composer_supported_bool";
 
     /* Config to determine if Carrier supports b2c enriched calling
-     * true - if b2c enriched calling is support else false
+     * true - if b2c enriched calling is supported else false
      */
     public static final String KEY_CARRIER_B2C_ENRICHED_CALLING_SUPPORTED =
             "carrier_b2c_enriched_calling_supported_bool";
 
     /* Config to determine if Carrier supports video CRS
-     * true - if video CRS is support else false
+     * true - if video CRS is supported else false
      */
     public static final String KEY_CARRIER_VIDEO_CRS_SUPPORTED =
             "carrier_video_crs_supported_bool";
 
     /* Config to determine if Carrier supports video CRBT
-     * true - if video CRBT is support else false
+     * true - if video CRBT is supported else false
      */
     public static final String KEY_CARRIER_VIDEO_CRBT_SUPPORTED =
             "config_enable_video_crbt";
@@ -199,8 +199,14 @@
         "is_private_network";
 
     /* Config to determine if Carrier supports ims data channel
-     * true - if data channel is support else false
+     * true - if data channel is supported else false
      */
      public static final String KEY_CARRIER_DATA_CHANNEL_SUPPORTED =
          "carrier_data_channel_supported_bool";
+
+    /* Config to determine if Carrier supports video online service
+     * true - if video online service is supported else false
+     */
+    public static final String KEY_CARRIER_VIDEO_ONLINE_SERVICE_SUPPORTED =
+        "carrier_video_online_service_supported_bool";
 }
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtBase.java b/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtBase.java
index c63c29d..dee1a72 100644
--- a/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtBase.java
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtBase.java
@@ -24,6 +24,10 @@
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
  */
 package org.codeaurora.ims;
 
@@ -36,6 +40,7 @@
 import org.codeaurora.ims.internal.IImsMultiIdentityInterface;
 import org.codeaurora.ims.internal.IImsScreenShareController;
 import org.codeaurora.ims.QtiCallConstants;
+import org.codeaurora.ims.VosActionInfo;
 /**
  * Base implementation for IQtiImsExt.
  */
@@ -196,6 +201,18 @@
         public boolean isDataChannelEnabled(int phoneId) {
             return onIsDataChannelEnabled(phoneId);
         }
+
+        @Override
+        public void sendVosSupportStatus(int phoneId, boolean isVosSupported,
+                IQtiImsExtListener listener) {
+            onSendVosSupportStatus(phoneId, isVosSupported, listener);
+        }
+
+        @Override
+        public void sendVosActionInfo(int phoneId, VosActionInfo vosActionInfo,
+                IQtiImsExtListener listener) {
+            onSendVosActionInfo(phoneId, vosActionInfo, listener);
+        }
     };
 
     private QtiImsExtBinder mQtiImsExtBinder;
@@ -319,4 +336,14 @@
         // no-op
         return false;
     }
+
+    protected void onSendVosSupportStatus(int phoneId, boolean isVosSupported,
+            IQtiImsExtListener listener) {
+        // no-op
+    }
+
+    protected void onSendVosActionInfo(int phoneId, VosActionInfo vosActionInfo,
+            IQtiImsExtListener listener) {
+        // no-op
+    }
 }
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtListenerBaseImpl.java b/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtListenerBaseImpl.java
index 0dac915..e0507fa 100644
--- a/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtListenerBaseImpl.java
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtListenerBaseImpl.java
@@ -24,6 +24,10 @@
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
  */
 
 package org.codeaurora.ims;
@@ -110,5 +114,13 @@
     @Override
     public void notifyDataChannelCapability(int phoneId, boolean dcCapability) {
     }
+
+    @Override
+    public void handleSendVosSupportStatusResponse(int phoneId, int result) {
+    }
+
+    @Override
+    public void handleSendVosActionInfoResponse(int phoneId, int result) {
+    }
 }
 
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtManager.java b/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtManager.java
index 42eae0d..8e70265 100644
--- a/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtManager.java
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/QtiImsExtManager.java
@@ -24,6 +24,10 @@
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
  */
 package org.codeaurora.ims;
 
@@ -451,4 +455,24 @@
             throw new QtiImsException("Remote ImsService isDataChannelEnabled: " + e);
         }
     }
+
+    public void sendVosSupportStatus(int phoneId, boolean isVosSupported,
+            IQtiImsExtListener listener) throws QtiImsException {
+        validateInvariants(phoneId);
+        try {
+            mQtiImsExt.sendVosSupportStatus(phoneId, isVosSupported, listener);
+        } catch (RemoteException e) {
+            throw new QtiImsException("Remote ImsService sendVosSupportStatus: " + e);
+        }
+    }
+
+    public void sendVosActionInfo(int phoneId, VosActionInfo vosActionInfo,
+            IQtiImsExtListener listener) throws QtiImsException {
+        validateInvariants(phoneId);
+        try {
+            mQtiImsExt.sendVosActionInfo(phoneId, vosActionInfo, listener);
+        } catch (RemoteException e) {
+            throw new QtiImsException("Remote ImsService sendVosActionInfo: " + e);
+        }
+    }
 }
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/VosActionInfo.aidl b/ims/ims-ext-common/src/org/codeaurora/ims/VosActionInfo.aidl
new file mode 100644
index 0000000..27fac40
--- /dev/null
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/VosActionInfo.aidl
@@ -0,0 +1,8 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
+ */
+
+package org.codeaurora.ims;
+
+parcelable VosActionInfo;
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/VosActionInfo.java b/ims/ims-ext-common/src/org/codeaurora/ims/VosActionInfo.java
new file mode 100644
index 0000000..18e3648
--- /dev/null
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/VosActionInfo.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
+ */
+
+package org.codeaurora.ims;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import org.codeaurora.ims.VosMoveInfo;
+import org.codeaurora.ims.VosTouchInfo;
+
+/**
+ * Parcelable object to handle VosActionInfo info
+ * @hide
+ */
+
+public class VosActionInfo implements Parcelable {
+    public static final VosMoveInfo INVALID_MOVEINFO = null;
+    public static final VosTouchInfo INVALID_TOUCHINFO = null;
+
+    private VosMoveInfo mVosMoveInfo;
+    private VosTouchInfo mVosTouchInfo;
+
+    public VosActionInfo(VosMoveInfo vosMoveInfo, VosTouchInfo vosTouchInfo) {
+        mVosMoveInfo = vosMoveInfo;
+        mVosTouchInfo = vosTouchInfo;
+    }
+
+    public VosActionInfo(VosTouchInfo vosTouchInfo) {
+        this(INVALID_MOVEINFO, vosTouchInfo);
+    }
+
+    public VosActionInfo(VosMoveInfo vosMoveInfo) {
+        this(vosMoveInfo, INVALID_TOUCHINFO);
+    }
+
+    public VosActionInfo(Parcel in) {
+        readFromParcel(in);
+    }
+
+    public VosMoveInfo getVosMoveInfo() {
+        return mVosMoveInfo;
+    }
+
+    public VosTouchInfo getVosTouchInfo() {
+        return mVosTouchInfo;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flag) {
+        dest.writeParcelable(mVosMoveInfo, flag);
+        dest.writeParcelable(mVosTouchInfo, flag);
+    }
+
+    public void readFromParcel(Parcel in) {
+        mVosMoveInfo = in.readParcelable(VosMoveInfo.class.getClassLoader());
+        mVosTouchInfo = in.readParcelable(VosTouchInfo.class.getClassLoader());
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+
+    public static final Creator<VosActionInfo> CREATOR =
+            new Creator<VosActionInfo>() {
+        @Override
+        public VosActionInfo createFromParcel(Parcel in) {
+            return new VosActionInfo(in);
+        }
+
+        @Override
+        public VosActionInfo[] newArray(int size) {
+            return new VosActionInfo[size];
+        }
+    };
+
+    public String toString() {
+        return ("{VosActionInfo: " + "vosMoveInfo = " +
+                mVosMoveInfo + " , vosTouchInfo = " + mVosTouchInfo + "}");
+    }
+}
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/VosMoveInfo.aidl b/ims/ims-ext-common/src/org/codeaurora/ims/VosMoveInfo.aidl
new file mode 100644
index 0000000..db84d92
--- /dev/null
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/VosMoveInfo.aidl
@@ -0,0 +1,8 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
+ */
+
+package org.codeaurora.ims;
+
+parcelable VosMoveInfo;
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/VosMoveInfo.java b/ims/ims-ext-common/src/org/codeaurora/ims/VosMoveInfo.java
new file mode 100644
index 0000000..ae4316a
--- /dev/null
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/VosMoveInfo.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
+ */
+
+package org.codeaurora.ims;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import org.codeaurora.ims.Coordinate2D;
+
+/**
+ * Parcelable object to handle VosMoveInfo info
+ * @hide
+ */
+
+public class VosMoveInfo implements Parcelable {
+
+    private Coordinate2D mStart;
+    private Coordinate2D mEnd;
+
+    public VosMoveInfo(Coordinate2D start, Coordinate2D end) {
+        mStart = start;
+        mEnd = end;
+    }
+
+    public VosMoveInfo(Parcel in) {
+        readFromParcel(in);
+    }
+
+    public Coordinate2D getStart() {
+        return mStart;
+    }
+
+    public Coordinate2D getEnd() {
+        return mEnd;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flag) {
+        dest.writeParcelable(mStart, flag);
+        dest.writeParcelable(mEnd, flag);
+    }
+
+    public void readFromParcel(Parcel in) {
+        mStart = in.readParcelable(Coordinate2D.class.getClassLoader());
+        mEnd = in.readParcelable(Coordinate2D.class.getClassLoader());
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+
+    public static final Creator<VosMoveInfo> CREATOR =
+            new Creator<VosMoveInfo>() {
+        @Override
+        public VosMoveInfo createFromParcel(Parcel in) {
+            return new VosMoveInfo(in);
+        }
+
+        @Override
+        public VosMoveInfo[] newArray(int size) {
+            return new VosMoveInfo[size];
+        }
+    };
+
+    public String toString() {
+        return ("{VosMoveInfo: " + "start = " + mStart + " , end = " + mEnd + "}");
+    }
+}
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/VosTouchInfo.aidl b/ims/ims-ext-common/src/org/codeaurora/ims/VosTouchInfo.aidl
new file mode 100644
index 0000000..1807cab
--- /dev/null
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/VosTouchInfo.aidl
@@ -0,0 +1,8 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
+ */
+
+package org.codeaurora.ims;
+
+parcelable VosTouchInfo;
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/VosTouchInfo.java b/ims/ims-ext-common/src/org/codeaurora/ims/VosTouchInfo.java
new file mode 100644
index 0000000..46e518c
--- /dev/null
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/VosTouchInfo.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.nd
+ */
+
+package org.codeaurora.ims;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import org.codeaurora.ims.Coordinate2D;
+
+/**
+ * Parcelable object to handle VosTouchInfo info
+ * @hide
+ */
+
+public class VosTouchInfo implements Parcelable {
+
+    private Coordinate2D mTouch;
+    // Milliseconds
+    private int mTouchDuration;
+
+    public VosTouchInfo(Coordinate2D touch, int touchDuration) {
+        mTouch = touch;
+        mTouchDuration = touchDuration;
+    }
+
+    public VosTouchInfo(Parcel in) {
+        readFromParcel(in);
+    }
+
+    public Coordinate2D getTouch() {
+        return mTouch;
+    }
+
+    public int getTouchDuration() {
+        return mTouchDuration;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flag) {
+        dest.writeParcelable(mTouch, flag);
+        dest.writeInt(mTouchDuration);
+    }
+
+    public void readFromParcel(Parcel in) {
+        mTouch = in.readParcelable(Coordinate2D.class.getClassLoader());
+        mTouchDuration = in.readInt();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+
+    public static final Creator<VosTouchInfo> CREATOR =
+            new Creator<VosTouchInfo>() {
+        @Override
+        public VosTouchInfo createFromParcel(Parcel in) {
+            return new VosTouchInfo(in);
+        }
+
+        @Override
+        public VosTouchInfo[] newArray(int size) {
+            return new VosTouchInfo[size];
+        }
+    };
+
+    public String toString() {
+        return ("{VosTouchInfo: " + "touch = " +
+                mTouch + " , touchDuration = " + mTouchDuration + "}");
+    }
+}
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/internal/IQtiImsExt.aidl b/ims/ims-ext-common/src/org/codeaurora/ims/internal/IQtiImsExt.aidl
index 8e960a2..12caa31 100644
--- a/ims/ims-ext-common/src/org/codeaurora/ims/internal/IQtiImsExt.aidl
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/internal/IQtiImsExt.aidl
@@ -24,6 +24,10 @@
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
  */
 
 package org.codeaurora.ims.internal;
@@ -33,6 +37,7 @@
 import org.codeaurora.ims.internal.IQtiImsExtListener;
 import org.codeaurora.ims.internal.IImsMultiIdentityInterface;
 import org.codeaurora.ims.internal.IImsScreenShareController;
+import org.codeaurora.ims.VosActionInfo;
 
 /**
  * Interface through which APP and vendor communicates.
@@ -362,4 +367,28 @@
      *@throws RemoteException if calling the IMS service results in an error.
      */
     boolean isDataChannelEnabled(int phoneId);
+
+    /**
+     * sendVosSupportStatus
+     * Send video online service status supported
+     *
+     * @param phoneId indicates the phone instance which triggered the request
+     * @param isVosSupported sends whether device supports video online service to lower layer
+     * @param listener an IQtiImsExtListener instance to indicate the response
+     * @return void
+     */
+    oneway void sendVosSupportStatus(int phoneId, boolean isVosSupported,
+        IQtiImsExtListener listener);
+
+    /**
+     * sendVosActionInfo
+     * Send user's action info like touch or move
+     *
+     * @param phoneId indicates the phone instance which triggered the request
+     * @param vosActionInfo sends user's touch or move info to lower layer
+     * @param listener an IQtiImsExtListener instance to indicate the response
+     * @return void
+     */
+    oneway void sendVosActionInfo(int phoneId, in VosActionInfo vosActionInfo,
+        IQtiImsExtListener listener);
 }
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/internal/IQtiImsExtListener.aidl b/ims/ims-ext-common/src/org/codeaurora/ims/internal/IQtiImsExtListener.aidl
index 3d3c73c..55f7359 100644
--- a/ims/ims-ext-common/src/org/codeaurora/ims/internal/IQtiImsExtListener.aidl
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/internal/IQtiImsExtListener.aidl
@@ -24,6 +24,10 @@
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear.
  */
 
 package org.codeaurora.ims.internal;
@@ -205,4 +209,24 @@
      * @return void.
      */
    void notifyDataChannelCapability(int phoneId, boolean dcCapability);
+
+    /**
+     * Notifies client the result of send vos support status
+     *
+     * @param phoneId indicates the phone instance which triggered the request
+     * @param <result> is one of the values QTI_IMS_REQUEST_*, as defined in
+     *        <code>org.codeaurora.ims.utils.QtiImsExtUtils.</code>
+     * @return void.
+     */
+    void handleSendVosSupportStatusResponse(int phoneId, int result);
+
+    /**
+     * Notifies client the result of send vos action info
+     *
+     * @param phoneId indicates the phone instance which triggered the request
+     * @param <result> is one of the values QTI_IMS_REQUEST_*, as defined in
+     *        <code>org.codeaurora.ims.utils.QtiImsExtUtils.</code>
+     * @return void.
+     */
+    void handleSendVosActionInfoResponse(int phoneId, int result);
 }
diff --git a/ims/ims-ext-common/src/org/codeaurora/ims/utils/QtiImsExtUtils.java b/ims/ims-ext-common/src/org/codeaurora/ims/utils/QtiImsExtUtils.java
index 6f482ee..cb7505a 100755
--- a/ims/ims-ext-common/src/org/codeaurora/ims/utils/QtiImsExtUtils.java
+++ b/ims/ims-ext-common/src/org/codeaurora/ims/utils/QtiImsExtUtils.java
@@ -28,7 +28,7 @@
  *
  * Changes from Qualcomm Innovation Center are provided under the following license:
  *
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted (subject to the limitations in the
@@ -846,4 +846,10 @@
                 QtiCallConstants.DATA_CHANNEL + phoneId,
                 QtiCallConstants.DATA_CHANNEL_DISABLED);
     }
+
+    // Returns true if Carrier supports video online service
+    public static boolean isVosSupported(int phoneId, Context context) {
+        return isCarrierConfigEnabled(phoneId, context,
+                QtiCarrierConfigs.KEY_CARRIER_VIDEO_ONLINE_SERVICE_SUPPORTED);
+    }
 }