com.github.pockethub.android.ui.WelcomeActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.github.pockethub.android.ui.WelcomeActivity.java

Source

/*
 * Copyright (c) 2015 PocketHub
 *
 * 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.github.pockethub.android.ui;

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.ColorInt;
import android.support.v4.content.ContextCompat;
import android.support.v4.graphics.ColorUtils;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;

import com.github.pockethub.android.R;

public class WelcomeActivity extends DotPagerActivity {

    private final View.OnClickListener onClickListener = v -> closeAndOpenLogin();

    private int[] colors;
    @ColorInt
    int accentsColorDark;
    @ColorInt
    int accentsColorLight = Color.parseColor("#54FFFFFF");
    @ColorInt
    int darkDividerColor = Color.parseColor("#24000000");

    private View divider;
    private Button doneBtn;
    private Button skipBtn;
    private ImageButton nextBtn;

    /**
     * Find views and do needed initialization
     * @param savedInstanceState
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        configureDotPager();
        loadColors();

        doneBtn = (Button) findViewById(R.id.btn_done);
        skipBtn = (Button) findViewById(R.id.btn_skip);
        nextBtn = (ImageButton) findViewById(R.id.btn_next);
        divider = findViewById(R.id.divider);

        skipBtn.setOnClickListener(onClickListener);
        doneBtn.setOnClickListener(onClickListener);
        nextBtn.setOnClickListener(v -> {
            ViewPager pager1 = getViewPager();
            if (pager1.getCurrentItem() + 1 < adapter.getCount()) {
                pager1.setCurrentItem(pager1.getCurrentItem() + 1, true);
            } else {
                configureDotPager();
            }
        });
    }

    /**
     * "Removes" listeners
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        findViewById(R.id.btn_skip).setOnClickListener(null);
        findViewById(R.id.btn_done).setOnClickListener(null);
    }

    /**
     * Create a {@link WelcomePagerAdapter} for the activity
     * @return The created {@link WelcomePagerAdapter}
     */
    @Override
    protected PagerAdapter createAdapter() {
        return new WelcomePagerAdapter(R.layout.welcome_pager_item,
                new int[] { R.drawable.waving_android, R.drawable.welcome_app_icon, R.drawable.thumb_up },
                getResources().getStringArray(R.array.welcome_texts),
                getResources().getStringArray(R.array.welcome_titles));
    }

    /**
     * Close the activity and start login
     */
    private void closeAndOpenLogin() {
        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
        editor.putBoolean(MainActivity.PREF_FIRST_USE, false);
        editor.apply();
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }

    /**
     * Update background color depending on scroll position
     * @param position
     * @param positionOffset
     * @param positionOffsetPixels
     */
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        super.onPageScrolled(position, positionOffset, positionOffsetPixels);
        @ColorInt
        int color;
        @ColorInt
        int accentsColor;
        if (positionOffsetPixels >= 0) {
            color = ColorUtils.blendARGB(getBackgroundColor(position + 1), getBackgroundColor(position),
                    (1 - positionOffset));
            accentsColor = ColorUtils.blendARGB(getAccentsColor(position + 1), getAccentsColor(position),
                    (1 - positionOffset));
        } else {
            color = ColorUtils.blendARGB(getBackgroundColor(position), getBackgroundColor(position + 1),
                    (1 - positionOffset));
            accentsColor = ColorUtils.blendARGB(getAccentsColor(position), getAccentsColor(position + 1),
                    (1 - positionOffset));
        }

        setBackgroundColor(color);
        skipBtn.setTextColor(accentsColor);
        nextBtn.setColorFilter(accentsColor);
        divider.setBackgroundColor(accentsColor);
        dotPageIndicator.setSelectedDotColor(accentsColor);
    }

    /**
     * Show/hide buttons depending on page
     * @param position
     */
    @Override
    public void onPageSelected(int position) {
        super.onPageSelected(position);
        if (getViewPager().getCurrentItem() == adapter.getCount() - 1) {
            doneBtn.setVisibility(View.VISIBLE);
            nextBtn.setVisibility(View.GONE);
            skipBtn.setVisibility(View.GONE);
        } else {
            doneBtn.setVisibility(View.GONE);
            nextBtn.setVisibility(View.VISIBLE);
            skipBtn.setVisibility(View.VISIBLE);
        }
    }

    /**
     * @return Layout id of the activity content view
     */
    @Override
    public int getContentView() {
        return R.layout.welcome_activity;
    }

    /**
     * Loads the color array
     */
    private void loadColors() {
        TypedArray ta = getResources().obtainTypedArray(R.array.welcome_screen_colors);
        colors = new int[ta.length()];
        for (int i = 0; i < ta.length(); i++) {
            colors[i] = ta.getColor(i, 0);
        }
        ta.recycle();
        accentsColorDark = ContextCompat.getColor(this, R.color.primary);
    }

    /**
     * Safe way to get colors from the color array
     * @param pos
     * @return The color
     */
    private int getBackgroundColor(int pos) {
        if (pos < colors.length) {
            return colors[pos];
        } else {
            return colors[colors.length - 1];
        }
    }

    private int getAccentsColor(int pos) {
        if (pos == 0) {
            return accentsColorDark;
        } else {
            return accentsColorLight;
        }
    }

    private int divider(int pos) {
        if (pos == 0) {
            return darkDividerColor;
        } else {
            return accentsColorLight;
        }
    }

    /**
     * Sets the view background color
     * @param color
     */
    private void setBackgroundColor(int color) {
        findViewById(R.id.container).setBackgroundColor(color);
    }
}