diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java')
-rw-r--r-- | mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java new file mode 100644 index 000000000..c2838ee3e --- /dev/null +++ b/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java @@ -0,0 +1,174 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.gecko.firstrun; + +import android.content.Context; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.animation.Animator; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; + +import org.mozilla.gecko.Telemetry; +import org.mozilla.gecko.TelemetryContract; +import org.mozilla.gecko.home.HomePager.Decor; +import org.mozilla.gecko.home.TabMenuStrip; +import org.mozilla.gecko.restrictions.Restrictions; + +import java.util.List; + +/** + * ViewPager containing for our first run pages. + * + * @see FirstrunPanel for the first run pages that are used in this pager. + */ +public class FirstrunPager extends ViewPager { + + private Context context; + protected FirstrunPanel.PagerNavigation pagerNavigation; + private Decor mDecor; + + public FirstrunPager(Context context) { + this(context, null); + } + + public FirstrunPager(Context context, AttributeSet attrs) { + super(context, attrs); + this.context = context; + } + + @Override + public void addView(View child, int index, ViewGroup.LayoutParams params) { + if (child instanceof Decor) { + ((ViewPager.LayoutParams) params).isDecor = true; + mDecor = (Decor) child; + mDecor.setOnTitleClickListener(new TabMenuStrip.OnTitleClickListener() { + @Override + public void onTitleClicked(int index) { + setCurrentItem(index, true); + } + }); + } + + super.addView(child, index, params); + } + + public void load(Context appContext, FragmentManager fm, final FirstrunAnimationContainer.OnFinishListener onFinishListener) { + final List<FirstrunPagerConfig.FirstrunPanelConfig> panels; + + if (Restrictions.isRestrictedProfile(context)) { + panels = FirstrunPagerConfig.getRestricted(); + } else { + panels = FirstrunPagerConfig.getDefault(appContext); + } + + setAdapter(new ViewPagerAdapter(fm, panels)); + this.pagerNavigation = new FirstrunPanel.PagerNavigation() { + @Override + public void next() { + final int currentPage = FirstrunPager.this.getCurrentItem(); + if (currentPage < FirstrunPager.this.getAdapter().getCount() - 1) { + FirstrunPager.this.setCurrentItem(currentPage + 1); + } + } + + @Override + public void finish() { + if (onFinishListener != null) { + onFinishListener.onFinish(); + } + } + }; + addOnPageChangeListener(new OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + mDecor.onPageScrolled(position, positionOffset, positionOffsetPixels); + } + + @Override + public void onPageSelected(int i) { + mDecor.onPageSelected(i); + Telemetry.sendUIEvent(TelemetryContract.Event.SHOW, TelemetryContract.Method.PANEL, "onboarding." + i); + } + + @Override + public void onPageScrollStateChanged(int i) {} + }); + + animateLoad(); + + // Record telemetry for first onboarding panel, for baseline. + Telemetry.sendUIEvent(TelemetryContract.Event.SHOW, TelemetryContract.Method.PANEL, "onboarding.0"); + } + + public void cleanup() { + setAdapter(null); + } + + private void animateLoad() { + setTranslationY(500); + setAlpha(0); + + final Animator translateAnimator = ObjectAnimator.ofFloat(this, "translationY", 0); + translateAnimator.setDuration(400); + + final Animator alphaAnimator = ObjectAnimator.ofFloat(this, "alpha", 1); + alphaAnimator.setStartDelay(200); + alphaAnimator.setDuration(600); + + final AnimatorSet set = new AnimatorSet(); + set.playTogether(alphaAnimator, translateAnimator); + set.setStartDelay(400); + + set.start(); + } + + protected class ViewPagerAdapter extends FragmentPagerAdapter { + private final List<FirstrunPagerConfig.FirstrunPanelConfig> panels; + private final Fragment[] fragments; + + public ViewPagerAdapter(FragmentManager fm, List<FirstrunPagerConfig.FirstrunPanelConfig> panels) { + super(fm); + this.panels = panels; + this.fragments = new Fragment[panels.size()]; + for (FirstrunPagerConfig.FirstrunPanelConfig panel : panels) { + mDecor.onAddPagerView(context.getString(panel.getTitleRes())); + } + + if (panels.size() > 0) { + mDecor.onPageSelected(0); + } + } + + @Override + public Fragment getItem(int i) { + Fragment fragment = this.fragments[i]; + if (fragment == null) { + FirstrunPagerConfig.FirstrunPanelConfig panelConfig = panels.get(i); + fragment = Fragment.instantiate(context, panelConfig.getClassname(), panelConfig.getArgs()); + ((FirstrunPanel) fragment).setPagerNavigation(pagerNavigation); + fragments[i] = fragment; + } + return fragment; + } + + @Override + public int getCount() { + return panels.size(); + } + + @Override + public CharSequence getPageTitle(int i) { + // Unused now that we use TabMenuStrip. + return context.getString(panels.get(i).getTitleRes()).toUpperCase(); + } + } +} |