com.zhi.android.modules.welcome.WelcomeFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.zhi.android.modules.welcome.WelcomeFragment.java

Source

/*
 * Copyright [2017] [zhi]
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.zhi.android.modules.welcome;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.graphics.ColorUtils;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.jakewharton.rxbinding2.view.RxView;
import com.zhi.android.common.app.ActivityScope;
import com.zhi.android.common.app.BaseFragment;
import com.zhi.android.common.view.DoubleViewAnimator;
import com.zhi.android.libs.pager.PageIndicatorView;

import java.util.concurrent.TimeUnit;

import javax.inject.Inject;

public class WelcomeFragment extends BaseFragment implements ViewPager.OnPageChangeListener {
    public static final String TAG = "WelcomeFragment";
    public static final String ARGS_WELCOME_OPTION = "args-welcome-option";

    @NonNull
    public static WelcomeFragment newInstance(@Nullable WelcomeOption option) {
        final WelcomeFragment welcomeFragment = new WelcomeFragment();
        final Bundle args = new Bundle();
        args.putParcelable(ARGS_WELCOME_OPTION, option);
        welcomeFragment.setArguments(args);
        return welcomeFragment;
    }

    private ViewPager mPager;
    private DoubleViewAnimator mAnimator;
    private WelcomeOption mOption;
    private WelcomePagerAdapter mAdapter;
    private WelcomeBackgroundView mBackgroundView;

    public WelcomeFragment() {
        // LEFT-DO-NOTHING
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mOption = getArguments().getParcelable(ARGS_WELCOME_OPTION);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.welcome_container, container, false);
    }

    @Override
    @SuppressWarnings("CheckReturnValue")
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        final View skipView = view.findViewById(R.id.welcome_skip);
        final View doneView = view.findViewById(R.id.welcome_done);
        RxView.clicks(skipView).throttleFirst(2000, TimeUnit.MILLISECONDS).subscribe(o -> {
            //                        Timber.d("Skip is clicked %s", o);
        });
        RxView.clicks(doneView).throttleFirst(2000, TimeUnit.MILLISECONDS).subscribe(o -> {
            //                        Timber.d("Next is clicked %s", o);
        });

        mAnimator = DoubleViewAnimator.newBuilder().animateFirstTime(false)
                .inAnimation(getContext(), android.R.anim.fade_in)
                .outAnimation(getContext(), android.R.anim.fade_out).firstView(skipView).secondView(doneView)
                .build();

        mPager = view.findViewById(R.id.pager);
        mAdapter = new WelcomePagerAdapter(getContext(), getChildFragmentManager(), mOption);
        mPager.setAdapter(mAdapter);
        mPager.addOnPageChangeListener(this);

        mBackgroundView = view.findViewById(R.id.page_background);

        final PageIndicatorView pageIndicatorView = view.findViewById(R.id.page_indicator);
        pageIndicatorView.setPageIndicatorInterface(mAdapter);
        mPager.addOnPageChangeListener(pageIndicatorView);

        mAnimator.showFirstView();
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        if (positionOffset == 0f) {
            if (position == mAdapter.getCount() - 1) {
                getActivity().finish();
                return;
            }
        }
        // retain background color
        final int color1 = mAdapter.getPageBackgroundColor(position);
        final int color2 = mAdapter.getPageBackgroundColor(position + 1);
        mBackgroundView.setBackgroundColor(ColorUtils.blendARGB(color1, color2, positionOffset));

        if (position == mPager.getAdapter().getCount() - 2) {
            mPager.setAlpha(1f - positionOffset);
        }

        final View curWarmView = mPager.findViewWithTag(WelcomePageFragment.warmViewTag(position));
        if (curWarmView != null) {
            WelcomePageFragment.onPageWarm(curWarmView, positionOffset);
        }
        final View nextWarmView = mPager.findViewWithTag(WelcomePageFragment.warmViewTag(position + 1));
        if (nextWarmView != null) {
            WelcomePageFragment.onPageWarm(nextWarmView, positionOffset - 1.0f);
        }
    }

    @Override
    public void onPageSelected(int position) {
        if (position >= mAdapter.getPageIndicatedCount() - 1) {
            mAnimator.showSecondView();
        } else {
            mAnimator.showFirstView();
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}