summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/app/ActionBarImpl.java7
-rw-r--r--core/java/com/android/internal/widget/ActionBarContainer.java21
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);