Merge "Bug 3292797. Talkback accessibility doesn't work at times."
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 34d7935..b74806486 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -136,6 +136,11 @@
outMetrics.ydpi = mDpiY;
}
+ /**
+ * @hide Helper for our fake display size hack.
+ */
+ native public static int unmapDisplaySize(int newSize);
+
/*
* We use a class initializer to allow the native code to cache some
* field offsets.
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index ec2bb74..ed06ded 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -16,6 +16,8 @@
package android.widget;
+import java.lang.ref.WeakReference;
+
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.content.Context;
@@ -54,6 +56,7 @@
private static final int DEFAULT_ANIMATION_DURATION = 400;
private static final int FADE_IN_ANIMATION_DURATION = 800;
private static final int MINIMUM_ANIMATION_DURATION = 50;
+ private static final int STACK_RELAYOUT_DURATION = 100;
/**
* Parameters effecting the perspective visuals
@@ -192,11 +195,15 @@
* Animate the views between different relative indexes within the {@link AdapterViewAnimator}
*/
void animateViewForTransition(int fromIndex, int toIndex, View view) {
- if (fromIndex == -1 && toIndex > 0) {
+ if (fromIndex == -1 && toIndex == NUM_ACTIVE_VIEWS -1) {
// Fade item in
if (view.getAlpha() == 1) {
view.setAlpha(0);
}
+ view.setScaleX(1 - PERSPECTIVE_SCALE_FACTOR);
+ view.setScaleY(1 - PERSPECTIVE_SCALE_FACTOR);
+ view.setTranslationX(mPerspectiveShiftX);
+ view.setTranslationY(0);
view.setVisibility(VISIBLE);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(view, "alpha", view.getAlpha(), 1.0f);
@@ -234,10 +241,13 @@
view.setVisibility(INVISIBLE);
LayoutParams lp = (LayoutParams) view.getLayoutParams();
lp.setVerticalOffset(-mSlideAmount);
+ } else if (fromIndex == -1) {
+ view.setAlpha(1.0f);
+ view.setVisibility(VISIBLE);
} else if (toIndex == -1) {
// Fade item out
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(view, "alpha", view.getAlpha(), 0.0f);
- fadeOut.setDuration(DEFAULT_ANIMATION_DURATION);
+ fadeOut.setDuration(STACK_RELAYOUT_DURATION);
fadeOut.start();
}
@@ -277,13 +287,17 @@
ObjectAnimator oa = ObjectAnimator.ofPropertyValuesHolder(view, scalePropX, scalePropY,
translationY, translationX);
- oa.setDuration(100);
- view.setTagInternal(com.android.internal.R.id.viewAnimation, oa);
+ oa.setDuration(STACK_RELAYOUT_DURATION);
+ view.setTagInternal(com.android.internal.R.id.viewAnimation,
+ new WeakReference<ObjectAnimator>(oa));
oa.start();
} else {
Object tag = view.getTag(com.android.internal.R.id.viewAnimation);
- if (tag instanceof ObjectAnimator) {
- ((ObjectAnimator) tag).cancel();
+ if (tag instanceof WeakReference<?>) {
+ Object obj = ((WeakReference<?>) tag).get();
+ if (obj instanceof ObjectAnimator) {
+ ((ObjectAnimator) obj).cancel();
+ }
}
view.setTranslationX(transX);
diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java
index e520e69..e63a68f 100644
--- a/core/java/com/android/internal/widget/ActionBarContainer.java
+++ b/core/java/com/android/internal/widget/ActionBarContainer.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
+import android.view.MotionEvent;
import android.widget.FrameLayout;
/**
@@ -39,4 +40,10 @@
setBackgroundDrawable(a.getDrawable(com.android.internal.R.styleable.ActionBar_background));
a.recycle();
}
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ super.onTouchEvent(ev);
+ return true;
+ }
}
diff --git a/core/jni/android_view_Display.cpp b/core/jni/android_view_Display.cpp
index 2e160ae..ac8835a 100644
--- a/core/jni/android_view_Display.cpp
+++ b/core/jni/android_view_Display.cpp
@@ -17,6 +17,8 @@
#include <stdio.h>
#include <assert.h>
+#include <cutils/properties.h>
+
#include <surfaceflinger/SurfaceComposerClient.h>
#include <ui/PixelFormat.h>
#include <ui/DisplayInfo.h>
@@ -24,6 +26,7 @@
#include "jni.h"
#include <android_runtime/AndroidRuntime.h>
#include <utils/misc.h>
+#include <utils/Log.h>
// ----------------------------------------------------------------------------
@@ -41,6 +44,9 @@
};
static offsets_t offsets;
+static int gOldSize = -1;
+static int gNewSize = -1;
+
static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
{
jclass npeClazz = env->FindClass(exc);
@@ -69,14 +75,16 @@
JNIEnv* env, jobject clazz)
{
DisplayID dpy = env->GetIntField(clazz, offsets.display);
- return SurfaceComposerClient::getDisplayWidth(dpy);
+ jint w = SurfaceComposerClient::getDisplayWidth(dpy);
+ return w == gOldSize ? gNewSize : w;
}
static jint android_view_Display_getHeight(
JNIEnv* env, jobject clazz)
{
DisplayID dpy = env->GetIntField(clazz, offsets.display);
- return SurfaceComposerClient::getDisplayHeight(dpy);
+ int h = SurfaceComposerClient::getDisplayHeight(dpy);
+ return h == gOldSize ? gNewSize : h;
}
static jint android_view_Display_getOrientation(
@@ -92,6 +100,13 @@
return SurfaceComposerClient::getNumberOfDisplays();
}
+static jint android_view_Display_unmapDisplaySize(
+ JNIEnv* env, jclass clazz, jint newSize)
+{
+ if (newSize == gNewSize) return gOldSize;
+ return newSize;
+}
+
// ----------------------------------------------------------------------------
const char* const kClassPathName = "android/view/Display";
@@ -110,7 +125,9 @@
{ "getHeight", "()I",
(void*)android_view_Display_getHeight },
{ "getOrientation", "()I",
- (void*)android_view_Display_getOrientation }
+ (void*)android_view_Display_getOrientation },
+ { "unmapDisplaySize", "(I)I",
+ (void*)android_view_Display_unmapDisplaySize }
};
void nativeClassInit(JNIEnv* env, jclass clazz)
@@ -125,6 +142,16 @@
int register_android_view_Display(JNIEnv* env)
{
+ char buf[PROPERTY_VALUE_MAX];
+ int len = property_get("persist.demo.screensizehack", buf, "");
+ if (len > 0) {
+ int temp1, temp2;
+ if (sscanf(buf, "%d=%d", &temp1, &temp2) == 2) {
+ gOldSize = temp1;
+ gNewSize = temp2;
+ }
+ }
+
return AndroidRuntime::registerNativeMethods(env,
kClassPathName, gMethods, NELEM(gMethods));
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
index e0f37ca..edcf096 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
@@ -319,10 +319,8 @@
anim.setDuration((last-first) * STAGGER_ANIMATION_DELAY);
anim.setInterpolator(interp);
anims.add(anim);
- }
- if (animate) {
- ObjectAnimator anim = ObjectAnimator.ofFloat(mBackgroundProtector, "alpha",
+ anim = ObjectAnimator.ofFloat(mBackgroundProtector, "alpha",
initialAlpha, 1.0f);
anim.setDuration(last * STAGGER_ANIMATION_DELAY);
anim.setInterpolator(interp);
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 26dd692..748f2e9 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -6239,7 +6239,8 @@
mDisplay = wm.getDefaultDisplay();
mInitialDisplayWidth = mDisplay.getWidth();
mInitialDisplayHeight = mDisplay.getHeight();
- mInputManager.setDisplaySize(0, mInitialDisplayWidth, mInitialDisplayHeight);
+ mInputManager.setDisplaySize(0, Display.unmapDisplaySize(mInitialDisplayWidth),
+ Display.unmapDisplaySize(mInitialDisplayHeight));
}
try {