Merge "DO NOT MERGE: Minor fixes to FloatingToolbar." into mnc-dev
diff --git a/api/system-current.txt b/api/system-current.txt
index 72e11b8..77e9366b 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -15471,6 +15471,7 @@
     method public boolean hasPseudorangeUncertaintyInMeters();
     method public boolean hasSnrInDb();
     method public boolean hasTimeFromLastBitInMs();
+    method public boolean isPseudorangeRateCorrected();
     method public boolean isUsedInFix();
     method public void reset();
     method public void resetAzimuthInDeg();
@@ -15536,6 +15537,7 @@
     field public static final byte MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0
     field public static final short STATE_BIT_SYNC = 2; // 0x2
     field public static final short STATE_CODE_LOCK = 1; // 0x1
+    field public static final short STATE_MSEC_AMBIGUOUS = 16; // 0x10
     field public static final short STATE_SUBFRAME_SYNC = 4; // 0x4
     field public static final short STATE_TOW_DECODED = 8; // 0x8
     field public static final short STATE_UNKNOWN = 0; // 0x0
@@ -15563,6 +15565,7 @@
     method public byte[] getData();
     method public short getMessageId();
     method public byte getPrn();
+    method public short getStatus();
     method public short getSubmessageId();
     method public byte getType();
     method public void reset();
@@ -15570,10 +15573,14 @@
     method public void setData(byte[]);
     method public void setMessageId(short);
     method public void setPrn(byte);
+    method public void setStatus(short);
     method public void setSubmessageId(short);
     method public void setType(byte);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessage> CREATOR;
+    field public static final short STATUS_PARITY_PASSED = 1; // 0x1
+    field public static final short STATUS_PARITY_REBUILT = 2; // 0x2
+    field public static final short STATUS_UNKNOWN = 0; // 0x0
     field public static final byte TYPE_CNAV2 = 4; // 0x4
     field public static final byte TYPE_L1CA = 1; // 0x1
     field public static final byte TYPE_L2CNAV = 2; // 0x2
