Merge "AArch64: Use of long for pointers in PropertyValuesHolder"
diff --git a/core/jni/android/graphics/Interpolator.cpp b/core/jni/android/graphics/Interpolator.cpp
index aa33c3d..ca04dfe 100644
--- a/core/jni/android/graphics/Interpolator.cpp
+++ b/core/jni/android/graphics/Interpolator.cpp
@@ -5,23 +5,26 @@
 #include "SkInterpolator.h"
 #include "SkTemplates.h"
 
-static SkInterpolator* Interpolator_constructor(JNIEnv* env, jobject clazz, int valueCount, int frameCount)
+static jlong Interpolator_constructor(JNIEnv* env, jobject clazz, jint valueCount, jint frameCount)
 {
-    return new SkInterpolator(valueCount, frameCount);
+    return reinterpret_cast<jlong>(new SkInterpolator(valueCount, frameCount));
 }
 
-static void Interpolator_destructor(JNIEnv* env, jobject clazz, SkInterpolator* interp)
+static void Interpolator_destructor(JNIEnv* env, jobject clazz, jlong interpHandle)
 {
+    SkInterpolator* interp = reinterpret_cast<SkInterpolator*>(interpHandle);
     delete interp;
 }
 
-static void Interpolator_reset(JNIEnv* env, jobject clazz, SkInterpolator* interp, int valueCount, int frameCount)
+static void Interpolator_reset(JNIEnv* env, jobject clazz, jlong interpHandle, jint valueCount, jint frameCount)
 {
+    SkInterpolator* interp = reinterpret_cast<SkInterpolator*>(interpHandle);
     interp->reset(valueCount, frameCount);
 }
 
-static void Interpolator_setKeyFrame(JNIEnv* env, jobject clazz, SkInterpolator* interp, int index, int msec, jfloatArray valueArray, jfloatArray blendArray)
+static void Interpolator_setKeyFrame(JNIEnv* env, jobject clazz, jlong interpHandle, jint index, jint msec, jfloatArray valueArray, jfloatArray blendArray)
 {
+    SkInterpolator* interp = reinterpret_cast<SkInterpolator*>(interpHandle);
     SkScalar    blendStorage[4];
     SkScalar*   blend = NULL;
 
@@ -46,8 +49,9 @@
     interp->setKeyFrame(index, msec, scalars, blend);
 }
 
-static void Interpolator_setRepeatMirror(JNIEnv* env, jobject clazz, SkInterpolator* interp, float repeatCount, jboolean mirror)
+static void Interpolator_setRepeatMirror(JNIEnv* env, jobject clazz, jlong interpHandle, jfloat repeatCount, jboolean mirror)
 {
+    SkInterpolator* interp = reinterpret_cast<SkInterpolator*>(interpHandle);
     if (repeatCount > 32000)
         repeatCount = 32000;
 
@@ -55,8 +59,9 @@
     interp->setMirror(mirror != 0);
 }
 
-static int Interpolator_timeToValues(JNIEnv* env, jobject clazz, SkInterpolator* interp, int msec, jfloatArray valueArray)
+static jint Interpolator_timeToValues(JNIEnv* env, jobject clazz, jlong interpHandle, jint msec, jfloatArray valueArray)
 {
+    SkInterpolator* interp = reinterpret_cast<SkInterpolator*>(interpHandle);
     SkInterpolatorBase::Result result;
 
     float* values = valueArray ? env->GetFloatArrayElements(valueArray, NULL) : NULL;
@@ -70,7 +75,7 @@
         env->ReleaseFloatArrayElements(valueArray, values, 0);
     }
 
-    return result;
+    return static_cast<jint>(result);
 }
 
 // ----------------------------------------------------------------------------
@@ -79,12 +84,12 @@
  * JNI registration.
  */
 static JNINativeMethod gInterpolatorMethods[] = {
-    { "nativeConstructor",      "(II)I",        (void*)Interpolator_constructor     },
-    { "nativeDestructor",       "(I)V",         (void*)Interpolator_destructor      },
-    { "nativeReset",            "(III)V",       (void*)Interpolator_reset           },
-    { "nativeSetKeyFrame",      "(III[F[F)V",   (void*)Interpolator_setKeyFrame     },
-    { "nativeSetRepeatMirror",  "(IFZ)V",       (void*)Interpolator_setRepeatMirror },
-    { "nativeTimeToValues",     "(II[F)I",      (void*)Interpolator_timeToValues    }
+    { "nativeConstructor",      "(II)J",        (void*)Interpolator_constructor     },
+    { "nativeDestructor",       "(J)V",         (void*)Interpolator_destructor      },
+    { "nativeReset",            "(JII)V",       (void*)Interpolator_reset           },
+    { "nativeSetKeyFrame",      "(JII[F[F)V",   (void*)Interpolator_setKeyFrame     },
+    { "nativeSetRepeatMirror",  "(JFZ)V",       (void*)Interpolator_setRepeatMirror },
+    { "nativeTimeToValues",     "(JI[F)I",      (void*)Interpolator_timeToValues    }
 };
 
 int register_android_graphics_Interpolator(JNIEnv* env)
diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp
index 0c9b3bc..3116955 100644
--- a/core/jni/android/graphics/SurfaceTexture.cpp
+++ b/core/jni/android/graphics/SurfaceTexture.cpp
@@ -55,28 +55,28 @@
         const sp<GLConsumer>& surfaceTexture)
 {
     GLConsumer* const p =
-        (GLConsumer*)env->GetIntField(thiz, fields.surfaceTexture);
+        (GLConsumer*)env->GetLongField(thiz, fields.surfaceTexture);
     if (surfaceTexture.get()) {
         surfaceTexture->incStrong((void*)SurfaceTexture_setSurfaceTexture);
     }
     if (p) {
         p->decStrong((void*)SurfaceTexture_setSurfaceTexture);
     }
-    env->SetIntField(thiz, fields.surfaceTexture, (int)surfaceTexture.get());
+    env->SetLongField(thiz, fields.surfaceTexture, (jlong)surfaceTexture.get());
 }
 
 static void SurfaceTexture_setBufferQueue(JNIEnv* env, jobject thiz,
         const sp<BufferQueue>& bq)
 {
     BufferQueue* const p =
-        (BufferQueue*)env->GetIntField(thiz, fields.bufferQueue);
+        (BufferQueue*)env->GetLongField(thiz, fields.bufferQueue);
     if (bq.get()) {
         bq->incStrong((void*)SurfaceTexture_setBufferQueue);
     }
     if (p) {
         p->decStrong((void*)SurfaceTexture_setBufferQueue);
     }
-    env->SetIntField(thiz, fields.bufferQueue, (int)bq.get());
+    env->SetLongField(thiz, fields.bufferQueue, (jlong)bq.get());
 }
 
 static void SurfaceTexture_setFrameAvailableListener(JNIEnv* env,
@@ -84,22 +84,22 @@
 {
     GLConsumer::FrameAvailableListener* const p =
         (GLConsumer::FrameAvailableListener*)
-            env->GetIntField(thiz, fields.frameAvailableListener);
+            env->GetLongField(thiz, fields.frameAvailableListener);
     if (listener.get()) {
         listener->incStrong((void*)SurfaceTexture_setSurfaceTexture);
     }
     if (p) {
         p->decStrong((void*)SurfaceTexture_setSurfaceTexture);
     }
-    env->SetIntField(thiz, fields.frameAvailableListener, (int)listener.get());
+    env->SetLongField(thiz, fields.frameAvailableListener, (jlong)listener.get());
 }
 
 sp<GLConsumer> SurfaceTexture_getSurfaceTexture(JNIEnv* env, jobject thiz) {
-    return (GLConsumer*)env->GetIntField(thiz, fields.surfaceTexture);
+    return (GLConsumer*)env->GetLongField(thiz, fields.surfaceTexture);
 }
 
 sp<IGraphicBufferProducer> SurfaceTexture_getProducer(JNIEnv* env, jobject thiz) {
-    return (BufferQueue*)env->GetIntField(thiz, fields.bufferQueue);
+    return (BufferQueue*)env->GetLongField(thiz, fields.bufferQueue);
 }
 
 sp<ANativeWindow> android_SurfaceTexture_getNativeWindow(JNIEnv* env, jobject thiz) {
@@ -201,19 +201,19 @@
 static void SurfaceTexture_classInit(JNIEnv* env, jclass clazz)
 {
     fields.surfaceTexture = env->GetFieldID(clazz,
-            ANDROID_GRAPHICS_SURFACETEXTURE_JNI_ID, "I");
+            ANDROID_GRAPHICS_SURFACETEXTURE_JNI_ID, "J");
     if (fields.surfaceTexture == NULL) {
         ALOGE("can't find android/graphics/SurfaceTexture.%s",
                 ANDROID_GRAPHICS_SURFACETEXTURE_JNI_ID);
     }
     fields.bufferQueue = env->GetFieldID(clazz,
-            ANDROID_GRAPHICS_BUFFERQUEUE_JNI_ID, "I");
+            ANDROID_GRAPHICS_BUFFERQUEUE_JNI_ID, "J");
     if (fields.bufferQueue == NULL) {
         ALOGE("can't find android/graphics/SurfaceTexture.%s",
                 ANDROID_GRAPHICS_BUFFERQUEUE_JNI_ID);
     }
     fields.frameAvailableListener = env->GetFieldID(clazz,
-            ANDROID_GRAPHICS_FRAMEAVAILABLELISTENER_JNI_ID, "I");
+            ANDROID_GRAPHICS_FRAMEAVAILABLELISTENER_JNI_ID, "J");
     if (fields.frameAvailableListener == NULL) {
         ALOGE("can't find android/graphics/SurfaceTexture.%s",
                 ANDROID_GRAPHICS_FRAMEAVAILABLELISTENER_JNI_ID);
diff --git a/core/jni/android_os_SELinux.cpp b/core/jni/android_os_SELinux.cpp
index ca278cf..2b85fef 100644
--- a/core/jni/android_os_SELinux.cpp
+++ b/core/jni/android_os_SELinux.cpp
@@ -443,8 +443,21 @@
 
 static int log_callback(int type, const char *fmt, ...) {
     va_list ap;
+    int priority;
+
+    switch (type) {
+    case SELINUX_WARNING:
+        priority = ANDROID_LOG_WARN;
+        break;
+    case SELINUX_INFO:
+        priority = ANDROID_LOG_INFO;
+        break;
+    default:
+        priority = ANDROID_LOG_ERROR;
+        break;
+    }
     va_start(ap, fmt);
-    LOG_PRI_VA(ANDROID_LOG_ERROR, "SELinux", fmt, ap);
+    LOG_PRI_VA(priority, "SELinux", fmt, ap);
     va_end(ap);
     return 0;
 }
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index 3342bab..c2d4ec0 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -113,7 +113,8 @@
         return NULL;
     }
 
