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

Reply via email to