From c7752a312adfe108c3b0e9143122152f2470be31 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Fri, 24 Aug 2012 17:56:41 -0700 Subject: [PATCH] Show content description popups when long-pressing action bar tabs If an action bar tab shows as an icon only and has a content description, show a long-press popup with the content description. Bug 6009390 Change-Id: I7f2f68eeef03ede99ff2113e21e1dc14a4295827 --- .../widget/ScrollingTabContainerView.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/core/java/com/android/internal/widget/ScrollingTabContainerView.java b/core/java/com/android/internal/widget/ScrollingTabContainerView.java index 08d9f4937b371..b6205689bcece 100644 --- a/core/java/com/android/internal/widget/ScrollingTabContainerView.java +++ b/core/java/com/android/internal/widget/ScrollingTabContainerView.java @@ -23,7 +23,9 @@ import android.animation.TimeInterpolator; import android.app.ActionBar; import android.content.Context; import android.content.res.Configuration; +import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.text.TextUtils; import android.text.TextUtils.TruncateAt; import android.view.Gravity; import android.view.View; @@ -38,6 +40,7 @@ import android.widget.LinearLayout; import android.widget.ListView; import android.widget.Spinner; import android.widget.TextView; +import android.widget.Toast; /** * This widget implements the dynamic action bar tab behavior that can change @@ -352,7 +355,7 @@ public class ScrollingTabContainerView extends HorizontalScrollView tabView.getTab().select(); } - private class TabView extends LinearLayout { + private class TabView extends LinearLayout implements OnLongClickListener { private ActionBar.Tab mTab; private TextView mTextView; private ImageView mIconView; @@ -426,7 +429,8 @@ public class ScrollingTabContainerView extends HorizontalScrollView mIconView.setImageDrawable(null); } - if (text != null) { + final boolean hasText = !TextUtils.isEmpty(text); + if (hasText) { if (mTextView == null) { TextView textView = new TextView(getContext(), null, com.android.internal.R.attr.actionBarTabTextStyle); @@ -448,9 +452,35 @@ public class ScrollingTabContainerView extends HorizontalScrollView if (mIconView != null) { mIconView.setContentDescription(tab.getContentDescription()); } + + if (!hasText && !TextUtils.isEmpty(tab.getContentDescription())) { + setOnLongClickListener(this); + } else { + setOnLongClickListener(null); + setLongClickable(false); + } } } + public boolean onLongClick(View v) { + final int[] screenPos = new int[2]; + getLocationOnScreen(screenPos); + + final Context context = getContext(); + final int width = getWidth(); + final int height = getHeight(); + final int screenWidth = context.getResources().getDisplayMetrics().widthPixels; + + Toast cheatSheet = Toast.makeText(context, mTab.getContentDescription(), + Toast.LENGTH_SHORT); + // Show under the tab + cheatSheet.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, + (screenPos[0] + width / 2) - screenWidth / 2, height); + + cheatSheet.show(); + return true; + } + public ActionBar.Tab getTab() { return mTab; }