aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/plans/PlanPostPurchaseActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/plans/PlanPostPurchaseActivity.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/plans/PlanPostPurchaseActivity.java243
1 files changed, 243 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/plans/PlanPostPurchaseActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/plans/PlanPostPurchaseActivity.java
new file mode 100644
index 000000000..866fdc50e
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/plans/PlanPostPurchaseActivity.java
@@ -0,0 +1,243 @@
+package org.wordpress.android.ui.plans;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.animation.ValueAnimator;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.os.Bundle;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.IdRes;
+import android.support.v13.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AccelerateInterpolator;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import org.wordpress.android.R;
+import org.wordpress.android.util.AniUtils;
+import org.wordpress.android.widgets.WPViewPager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * post-purchase "on-boarding" for future use after user purchases premium or business plan
+ */
+public class PlanPostPurchaseActivity extends AppCompatActivity {
+
+ static final int PAGE_NUMBER_INTRO = 0;
+ static final int PAGE_NUMBER_CUSTOMIZE = 1;
+ static final int PAGE_NUMBER_VIDEO = 2;
+ static final int PAGE_NUMBER_THEMES = 3; // business only
+
+ private static final String ARG_IS_BUSINESS_PLAN = "is_business_plan";
+
+ private ViewPager mViewPager;
+ private PageAdapter mPageAdapter;
+ private TextView mTxtSkip;
+ private TextView mTxtNext;
+ private ViewGroup mIndicatorContainerView;
+
+ private int mPrevPageNumber = 0;
+ private boolean mIsBusinessPlan;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.plan_post_purchase_activity);
+
+ if (savedInstanceState != null) {
+ mIsBusinessPlan = savedInstanceState.getBoolean(ARG_IS_BUSINESS_PLAN, false);
+ } else {
+ mIsBusinessPlan = getIntent().getBooleanExtra(ARG_IS_BUSINESS_PLAN, false);
+ }
+
+ mTxtSkip = (TextView) findViewById(R.id.text_skip);
+ mTxtNext = (TextView) findViewById(R.id.text_next);
+ mIndicatorContainerView = (ViewGroup) findViewById(R.id.layout_indicator_container);
+
+ mViewPager = (WPViewPager) findViewById(R.id.viewpager);
+ mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
+ @Override
+ public void onPageSelected(int position) {
+ if (position != mPrevPageNumber) {
+ updateIndicator(position);
+ updateIndicator(mPrevPageNumber);
+ }
+ updateButtons();
+ mPrevPageNumber = position;
+ }
+ });
+ mViewPager.setAdapter(getPageAdapter());
+
+ mTxtSkip.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ mTxtNext.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ gotoNextPage();
+ }
+ });
+
+ int numPages = getNumPages();
+ for (int i = 0; i < numPages; i++) {
+ getIndicator(i).setOnClickListener(mIndicatorClickListener);
+ }
+ getIndicator(PAGE_NUMBER_THEMES).setVisibility(numPages > 3 ? View.VISIBLE : View.GONE);
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putBoolean(ARG_IS_BUSINESS_PLAN, mIsBusinessPlan);
+ }
+
+ /*
+ * last pages is themes, which should only appear when user has purchased business plan
+ */
+ private int getNumPages() {
+ return mIsBusinessPlan ? 4 : 3;
+ }
+
+ private PageAdapter getPageAdapter() {
+ if (mPageAdapter == null) {
+ List<Fragment> fragments = new ArrayList<>();
+ for (int i = 0; i < getNumPages(); i++) {
+ fragments.add(PlanPostPurchaseFragment.newInstance(i));
+ }
+
+ FragmentManager fm = getFragmentManager();
+ mPageAdapter = new PageAdapter(fm, fragments);
+ }
+ return mPageAdapter;
+ }
+
+ private int getCurrentPage() {
+ return mViewPager.getCurrentItem();
+ }
+
+ private boolean isLastPage() {
+ return getCurrentPage() == getNumPages() - 1;
+ }
+
+ private void gotoNextPage() {
+ if (isLastPage()) {
+ finish();
+ } else {
+ gotoPage(getCurrentPage() + 1);
+ }
+ }
+
+ private void gotoPage(int pageNumber) {
+ mViewPager.setCurrentItem(pageNumber, true);
+ }
+
+ private void updateButtons() {
+ if (isLastPage()) {
+ mTxtNext.setText(R.string.button_done);
+ if (mTxtSkip.getVisibility() == View.VISIBLE) {
+ AniUtils.fadeOut(mTxtSkip, AniUtils.Duration.MEDIUM);
+ }
+ } else {
+ mTxtNext.setText(R.string.button_next);
+ if (mTxtSkip.getVisibility() != View.VISIBLE) {
+ AniUtils.fadeIn(mTxtSkip, AniUtils.Duration.MEDIUM);
+ }
+ }
+ }
+
+ private ImageView getIndicator(int pageNumber) {
+ @IdRes int resId;
+ switch (pageNumber) {
+ case 0:
+ resId = R.id.image_indicator_1;
+ break;
+ case 1:
+ resId = R.id.image_indicator_2;
+ break;
+ case 2:
+ resId = R.id.image_indicator_3;
+ break;
+ case 3:
+ resId = R.id.image_indicator_4;
+ break;
+ default:
+ throw new IllegalArgumentException("Invalid indicator page number");
+ }
+ return (ImageView) mIndicatorContainerView.findViewById(resId);
+ }
+
+ private void updateIndicator(int pageNumber) {
+ boolean isSelected = (pageNumber == getCurrentPage());
+ final ImageView indicator = getIndicator(pageNumber);
+ final @DrawableRes int backgroundRes =
+ isSelected ? R.drawable.indicator_circle_selected : R.drawable.indicator_circle_unselected;
+
+ if (isSelected) {
+ // scale it out, change the background, then scale it back in
+ PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat(View.SCALE_X, 1f, 0.25f);
+ PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1f, 0.25f);
+ ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(indicator, scaleX, scaleY);
+ anim.setDuration(150);
+ anim.setInterpolator(new AccelerateInterpolator());
+ anim.setRepeatCount(1);
+ anim.setRepeatMode(ValueAnimator.REVERSE);
+ anim.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationRepeat(Animator animation) {
+ indicator.setBackgroundResource(backgroundRes);
+ }
+ });
+ anim.start();
+ } else {
+ indicator.setBackgroundResource(backgroundRes);
+ }
+ }
+
+ private final View.OnClickListener mIndicatorClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int id = v.getId();
+ if (id == R.id.image_indicator_1) {
+ gotoPage(0);
+ } else if (id == R.id.image_indicator_2) {
+ gotoPage(1);
+ } else if (id == R.id.image_indicator_3) {
+ gotoPage(2);
+ } else if (id == R.id.image_indicator_4) {
+ gotoPage(3);
+ }
+ }
+ };
+
+ private class PageAdapter extends FragmentPagerAdapter {
+ private final List<Fragment> mFragments;
+
+ PageAdapter(FragmentManager fm, List<Fragment> fragments) {
+ super(fm);
+ mFragments = fragments;
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return mFragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mFragments.size();
+ }
+ }
+}