Perform camera permission and app ops check when setting camera for VT.
When a calling InCallService attempts to use the setCamera API on the VideoCall, Telecom will perform a permission check to ensure that the caller has the correct camera permission and passes the app-ops camera check. A failure to set the camera will result in a callback via the call session event API. This got a little messy as the app ops package name needs to come from the InCallService, and handler usage in the VideoProvider API means we had to pass around the uid/pid of the caller, obtained before we trampoline onto the handler. Test: Unit tests added, manual testing performed. Bug: 32747443 Change-Id: I555a04f9c3fb45e60bb811f64ba855ccf2e3b0e2
This commit is contained in:
@@ -43,6 +43,7 @@ public class VideoCallImpl extends VideoCall {
|
||||
private VideoCall.Callback mCallback;
|
||||
private int mVideoQuality = VideoProfile.QUALITY_UNKNOWN;
|
||||
private int mVideoState = VideoProfile.STATE_AUDIO_ONLY;
|
||||
private final String mCallingPackageName;
|
||||
|
||||
private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
|
||||
@Override
|
||||
@@ -197,12 +198,13 @@ public class VideoCallImpl extends VideoCall {
|
||||
|
||||
private Handler mHandler;
|
||||
|
||||
VideoCallImpl(IVideoProvider videoProvider) throws RemoteException {
|
||||
VideoCallImpl(IVideoProvider videoProvider, String callingPackageName) throws RemoteException {
|
||||
mVideoProvider = videoProvider;
|
||||
mVideoProvider.asBinder().linkToDeath(mDeathRecipient, 0);
|
||||
|
||||
mBinder = new VideoCallListenerBinder();
|
||||
mVideoProvider.addVideoCallback(mBinder);
|
||||
mCallingPackageName = callingPackageName;
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
@@ -240,7 +242,8 @@ public class VideoCallImpl extends VideoCall {
|
||||
/** {@inheritDoc} */
|
||||
public void setCamera(String cameraId) {
|
||||
try {
|
||||
mVideoProvider.setCamera(cameraId);
|
||||
Log.w(this, "setCamera: cameraId=%s, calling=%s", cameraId, mCallingPackageName);
|
||||
mVideoProvider.setCamera(cameraId, mCallingPackageName);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user