-    jobject surfaceObj = env->NewObject(gSurfaceClassInfo.clazz, gSurfaceClassInfo.ctor, surface.get());
+    jobject surfaceObj = env->NewObject(gSurfaceClassInfo.clazz,
+            gSurfaceClassInfo.ctor, (jlong)surface.get());
     if (surfaceObj == NULL) {
         if (env->ExceptionCheck()) {
             ALOGE("Could not create instance of Surface from IGraphicBufferProducer.");
diff --git a/core/jni/android_view_TextureView.cpp b/core/jni/android_view_TextureView.cpp
index b7eca8d..54f9278 100644
--- a/core/jni/android_view_TextureView.cpp
+++ b/core/jni/android_view_TextureView.cpp
@@ -127,7 +127,7 @@
 static inline void swapCanvasPtr(JNIEnv* env, jobject canvasObj, SkCanvas* newCanvas) {
     jobject canvasFinalizerObj = env->GetObjectField(canvasObj, gCanvasClassInfo.mFinalizer);
     SkCanvas* previousCanvas = reinterpret_cast<SkCanvas*>(
-          env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas));
+          env->GetLongField(canvasObj, gCanvasClassInfo.mNativeCanvas));
     env->SetLongField(canvasObj, gCanvasClassInfo.mNativeCanvas, (jlong)newCanvas);
     env->SetLongField(canvasFinalizerObj, gCanvasFinalizerClassInfo.mNativeCanvas, (jlong)newCanvas);
     SkSafeUnref(previousCanvas);
diff --git a/drm/java/android/drm/DrmManagerClient.java b/drm/java/android/drm/DrmManagerClient.java
index 10cdab0..c05ea2e 100644
--- a/drm/java/android/drm/DrmManagerClient.java
+++ b/drm/java/android/drm/DrmManagerClient.java
@@ -116,7 +116,7 @@
     private static final int ACTION_PROCESS_DRM_INFO = 1002;
 
     private int mUniqueId;
-    private int mNativeContext;
+    private long mNativeContext;
     private volatile boolean mReleased;
     private Context mContext;
     private InfoHandler mInfoHandler;
diff --git a/drm/jni/android_drm_DrmManagerClient.cpp b/drm/jni/android_drm_DrmManagerClient.cpp
index baddf62..de8531b 100644
--- a/drm/jni/android_drm_DrmManagerClient.cpp
+++ b/drm/jni/android_drm_DrmManagerClient.cpp
@@ -182,25 +182,27 @@
             JNIEnv* env, jobject thiz, const sp<DrmManagerClientImpl>& client) {
     Mutex::Autolock l(sLock);
     jclass clazz = env->FindClass("android/drm/DrmManagerClient");
-    jfieldID fieldId = env->GetFieldID(clazz, "mNativeContext", "I");
+    jfieldID fieldId = env->GetFieldID(clazz, "mNativeContext", "J");
 
-    sp<DrmManagerClientImpl> old = (DrmManagerClientImpl*)env->GetIntField(thiz, fieldId);
+    jlong oldHandle = env->GetLongField(thiz, fieldId);
+    sp<DrmManagerClientImpl> old = reinterpret_cast<DrmManagerClientImpl*>(oldHandle);
     if (client.get()) {
         client->incStrong(thiz);
     }
     if (old != 0) {
         old->decStrong(thiz);
     }
-    env->SetIntField(thiz, fieldId, (int)client.get());
+    env->SetLongField(thiz, fieldId, reinterpret_cast<jlong>(client.get()));
     return old;
 }
 
 static sp<DrmManagerClientImpl> getDrmManagerClientImpl(JNIEnv* env, jobject thiz) {
     Mutex::Autolock l(sLock);
     jclass clazz = env->FindClass("android/drm/DrmManagerClient");
-    jfieldID fieldId = env->GetFieldID(clazz, "mNativeContext", "I");
+    jfieldID fieldId = env->GetFieldID(clazz, "mNativeContext", "J");
 
-    DrmManagerClientImpl* const client = (DrmManagerClientImpl*)env->GetIntField(thiz, fieldId);
+    jlong clientHandle = env->GetLongField(thiz, fieldId);
+    DrmManagerClientImpl* const client = reinterpret_cast<DrmManagerClientImpl*>(clientHandle);
     return sp<DrmManagerClientImpl>(client);
 }
 
