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

Change subject: Make Offline Library onboarding background transformable
......................................................................


Make Offline Library onboarding background transformable

Bug: T172185
Change-Id: Ib9d5c9e34a93a0301653a69f01f1557dc56fcabf
---
M app/src/main/java/org/wikipedia/offline/OfflineTutorialFragment.java
M app/src/main/java/org/wikipedia/offline/OfflineTutorialPage.java
M app/src/main/java/org/wikipedia/onboarding/OnboardingFragment.java
A 
app/src/main/java/org/wikipedia/views/BackgroundGradientOnPageChangeListener.java
A app/src/main/res/drawable/onboarding_gradient_background_offline.xml
D app/src/main/res/drawable/onboarding_gradient_background_offline_one.xml
D app/src/main/res/drawable/onboarding_gradient_background_offline_three.xml
D app/src/main/res/drawable/onboarding_gradient_background_offline_two.xml
M app/src/main/res/layout/fragment_onboarding_pager.xml
M app/src/main/res/layout/inflate_offline_tutorial_page_one.xml
M app/src/main/res/layout/inflate_offline_tutorial_page_three.xml
M app/src/main/res/layout/inflate_offline_tutorial_page_two.xml
12 files changed, 168 insertions(+), 41 deletions(-)

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



diff --git 
a/app/src/main/java/org/wikipedia/offline/OfflineTutorialFragment.java 
b/app/src/main/java/org/wikipedia/offline/OfflineTutorialFragment.java
index 6d689d1..ea0c856 100644
--- a/app/src/main/java/org/wikipedia/offline/OfflineTutorialFragment.java
+++ b/app/src/main/java/org/wikipedia/offline/OfflineTutorialFragment.java
@@ -1,12 +1,30 @@
 package org.wikipedia.offline;
 
+import android.os.Bundle;
 import android.support.annotation.NonNull;
+import android.support.v4.content.ContextCompat;
 import android.support.v4.view.PagerAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
 
 import org.wikipedia.R;
 import org.wikipedia.onboarding.OnboardingFragment;
