Loading core/java/android/hardware/camera2/extension/AdvancedExtender.java +8 −1 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ public abstract class AdvancedExtender { private HashMap<String, Long> mMetadataVendorIdMap = new HashMap<>(); private final CameraManager mCameraManager; private CameraUsageTracker mCameraUsageTracker; private static final String TAG = "AdvancedExtender"; @FlaggedApi(Flags.FLAG_CONCERT_MODE) Loading @@ -82,6 +83,10 @@ public abstract class AdvancedExtender { } } void setCameraUsageTracker(CameraUsageTracker tracker) { mCameraUsageTracker = tracker; } @FlaggedApi(Flags.FLAG_CONCERT_MODE) public long getMetadataVendorId(@NonNull String cameraId) { long vendorId = mMetadataVendorIdMap.containsKey(cameraId) ? Loading Loading @@ -282,7 +287,9 @@ public abstract class AdvancedExtender { @Override public ISessionProcessorImpl getSessionProcessor() { return AdvancedExtender.this.getSessionProcessor().getSessionProcessorBinder(); SessionProcessor processor =AdvancedExtender.this.getSessionProcessor(); processor.setCameraUsageTracker(mCameraUsageTracker); return processor.getSessionProcessorBinder(); } @Override Loading core/java/android/hardware/camera2/extension/CameraExtensionService.java +42 −3 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.app.AppOpsManager; import android.app.Service; import android.content.Intent; import android.os.IBinder; Loading @@ -29,6 +30,11 @@ import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.internal.camera.flags.Flags; interface CameraUsageTracker { void startCameraOperation(); void finishCameraOperation(); } /** * Base service class that extension service implementations must extend. * Loading @@ -38,8 +44,33 @@ import com.android.internal.camera.flags.Flags; @FlaggedApi(Flags.FLAG_CONCERT_MODE) public abstract class CameraExtensionService extends Service { private static final String TAG = "CameraExtensionService"; private CameraUsageTracker mCameraUsageTracker; private static Object mLock = new Object(); private final class CameraTracker implements CameraUsageTracker { private final AppOpsManager mAppOpsService = getApplicationContext().getSystemService( AppOpsManager.class); private final String mPackageName = getPackageName(); private final String mAttributionTag = getAttributionTag(); private int mUid = getApplicationInfo().uid; @Override public void startCameraOperation() { if (mAppOpsService != null) { mAppOpsService.startOp(AppOpsManager.OPSTR_CAMERA, mUid, mPackageName, mAttributionTag, "Camera extensions"); } } @Override public void finishCameraOperation() { if (mAppOpsService != null) { mAppOpsService.finishOp(AppOpsManager.OPSTR_CAMERA, mUid, mPackageName, mAttributionTag); } } } @GuardedBy("mLock") private static IInitializeSessionCallback mInitializeCb = null; Loading @@ -49,6 +80,9 @@ public abstract class CameraExtensionService extends Service { synchronized (mLock) { mInitializeCb = null; } if (mCameraUsageTracker != null) { mCameraUsageTracker.finishCameraOperation(); } } }; Loading @@ -59,6 +93,9 @@ public abstract class CameraExtensionService extends Service { @Override @NonNull public IBinder onBind(@Nullable Intent intent) { if (mCameraUsageTracker == null) { mCameraUsageTracker = new CameraTracker(); } return new CameraExtensionServiceImpl(); } Loading Loading @@ -132,8 +169,10 @@ public abstract class CameraExtensionService extends Service { @Override public IAdvancedExtenderImpl initializeAdvancedExtension(int extensionType) throws RemoteException { return CameraExtensionService.this.onInitializeAdvancedExtension( extensionType).getAdvancedExtenderBinder(); AdvancedExtender extender = CameraExtensionService.this.onInitializeAdvancedExtension( extensionType); extender.setCameraUsageTracker(mCameraUsageTracker); return extender.getAdvancedExtenderBinder(); } } Loading core/java/android/hardware/camera2/extension/SessionProcessor.java +11 −0 Original line number Diff line number Diff line Loading @@ -76,10 +76,15 @@ import java.util.concurrent.Executor; @FlaggedApi(Flags.FLAG_CONCERT_MODE) public abstract class SessionProcessor { private static final String TAG = "SessionProcessor"; private CameraUsageTracker mCameraUsageTracker; @FlaggedApi(Flags.FLAG_CONCERT_MODE) protected SessionProcessor() {} void setCameraUsageTracker(CameraUsageTracker tracker) { mCameraUsageTracker = tracker; } /** * Callback for notifying the status of {@link * #startCapture} and {@link #startRepeating}. Loading Loading @@ -379,12 +384,18 @@ public abstract class SessionProcessor { @Override public void onCaptureSessionStart(IRequestProcessorImpl requestProcessor, String statsKey) throws RemoteException { if (mCameraUsageTracker != null) { mCameraUsageTracker.startCameraOperation(); } SessionProcessor.this.onCaptureSessionStart( new RequestProcessor(requestProcessor, mVendorId), statsKey); } @Override public void onCaptureSessionEnd() throws RemoteException { if (mCameraUsageTracker != null) { mCameraUsageTracker.finishCameraOperation(); } SessionProcessor.this.onCaptureSessionEnd(); } Loading Loading
core/java/android/hardware/camera2/extension/AdvancedExtender.java +8 −1 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ public abstract class AdvancedExtender { private HashMap<String, Long> mMetadataVendorIdMap = new HashMap<>(); private final CameraManager mCameraManager; private CameraUsageTracker mCameraUsageTracker; private static final String TAG = "AdvancedExtender"; @FlaggedApi(Flags.FLAG_CONCERT_MODE) Loading @@ -82,6 +83,10 @@ public abstract class AdvancedExtender { } } void setCameraUsageTracker(CameraUsageTracker tracker) { mCameraUsageTracker = tracker; } @FlaggedApi(Flags.FLAG_CONCERT_MODE) public long getMetadataVendorId(@NonNull String cameraId) { long vendorId = mMetadataVendorIdMap.containsKey(cameraId) ? Loading Loading @@ -282,7 +287,9 @@ public abstract class AdvancedExtender { @Override public ISessionProcessorImpl getSessionProcessor() { return AdvancedExtender.this.getSessionProcessor().getSessionProcessorBinder(); SessionProcessor processor =AdvancedExtender.this.getSessionProcessor(); processor.setCameraUsageTracker(mCameraUsageTracker); return processor.getSessionProcessorBinder(); } @Override Loading
core/java/android/hardware/camera2/extension/CameraExtensionService.java +42 −3 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.app.AppOpsManager; import android.app.Service; import android.content.Intent; import android.os.IBinder; Loading @@ -29,6 +30,11 @@ import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.internal.camera.flags.Flags; interface CameraUsageTracker { void startCameraOperation(); void finishCameraOperation(); } /** * Base service class that extension service implementations must extend. * Loading @@ -38,8 +44,33 @@ import com.android.internal.camera.flags.Flags; @FlaggedApi(Flags.FLAG_CONCERT_MODE) public abstract class CameraExtensionService extends Service { private static final String TAG = "CameraExtensionService"; private CameraUsageTracker mCameraUsageTracker; private static Object mLock = new Object(); private final class CameraTracker implements CameraUsageTracker { private final AppOpsManager mAppOpsService = getApplicationContext().getSystemService( AppOpsManager.class); private final String mPackageName = getPackageName(); private final String mAttributionTag = getAttributionTag(); private int mUid = getApplicationInfo().uid; @Override public void startCameraOperation() { if (mAppOpsService != null) { mAppOpsService.startOp(AppOpsManager.OPSTR_CAMERA, mUid, mPackageName, mAttributionTag, "Camera extensions"); } } @Override public void finishCameraOperation() { if (mAppOpsService != null) { mAppOpsService.finishOp(AppOpsManager.OPSTR_CAMERA, mUid, mPackageName, mAttributionTag); } } } @GuardedBy("mLock") private static IInitializeSessionCallback mInitializeCb = null; Loading @@ -49,6 +80,9 @@ public abstract class CameraExtensionService extends Service { synchronized (mLock) { mInitializeCb = null; } if (mCameraUsageTracker != null) { mCameraUsageTracker.finishCameraOperation(); } } }; Loading @@ -59,6 +93,9 @@ public abstract class CameraExtensionService extends Service { @Override @NonNull public IBinder onBind(@Nullable Intent intent) { if (mCameraUsageTracker == null) { mCameraUsageTracker = new CameraTracker(); } return new CameraExtensionServiceImpl(); } Loading Loading @@ -132,8 +169,10 @@ public abstract class CameraExtensionService extends Service { @Override public IAdvancedExtenderImpl initializeAdvancedExtension(int extensionType) throws RemoteException { return CameraExtensionService.this.onInitializeAdvancedExtension( extensionType).getAdvancedExtenderBinder(); AdvancedExtender extender = CameraExtensionService.this.onInitializeAdvancedExtension( extensionType); extender.setCameraUsageTracker(mCameraUsageTracker); return extender.getAdvancedExtenderBinder(); } } Loading
core/java/android/hardware/camera2/extension/SessionProcessor.java +11 −0 Original line number Diff line number Diff line Loading @@ -76,10 +76,15 @@ import java.util.concurrent.Executor; @FlaggedApi(Flags.FLAG_CONCERT_MODE) public abstract class SessionProcessor { private static final String TAG = "SessionProcessor"; private CameraUsageTracker mCameraUsageTracker; @FlaggedApi(Flags.FLAG_CONCERT_MODE) protected SessionProcessor() {} void setCameraUsageTracker(CameraUsageTracker tracker) { mCameraUsageTracker = tracker; } /** * Callback for notifying the status of {@link * #startCapture} and {@link #startRepeating}. Loading Loading @@ -379,12 +384,18 @@ public abstract class SessionProcessor { @Override public void onCaptureSessionStart(IRequestProcessorImpl requestProcessor, String statsKey) throws RemoteException { if (mCameraUsageTracker != null) { mCameraUsageTracker.startCameraOperation(); } SessionProcessor.this.onCaptureSessionStart( new RequestProcessor(requestProcessor, mVendorId), statsKey); } @Override public void onCaptureSessionEnd() throws RemoteException { if (mCameraUsageTracker != null) { mCameraUsageTracker.finishCameraOperation(); } SessionProcessor.this.onCaptureSessionEnd(); } Loading