summaryrefslogtreecommitdiffstats
path: root/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java')
-rw-r--r--src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java147
1 files changed, 98 insertions, 49 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
index 277bada9..db3340f6 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
@@ -8,6 +8,7 @@ import android.graphics.drawable.Icon;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -24,11 +25,15 @@ import com.android.packageinstaller.R;
public abstract class ConfirmationViewHandler implements
Handler.Callback,
View.OnClickListener,
- ViewTreeObserver.OnScrollChangedListener {
+ ViewTreeObserver.OnScrollChangedListener,
+ ViewTreeObserver.OnGlobalLayoutListener {
+ private static final String TAG = "ConfirmationViewHandler";
+
public static final int MODE_HORIZONTAL_BUTTONS = 0;
public static final int MODE_VERTICAL_BUTTONS = 1;
- private static final int MSG_HIDE_BUTTON_BAR = 1001;
+ private static final int MSG_SHOW_BUTTON_BAR = 1001;
+ private static final int MSG_HIDE_BUTTON_BAR = 1002;
private static final long HIDE_ANIM_DURATION = 500;
private View mRoot;
@@ -103,6 +108,9 @@ public abstract class ConfirmationViewHandler implements
R.dimen.conf_diag_floating_height);
mHideHandler = new Handler(this);
+ mScrollingContainer.getViewTreeObserver().addOnScrollChangedListener(this);
+ mRoot.getViewTreeObserver().addOnGlobalLayoutListener(this);
+
return mRoot;
}
@@ -158,54 +166,41 @@ public abstract class ConfirmationViewHandler implements
mVerticalButton3.setCompoundDrawablesWithIntrinsicBounds(
getVerticalButton3Icon(), null, null, null);
}
-
break;
}
mScrollingContainer.scrollTo(0, 0);
- mScrollingContainer.getViewTreeObserver().addOnScrollChangedListener(this);
+ mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
+ mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR);
+ }
+
+ @Override
+ public void onGlobalLayout() {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onGlobalLayout");
+ Log.d(TAG, " contentHeight: " + mContent.getHeight());
+ }
+
+ if (mButtonBarAnimator != null) {
+ mButtonBarAnimator.cancel();
+ }
+
+ // In order to fake the buttons peeking at the bottom, need to do set the
+ // padding properly.
+ if (mContent.getPaddingBottom() != mButtonBarContainer.getHeight()) {
+ mContent.setPadding(0, 0, 0, mButtonBarContainer.getHeight());
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, " set mContent.PaddingBottom: " + mButtonBarContainer.getHeight());
+ }
+ }
- mRoot.getViewTreeObserver().addOnGlobalLayoutListener(
- new ViewTreeObserver.OnGlobalLayoutListener() {
- @Override
- public void onGlobalLayout() {
- // Setup Button animation.
- // pop the button bar back to full height, stop all animation
- if (mButtonBarAnimator != null) {
- mButtonBarAnimator.cancel();
- }
-
- // In order to fake the buttons peeking at the bottom, need to do set the
- // padding properly.
- if (mContent.getPaddingBottom() != mButtonBarContainer.getHeight()) {
- mContent.setPadding(0, 0, 0, mButtonBarContainer.getHeight());
- }
-
- // stop any calls to hide the button bar in the future
- mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
- mHiddenBefore = false;
-
- // determine which mode the scrolling should work at.
- if (mContent.getHeight() > mScrollingContainer.getHeight()) {
- mButtonBarContainer.setTranslationZ(mButtonBarFloatingHeight);
- mHideHandler.sendEmptyMessageDelayed(MSG_HIDE_BUTTON_BAR, 3000);
- int maxButtonBarHeight = 0;
- if (mButtonBarContainer.getHeight() >= mRoot.getHeight() / 2) {
- // If the ButtonBar is bigger than half the screen, then don't
- // animate all the way.
- maxButtonBarHeight = mRoot.getHeight() / 2;
- }
- generateButtonBarAnimator(mButtonBarContainer.getHeight(),
- maxButtonBarHeight, 0, mButtonBarFloatingHeight, 1000);
- } else {
- mButtonBarContainer.setTranslationY(0);
- mButtonBarContainer.setTranslationZ(0);
- }
- mRoot.getViewTreeObserver().removeOnGlobalLayoutListener(this);
- }
- });
+ mButtonBarContainer.setTranslationY(mButtonBarContainer.getHeight());
+ // Give everything a chance to render
+ mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
+ mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR);
+ mHideHandler.sendEmptyMessageDelayed(MSG_SHOW_BUTTON_BAR, 50);
}
@Override
@@ -229,6 +224,9 @@ public abstract class ConfirmationViewHandler implements
@Override
public boolean handleMessage (Message msg) {
switch (msg.what) {
+ case MSG_SHOW_BUTTON_BAR:
+ showButtonBar();
+ return true;
case MSG_HIDE_BUTTON_BAR:
hideButtonBar();
return true;
@@ -237,21 +235,72 @@ public abstract class ConfirmationViewHandler implements
}
@Override
- public void onScrollChanged() {
+ public void onScrollChanged () {
mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
hideButtonBar();
}
+ private void showButtonBar() {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "showButtonBar");
+ }
+
+ // Setup Button animation.
+ // pop the button bar back to full height, stop all animation
+ if (mButtonBarAnimator != null) {
+ mButtonBarAnimator.cancel();
+ }
+
+ // stop any calls to hide the button bar in the future
+ mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
+ mHiddenBefore = false;
+
+ // Evaluate the max height the button bar can go
+ final int screenHeight = mRoot.getHeight();
+ final int buttonBarHeight = mButtonBarContainer.getHeight();
+ final int buttonBarMaxHeight =
+ Math.min(buttonBarHeight, screenHeight / 2);
+
+ 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);
+ Log.d(TAG, " buttonBarMaxHeight: " + buttonBarMaxHeight);
+ }
+
+ mButtonBarContainer.setTranslationZ(mButtonBarFloatingHeight);
+ mHideHandler.sendEmptyMessageDelayed(MSG_HIDE_BUTTON_BAR, 3000);
+
+ generateButtonBarAnimator(buttonBarHeight,
+ buttonBarHeight - buttonBarMaxHeight, 0, mButtonBarFloatingHeight, 1000);
+ }
+
private void hideButtonBar() {
- // get the offset to the top of the button bar
- int offset = mScrollingContainer.getHeight() + mButtonBarContainer.getHeight() -
- mContent.getHeight() + Math.max(mScrollingContainer.getScrollY(), 0);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "hideButtonBar");
+ }
+
// The desired margin space between the button bar and the bottom of the dialog text
- int topMargin = mContext.getResources().getDimensionPixelSize(
+ final int topMargin = mContext.getResources().getDimensionPixelSize(
R.dimen.conf_diag_button_container_top_margin);
- int translationY = topMargin + (offset > 0 ?
+ final int contentHeight = mContent.getHeight() + topMargin;
+ final int screenHeight = mRoot.getHeight();
+ final int buttonBarHeight = mButtonBarContainer.getHeight();
+
+ final int offset = screenHeight + buttonBarHeight
+ - contentHeight + Math.max(mScrollingContainer.getScrollY(), 0);
+ final int translationY = (offset > 0 ?
mButtonBarContainer.getHeight() - offset : mButtonBarContainer.getHeight());
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, " contentHeight: " + contentHeight);
+ Log.d(TAG, " buttonBarHeight: " + buttonBarHeight);
+ Log.d(TAG, " mContent.getPaddingBottom(): " + mContent.getPaddingBottom());
+ Log.d(TAG, " mScrollingContainer.getScrollY(): " + mScrollingContainer.getScrollY());
+ Log.d(TAG, " translationY: " + translationY);
+ }
+
if (!mHiddenBefore || mButtonBarAnimator == null) {
// hasn't hidden the bar yet, just hide now to the right height
generateButtonBarAnimator(