diff options
| -rw-r--r-- | core/java/com/android/internal/app/ActionBarImpl.java | 7 | ||||
| -rw-r--r-- | core/java/com/android/internal/widget/ActionBarContainer.java | 21 |
2 files changed, 26 insertions, 2 deletions
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index ab53adb8ae43..8f1354b566f1 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -19,6 +19,7 @@ package com.android.internal.app; import com.android.internal.view.menu.MenuBuilder; import com.android.internal.view.menu.MenuPopupHelper; import com.android.internal.view.menu.SubMenuBuilder; +import com.android.internal.widget.ActionBarContainer; import com.android.internal.widget.ActionBarContextView; import com.android.internal.widget.ActionBarView; @@ -65,7 +66,7 @@ public class ActionBarImpl extends ActionBar { private Activity mActivity; private Dialog mDialog; - private FrameLayout mContainerView; + private ActionBarContainer mContainerView; private ActionBarView mActionView; private ActionBarContextView mUpperContextView; private LinearLayout mLowerContextView; @@ -151,6 +152,7 @@ public class ActionBarImpl extends ActionBar { mContentView.setTranslationY(0); } mContainerView.setVisibility(View.GONE); + mContainerView.setTransitioning(false); mCurrentAnim = null; } @@ -205,7 +207,7 @@ public class ActionBarImpl extends ActionBar { com.android.internal.R.id.action_context_bar); mLowerContextView = (LinearLayout) decor.findViewById( com.android.internal.R.id.lower_action_context_bar); - mContainerView = (FrameLayout) decor.findViewById( + mContainerView = (ActionBarContainer) decor.findViewById( com.android.internal.R.id.action_bar_container); if (mActionView == null || mUpperContextView == null || mContainerView == null) { @@ -533,6 +535,7 @@ public class ActionBarImpl extends ActionBar { if (mShowHideAnimationEnabled) { mContainerView.setAlpha(1); + mContainerView.setTransitioning(true); AnimatorSet anim = new AnimatorSet(); AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mContainerView, "alpha", 0)); if (mContentView != null) { diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java index e63a68f069d8..c9b0ec9e838d 100644 --- a/core/java/com/android/internal/widget/ActionBarContainer.java +++ b/core/java/com/android/internal/widget/ActionBarContainer.java @@ -28,6 +28,8 @@ import android.widget.FrameLayout; * @hide */ public class ActionBarContainer extends FrameLayout { + private boolean mIsTransitioning; + public ActionBarContainer(Context context) { this(context, null); } @@ -41,6 +43,25 @@ public class ActionBarContainer extends FrameLayout { a.recycle(); } + /** + * Set the action bar into a "transitioning" state. While transitioning + * the bar will block focus and touch from all of its descendants. This + * prevents the user from interacting with the bar while it is animating + * in or out. + * + * @param isTransitioning true if the bar is currently transitioning, false otherwise. + */ + public void setTransitioning(boolean isTransitioning) { + mIsTransitioning = isTransitioning; + setDescendantFocusability(isTransitioning ? FOCUS_BLOCK_DESCENDANTS + : FOCUS_AFTER_DESCENDANTS); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + return mIsTransitioning || super.onInterceptTouchEvent(ev); + } + @Override public boolean onTouchEvent(MotionEvent ev) { super.onTouchEvent(ev); |