jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/382723 )

Change subject: Add on-scroll color transition for page toolbar icons
......................................................................


Add on-scroll color transition for page toolbar icons

In light mode, updates the page toolbar icons to white when a lead image
is present, then transitions them to black over the course of the on-
scroll animation.

To facilitate this, the page toolbar search and tab buttons are moved out
of the options menu and incorporated directly into the toolbar, so that we
have access to their views and drawables consistently and as soon as the
toolbar is inflated, rather than depending on the vagaries of the options
menu state.

Icon color updating is incorporated into the existing flow for condition-
ally adjusting the toolbar's opacity.

Bug: T170304
Change-Id: Ib4e16380f657830ebc5f5ac575eaff46d986f060
---
M app/src/main/java/org/wikipedia/page/PageActivity.java
M app/src/main/java/org/wikipedia/page/PageFragment.java
M app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java
M app/src/main/res/layout/activity_page.xml
M app/src/main/res/menu/menu_page_actions.xml
5 files changed, 99 insertions(+), 32 deletions(-)

Approvals:
  Dbrant: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/app/src/main/java/org/wikipedia/page/PageActivity.java 
b/app/src/main/java/org/wikipedia/page/PageActivity.java
index 24f2d46..5cb82f5 100644
--- a/app/src/main/java/org/wikipedia/page/PageActivity.java
+++ b/app/src/main/java/org/wikipedia/page/PageActivity.java
@@ -19,6 +19,7 @@
 import android.support.design.widget.BottomSheetDialog;
 import android.support.design.widget.BottomSheetDialogFragment;
 import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.preference.PreferenceManager;
 import android.support.v7.widget.Toolbar;
@@ -28,6 +29,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.widget.ImageView;
 import android.widget.ProgressBar;
 import android.widget.Toast;
 
@@ -78,6 +80,7 @@
 
 import butterknife.BindView;
 import butterknife.ButterKnife;
+import butterknife.OnClick;
 import butterknife.Unbinder;
 
 import static org.wikipedia.settings.Prefs.isLinkPreviewEnabled;
@@ -101,6 +104,7 @@
     @BindView(R.id.page_progress_bar) ProgressBar progressBar;
     @BindView(R.id.page_toolbar_container) View toolbarContainerView;
     @BindView(R.id.page_toolbar) Toolbar toolbar;
+    @BindView(R.id.page_toolbar_button_show_tabs) ImageView tabsButton;
     @Nullable private Unbinder unbinder;
 
     private PageFragment pageFragment;
@@ -158,7 +162,11 @@
         clearActionBarTitle();
         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
-        toolbarHideHandler = new PageToolbarHideHandler(toolbarContainerView);
+
+        
tabsButton.setImageDrawable(ContextCompat.getDrawable(pageFragment.getContext(),
+                ResourceUtil.getTabListIcon(pageFragment.getTabCount())));
+
+        toolbarHideHandler = new PageToolbarHideHandler(pageFragment, 
toolbarContainerView, toolbar, tabsButton);
 
         boolean languageChanged = false;
         if (savedInstanceState != null) {
@@ -210,9 +218,6 @@
         MenuItem contentIssues = menu.findItem(R.id.menu_page_content_issues);
         MenuItem similarTitles = menu.findItem(R.id.menu_page_similar_titles);
         MenuItem themeChooserItem = 
menu.findItem(R.id.menu_page_font_and_theme);
-        MenuItem tabsItem = menu.findItem(R.id.menu_page_show_tabs);
-
-        
tabsItem.setIcon(ResourceUtil.getTabListIcon(pageFragment.getTabCount()));
 
         if (pageFragment.isLoading() || pageFragment.getErrorState()) {
             otherLangItem.setEnabled(false);
@@ -233,6 +238,16 @@
             updateMenuPageInfo(menu);
         }
         return true;
+    }
+
+    @OnClick(R.id.page_toolbar_button_search)
+    public void onSearchButtonClicked() {
+        openSearchFragment(SearchInvokeSource.TOOLBAR, null);
+    }
+
+    @OnClick(R.id.page_toolbar_button_show_tabs)
+    public void onShowTabsButtonClicked() {
+        pageFragment.enterTabMode(false);
     }
 
     private void finishActionMode() {
@@ -620,11 +635,6 @@
     }
 
     @Override
