Add camera app op - framework

Change-Id: I17736a8abe2c6775e990b88fb3eab963f47167d0
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 2e45b79..da6d8c5 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -1638,6 +1638,12 @@
         return sCurrentActivityThread;
     }
 
+    public static String currentOpPackageName() {
+        ActivityThread am = currentActivityThread();
+        return (am != null && am.getApplication() != null)
+                ? am.getApplication().getOpPackageName() : null;
+    }
+
     public static String currentPackageName() {
         ActivityThread am = currentActivityThread();
         return (am != null && am.mBoundApplication != null)
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index d88594d..1fc69c0 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -460,9 +460,8 @@
             mEventHandler = null;
         }
 
-        String packageName = ActivityThread.currentPackageName();
-
-        return native_setup(new WeakReference<Camera>(this), cameraId, halVersion, packageName);
+        return native_setup(new WeakReference<Camera>(this), cameraId, halVersion,
+                ActivityThread.currentOpPackageName());
     }
 
     private int cameraInitNormal(int cameraId) {
diff --git a/core/java/android/hardware/ICameraService.aidl b/core/java/android/hardware/ICameraService.aidl
index 9bc2f46..7b96e20 100644
--- a/core/java/android/hardware/ICameraService.aidl
+++ b/core/java/android/hardware/ICameraService.aidl
@@ -38,13 +38,13 @@
     int getCameraInfo(int cameraId, out CameraInfo info);
 
     int connect(ICameraClient client, int cameraId,
-                    String clientPackageName,
+                    String opPackageName,
                     int clientUid,
                     // Container for an ICamera object
                     out BinderHolder device);
 
     int connectDevice(ICameraDeviceCallbacks callbacks, int cameraId,
-                              String clientPackageName,
+                              String opPackageName,
                               int clientUid,
                               // Container for an ICameraDeviceUser object
                               out BinderHolder device);
@@ -69,7 +69,7 @@
 
     int connectLegacy(ICameraClient client, int cameraId,
                     int halVersion,
-                    String clientPackageName,
+                    String opPackageName,
                     int clientUid,
                     // Container for an ICamera object
                     out BinderHolder device);
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index e2d2f61..9327f00 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -314,7 +314,7 @@
                                 "Camera service is currently unavailable");
                         }
                         cameraService.connectDevice(callbacks, id,
-                                mContext.getPackageName(), USE_CALLING_UID, holder);
+                                mContext.getOpPackageName(), USE_CALLING_UID, holder);
                         cameraUser = ICameraDeviceUser.Stub.asInterface(holder.getBinder());
                     } else {
                         // Use legacy camera implementation for HAL1 devices
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index d5e6b3e..472da02 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -27,7 +27,6 @@
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.app.ActivityThread;
-import android.app.Application;
 import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
@@ -380,7 +379,7 @@
         int initResult = native_setup( new WeakReference<AudioRecord>(this),
                 mAudioAttributes, mSampleRate, mChannelMask, mChannelIndexMask,
                 mAudioFormat, mNativeBufferSizeInBytes,
-                session, getMyOpPackageName());
+                session, ActivityThread.currentOpPackageName());
         if (initResult != SUCCESS) {
             loge("Error code "+initResult+" when initializing native AudioRecord object.");
             return; // with mState == STATE_UNINITIALIZED
@@ -1500,15 +1499,4 @@
     private static void loge(String msg) {
         Log.e(TAG, msg);
     }
-
-    private static String getMyOpPackageName() {
-        ActivityThread activityThread = ActivityThread.currentActivityThread();
-        if (activityThread != null) {
-            Application application = activityThread.getApplication();
-            if (application != null) {
-                return application.getOpPackageName();
-            }
-        }
-        throw new IllegalStateException("Cannot create AudioRecord outside of an app");
-    }
 }
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index a2f596b..206c171c 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -19,7 +19,6 @@
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.app.ActivityThread;
-import android.app.Application;
 import android.hardware.Camera;
 import android.os.Handler;
 import android.os.Looper;
@@ -113,7 +112,8 @@
         /* Native setup requires a weak reference to our object.
          * It's easier to create it here than in C++.
          */
-        native_setup(new WeakReference<MediaRecorder>(this), packageName, getMyOpPackageName());
+        native_setup(new WeakReference<MediaRecorder>(this), packageName,
+                ActivityThread.currentOpPackageName());
     }
 
     /**
@@ -1096,15 +1096,4 @@
 
     @Override
     protected void finalize() { native_finalize(); }
-
-    private static String getMyOpPackageName() {
-        ActivityThread activityThread = ActivityThread.currentActivityThread();
-        if (activityThread != null) {
-            Application application = activityThread.getApplication();
-            if (application != null) {
-                return application.getOpPackageName();
-            }
-        }
-        throw new IllegalStateException("Cannot create AudioRecord outside of an app");
-    }
 }
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index 9fc90df..b94a7e6 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -19,7 +19,6 @@
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.app.ActivityThread;
-import android.app.Application;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -397,7 +396,7 @@
         // native initialization
         int initResult = native_setup(new WeakReference<AudioEffect>(this),
                 type.toString(), uuid.toString(), priority, audioSession, id,
-                desc, getMyOpPackageName());
+                desc, ActivityThread.currentOpPackageName());
         if (initResult != SUCCESS && initResult != ALREADY_EXISTS) {
             Log.e(TAG, "Error code " + initResult
                     + " when initializing AudioEffect.");
@@ -1359,15 +1358,4 @@
         }
         return b;
     }
-
-    private static String getMyOpPackageName() {
-        ActivityThread activityThread = ActivityThread.currentActivityThread();
-        if (activityThread != null) {
-            Application application = activityThread.getApplication();
-            if (application != null) {
-                return application.getOpPackageName();
-            }
-        }
-        throw new IllegalStateException("Cannot create AudioEffect outside of an app");
-    }
 }
diff --git a/media/java/android/media/audiofx/Visualizer.java b/media/java/android/media/audiofx/Visualizer.java
index 0c48063..0fe7246 100644
--- a/media/java/android/media/audiofx/Visualizer.java
+++ b/media/java/android/media/audiofx/Visualizer.java
@@ -17,7 +17,6 @@
 package android.media.audiofx;
 
 import android.app.ActivityThread;
-import android.app.Application;
 import android.util.Log;
 import java.lang.ref.WeakReference;
 import android.os.Handler;
@@ -209,7 +208,7 @@
             mState = STATE_UNINITIALIZED;
             // native initialization
             int result = native_setup(new WeakReference<Visualizer>(this), audioSession, id,
-                    getMyOpPackageName());
+                    ActivityThread.currentOpPackageName());
             if (result != SUCCESS && result != ALREADY_EXISTS) {
                 Log.e(TAG, "Error code "+result+" when initializing Visualizer.");
                 switch (result) {
@@ -769,16 +768,5 @@
         }
 
     }
-
-    private static String getMyOpPackageName() {
-        ActivityThread activityThread = ActivityThread.currentActivityThread();
-        if (activityThread != null) {
-            Application application = activityThread.getApplication();
-            if (application != null) {
-                return application.getOpPackageName();
-            }
-        }
-        throw new IllegalStateException("Cannot create AudioRecord outside of an app");
-    }
 }