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