-    public void onPageSearchRequested() {
-        openSearchFragment(SearchInvokeSource.TOOLBAR, null);
-    }
-
-    @Override
     public void onPageLoadError(@NonNull PageTitle title) {
         getSupportActionBar().setTitle(title.getDisplayText());
     }
@@ -808,6 +818,8 @@
     public void onActionModeFinished(android.view.ActionMode mode) {
         super.onActionModeFinished(mode);
         currentActionMode = null;
+        toolbarHideHandler.onScrolled(pageFragment.getWebView().getScrollY(),
+                pageFragment.getWebView().getScrollY());
     }
 
     protected void clearActionBarTitle() {
diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java 
b/app/src/main/java/org/wikipedia/page/PageFragment.java
index 9f49922..0a659c4 100755
--- a/app/src/main/java/org/wikipedia/page/PageFragment.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragment.java
@@ -112,7 +112,6 @@
         void onPageShowLinkPreview(@NonNull PageTitle title, int source);
         void onPageLoadMainPageInForegroundTab();
         void onPageUpdateProgressBar(boolean visible, boolean indeterminate, 
int value);
-        void onPageSearchRequested();
         void onPageShowThemeChooser();
         void onPageStartSupportActionMode(@NonNull ActionMode.Callback 
callback);
         void onPageShowToolbar();
@@ -781,14 +780,6 @@
             case R.id.menu_page_font_and_theme:
                 showThemeChooser();
                 return true;
-            case R.id.menu_page_show_tabs:
-                tabsProvider.enterTabMode(false);
-                return true;
-            case R.id.menu_page_search:
-                if (callback() != null) {
-                    callback().onPageSearchRequested();
-                }
-                return true;
             default:
                 return super.onOptionsItemSelected(item);
         }
@@ -973,6 +964,10 @@
         return darkModeSwitch;
     }
 
