diff options
author | Adam Powell <adamp@google.com> | 2012-08-24 17:56:41 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2012-08-24 18:00:40 -0700 |
commit | c7752a312adfe108c3b0e9143122152f2470be31 (patch) | |
tree | c7e94c2c698fb22927542b489f923a5d0eb85d5a /core/java/com/android/internal/widget/ScrollingTabContainerView.java | |
parent | 3a5c376e29a4acc5030c7749c43b8aac55736778 (diff) | |
download | frameworks_base-c7752a312adfe108c3b0e9143122152f2470be31.zip frameworks_base-c7752a312adfe108c3b0e9143122152f2470be31.tar.gz frameworks_base-c7752a312adfe108c3b0e9143122152f2470be31.tar.bz2 |
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
Diffstat (limited to 'core/java/com/android/internal/widget/ScrollingTabContainerView.java')
-rw-r--r-- | core/java/com/android/internal/widget/ScrollingTabContainerView.java | 34 |
1 files 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 08d9f49..b620568 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; } |