summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony Hugh <ahugh@google.com>2015-10-20 21:45:39 (GMT)
committerAnthony Hugh <ahugh@google.com>2015-10-21 23:19:35 (GMT)
commit851c6ea6ee8c32d4c09c6b4f18b095e5da0541e5 (patch)
tree637b765ccb8c5c81360936e7a2beb099875ff85a
parent53fff03d60cf1f96d2135e84e18ebe73ac1a049e (diff)
downloadandroid_packages_apps_PackageInstaller-851c6ea6ee8c32d4c09c6b4f18b095e5da0541e5.zip
android_packages_apps_PackageInstaller-851c6ea6ee8c32d4c09c6b4f18b095e5da0541e5.tar.gz
android_packages_apps_PackageInstaller-851c6ea6ee8c32d4c09c6b4f18b095e5da0541e5.tar.bz2
Fix Permissions Dialog animations
Make handler run on UI thread to avoid race conditions. Update some logic to prevent animation from running when it shouldn't be. BUG: 24954323 Change-Id: Ia1635cbb3c9128080a8e4a9c3ce6ee935c4d957e
-rw-r--r--src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
index adc831d..954d7e9 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
@@ -6,6 +6,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.os.Handler;
+import android.os.Looper;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
@@ -106,7 +107,7 @@ public abstract class ConfirmationViewHandler implements
android.R.interpolator.fast_out_slow_in);
mButtonBarFloatingHeight = mContext.getResources().getDimension(
R.dimen.conf_diag_floating_height);
- mHideHandler = new Handler(this);
+ mHideHandler = new Handler(Looper.getMainLooper(), this);
mScrollingContainer.getViewTreeObserver().addOnScrollChangedListener(this);
mRoot.getViewTreeObserver().addOnGlobalLayoutListener(this);
@@ -237,6 +238,9 @@ public abstract class ConfirmationViewHandler implements
@Override
public void onScrollChanged () {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onScrollChanged");
+ }
mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
hideButtonBar();
}
@@ -258,12 +262,13 @@ public abstract class ConfirmationViewHandler implements
// Evaluate the max height the button bar can go
final int screenHeight = mRoot.getHeight();
+ final int halfScreenHeight = screenHeight / 2;
final int buttonBarHeight = mButtonBarContainer.getHeight();
+ final int contentHeight = mContent.getHeight() - buttonBarHeight;
final int buttonBarMaxHeight =
- Math.min(buttonBarHeight, screenHeight / 2);
+ Math.min(buttonBarHeight, halfScreenHeight);
if (Log.isLoggable(TAG, Log.DEBUG)) {
- final int contentHeight = mContent.getHeight() - buttonBarHeight;
Log.d(TAG, " screenHeight: " + screenHeight);
Log.d(TAG, " contentHeight: " + contentHeight);
Log.d(TAG, " buttonBarHeight: " + buttonBarHeight);
@@ -271,7 +276,13 @@ public abstract class ConfirmationViewHandler implements
}
mButtonBarContainer.setTranslationZ(mButtonBarFloatingHeight);
- mHideHandler.sendEmptyMessageDelayed(MSG_HIDE_BUTTON_BAR, 3000);
+
+ // Only hide the button bar if it is occluding the content or the button bar is bigger than
+ // half the screen
+ if (contentHeight > halfScreenHeight
+ || buttonBarHeight > halfScreenHeight) {
+ mHideHandler.sendEmptyMessageDelayed(MSG_HIDE_BUTTON_BAR, 3000);
+ }
generateButtonBarAnimator(buttonBarHeight,
buttonBarHeight - buttonBarMaxHeight, 0, mButtonBarFloatingHeight, 1000);
@@ -295,7 +306,10 @@ public abstract class ConfirmationViewHandler implements
mButtonBarContainer.getHeight() - offset : mButtonBarContainer.getHeight());
if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, " topMargin: " + topMargin);
Log.d(TAG, " contentHeight: " + contentHeight);
+ Log.d(TAG, " screenHeight: " + screenHeight);
+ Log.d(TAG, " offset: " + offset);
Log.d(TAG, " buttonBarHeight: " + buttonBarHeight);
Log.d(TAG, " mContent.getPaddingBottom(): " + mContent.getPaddingBottom());
Log.d(TAG, " mScrollingContainer.getScrollY(): " + mScrollingContainer.getScrollY());
@@ -303,6 +317,14 @@ public abstract class ConfirmationViewHandler implements
}
if (!mHiddenBefore || mButtonBarAnimator == null) {
+ // Remove previous call to MSG_SHOW_BUTTON_BAR if the user scrolled or something before
+ // the animation got a chance to play
+ mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR);
+
+ if(mButtonBarAnimator != null) {
+ mButtonBarAnimator.cancel(); // stop current animation if there is one playing
+ }
+
// hasn't hidden the bar yet, just hide now to the right height
generateButtonBarAnimator(
mButtonBarContainer.getTranslationY(), translationY,
@@ -317,6 +339,7 @@ public abstract class ConfirmationViewHandler implements
(float) HIDE_ANIM_DURATION
* (translationY - mButtonBarContainer.getTranslationY())
/ mButtonBarContainer.getHeight()), 0);
+
generateButtonBarAnimator(
mButtonBarContainer.getTranslationY(), translationY,
mButtonBarFloatingHeight, 0, duration);
@@ -336,6 +359,15 @@ public abstract class ConfirmationViewHandler implements
private void generateButtonBarAnimator(
float startY, float endY, float startZ, float endZ, long duration) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "generateButtonBarAnimator");
+ Log.d(TAG, " startY: " + startY);
+ Log.d(TAG, " endY: " + endY);
+ Log.d(TAG, " startZ: " + startZ);
+ Log.d(TAG, " endZ: " + endZ);
+ Log.d(TAG, " duration: " + duration);
+ }
+
mButtonBarAnimator =
ObjectAnimator.ofPropertyValuesHolder(
mButtonBarContainer,