/*
* Copyright (c) 2016 The Android Open Source Project
*
* 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.example.android.tvleanback.ui;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.example.android.tvleanback.R;
import java.util.ArrayList;
public class OnboardingFragment extends android.support.v17.leanback.app.OnboardingFragment {
public static final String COMPLETED_ONBOARDING = "completed_onboarding";
private static final int[] pageTitles = {
R.string.onboarding_title_welcome,
R.string.onboarding_title_design,
R.string.onboarding_title_simple,
R.string.onboarding_title_project
};
private static final int[] pageDescriptions = {
R.string.onboarding_description_welcome,
R.string.onboarding_description_design,
R.string.onboarding_description_simple,
R.string.onboarding_description_project
};
private final int[] pageImages = {
R.drawable.tv_animation_a,
R.drawable.tv_animation_b,
R.drawable.tv_animation_c,
R.drawable.tv_animation_d
};
private static final long ANIMATION_DURATION = 500;
private Animator mContentAnimator;
private ImageView mContentView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Set the logo to display a splash animation
setLogoResourceId(R.drawable.videos_by_google_banner);
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
protected void onFinishFragment() {
super.onFinishFragment();
// Our onboarding is done
// Update the shared preferences
SharedPreferences.Editor sharedPreferencesEditor =
PreferenceManager.getDefaultSharedPreferences(getActivity()).edit();
sharedPreferencesEditor.putBoolean(COMPLETED_ONBOARDING, true);
sharedPreferencesEditor.apply();
// Let's go back to the MainActivity
getActivity().finish();
}
@Override
protected int getPageCount() {
return pageTitles.length;
}
@Override
protected String getPageTitle(int pageIndex) {
return getString(pageTitles[pageIndex]);
}
@Override
protected String getPageDescription(int pageIndex) {
return getString(pageDescriptions[pageIndex]);
}
@Nullable
@Override
protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container) {
View bgView = new View(getActivity());
bgView.setBackgroundColor(getResources().getColor(R.color.fastlane_background));
return bgView;
}
@Nullable
@Override
protected View onCreateContentView(LayoutInflater inflater, ViewGroup container) {
mContentView = new ImageView(getActivity());
mContentView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
mContentView.setPadding(0, 32, 0, 32);
return mContentView;
}
@Nullable
@Override
protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container) {
return null;
}
@Override
protected void onPageChanged(final int newPage, int previousPage) {
if (mContentAnimator != null) {
mContentAnimator.end();
}
ArrayList<Animator> animators = new ArrayList<>();
Animator fadeOut = createFadeOutAnimator(mContentView);
fadeOut.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mContentView.setImageDrawable(getResources().getDrawable(pageImages[newPage]));
((AnimationDrawable) mContentView.getDrawable()).start();
}
});
animators.add(fadeOut);
animators.add(createFadeInAnimator(mContentView));
AnimatorSet set = new AnimatorSet();
set.playSequentially(animators);
set.start();
mContentAnimator = set;
}
@Override
protected Animator onCreateEnterAnimation() {
mContentView.setImageDrawable(getResources().getDrawable(pageImages[0]));
((AnimationDrawable) mContentView.getDrawable()).start();
mContentAnimator = createFadeInAnimator(mContentView);
return mContentAnimator;
}
private Animator createFadeInAnimator(View view) {
return ObjectAnimator.ofFloat(view, View.ALPHA, 0.0f, 1.0f).setDuration(ANIMATION_DURATION);
}
private Animator createFadeOutAnimator(View view) {
return ObjectAnimator.ofFloat(view, View.ALPHA, 1.0f, 0.0f).setDuration(ANIMATION_DURATION);
}
}