+    void enterTabMode(boolean launchedExternally) {
+        tabsProvider.enterTabMode(launchedExternally);
+    }
+
     private void setupToC(@NonNull PageViewModel model, boolean isFirstPage) {
         tocHandler.setupToC(model.getPage(), model.getTitle().getWikiSite(), 
isFirstPage);
         tocHandler.setEnabled(true);
diff --git a/app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java 
b/app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java
index facc04b..3a827b8 100644
--- a/app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java
+++ b/app/src/main/java/org/wikipedia/page/PageToolbarHideHandler.java
@@ -1,22 +1,42 @@
 package org.wikipedia.page;
 
+import android.animation.ArgbEvaluator;
+import android.graphics.Color;
+import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
+import android.support.annotation.ColorInt;
 import android.support.annotation.NonNull;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.widget.Toolbar;
 import android.view.Gravity;
 import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
 
+import org.wikipedia.R;
 import org.wikipedia.util.DimenUtil;
+import org.wikipedia.util.ResourceUtil;
+
+import static org.wikipedia.util.ResourceUtil.getThemedColor;
 
 public class PageToolbarHideHandler extends ViewHideHandler {
     private static final int FULL_OPACITY = 255;
 
+    private ArgbEvaluator argbEvaluator = new ArgbEvaluator();
     private boolean fadeEnabled;
     private boolean forceNoFade;
-    @NonNull private final Drawable toolbarBackground;
+    @NonNull private PageFragment pageFragment;
+    @NonNull private Toolbar toolbar;
+    @NonNull private Drawable toolbarBackground;
+    @NonNull private ImageView tabsButton;
 
-    public PageToolbarHideHandler(@NonNull View hideableView) {
+    public PageToolbarHideHandler(@NonNull PageFragment pageFragment, @NonNull 
View hideableView,
+                                  @NonNull Toolbar toolbar, @NonNull ImageView 
tabsButton) {
         super(hideableView, Gravity.TOP);
-        toolbarBackground = hideableView.getBackground().mutate();
+        this.pageFragment = pageFragment;
+        this.toolbar = toolbar;
+        this.toolbarBackground = hideableView.getBackground().mutate();
+        this.tabsButton = tabsButton;
     }
 
     /**
@@ -41,8 +61,12 @@
 
     @Override
     protected void onScrolled(int oldScrollY, int scrollY) {
+        
tabsButton.setImageDrawable(ContextCompat.getDrawable(pageFragment.getContext(),
+                ResourceUtil.getTabListIcon(pageFragment.getTabCount())));
+
         int opacity = calculateScrollOpacity(scrollY);
         toolbarBackground.setAlpha(opacity);
+        updateChildIconTint(toolbar, opacity);
     }
 
     /** @return Alpha value between 0 and 0xff. */
@@ -56,4 +80,29 @@
         opacity = Math.min(FULL_OPACITY, opacity);
         return opacity;
     }
+
+    private void updateChildIconTint(@NonNull ViewGroup viewGroup, float 
opacity) {
+        int iconColor = calculateIconTintForOpacity(opacity);
+        for (int i = 0; i < viewGroup.getChildCount(); i++) {
+            View childView = viewGroup.getChildAt(i);
+            if (childView instanceof ImageView) {
+                Drawable icon = ((ImageView) childView).getDrawable();
+                if (icon != null) {
+                    icon.setColorFilter(iconColor, PorterDuff.Mode.SRC_IN);
+                }
+            } else if (childView instanceof ViewGroup) {
+                updateChildIconTint((ViewGroup) childView, opacity);
+            }
+        }
+        if (toolbar.getOverflowIcon() != null) {
+            toolbar.getOverflowIcon().setColorFilter(iconColor, 
PorterDuff.Mode.SRC_IN);
+        }
+    }
+
+    /** @return A @ColorInt value between R.attr.page_toolbar_icon_color) and 
Color.WHITE. */
+    @ColorInt
+    private int calculateIconTintForOpacity(float opacity) {
+        return (Integer) argbEvaluator.evaluate(opacity / FULL_OPACITY, 
Color.WHITE,
+                getThemedColor(toolbar.getContext(), 
R.attr.page_toolbar_icon_color));
+    }
 }
diff --git a/app/src/main/res/layout/activity_page.xml 
b/app/src/main/res/layout/activity_page.xml
index 72be2bb..ae4083d 100644
--- a/app/src/main/res/layout/activity_page.xml
+++ b/app/src/main/res/layout/activity_page.xml
@@ -52,6 +52,28 @@
                 android:theme="@style/PageToolbarTheme"
                 app:titleTextColor="?attr/page_toolbar_icon_color"
                 app:navigationIcon="@drawable/ic_close_themed_24dp">
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_vertical|end">
+                    <android.support.v7.widget.AppCompatImageView
+                        android:id="@+id/page_toolbar_button_search"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:paddingLeft="12dp"
+                        android:paddingRight="12dp"
+                        app:srcCompat="@drawable/ic_search_themed_24dp"
+                        app:tint="?attr/page_toolbar_icon_color"
+                        app:tintMode="src_in"/>
+                    <android.support.v7.widget.AppCompatImageView
+                        android:id="@+id/page_toolbar_button_show_tabs"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:paddingLeft="12dp"
+                        android:paddingRight="12dp"
+                        app:tint="?attr/page_toolbar_icon_color"
+                        app:tintMode="src_in"/>
+                </LinearLayout>
             </android.support.v7.widget.Toolbar>
             <ProgressBar
                 android:id="@+id/page_progress_bar"
diff --git a/app/src/main/res/menu/menu_page_actions.xml 
b/app/src/main/res/menu/menu_page_actions.xml
index eb14b0c..b132039 100644
--- a/app/src/main/res/menu/menu_page_actions.xml
+++ b/app/src/main/res/menu/menu_page_actions.xml
@@ -9,17 +9,6 @@
     We truly want the "search" and "tabs" buttons to always be shown in the 
toolbar, even on small
     screens, instead of overflowing into the native overflow menu.
     -->
-    <item android:id="@+id/menu_page_search"
-          android:title="@string/search_hint"
-          android:icon="@drawable/ic_search_white_24dp"
-          app:iconTint="?attr/page_toolbar_icon_color"
-          app:iconTintMode="src_in"
-          app:showAsAction="always" />
-    <item android:id="@+id/menu_page_show_tabs"
-          android:title="@string/menu_page_show_tabs"
-          app:iconTint="?attr/page_toolbar_icon_color"
-          app:iconTintMode="src_in"
-          app:showAsAction="always" />
     <item android:id="@+id/menu_page_other_languages"
           android:title="@string/menu_page_other_languages"
           app:showAsAction="never"

-- 
To view, visit https://gerrit.wikimedia.org/r/382723
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib4e16380f657830ebc5f5ac575eaff46d986f060
Gerrit-PatchSet: 6
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Cooltey <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Sharvaniharan <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to