summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-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.java174
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();
+ }
+ }
+}