@@ -214,7 +216,7 @@
 
     setDrmManagerClientImpl(env, thiz, drmManager);
     ALOGV("initialize - Exit");
-    return uniqueId;
+    return static_cast<jint>(uniqueId);
 }
 
 static void android_drm_DrmManagerClient_setListeners(
@@ -406,7 +408,7 @@
 
     delete[] mData; mData = NULL;
     ALOGV("saveRights - Exit");
-    return result;
+    return static_cast<jint>(result);
 }
 
 static jboolean android_drm_DrmManagerClient_canHandle(
@@ -583,7 +585,7 @@
             ->getDrmObjectType(uniqueId, Utility::getStringValue(env, path),
                                 Utility::getStringValue(env, mimeType));
     ALOGV("getDrmObjectType Exit");
-    return drmObjectType;
+    return static_cast<jint>(drmObjectType);
 }
 
 static jstring android_drm_DrmManagerClient_getOriginalMimeType(
@@ -609,20 +611,21 @@
         = getDrmManagerClientImpl(env, thiz)
             ->checkRightsStatus(uniqueId, Utility::getStringValue(env, path), action);
     ALOGV("checkRightsStatus Exit");
-    return rightsStatus;
+    return static_cast<jint>(rightsStatus);
 }
 
 static jint android_drm_DrmManagerClient_removeRights(
             JNIEnv* env, jobject thiz, jint uniqueId, jstring path) {
     ALOGV("removeRights");
-    return getDrmManagerClientImpl(env, thiz)
-               ->removeRights(uniqueId, Utility::getStringValue(env, path));
+    return static_cast<jint>(getDrmManagerClientImpl(env, thiz)
+               ->removeRights(uniqueId, Utility::getStringValue(env, path)));
 }
 
 static jint android_drm_DrmManagerClient_removeAllRights(
             JNIEnv* env, jobject thiz, jint uniqueId) {
     ALOGV("removeAllRights");
-    return getDrmManagerClientImpl(env, thiz)->removeAllRights(uniqueId);
+    return static_cast<jint>(getDrmManagerClientImpl(env, thiz)
+                ->removeAllRights(uniqueId));
 }
 
 static jint android_drm_DrmManagerClient_openConvertSession(
@@ -632,7 +635,7 @@
         = getDrmManagerClientImpl(env, thiz)
             ->openConvertSession(uniqueId, Utility::getStringValue(env, mimeType));
     ALOGV("openConvertSession Exit");
-    return convertId;
+    return static_cast<jint>(convertId);
 }
 
 static jobject GetConvertedStatus(JNIEnv* env, DrmConvertedStatus* pDrmConvertedStatus) {
@@ -686,7 +689,7 @@
 }
 
 static jobject android_drm_DrmManagerClient_closeConvertSession(
-            JNIEnv* env, jobject thiz, int uniqueId, jint convertId) {
+            JNIEnv* env, jobject thiz, jint uniqueId, jint convertId) {
 
     ALOGV("closeConvertSession Enter");
 
diff --git a/graphics/java/android/graphics/Interpolator.java b/graphics/java/android/graphics/Interpolator.java
index 75851a6..f695a9e 100644
--- a/graphics/java/android/graphics/Interpolator.java
+++ b/graphics/java/android/graphics/Interpolator.java
@@ -151,13 +151,13 @@
     
     private int mValueCount;
     private int mFrameCount;
-    private final int native_instance;
+    private final long native_instance;
 
-    private static native int  nativeConstructor(int valueCount, int frameCount);
-    private static native void nativeDestructor(int native_instance);
-    private static native void nativeReset(int native_instance, int valueCount, int frameCount);
-    private static native void nativeSetKeyFrame(int native_instance, int index, int msec, float[] values, float[] blend);
-    private static native void nativeSetRepeatMirror(int native_instance, float repeatCount, boolean mirror);
-    private static native int  nativeTimeToValues(int native_instance, int msec, float[] values);
+    private static native long nativeConstructor(int valueCount, int frameCount);
+    private static native void nativeDestructor(long native_instance);
+    private static native void nativeReset(long native_instance, int valueCount, int frameCount);
+    private static native void nativeSetKeyFrame(long native_instance, int index, int msec, float[] values, float[] blend);
+    private static native void nativeSetRepeatMirror(long native_instance, float repeatCount, boolean mirror);
+    private static native int  nativeTimeToValues(long native_instance, int msec, float[] values);
 }
 
diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java
index b910a24..1f8e223 100644
--- a/graphics/java/android/graphics/SurfaceTexture.java
+++ b/graphics/java/android/graphics/SurfaceTexture.java
@@ -69,9 +69,9 @@
     /**
      * These fields are used by native code, do not access or modify.
      */
-    private int mSurfaceTexture;
-    private int mBufferQueue;
-    private int mFrameAvailableListener;
+    private long mSurfaceTexture;
+    private long mBufferQueue;
+    private long mFrameAvailableListener;
 
     /**
      * Callback interface for being notified that a new stream frame is available.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 839016d..9589e8b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -521,6 +521,11 @@
             Log.d(TAG, "reorient(): rot=" + mDisplay.getRotation());
         }
 
+        // swap to x coordinate if orientation is not in vertical
+        if (mDelegateHelper != null) {
+            mDelegateHelper.setSwapXY(!mVertical);
+        }
+
         setNavigationIconHints(mNavigationIconHints, true);
     }
 
diff --git a/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java
index 04ce9d0..f5c4677 100644
--- a/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/BitmapFactory_Delegate.java
@@ -151,13 +151,13 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts) {
+    /*package*/ static Bitmap nativeDecodeAsset(long asset, Rect padding, Options opts) {
         opts.inBitmap = null;
         return null;
     }
 
     @LayoutlibDelegate
-    /*package*/ static Bitmap nativeDecodeAsset(int asset, Rect padding, Options opts,
+    /*package*/ static Bitmap nativeDecodeAsset(long asset, Rect padding, Options opts,
             boolean applyScale, float scale) {
         opts.inBitmap = null;
         return null;
diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
index ba771dd..3111f0d 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
@@ -786,7 +786,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static void native_drawPath(long nativeCanvas, int path, long paint) {
+    /*package*/ static void native_drawPath(long nativeCanvas, long path, long paint) {
         final Path_Delegate pathDelegate = Path_Delegate.getDelegate(path);
         if (pathDelegate == null) {
             return;
diff --git a/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java
index 1d66586..ebfe9bc 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java
@@ -654,7 +654,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_invert(long native_object, int inverse) {
+    /*package*/ static boolean native_invert(long native_object, long inverse) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
         if (d == null) {
             return false;