blob: 866fdc50e3eabb879513b2d2aa6610e0d6d18e53 [file] [log] [blame]
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();
}
}
}