diff options
author | Adam Powell <adamp@google.com> | 2011-05-03 14:49:13 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2011-05-03 14:50:08 -0700 |
commit | 0d8ec1d739e15c232c58a5a5de605685830c287e (patch) | |
tree | 34a57ec212d34cca700d1f061c8583118408b549 | |
parent | e42b189f369b6b0cb35095bc5386ba82b5ce39a5 (diff) | |
download | frameworks_base-0d8ec1d739e15c232c58a5a5de605685830c287e.zip frameworks_base-0d8ec1d739e15c232c58a5a5de605685830c287e.tar.gz frameworks_base-0d8ec1d739e15c232c58a5a5de605685830c287e.tar.bz2 |
Fix bug 4345702 - update action bar tab views when the Tab object is
updated
Also fix a bug with visibility of split action bar views.
Change-Id: Iadd63d5e9b6cb9debab0f7a777e424e4c4807a13
3 files changed, 64 insertions, 23 deletions
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index 5c3563f..1e576ce 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -396,7 +396,10 @@ public class ActionBarImpl extends ActionBar { int selectedTabPosition = mSelectedTab != null ? mSelectedTab.getPosition() : mSavedTabPosition; mActionView.removeTabAt(position); - mTabs.remove(position); + TabImpl removedTab = mTabs.remove(position); + if (removedTab != null) { + removedTab.setPosition(-1); + } final int newTabCount = mTabs.size(); for (int i = position; i < newTabCount; i++) { @@ -670,7 +673,7 @@ public class ActionBarImpl extends ActionBar { private Object mTag; private Drawable mIcon; private CharSequence mText; - private int mPosition; + private int mPosition = -1; private View mCustomView; @Override @@ -702,6 +705,7 @@ public class ActionBarImpl extends ActionBar { @Override public Tab setCustomView(View view) { mCustomView = view; + if (mPosition >= 0) mActionView.updateTab(mPosition); return this; } @@ -732,6 +736,7 @@ public class ActionBarImpl extends ActionBar { @Override public Tab setIcon(Drawable icon) { mIcon = icon; + if (mPosition >= 0) mActionView.updateTab(mPosition); return this; } @@ -743,6 +748,7 @@ public class ActionBarImpl extends ActionBar { @Override public Tab setText(CharSequence text) { mText = text; + if (mPosition >= 0) mActionView.updateTab(mPosition); return this; } diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index d4813ba..f321e8d 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -587,6 +587,10 @@ public class ActionBarView extends AbsActionBarView { } } + public void updateTab(int position) { + ((TabView) mTabLayout.getChildAt(position)).update(); + } + public void removeTabAt(int position) { if (mTabLayout != null) { mTabLayout.removeViewAt(position); @@ -929,46 +933,76 @@ public class ActionBarView extends AbsActionBarView { private static class TabView extends LinearLayout { private ActionBar.Tab mTab; + private TextView mTextView; + private ImageView mIconView; + private View mCustomView; public TabView(Context context, ActionBar.Tab tab) { super(context, null, com.android.internal.R.attr.actionBarTabStyle); mTab = tab; + update(); + + setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.MATCH_PARENT, 1)); + } + + public void update() { + final ActionBar.Tab tab = mTab; final View custom = tab.getCustomView(); if (custom != null) { addView(custom); + mCustomView = custom; + if (mTextView != null) mTextView.setVisibility(GONE); + if (mIconView != null) { + mIconView.setVisibility(GONE); + mIconView.setImageDrawable(null); + } } else { - // TODO Style tabs based on the theme + if (mCustomView != null) { + removeView(mCustomView); + mCustomView = null; + } final Drawable icon = tab.getIcon(); final CharSequence text = tab.getText(); if (icon != null) { - ImageView iconView = new ImageView(context); - iconView.setImageDrawable(icon); - LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, - LayoutParams.WRAP_CONTENT); - lp.gravity = Gravity.CENTER_VERTICAL; - iconView.setLayoutParams(lp); - addView(iconView); + if (mIconView == null) { + ImageView iconView = new ImageView(getContext()); + LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.CENTER_VERTICAL; + iconView.setLayoutParams(lp); + addView(iconView, 0); + mIconView = iconView; + } + mIconView.setImageDrawable(icon); + mIconView.setVisibility(VISIBLE); + } else if (mIconView != null) { + mIconView.setVisibility(GONE); + mIconView.setImageDrawable(null); } if (text != null) { - TextView textView = new TextView(context, null, - com.android.internal.R.attr.actionBarTabTextStyle); - textView.setText(text); - textView.setSingleLine(); - textView.setEllipsize(TruncateAt.END); - LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, - LayoutParams.WRAP_CONTENT); - lp.gravity = Gravity.CENTER_VERTICAL; - textView.setLayoutParams(lp); - addView(textView); + if (mTextView == null) { + TextView textView = new TextView(getContext(), null, + com.android.internal.R.attr.actionBarTabTextStyle); + textView.setSingleLine(); + textView.setEllipsize(TruncateAt.END); + LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.CENTER_VERTICAL; + textView.setLayoutParams(lp); + addView(textView); + mTextView = textView; + } + mTextView.setText(text); + mTextView.setVisibility(VISIBLE); + } else { + mTextView.setVisibility(GONE); } } - - setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, - LayoutParams.MATCH_PARENT, 1)); } public ActionBar.Tab getTab() { diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index d22d760..6a800f0 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -2592,6 +2592,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { final ActionBarContainer splitView = (ActionBarContainer) findViewById( com.android.internal.R.id.split_action_bar); if (splitView != null) { + splitView.setVisibility(View.VISIBLE); mActionBar.setSplitActionBar(splitActionBar); mActionBar.setSplitView(splitView); |