Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d42f17f authored by Adam Powell's avatar Adam Powell Committed by Android (Google) Code Review
Browse files

Merge "Fix bug 4345702 - update action bar tab views when the Tab object is updated"

parents 629b5651 0d8ec1d7
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -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;
        }

+55 −21
Original line number Diff line number Diff line
@@ -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,34 +933,61 @@ 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);
                    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);
                        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,
                    if (mTextView == null) {
                        TextView textView = new TextView(getContext(), null,
                                com.android.internal.R.attr.actionBarTabTextStyle);
                    textView.setText(text);
                        textView.setSingleLine();
                        textView.setEllipsize(TruncateAt.END);
                        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
@@ -964,11 +995,14 @@ public class ActionBarView extends AbsActionBarView {
                        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() {
+1 −0
Original line number Diff line number Diff line
@@ -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);