Mhutti1 has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/329227 )
Change subject: Update NavTabLayout to use BottomNavigationView ...................................................................... Update NavTabLayout to use BottomNavigationView The bottom bar on the main screen is now a BottomNavigationView. This is inline with the Material Design guidelines. As there are 4 tabs they now animate and text is only displayed for the current tab. Bug: T148791 Change-Id: I50c2b14f9920c5a38b0a20bc171ffdbf16512877 --- D app/src/androidTest/java/org/wikipedia/navtab/NavTabViewTest.java M app/src/main/java/org/wikipedia/main/MainFragment.java M app/src/main/java/org/wikipedia/navtab/NavTabLayout.java D app/src/main/java/org/wikipedia/navtab/NavTabView.java M app/src/main/res/values/attrs.xml M app/src/main/res/values/styles.xml M app/src/main/res/values/styles_dark.xml M app/src/main/res/values/styles_light.xml 8 files changed, 19 insertions(+), 157 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/27/329227/1 diff --git a/app/src/androidTest/java/org/wikipedia/navtab/NavTabViewTest.java b/app/src/androidTest/java/org/wikipedia/navtab/NavTabViewTest.java deleted file mode 100644 index 2f676ca..0000000 --- a/app/src/androidTest/java/org/wikipedia/navtab/NavTabViewTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.wikipedia.navtab; - -import android.support.annotation.NonNull; -import android.support.test.filters.SmallTest; - -import org.junit.Test; -import org.junit.experimental.theories.Theory; -import org.junit.experimental.theories.suppliers.TestedOn; -import org.wikipedia.test.view.FontScale; -import org.wikipedia.test.view.LayoutDirection; -import org.wikipedia.test.view.ViewTest; -import org.wikipedia.theme.Theme; - -import static org.hamcrest.Matchers.hasItemInArray; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.assertThat; - -@SmallTest public class NavTabViewTest extends ViewTest { - private NavTabView subject; - - @Theory public void testWidth(@TestedOn(ints = {WIDTH_DP_XL, WIDTH_DP_XS}) int widthDp, - @NonNull FontScale fontScale) { - setUp(widthDp, LayoutDirection.LOCALE, fontScale, Theme.LIGHT); - snap(subject); - } - - @Theory public void testLayoutDirection(@NonNull LayoutDirection direction) { - setUp(WIDTH_DP_XS, direction, FontScale.DEFAULT, Theme.LIGHT); - snap(subject); - } - - @Theory public void testTheme(@NonNull Theme theme) { - setUp(WIDTH_DP_XS, LayoutDirection.LOCALE, FontScale.DEFAULT, theme); - snap(subject); - } - - @Theory public void testSelect(@NonNull Theme theme) { - setUp(WIDTH_DP_XS, LayoutDirection.LOCALE, FontScale.DEFAULT, theme); - subject.setSelected(true); - snap(subject); - } - - @Test public void testText() { - setUp(WIDTH_DP_XS, LayoutDirection.LOCALE, FontScale.DEFAULT, Theme.LIGHT); - assertThat(subject.getText().toString(), is(str(NavTab.EXPLORE.text()))); - } - - @Test public void testIcon() { - setUp(WIDTH_DP_XS, LayoutDirection.LOCALE, FontScale.DEFAULT, Theme.LIGHT); - assertThat(subject.getCompoundDrawables(), hasItemInArray(notNullValue())); - } - - @Override protected void setUp(int widthDp, @NonNull LayoutDirection layoutDirection, - @NonNull FontScale fontScale, @NonNull Theme theme) { - super.setUp(widthDp, layoutDirection, fontScale, theme); - - subject = new NavTabView(ctx()) - .text(NavTab.EXPLORE.text()) - .icon(NavTab.EXPLORE.icon()); - } -} \ No newline at end of file diff --git a/app/src/main/java/org/wikipedia/main/MainFragment.java b/app/src/main/java/org/wikipedia/main/MainFragment.java index b77aac2..8623751 100644 --- a/app/src/main/java/org/wikipedia/main/MainFragment.java +++ b/app/src/main/java/org/wikipedia/main/MainFragment.java @@ -15,11 +15,12 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; +import android.support.design.widget.BottomNavigationView; import android.support.design.widget.CoordinatorLayout; -import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -42,6 +43,7 @@ import org.wikipedia.login.LoginActivity; import org.wikipedia.navtab.NavTab; import org.wikipedia.navtab.NavTabFragmentPagerAdapter; +import org.wikipedia.navtab.NavTabLayout; import org.wikipedia.nearby.NearbyFragment; import org.wikipedia.page.ExclusiveBottomSheetPresenter; import org.wikipedia.page.PageActivity; @@ -76,7 +78,7 @@ @BindView(R.id.fragment_main_container) CoordinatorLayout coordinatorLayout; @BindView(R.id.fragment_main_padding_app_bar) AppBarLayout paddingAppBar; @BindView(R.id.fragment_main_view_pager) ViewPager viewPager; - @BindView(R.id.fragment_main_nav_tab_layout) TabLayout tabLayout; + @BindView(R.id.fragment_main_nav_tab_layout) NavTabLayout tabLayout; private Unbinder unbinder; private ExclusiveBottomSheetPresenter bottomSheetPresenter = new ExclusiveBottomSheetPresenter(); private MediaDownloadReceiver mediaDownloadReceiver; @@ -107,7 +109,14 @@ unbinder = ButterKnife.bind(this, view); viewPager.setAdapter(new NavTabFragmentPagerAdapter(getChildFragmentManager())); - tabLayout.setupWithViewPager(viewPager); + tabLayout.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + viewPager.setCurrentItem(item.getOrder()); + return true; + } + }); + if (savedInstanceState == null) { handleIntent(getActivity().getIntent()); diff --git a/app/src/main/java/org/wikipedia/navtab/NavTabLayout.java b/app/src/main/java/org/wikipedia/navtab/NavTabLayout.java index dcfe6b9..04f6f8e 100644 --- a/app/src/main/java/org/wikipedia/navtab/NavTabLayout.java +++ b/app/src/main/java/org/wikipedia/navtab/NavTabLayout.java @@ -1,39 +1,30 @@ package org.wikipedia.navtab; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.design.widget.TabLayout; -import android.support.v4.view.ViewPager; +import android.support.design.widget.BottomNavigationView; import android.util.AttributeSet; -import android.view.View; -public class NavTabLayout extends TabLayout { +public class NavTabLayout extends BottomNavigationView { + public NavTabLayout(Context context) { super(context); + setTabViews(); } public NavTabLayout(Context context, AttributeSet attrs) { super(context, attrs); + setTabViews(); } public NavTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - } - - @Override public void setupWithViewPager(@Nullable ViewPager viewPager, boolean autoRefresh) { - super.setupWithViewPager(viewPager, autoRefresh); setTabViews(); } private void setTabViews() { - for (int i = 0; i < getTabCount(); i++) { - TabLayout.Tab tab = getTabAt(i); + for (int i = 0; i < NavTab.size(); i++) { NavTab navTab = NavTab.of(i); - View view = new NavTabView(getContext()) - .icon(navTab.icon()) - .text(navTab.text()); - //noinspection ConstantConditions - tab.setCustomView(view); + getMenu().add(1, i, i, navTab.text()).setIcon(navTab.icon()); } } } \ No newline at end of file diff --git a/app/src/main/java/org/wikipedia/navtab/NavTabView.java b/app/src/main/java/org/wikipedia/navtab/NavTabView.java deleted file mode 100644 index 98ac087..0000000 --- a/app/src/main/java/org/wikipedia/navtab/NavTabView.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.wikipedia.navtab; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.support.annotation.ColorInt; -import android.support.annotation.ColorRes; -import android.support.annotation.DrawableRes; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v4.content.ContextCompat; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.util.TypedValue; -import android.widget.TextView; - -import org.wikipedia.R; - -public class NavTabView extends TextView { - @Nullable private Drawable icon; - - public NavTabView(Context context) { - super(context, null, R.attr.navTabViewStyle); - } - - public NavTabView icon(@DrawableRes int id) { - icon = drawable(id); - setCompoundDrawablesRelativeWithIntrinsicBounds(null, icon, null, null); - return this; - } - - public NavTabView text(@StringRes int id) { - setText(id); - return this; - } - - @Override public void setCompoundDrawablesRelativeWithIntrinsicBounds(@Nullable Drawable start, - @Nullable Drawable top, - @Nullable Drawable end, - @Nullable Drawable bottom) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - super.setCompoundDrawablesRelativeWithIntrinsicBounds(start, top, end, bottom); - } else { - setCompoundDrawablesWithIntrinsicBounds(start, top, end, bottom); - } - } - - // It doesn't appear practical to tint an XML Drawable that itself is referenced in another XML - // Drawable. - @Override protected void drawableStateChanged() { - super.drawableStateChanged(); - if (icon == null) { - return; - } - - int color = color(isSelected() ? R.color.foundation_blue : R.color.foundation_gray); - DrawableCompat.setTint(icon, color); - setTextSize(TypedValue.COMPLEX_UNIT_PX, - getResources().getDimension(isSelected() - ? R.dimen.nav_tab_active_text_size : R.dimen.nav_tab_inactive_text_size)); - } - - private Drawable drawable(@DrawableRes int id) { - return ContextCompat.getDrawable(getContext(), id); - } - - @ColorInt private int color(@ColorRes int id) { - return ContextCompat.getColor(getContext(), id); - } -} \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index c461d33..cf778b0 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -64,10 +64,6 @@ <attr name="link_preview_button_background" format="reference" /> </declare-styleable> - <declare-styleable name="NavTabView"> - <attr name="navTabViewStyle" format="reference" /> - </declare-styleable> - <declare-styleable name="DescriptionEditTutorialPageView"> <attr name="image" format="reference" /> <attr name="primaryText" format="string" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 70bc807..97edb4a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,7 +8,6 @@ <item name="longPreferenceStyle">@style/LongPreference</item> <item name="intPreferenceStyle">@style/IntPreference</item> <item name="android:windowBackground">@drawable/splash_bg</item> - <item name="navTabViewStyle">@style/NavTabView</item> </style> <style name="PageTheme" parent="AppTheme"> diff --git a/app/src/main/res/values/styles_dark.xml b/app/src/main/res/values/styles_dark.xml index f083eeb..37f084a 100644 --- a/app/src/main/res/values/styles_dark.xml +++ b/app/src/main/res/values/styles_dark.xml @@ -61,7 +61,6 @@ <!-- TODO: move to AppTheme when style hierarchy is corrected. --> <item name="android:listViewStyle">@style/ListView</item> - <item name="navTabViewStyle">@style/NavTabView</item> <item name="feed_window_background_color">@color/feed_window_background_dark</item> <item name="feed_text_primary_color">@color/feed_text_primary_dark</item> diff --git a/app/src/main/res/values/styles_light.xml b/app/src/main/res/values/styles_light.xml index da0154c..b53e88a 100644 --- a/app/src/main/res/values/styles_light.xml +++ b/app/src/main/res/values/styles_light.xml @@ -62,7 +62,6 @@ <!-- TODO: move to AppTheme when style hierarchy is corrected. --> <item name="android:listViewStyle">@style/ListView</item> - <item name="navTabViewStyle">@style/NavTabView</item> <item name="feed_window_background_color">@color/feed_window_background_light</item> <item name="feed_text_primary_color">@color/feed_text_primary_light</item> -- To view, visit https://gerrit.wikimedia.org/r/329227 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I50c2b14f9920c5a38b0a20bc171ffdbf16512877 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Mhutti1 <mhut...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits