com.twolinessoftware.smarterlist.activity.TutorialActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.twolinessoftware.smarterlist.activity.TutorialActivity.java

Source

/*
 * Copyright (c) 2015. 2Lines Software,Inc
 *
 *   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.twolinessoftware.smarterlist.activity;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;

import com.twolinessoftware.smarterlist.R;
import com.twolinessoftware.smarterlist.fragment.HeroFragment;
import com.viewpagerindicator.CirclePageIndicator;

import java.util.ArrayList;
import java.util.List;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;

public class TutorialActivity extends FragmentActivity {

    @InjectView(R.id.button_next)
    Button m_buttonNext;

    @InjectView(R.id.view_pager)
    ViewPager m_pager;

    @InjectView(R.id.viewpager_indicator)
    CirclePageIndicator m_pagerIndicator;

    private TutorialPager m_adapter;

    final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    private int m_currentApiVersion;

    private final ViewPager.OnPageChangeListener endPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            m_buttonNext.setText(
                    isLastPage() ? getString(R.string.tutorial_signup) : getString(R.string.tutorial_nextdone));
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

        m_currentApiVersion = android.os.Build.VERSION.SDK_INT;

        // This work only for android 4.4+
        if (m_currentApiVersion >= Build.VERSION_CODES.KITKAT) {

            getWindow().getDecorView().setSystemUiVisibility(flags);

            // Code below is to handle presses of Volume up or Volume down.
            // Without this, after pressing volume buttons, the navigation bar will
            // show up and won't hide
            final View decorView = getWindow().getDecorView();
            decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {

                @Override
                public void onSystemUiVisibilityChange(int visibility) {
                    if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                        decorView.setSystemUiVisibility(flags);
                    }
                }
            });
        }

        setContentView(R.layout.activity_tutorial);

        ButterKnife.inject(this);

        configureFragments();
    }

    @SuppressLint("NewApi")
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (m_currentApiVersion >= Build.VERSION_CODES.KITKAT && hasFocus) {
            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
        }
    }

    private void configureFragments() {

        List<Fragment> fragments = new ArrayList<>();
        fragments.add(HeroFragment.newInstance(R.color.pal_4, R.drawable.hero_1, 0, R.string.hero_caption1));
        fragments.add(HeroFragment.newInstance(R.color.pal_4, R.drawable.hero_2, R.string.hero_title2,
                R.string.hero_caption2));
        fragments.add(HeroFragment.newInstance(R.color.pal_4, R.drawable.hero_3, R.string.hero_title3,
                R.string.hero_caption3));
        fragments.add(HeroFragment.newInstance(R.color.pal_4, R.drawable.hero_4, R.string.hero_title4,
                R.string.hero_caption4));

        m_adapter = new TutorialPager(getSupportFragmentManager(), fragments);
        m_pager.setAdapter(m_adapter);

        m_pagerIndicator.setViewPager(m_pager);
        m_pagerIndicator.setOnPageChangeListener(endPageChangeListener);
    }

    @OnClick(R.id.button_next)
    public void onNextClick(View view) {
        if (isLastPage()) {
            setResult(Activity.RESULT_OK);
            finish();
        } else {
            nextPage();
        }
    }

    @OnClick(R.id.button_skip)
    public void onSkipClick(View view) {
        setResult(Activity.RESULT_OK);
        finish();
    }

    private boolean isLastPage() {
        return m_pager.getCurrentItem() == (m_adapter.getCount() - 1);
    }

    private void nextPage() {
        int currentPage = m_pager.getCurrentItem();
        if (!isLastPage()) {
            m_pager.setCurrentItem(currentPage + 1);
        }
    }

    private class TutorialPager extends FragmentStatePagerAdapter {

        private final List<Fragment> fragments;

        public TutorialPager(FragmentManager fm, List<Fragment> maneuverFragments) {
            super(fm);
            this.fragments = maneuverFragments;
        }

        @Override
        public android.support.v4.app.Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }
    }

}