diff --git a/core/java/android/os/IPermissionController.aidl b/core/java/android/os/IPermissionController.aidl
index 73a68f1..0cc1603 100644
--- a/core/java/android/os/IPermissionController.aidl
+++ b/core/java/android/os/IPermissionController.aidl
@@ -20,4 +20,5 @@
 /** @hide */
 interface IPermissionController {
     boolean checkPermission(String permission, int pid, int uid);
+    String[] getPackagesForUid(int uid);
 }
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index e8fc15e..b5b7f0f 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -15490,12 +15490,8 @@
                         if (drawingWithRenderNode) {
                             renderNode.setAlpha(alpha * getAlpha() * getTransitionAlpha());
                         } else if (layerType == LAYER_TYPE_NONE) {
-                            int layerFlags = Canvas.HAS_ALPHA_LAYER_SAVE_FLAG;
-                            if ((parentFlags & ViewGroup.FLAG_CLIP_CHILDREN) != 0) {
-                                layerFlags |= Canvas.CLIP_TO_LAYER_SAVE_FLAG;
-                            }
                             canvas.saveLayerAlpha(sx, sy, sx + getWidth(), sy + getHeight(),
-                                    multipliedAlpha, layerFlags);
+                                    multipliedAlpha);
                         }
                     } else {
                         // Alpha is handled by the child directly, clobber the layer's alpha
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index c384ef9..6afb226 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -26,6 +26,8 @@
 #include <utils/Log.h>
 #include <media/AudioRecord.h>
 
+#include <ScopedUtfChars.h>
+
 #include "android_media_AudioFormat.h"
 #include "android_media_AudioErrors.h"
 
@@ -146,7 +148,7 @@
 static jint
 android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this,
         jobject jaa, jint sampleRateInHertz, jint channelMask, jint channelIndexMask,
-        jint audioFormat, jint buffSizeInBytes, jintArray jSession)
+        jint audioFormat, jint buffSizeInBytes, jintArray jSession, jstring opPackageName)
 {
     //ALOGV(">> Entering android_media_AudioRecord_setup");
     //ALOGV("sampleRate=%d, audioFormat=%d, channel mask=%x, buffSizeInBytes=%d",
@@ -208,8 +210,10 @@
     env->ReleasePrimitiveArrayCritical(jSession, nSession, 0);
     nSession = NULL;
 
+    ScopedUtfChars opPackageNameStr(env, opPackageName);
+
     // create an uninitialized AudioRecord object
-    sp<AudioRecord> lpRecorder = new AudioRecord();
+    sp<AudioRecord> lpRecorder = new AudioRecord(String16(opPackageNameStr.c_str()));
 
     audio_attributes_t *paa = NULL;
     // read the AudioAttributes values
@@ -597,7 +601,7 @@
     // name,               signature,  funcPtr
     {"native_start",         "(II)I",    (void *)android_media_AudioRecord_start},
     {"native_stop",          "()V",    (void *)android_media_AudioRecord_stop},
-    {"native_setup",         "(Ljava/lang/Object;Ljava/lang/Object;IIIII[I)I",
+    {"native_setup",         "(Ljava/lang/Object;Ljava/lang/Object;IIIII[ILjava/lang/String;)I",
                                        (void *)android_media_AudioRecord_setup},
     {"native_finalize",      "()V",    (void *)android_media_AudioRecord_finalize},
     {"native_release",       "()V",    (void *)android_media_AudioRecord_release},
diff --git a/core/jni/android_media_RemoteDisplay.cpp b/core/jni/android_media_RemoteDisplay.cpp
index e2bba30..9bc223b 100644
--- a/core/jni/android_media_RemoteDisplay.cpp
+++ b/core/jni/android_media_RemoteDisplay.cpp
@@ -134,8 +134,10 @@
 
 // ----------------------------------------------------------------------------
 
-static jlong nativeListen(JNIEnv* env, jobject remoteDisplayObj, jstring ifaceStr) {
+static jlong nativeListen(JNIEnv* env, jobject remoteDisplayObj, jstring ifaceStr,
+        jstring opPackageNameStr) {
     ScopedUtfChars iface(env, ifaceStr);
+    ScopedUtfChars opPackageName(env, opPackageNameStr);
 
     sp<IServiceManager> sm = defaultServiceManager();
     sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>(
@@ -146,7 +148,7 @@
     }
 
     sp<NativeRemoteDisplayClient> client(new NativeRemoteDisplayClient(env, remoteDisplayObj));
-    sp<IRemoteDisplay> display = service->listenForRemoteDisplay(
+    sp<IRemoteDisplay> display = service->listenForRemoteDisplay(String16(opPackageName.c_str()),
             client, String8(iface.c_str()));
     if (display == NULL) {
         ALOGE("Media player service rejected request to listen for remote display '%s'.",
@@ -176,7 +178,7 @@
 // ----------------------------------------------------------------------------
 
 static JNINativeMethod gMethods[] = {
-    {"nativeListen", "(Ljava/lang/String;)J",
+    {"nativeListen", "(Ljava/lang/String;Ljava/lang/String;)J",
             (void*)nativeListen },
     {"nativeDispose", "(J)V",
             (void*)nativeDispose },
diff --git a/location/java/android/location/GpsMeasurement.java b/location/java/android/location/GpsMeasurement.java
index df128c9..f13a440 100644
--- a/location/java/android/location/GpsMeasurement.java
+++ b/location/java/android/location/GpsMeasurement.java
@@ -140,8 +140,6 @@
 
     /**
      * The state of the GPS receiver contains millisecond ambiguity.
-     *
-     * @hide
      */
     public static final short STATE_MSEC_AMBIGUOUS = (1<<4);
 
@@ -399,8 +397,6 @@
      *
      * @return {@code true} if {@link #getPseudorangeRateInMetersPerSec()} contains a corrected
      *         value, {@code false} if it contains an uncorrected value.
-     *
-     * @hide
      */
     public boolean isPseudorangeRateCorrected() {
         return !isFlagSet(GPS_MEASUREMENT_HAS_UNCORRECTED_PSEUDORANGE_RATE);
diff --git a/location/java/android/location/GpsNavigationMessage.java b/location/java/android/location/GpsNavigationMessage.java
index 5b12a61..5c3c710 100644
--- a/location/java/android/location/GpsNavigationMessage.java
+++ b/location/java/android/location/GpsNavigationMessage.java
@@ -62,23 +62,17 @@
 
     /**
      * The Navigation Message Status is 'unknown'.
-     *
-     * @hide
      */
     public static final short STATUS_UNKNOWN = 0;
 
     /**
      * The Navigation Message was received without any parity error in its navigation words.
-     *
-     * @hide
      */
     public static final short STATUS_PARITY_PASSED = (1<<0);
 
     /**
      * The Navigation Message was received with words that failed parity check, but the receiver was
      * able to correct those words.
-     *
-     * @hide
      */
     public static final short STATUS_PARITY_REBUILT = (1<<1);
 
@@ -220,8 +214,6 @@
 
     /**
      * Gets the Status of the navigation message contained in the object.
-     *
-     * @hide
      */
     public short getStatus() {
         return mStatus;
@@ -229,8 +221,6 @@
 
     /**
      * Sets the status of the navigation message.
-     *
-     * @hide
      */
     public void setStatus(short value) {
         mStatus = value;
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index 201a796..d5e6b3e 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -26,6 +26,8 @@
 import android.annotation.IntDef;
 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;
@@ -378,7 +380,7 @@
         int initResult = native_setup( new WeakReference<AudioRecord>(this),
                 mAudioAttributes, mSampleRate, mChannelMask, mChannelIndexMask,
                 mAudioFormat, mNativeBufferSizeInBytes,
-                session);
+                session, getMyOpPackageName());
         if (initResult != SUCCESS) {
             loge("Error code "+initResult+" when initializing native AudioRecord object.");
             return; // with mState == STATE_UNINITIALIZED
@@ -1321,7 +1323,6 @@
         return native_set_pos_update_period(periodInFrames);
     }
 
-
     //--------------------------------------------------------------------------
     // Explicit Routing
     //--------------------
@@ -1451,7 +1452,7 @@
     private native final int native_setup(Object audiorecord_this,
             Object /*AudioAttributes*/ attributes,
             int sampleRate, int channelMask, int channelIndexMask, int audioFormat,
-            int buffSizeInBytes, int[] sessionId);
+            int buffSizeInBytes, int[] sessionId, String opPackageName);
 
     // TODO remove: implementation calls directly into implementation of native_release()
     private native final void native_finalize();
@@ -1500,4 +1501,14 @@
         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 78fd9f0..1b054cc 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -18,6 +18,7 @@
 
 import android.annotation.SystemApi;
 import android.app.ActivityThread;
+import android.app.Application;
 import android.hardware.Camera;
 import android.os.Handler;
 import android.os.Looper;
@@ -111,7 +112,7 @@
         /* 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);
+        native_setup(new WeakReference<MediaRecorder>(this), packageName, getMyOpPackageName());
     }
 
     /**
@@ -1080,7 +1081,7 @@
     private static native final void native_init();
 
     private native final void native_setup(Object mediarecorder_this,
-            String clientName) throws IllegalStateException;
+            String clientName, String opPackageName) throws IllegalStateException;
 
     private native final void native_finalize();
 
@@ -1088,4 +1089,15 @@
 
     @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/RemoteDisplay.java b/media/java/android/media/RemoteDisplay.java
index 4e937a5..5add65a 100644
--- a/media/java/android/media/RemoteDisplay.java
+++ b/media/java/android/media/RemoteDisplay.java
@@ -37,17 +37,19 @@
     private final CloseGuard mGuard = CloseGuard.get();
     private final Listener mListener;
     private final Handler mHandler;
+    private final String mOpPackageName;
 
     private long mPtr;
 
-    private native long nativeListen(String iface);
+    private native long nativeListen(String iface, String opPackageName);
     private native void nativeDispose(long ptr);
     private native void nativePause(long ptr);
     private native void nativeResume(long ptr);
 
-    private RemoteDisplay(Listener listener, Handler handler) {
+    private RemoteDisplay(Listener listener, Handler handler, String opPackageName) {
         mListener = listener;
         mHandler = handler;
+        mOpPackageName = opPackageName;
     }
 
     @Override
@@ -66,7 +68,8 @@
      * @param listener The listener to invoke when displays are connected or disconnected.
      * @param handler The handler on which to invoke the listener.
      */
-    public static RemoteDisplay listen(String iface, Listener listener, Handler handler) {
+    public static RemoteDisplay listen(String iface, Listener listener, Handler handler,
+            String opPackageName) {
         if (iface == null) {
             throw new IllegalArgumentException("iface must not be null");
         }
@@ -77,7 +80,7 @@
             throw new IllegalArgumentException("handler must not be null");
         }
 
-        RemoteDisplay display = new RemoteDisplay(listener, handler);
+        RemoteDisplay display = new RemoteDisplay(listener, handler, opPackageName);
         display.startListening(iface);
         return display;
     }
@@ -113,7 +116,7 @@
     }
 
     private void startListening(String iface) {
-        mPtr = nativeListen(iface);
+        mPtr = nativeListen(iface, mOpPackageName);
         if (mPtr == 0) {
             throw new IllegalStateException("Could not start listening for "
                     + "remote display connection on \"" + iface + "\"");
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index a8b9686e..9fc90df 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -18,6 +18,8 @@
 
 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;
@@ -395,7 +397,7 @@
         // native initialization
         int initResult = native_setup(new WeakReference<AudioEffect>(this),
                 type.toString(), uuid.toString(), priority, audioSession, id,
-                desc);
+                desc, getMyOpPackageName());
         if (initResult != SUCCESS && initResult != ALREADY_EXISTS) {
             Log.e(TAG, "Error code " + initResult
                     + " when initializing AudioEffect.");
@@ -1217,7 +1219,8 @@
     private static native final void native_init();
 
     private native final int native_setup(Object audioeffect_this, String type,
-            String uuid, int priority, int audioSession, int[] id, Object[] desc);
+            String uuid, int priority, int audioSession, int[] id, Object[] desc,
+            String opPackageName);
 
     private native final void native_finalize();
 
@@ -1356,4 +1359,15 @@
         }
         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 24c74ac..0c48063 100644
--- a/media/java/android/media/audiofx/Visualizer.java
+++ b/media/java/android/media/audiofx/Visualizer.java
@@ -16,6 +16,8 @@
 
 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;
@@ -206,7 +208,8 @@
         synchronized (mStateLock) {
             mState = STATE_UNINITIALIZED;
             // native initialization
-            int result = native_setup(new WeakReference<Visualizer>(this), audioSession, id);
+            int result = native_setup(new WeakReference<Visualizer>(this), audioSession, id,
+                    getMyOpPackageName());
             if (result != SUCCESS && result != ALREADY_EXISTS) {
                 Log.e(TAG, "Error code "+result+" when initializing Visualizer.");
                 switch (result) {
@@ -716,7 +719,8 @@
 
     private native final int native_setup(Object audioeffect_this,
                                           int audioSession,
-                                          int[] id);
+                                          int[] id,
+                                          String opPackageName);
 
     private native final void native_finalize();
 
@@ -766,5 +770,15 @@
 
     }
 
+    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/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 8b7d40d..02297fc 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -31,6 +31,8 @@
 #include <media/mediarecorder.h>
 #include <utils/threads.h>
 
+#include <ScopedUtfChars.h>
+
 #include "jni.h"
 #include "JNIHelp.h"
 #include "android_runtime/AndroidRuntime.h"
@@ -444,11 +446,13 @@
 
 static void
 android_media_MediaRecorder_native_setup(JNIEnv *env, jobject thiz, jobject weak_this,
-                                         jstring packageName)
+                                         jstring packageName, jstring opPackageName)
 {
     ALOGV("setup");
 
-    sp<MediaRecorder> mr = new MediaRecorder();
+    ScopedUtfChars opPackageNameStr(env, opPackageName);
+
+    sp<MediaRecorder> mr = new MediaRecorder(String16(opPackageNameStr.c_str()));
     if (mr == NULL) {
         jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
         return;
@@ -506,7 +510,8 @@
     {"native_reset",         "()V",                             (void *)android_media_MediaRecorder_native_reset},
     {"release",              "()V",                             (void *)android_media_MediaRecorder_release},
     {"native_init",          "()V",                             (void *)android_media_MediaRecorder_native_init},
-    {"native_setup",         "(Ljava/lang/Object;Ljava/lang/String;)V", (void *)android_media_MediaRecorder_native_setup},
+    {"native_setup",         "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)V",
+                                                                (void *)android_media_MediaRecorder_native_setup},
     {"native_finalize",      "()V",                             (void *)android_media_MediaRecorder_native_finalize},
 };
 
diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp
index c364d469..96b72a2 100644
--- a/media/jni/audioeffect/android_media_AudioEffect.cpp
+++ b/media/jni/audioeffect/android_media_AudioEffect.cpp
@@ -25,6 +25,8 @@
 #include <android_runtime/AndroidRuntime.h>
 #include "media/AudioEffect.h"
 
+#include <ScopedUtfChars.h>
+
 using namespace android;
 
 #define AUDIOEFFECT_SUCCESS                      0
@@ -249,7 +251,8 @@
 
 static jint
 android_media_AudioEffect_native_setup(JNIEnv *env, jobject thiz, jobject weak_this,
-        jstring type, jstring uuid, jint priority, jint sessionId, jintArray jId, jobjectArray javadesc)
+        jstring type, jstring uuid, jint priority, jint sessionId, jintArray jId,
+        jobjectArray javadesc, jstring opPackageName)
 {
     ALOGV("android_media_AudioEffect_native_setup");
     AudioEffectJniStorage* lpJniStorage = NULL;
@@ -267,6 +270,8 @@
     jstring jdescName;
     jstring jdescImplementor;
 
+    ScopedUtfChars opPackageNameStr(env, opPackageName);
+
     if (type != NULL) {
         typeStr = env->GetStringUTFChars(type, NULL);
         if (typeStr == NULL) {  // Out of memory
@@ -312,6 +317,7 @@
 
     // create the native AudioEffect object
     lpAudioEffect = new AudioEffect(typeStr,
+                                    String16(opPackageNameStr.c_str()),
                                     uuidStr,
                                     priority,
                                     effectCallback,
@@ -868,7 +874,7 @@
 // Dalvik VM type signatures
 static JNINativeMethod gMethods[] = {
     {"native_init",          "()V",      (void *)android_media_AudioEffect_native_init},
-    {"native_setup",         "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;II[I[Ljava/lang/Object;)I",
+    {"native_setup",         "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;II[I[Ljava/lang/Object;Ljava/lang/String;)I",
                                          (void *)android_media_AudioEffect_native_setup},
     {"native_finalize",      "()V",      (void *)android_media_AudioEffect_native_finalize},
     {"native_release",       "()V",      (void *)android_media_AudioEffect_native_release},
diff --git a/media/jni/audioeffect/android_media_Visualizer.cpp b/media/jni/audioeffect/android_media_Visualizer.cpp
index 460277f..abc681e 100644
--- a/media/jni/audioeffect/android_media_Visualizer.cpp
+++ b/media/jni/audioeffect/android_media_Visualizer.cpp
@@ -26,6 +26,8 @@
 #include <utils/threads.h>
 #include "media/Visualizer.h"
 
+#include <ScopedUtfChars.h>
+
 using namespace android;
 
 #define VISUALIZER_SUCCESS                      0
@@ -331,7 +333,7 @@
 
 static jint
 android_media_visualizer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this,
-        jint sessionId, jintArray jId)
+        jint sessionId, jintArray jId, jstring opPackageName)
 {
     ALOGV("android_media_visualizer_native_setup");
     visualizerJniStorage* lpJniStorage = NULL;
@@ -339,6 +341,8 @@
     Visualizer* lpVisualizer = NULL;
     jint* nId = NULL;
 
+    ScopedUtfChars opPackageNameStr(env, opPackageName);
+
     lpJniStorage = new visualizerJniStorage();
     if (lpJniStorage == NULL) {
         ALOGE("setup: Error creating JNI Storage");
@@ -362,7 +366,8 @@
     }
 
     // create the native Visualizer object
-    lpVisualizer = new Visualizer(0,
+    lpVisualizer = new Visualizer(String16(opPackageNameStr.c_str()),
+                                  0,
                                   android_media_visualizer_effect_callback,
                                   lpJniStorage,
                                   sessionId);
@@ -662,7 +667,7 @@
 // Dalvik VM type signatures
 static JNINativeMethod gMethods[] = {
     {"native_init",            "()V",     (void *)android_media_visualizer_native_init},
-    {"native_setup",           "(Ljava/lang/Object;I[I)I",
+    {"native_setup",           "(Ljava/lang/Object;I[ILjava/lang/String;)I",
                                           (void *)android_media_visualizer_native_setup},
     {"native_finalize",          "()V",   (void *)android_media_visualizer_native_finalize},
     {"native_release",           "()V",   (void *)android_media_visualizer_native_release},
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 15d7367..9fe0211 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -6603,6 +6603,12 @@
             return mActivityManagerService.checkPermission(permission, pid,
                     uid) == PackageManager.PERMISSION_GRANTED;
         }
+
+        @Override
+        public String[] getPackagesForUid(int uid) {
+            return mActivityManagerService.mContext.getPackageManager()
+                    .getPackagesForUid(uid);
+        }
     }
 
     class IntentFirewallInterface implements IntentFirewall.AMSInterface {
diff --git a/services/core/java/com/android/server/display/WifiDisplayController.java b/services/core/java/com/android/server/display/WifiDisplayController.java
index 31c1eea..8932ca0 100644
--- a/services/core/java/com/android/server/display/WifiDisplayController.java
+++ b/services/core/java/com/android/server/display/WifiDisplayController.java
@@ -775,7 +775,7 @@
                         handleConnectionFailure(false);
                     }
                 }
-            }, mHandler);
+            }, mHandler, mContext.getOpPackageName());
 
             // Use extended timeout value for certification, as some tests require user inputs
             int rtspTimeout = mWifiDisplayCertMode ?
diff --git a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
index 322b853..30d204f 100644
--- a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
@@ -52,6 +52,11 @@
                 public boolean checkPermission(java.lang.String permission, int pid, int uid) {
                     return true;
                 }
+
+                @Override
+                public String[] getPackagesForUid(int uid) {
+                    return new String[0];
+                }
             };
             ServiceManagerNative.asInterface(BinderInternal.getContextObject())
                     .setPermissionController(pc);