+import org.wikipedia.views.BackgroundGradientOnPageChangeListener;
+
+import java.util.ArrayList;
+import java.util.List;
 
 public class OfflineTutorialFragment extends OnboardingFragment {
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {
+        View view = super.onCreateView(inflater, container, 
savedInstanceState);
+        BackgroundGradientOnPageChangeListener.MutatableGradientColors colors 
= getBackgroundGradientColors();
+        getViewPager().addOnPageChangeListener(new 
BackgroundGradientOnPageChangeListener(getAdapter(), getBackground(), colors));
+        return view;
+    }
+
     @NonNull
     public static OfflineTutorialFragment newInstance() {
         return new OfflineTutorialFragment();
@@ -21,4 +39,17 @@
     protected int getDoneButtonText() {
         return R.string.offline_library_onboarding_button_done;
     }
+
+    private BackgroundGradientOnPageChangeListener.MutatableGradientColors 
getBackgroundGradientColors() {
+        List<Integer> startColors = new ArrayList<>();
+        List<Integer> centerColors = new ArrayList<>();
+        List<Integer> endColors = new ArrayList<>();
+        for (int i = 0; i < getAdapter().getCount(); i++) {
+            OfflineTutorialPage page = OfflineTutorialPage.of(i);
+            startColors.add(ContextCompat.getColor(getContext(), 
page.getGradientStart()));
+            centerColors.add(ContextCompat.getColor(getContext(), 
page.getGradientCenter()));
+            endColors.add(ContextCompat.getColor(getContext(), 
page.getGradentEnd()));
+        }
+        return new 
BackgroundGradientOnPageChangeListener.MutatableGradientColors(startColors, 
centerColors, endColors);
+    }
 }
diff --git a/app/src/main/java/org/wikipedia/offline/OfflineTutorialPage.java 
b/app/src/main/java/org/wikipedia/offline/OfflineTutorialPage.java
index 1745982..bb64d77 100644
--- a/app/src/main/java/org/wikipedia/offline/OfflineTutorialPage.java
+++ b/app/src/main/java/org/wikipedia/offline/OfflineTutorialPage.java
@@ -1,5 +1,6 @@
 package org.wikipedia.offline;
 
+import android.support.annotation.ColorRes;
 import android.support.annotation.LayoutRes;
 import android.support.annotation.NonNull;
 
@@ -8,18 +9,14 @@
 import org.wikipedia.model.EnumCodeMap;
 
 enum OfflineTutorialPage implements EnumCode {
-    PAGE_BUILD_LIBRARY(R.layout.inflate_offline_tutorial_page_one),
-    PAGE_UNINTERRUPTED_READING(R.layout.inflate_offline_tutorial_page_two),
-    PAGE_STORE_KNOWLEDGE(R.layout.inflate_offline_tutorial_page_three);
+    PAGE_BUILD_LIBRARY(R.layout.inflate_offline_tutorial_page_one, 
R.color.accent30, R.color.green30, R.color.green50),
+    PAGE_UNINTERRUPTED_READING(R.layout.inflate_offline_tutorial_page_two, 
R.color.green30, R.color.accent50, R.color.accent30),
+    PAGE_STORE_KNOWLEDGE(R.layout.inflate_offline_tutorial_page_three, 
R.color.green30, R.color.green50, R.color.accent50);
 
     @LayoutRes private final int layout;
-
-    private static EnumCodeMap<OfflineTutorialPage> MAP
-            = new EnumCodeMap<>(OfflineTutorialPage.class);
-
-    int getLayout() {
-        return layout;
-    }
+    @ColorRes private int gradientStart;
+    @ColorRes private int gradientCenter;
+    @ColorRes private int gradentEnd;
 
     @NonNull
     public static OfflineTutorialPage of(int code) {
@@ -35,7 +32,29 @@
         return ordinal();
     }
 
-    OfflineTutorialPage(@LayoutRes int layout) {
+    OfflineTutorialPage(@LayoutRes int layout, @ColorRes int gradientStart, 
@ColorRes int gradientCenter, @ColorRes int gradentEnd) {
         this.layout = layout;
+        this.gradientStart = gradientStart;
+        this.gradientCenter = gradientCenter;
+        this.gradentEnd = gradentEnd;
     }
+
+    int getLayout() {
+        return layout;
+    }
+
+    int getGradientStart() {
+        return gradientStart;
+    }
+
+    int getGradientCenter() {
+        return gradientCenter;
+    }
+
+    int getGradentEnd() {
+        return gradentEnd;
+    }
+
+    private static EnumCodeMap<OfflineTutorialPage> MAP
+            = new EnumCodeMap<>(OfflineTutorialPage.class);
 }
diff --git a/app/src/main/java/org/wikipedia/onboarding/OnboardingFragment.java 
b/app/src/main/java/org/wikipedia/onboarding/OnboardingFragment.java
index f215070..5bdb23c 100644
--- a/app/src/main/java/org/wikipedia/onboarding/OnboardingFragment.java
+++ b/app/src/main/java/org/wikipedia/onboarding/OnboardingFragment.java
@@ -1,13 +1,16 @@
 package org.wikipedia.onboarding;
 
+import android.graphics.drawable.GradientDrawable;
 import android.os.Bundle;
 import android.support.annotation.StringRes;
 import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
 import android.support.v4.view.PagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.FrameLayout;
 import android.widget.TextView;
 
 import org.wikipedia.BackPressedHandler;
@@ -25,8 +28,11 @@
     @BindView(R.id.fragment_onboarding_skip_button) View skipButton;
     @BindView(R.id.fragment_onboarding_forward_button) View forwardButton;
     @BindView(R.id.fragment_onboarding_done_button) TextView doneButton;
+    @BindView(R.id.fragment_onboarding_pager_container) FrameLayout layout;
     private Unbinder unbinder;
     private PagerAdapter adapter;
+
+    private GradientDrawable background;
 
     public interface Callback {
         void onComplete();
@@ -36,10 +42,21 @@
 
     @StringRes protected abstract int getDoneButtonText();
 
+    protected ViewPager getViewPager() {
+        return viewPager;
+    }
+
+    protected GradientDrawable getBackground() {
+        return background;
+    }
+
     @Override public View onCreateView(LayoutInflater inflater, ViewGroup 
container, Bundle savedInstanceState) {
         super.onCreateView(inflater, container, savedInstanceState);
         View view = inflater.inflate(R.layout.fragment_onboarding_pager, 
container, false);
         unbinder = ButterKnife.bind(this, view);
+        background = (GradientDrawable) 
ContextCompat.getDrawable(getContext(), 
R.drawable.onboarding_gradient_background_offline);
+        background.mutate();
+        layout.setBackground(background);
         adapter = getAdapter();
         viewPager.setAdapter(adapter);
         doneButton.setText(getDoneButtonText());
diff --git 
a/app/src/main/java/org/wikipedia/views/BackgroundGradientOnPageChangeListener.java
 
b/app/src/main/java/org/wikipedia/views/BackgroundGradientOnPageChangeListener.java
new file mode 100644
index 0000000..f1b8e43
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/views/BackgroundGradientOnPageChangeListener.java
@@ -0,0 +1,80 @@
+package org.wikipedia.views;
+
+
+import android.animation.ArgbEvaluator;
+import android.graphics.drawable.GradientDrawable;
+import android.support.annotation.NonNull;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+
+import java.util.List;
+
+public class BackgroundGradientOnPageChangeListener implements 
ViewPager.OnPageChangeListener{
+    @NonNull private PagerAdapter adapter;
+    @NonNull private GradientDrawable background;
+    @NonNull private ArgbEvaluator argbEvaluator = new ArgbEvaluator();
+    @NonNull private List<Integer> startColors;
+    @NonNull private List<Integer> centerColors;
+    @NonNull private List<Integer> endColors;
+
+    public BackgroundGradientOnPageChangeListener(@NonNull PagerAdapter 
adapter,
+                                                  @NonNull GradientDrawable 
background,
+                                                  @NonNull 
MutatableGradientColors colors) {
+        this.adapter = adapter;
+        this.background = background;
+        this.startColors = colors.getStartColors();
+        this.centerColors = colors.getCenterColors();
+        this.endColors = colors.getEndColors();
+    }
+
+    @Override
+    public void onPageScrolled(int pos, float posOffset, int posOffsetPx) {
+        int last = adapter.getCount() - 1;
+        if (pos < last) {
+            int start = (Integer) argbEvaluator.evaluate(posOffset, 
startColors.get(pos), startColors.get(pos + 1));
+            int center = (Integer) argbEvaluator.evaluate(posOffset, 
centerColors.get(pos), centerColors.get(pos + 1));
+            int end = (Integer) argbEvaluator.evaluate(posOffset, 
endColors.get(pos), endColors.get(pos + 1));
+            int[] colors = new int[] {start, center, end};
+            background.setColors(colors);
+        } else {
+            int[] colors = new int[] {startColors.get(last), 
centerColors.get(last), endColors.get(last)};
+            background.setColors(colors);
+        }
+    }
+
+    @Override
+    public void onPageSelected(int i) {
+
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int i) {
+
+    }
+
+    public static class MutatableGradientColors {
+        @NonNull private List<Integer> startColors;
+        @NonNull private List<Integer> centerColors;
+        @NonNull private List<Integer> endColors;
+
+        public MutatableGradientColors(@NonNull List<Integer> startColors,
+                                       @NonNull List<Integer> centerColors,
+                                       @NonNull List<Integer> endcolors) {
+            this.startColors = startColors;
+            this.centerColors = centerColors;
+            this.endColors = endcolors;
+        }
+
+        private List<Integer> getStartColors() {
+            return startColors;
+        }
+
+        private List<Integer> getCenterColors() {
+            return centerColors;
+        }
+
+        private List<Integer> getEndColors() {
+            return endColors;
+        }
+    }
+}
diff --git 
a/app/src/main/res/drawable/onboarding_gradient_background_offline.xml 
b/app/src/main/res/drawable/onboarding_gradient_background_offline.xml
new file mode 100644
index 0000000..3433874
--- /dev/null
+++ b/app/src/main/res/drawable/onboarding_gradient_background_offline.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android";
+       android:shape="rectangle">
+    <gradient
+        android:angle="90"/>
+</shape>
\ No newline at end of file
diff --git 
a/app/src/main/res/drawable/onboarding_gradient_background_offline_one.xml 
b/app/src/main/res/drawable/onboarding_gradient_background_offline_one.xml
deleted file mode 100644
index 358cfa0..0000000
--- a/app/src/main/res/drawable/onboarding_gradient_background_offline_one.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android";
-       android:shape="rectangle">
-    <gradient
-        android:startColor="@color/accent30"
-        android:centerColor="@color/green30"
-        android:endColor="@color/green50"
-        android:angle="90"/>
-</shape>
\ No newline at end of file
diff --git 
a/app/src/main/res/drawable/onboarding_gradient_background_offline_three.xml 
b/app/src/main/res/drawable/onboarding_gradient_background_offline_three.xml
deleted file mode 100644
index 62951cf..0000000
--- a/app/src/main/res/drawable/onboarding_gradient_background_offline_three.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android";
-       android:shape="rectangle">
-    <gradient
-        android:startColor="@color/green30"
-        android:centerColor="@color/green50"
-        android:endColor="@color/accent50"
-        android:angle="90"/>
-</shape>
\ No newline at end of file
diff --git 
a/app/src/main/res/drawable/onboarding_gradient_background_offline_two.xml 
b/app/src/main/res/drawable/onboarding_gradient_background_offline_two.xml
deleted file mode 100644
index cdd5bef..0000000
--- a/app/src/main/res/drawable/onboarding_gradient_background_offline_two.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android";
-       android:shape="rectangle">
-    <gradient
-        android:startColor="@color/green30"
-        android:centerColor="@color/accent50"
-        android:endColor="@color/accent30"
-        android:angle="90"/>
-</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_onboarding_pager.xml 
b/app/src/main/res/layout/fragment_onboarding_pager.xml
index c2e482d..b70643c 100644
--- a/app/src/main/res/layout/fragment_onboarding_pager.xml
+++ b/app/src/main/res/layout/fragment_onboarding_pager.xml
@@ -2,6 +2,7 @@
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android";
     xmlns:app="http://schemas.android.com/apk/res-auto";
+    android:id="@+id/fragment_onboarding_pager_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
diff --git a/app/src/main/res/layout/inflate_offline_tutorial_page_one.xml 
b/app/src/main/res/layout/inflate_offline_tutorial_page_one.xml
index e65dd41..d9074ae 100644
--- a/app/src/main/res/layout/inflate_offline_tutorial_page_one.xml
+++ b/app/src/main/res/layout/inflate_offline_tutorial_page_one.xml
@@ -9,4 +9,4 @@
     app:imageSize="240dp"
     app:primaryText="@string/offline_library_onboarding_build_library_title"
     
app:secondaryText="@string/offline_library_onboarding_build_library_subtitle"
-    app:background="@drawable/onboarding_gradient_background_offline_one"/>
\ No newline at end of file
+    app:background="@android:color/transparent"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/inflate_offline_tutorial_page_three.xml 
b/app/src/main/res/layout/inflate_offline_tutorial_page_three.xml
index 3e99525..78b548d 100644
--- a/app/src/main/res/layout/inflate_offline_tutorial_page_three.xml
+++ b/app/src/main/res/layout/inflate_offline_tutorial_page_three.xml
@@ -9,4 +9,4 @@
     app:imageSize="240dp"
     app:primaryText="@string/offline_library_onboarding_store_knowledge_title"
     
app:secondaryText="@string/offline_library_onboarding_store_knowledge_subtitle"
-    app:background="@drawable/onboarding_gradient_background_offline_three"/>
\ No newline at end of file
+    app:background="@android:color/transparent"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/inflate_offline_tutorial_page_two.xml 
b/app/src/main/res/layout/inflate_offline_tutorial_page_two.xml
index 8988200..37b7b63 100644
--- a/app/src/main/res/layout/inflate_offline_tutorial_page_two.xml
+++ b/app/src/main/res/layout/inflate_offline_tutorial_page_two.xml
@@ -9,4 +9,4 @@
     app:imageSize="240dp"
     
app:primaryText="@string/offline_library_onboarding_uninterrupted_reading_title"
     
app:secondaryText="@string/offline_library_onboarding_uninterrupted_reading_subtitle"
-    app:background="@drawable/onboarding_gradient_background_offline_two"/>
\ No newline at end of file
+    app:background="@android:color/transparent"/>
\ No newline at end of file

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib9d5c9e34a93a0301653a69f01f1557dc56fcabf
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <mhollo...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: Cooltey <cf...@wikimedia.org>
Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org>
Gerrit-Reviewer: Sharvaniharan <sha...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to