Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c76f5a4 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

Modify ImsVideoCallProvider to include calling UID for permission check.

Modify the ImsVideoCallProvider, which the vendor IMS stack implements to
include the UID of telephony.  The vendor IMS stack will use this when
opening the camera for the purpose of camera permission verification by
the camera service.

Test: Unit, manual.
Bug: 32747443
Change-Id: I0884cc08ea4afa23c08e3fe1e2873b3f5aac2b40
parent ec93f540
Loading
Loading
Loading
Loading
+26 −3
Original line number Original line Diff line number Diff line
@@ -56,8 +56,16 @@ public abstract class ImsVideoCallProvider {
                    mCallback = (IImsVideoCallCallback) msg.obj;
                    mCallback = (IImsVideoCallCallback) msg.obj;
                    break;
                    break;
                case MSG_SET_CAMERA:
                case MSG_SET_CAMERA:
                    onSetCamera((String) msg.obj);
                {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
                        onSetCamera((String) args.arg1);
                        onSetCamera((String) args.arg1, args.argi1);
                    } finally {
                        args.recycle();
                    }
                    break;
                    break;
                }
                case MSG_SET_PREVIEW_SURFACE:
                case MSG_SET_PREVIEW_SURFACE:
                    onSetPreviewSurface((Surface) msg.obj);
                    onSetPreviewSurface((Surface) msg.obj);
                    break;
                    break;
@@ -108,8 +116,11 @@ public abstract class ImsVideoCallProvider {
            mProviderHandler.obtainMessage(MSG_SET_CALLBACK, callback).sendToTarget();
            mProviderHandler.obtainMessage(MSG_SET_CALLBACK, callback).sendToTarget();
        }
        }


        public void setCamera(String cameraId) {
        public void setCamera(String cameraId, int uid) {
            mProviderHandler.obtainMessage(MSG_SET_CAMERA, cameraId).sendToTarget();
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = cameraId;
            args.argi1 = uid;
            mProviderHandler.obtainMessage(MSG_SET_CAMERA, args).sendToTarget();
        }
        }


        public void setPreviewSurface(Surface surface) {
        public void setPreviewSurface(Surface surface) {
@@ -167,6 +178,18 @@ public abstract class ImsVideoCallProvider {
    /** @see Connection.VideoProvider#onSetCamera */
    /** @see Connection.VideoProvider#onSetCamera */
    public abstract void onSetCamera(String cameraId);
    public abstract void onSetCamera(String cameraId);


    /**
     * Similar to {@link #onSetCamera(String)}, except includes the UID of the calling process which
     * the IMS service uses when opening the camera.  This ensures camera permissions are verified
     * by the camera service.
     *
     * @param cameraId The id of the camera to be opened.
     * @param uid The uid of the caller, used when opening the camera for permission verification.
     * @see Connection.VideoProvider#onSetCamera
     */
    public void onSetCamera(String cameraId, int uid) {
    }

    /** @see Connection.VideoProvider#onSetPreviewSurface */
    /** @see Connection.VideoProvider#onSetPreviewSurface */
    public abstract void onSetPreviewSurface(Surface surface);
    public abstract void onSetPreviewSurface(Surface surface);


+2 −1
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.ims.internal;
package com.android.ims.internal;


import android.net.Uri;
import android.net.Uri;
import android.os.Binder;
import android.os.Handler;
import android.os.Handler;
import android.os.IBinder;
import android.os.IBinder;
import android.os.Looper;
import android.os.Looper;
@@ -216,7 +217,7 @@ public class ImsVideoCallProviderWrapper extends Connection.VideoProvider {
    /** @inheritDoc */
    /** @inheritDoc */
    public void onSetCamera(String cameraId) {
    public void onSetCamera(String cameraId) {
        try {
        try {
            mVideoCallProvider.setCamera(cameraId);
            mVideoCallProvider.setCamera(cameraId, Binder.getCallingUid());
        } catch (RemoteException e) {
        } catch (RemoteException e) {
        }
        }
    }
    }