diff options
Diffstat (limited to 'src/com/android/tv/onboarding/WelcomeFragment.java')
-rw-r--r-- | src/com/android/tv/onboarding/WelcomeFragment.java | 714 |
1 files changed, 700 insertions, 14 deletions
diff --git a/src/com/android/tv/onboarding/WelcomeFragment.java b/src/com/android/tv/onboarding/WelcomeFragment.java index baeb1b29..f8cd8ee7 100644 --- a/src/com/android/tv/onboarding/WelcomeFragment.java +++ b/src/com/android/tv/onboarding/WelcomeFragment.java @@ -16,16 +16,22 @@ package com.android.tv.onboarding; -import android.app.FragmentTransaction; +import android.animation.Animator; +import android.animation.AnimatorInflater; +import android.animation.AnimatorSet; import android.os.Bundle; +import android.transition.TransitionValues; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; -import android.widget.Button; +import android.widget.ImageView; import com.android.tv.R; import com.android.tv.common.ui.setup.SetupFragment; +import com.android.tv.common.ui.setup.animation.CustomTransition; +import com.android.tv.common.ui.setup.animation.CustomTransitionProvider; +import com.android.tv.common.ui.setup.animation.SetupAnimationHelper; /** * A fragment for the onboarding screen. @@ -33,35 +39,670 @@ import com.android.tv.common.ui.setup.SetupFragment; public class WelcomeFragment extends SetupFragment { public static final int ACTION_NEXT = 1; + private static final long LOGO_SPLASH_PAUSE_DURATION_MS = 333; + private static final long LOGO_SPLASH_DURATION_MS = 1000; + private static final long START_DELAY_PAGE_INDICATOR_MS = LOGO_SPLASH_DURATION_MS; + private static final long START_DELAY_TITLE_MS = LOGO_SPLASH_DURATION_MS + 33; + private static final long START_DELAY_DESCRIPTION_MS = LOGO_SPLASH_DURATION_MS + 33; + private static final long START_DELAY_CLOUD_MS = LOGO_SPLASH_DURATION_MS + 33; + private static final long START_DELAY_TV_MS = LOGO_SPLASH_DURATION_MS + 567; + private static final long START_DELAY_TV_CONTENTS_MS = 266; + private static final long START_DELAY_SHADOW_MS = LOGO_SPLASH_DURATION_MS + 567; + + private static final long WELCOME_PAGE_TRANSITION_DURATION_MS = 417; + + private static final long BLUE_SCREEN_HOLD_DURATION_MS = 1500; + + private static final int[] TV_FRAMES_1_START = { + R.drawable.tv_1a_01, + R.drawable.tv_1a_02, + R.drawable.tv_1a_03, + R.drawable.tv_1a_04, + R.drawable.tv_1a_05, + R.drawable.tv_1a_06, + R.drawable.tv_1a_07, + R.drawable.tv_1a_08, + R.drawable.tv_1a_09, + R.drawable.tv_1a_10, + R.drawable.tv_1a_11, + R.drawable.tv_1a_12, + R.drawable.tv_1a_13, + R.drawable.tv_1a_14, + R.drawable.tv_1a_15, + R.drawable.tv_1a_16, + R.drawable.tv_1a_17, + R.drawable.tv_1a_18, + R.drawable.tv_1a_19, + R.drawable.tv_1a_20, + 0 + }; + + private static final int[] TV_FRAMES_1_END = { + R.drawable.tv_1b_01, + R.drawable.tv_1b_02, + R.drawable.tv_1b_03, + R.drawable.tv_1b_04, + R.drawable.tv_1b_05, + R.drawable.tv_1b_06, + R.drawable.tv_1b_07, + R.drawable.tv_1b_08, + R.drawable.tv_1b_09, + R.drawable.tv_1b_10, + R.drawable.tv_1b_11, + 0 + }; + + private static final int[] TV_FRAMES_2_BLUE_ARROW = { + R.drawable.arrow_blue_00, + R.drawable.arrow_blue_01, + R.drawable.arrow_blue_02, + R.drawable.arrow_blue_03, + R.drawable.arrow_blue_04, + R.drawable.arrow_blue_05, + R.drawable.arrow_blue_06, + R.drawable.arrow_blue_07, + R.drawable.arrow_blue_08, + R.drawable.arrow_blue_09, + R.drawable.arrow_blue_10, + R.drawable.arrow_blue_11, + R.drawable.arrow_blue_12, + R.drawable.arrow_blue_13, + R.drawable.arrow_blue_14, + R.drawable.arrow_blue_15, + R.drawable.arrow_blue_16, + R.drawable.arrow_blue_17, + R.drawable.arrow_blue_18, + R.drawable.arrow_blue_19, + R.drawable.arrow_blue_20, + R.drawable.arrow_blue_21, + R.drawable.arrow_blue_22, + R.drawable.arrow_blue_23, + R.drawable.arrow_blue_24, + R.drawable.arrow_blue_25, + R.drawable.arrow_blue_26, + R.drawable.arrow_blue_27, + R.drawable.arrow_blue_28, + R.drawable.arrow_blue_29, + R.drawable.arrow_blue_30, + R.drawable.arrow_blue_31, + R.drawable.arrow_blue_32, + R.drawable.arrow_blue_33, + R.drawable.arrow_blue_34, + R.drawable.arrow_blue_35, + R.drawable.arrow_blue_36, + R.drawable.arrow_blue_37, + R.drawable.arrow_blue_38, + R.drawable.arrow_blue_39, + R.drawable.arrow_blue_40, + R.drawable.arrow_blue_41, + R.drawable.arrow_blue_42, + R.drawable.arrow_blue_43, + R.drawable.arrow_blue_44, + R.drawable.arrow_blue_45, + R.drawable.arrow_blue_46, + R.drawable.arrow_blue_47, + R.drawable.arrow_blue_48, + R.drawable.arrow_blue_49, + R.drawable.arrow_blue_50, + R.drawable.arrow_blue_51, + R.drawable.arrow_blue_52, + R.drawable.arrow_blue_53, + R.drawable.arrow_blue_54, + R.drawable.arrow_blue_55, + R.drawable.arrow_blue_56, + R.drawable.arrow_blue_57, + R.drawable.arrow_blue_58, + R.drawable.arrow_blue_59, + R.drawable.arrow_blue_60, + 0 + }; + + private static final int[] TV_FRAMES_2_BLUE_START = { + R.drawable.tv_2a_01, + R.drawable.tv_2a_02, + R.drawable.tv_2a_03, + R.drawable.tv_2a_04, + R.drawable.tv_2a_05, + R.drawable.tv_2a_06, + R.drawable.tv_2a_07, + R.drawable.tv_2a_08, + R.drawable.tv_2a_09, + R.drawable.tv_2a_10, + R.drawable.tv_2a_11, + R.drawable.tv_2a_12, + R.drawable.tv_2a_13, + R.drawable.tv_2a_14, + R.drawable.tv_2a_15, + R.drawable.tv_2a_16, + R.drawable.tv_2a_17, + R.drawable.tv_2a_18, + R.drawable.tv_2a_19, + 0 + }; + + private static final int[] TV_FRAMES_2_BLUE_END = { + R.drawable.tv_2b_01, + R.drawable.tv_2b_02, + R.drawable.tv_2b_03, + R.drawable.tv_2b_04, + R.drawable.tv_2b_05, + R.drawable.tv_2b_06, + R.drawable.tv_2b_07, + R.drawable.tv_2b_08, + R.drawable.tv_2b_09, + R.drawable.tv_2b_10, + R.drawable.tv_2b_11, + R.drawable.tv_2b_12, + R.drawable.tv_2b_13, + R.drawable.tv_2b_14, + R.drawable.tv_2b_15, + R.drawable.tv_2b_16, + R.drawable.tv_2b_17, + R.drawable.tv_2b_18, + R.drawable.tv_2b_19, + 0 + }; + + private static final int[] TV_FRAMES_2_ORANGE_ARROW = { + R.drawable.arrow_orange_180, + R.drawable.arrow_orange_181, + R.drawable.arrow_orange_182, + R.drawable.arrow_orange_183, + R.drawable.arrow_orange_184, + R.drawable.arrow_orange_185, + R.drawable.arrow_orange_186, + R.drawable.arrow_orange_187, + R.drawable.arrow_orange_188, + R.drawable.arrow_orange_189, + R.drawable.arrow_orange_190, + R.drawable.arrow_orange_191, + R.drawable.arrow_orange_192, + R.drawable.arrow_orange_193, + R.drawable.arrow_orange_194, + R.drawable.arrow_orange_195, + R.drawable.arrow_orange_196, + R.drawable.arrow_orange_197, + R.drawable.arrow_orange_198, + R.drawable.arrow_orange_199, + R.drawable.arrow_orange_200, + R.drawable.arrow_orange_201, + R.drawable.arrow_orange_202, + R.drawable.arrow_orange_203, + R.drawable.arrow_orange_204, + R.drawable.arrow_orange_205, + R.drawable.arrow_orange_206, + R.drawable.arrow_orange_207, + R.drawable.arrow_orange_208, + R.drawable.arrow_orange_209, + R.drawable.arrow_orange_210, + R.drawable.arrow_orange_211, + R.drawable.arrow_orange_212, + R.drawable.arrow_orange_213, + R.drawable.arrow_orange_214, + R.drawable.arrow_orange_215, + R.drawable.arrow_orange_216, + R.drawable.arrow_orange_217, + R.drawable.arrow_orange_218, + R.drawable.arrow_orange_219, + R.drawable.arrow_orange_220, + R.drawable.arrow_orange_221, + R.drawable.arrow_orange_222, + R.drawable.arrow_orange_223, + R.drawable.arrow_orange_224, + R.drawable.arrow_orange_225, + R.drawable.arrow_orange_226, + R.drawable.arrow_orange_227, + R.drawable.arrow_orange_228, + R.drawable.arrow_orange_229, + R.drawable.arrow_orange_230, + R.drawable.arrow_orange_231, + R.drawable.arrow_orange_232, + R.drawable.arrow_orange_233, + R.drawable.arrow_orange_234, + R.drawable.arrow_orange_235, + R.drawable.arrow_orange_236, + R.drawable.arrow_orange_237, + R.drawable.arrow_orange_238, + R.drawable.arrow_orange_239, + R.drawable.arrow_orange_240, + 0 + }; + + private static final int[] TV_FRAMES_2_ORANGE_START = { + R.drawable.tv_2c_01, + R.drawable.tv_2c_02, + R.drawable.tv_2c_03, + R.drawable.tv_2c_04, + R.drawable.tv_2c_05, + R.drawable.tv_2c_06, + R.drawable.tv_2c_07, + R.drawable.tv_2c_08, + R.drawable.tv_2c_09, + R.drawable.tv_2c_10, + R.drawable.tv_2c_11, + R.drawable.tv_2c_12, + R.drawable.tv_2c_13, + R.drawable.tv_2c_14, + R.drawable.tv_2c_15, + R.drawable.tv_2c_16, + 0 + }; + + private static final int[] TV_FRAMES_3_START = { + R.drawable.tv_3a_01, + R.drawable.tv_3a_02, + R.drawable.tv_3a_03, + R.drawable.tv_3a_04, + R.drawable.tv_3a_05, + R.drawable.tv_3a_06, + R.drawable.tv_3a_07, + R.drawable.tv_3a_08, + R.drawable.tv_3a_09, + R.drawable.tv_3a_10, + R.drawable.tv_3a_11, + R.drawable.tv_3a_12, + R.drawable.tv_3a_13, + R.drawable.tv_3a_14, + R.drawable.tv_3a_15, + R.drawable.tv_3a_16, + R.drawable.tv_3a_17, + R.drawable.tv_3b_75, + R.drawable.tv_3b_76, + R.drawable.tv_3b_77, + R.drawable.tv_3b_78, + R.drawable.tv_3b_79, + R.drawable.tv_3b_80, + R.drawable.tv_3b_81, + R.drawable.tv_3b_82, + R.drawable.tv_3b_83, + R.drawable.tv_3b_84, + R.drawable.tv_3b_85, + R.drawable.tv_3b_86, + R.drawable.tv_3b_87, + R.drawable.tv_3b_88, + R.drawable.tv_3b_89, + R.drawable.tv_3b_90, + R.drawable.tv_3b_91, + R.drawable.tv_3b_92, + R.drawable.tv_3b_93, + R.drawable.tv_3b_94, + R.drawable.tv_3b_95, + R.drawable.tv_3b_96, + R.drawable.tv_3b_97, + R.drawable.tv_3b_98, + R.drawable.tv_3b_99, + R.drawable.tv_3b_100, + R.drawable.tv_3b_101, + R.drawable.tv_3b_102, + R.drawable.tv_3b_103, + R.drawable.tv_3b_104, + R.drawable.tv_3b_105, + R.drawable.tv_3b_106, + R.drawable.tv_3b_107, + R.drawable.tv_3b_108, + R.drawable.tv_3b_109, + R.drawable.tv_3b_110, + R.drawable.tv_3b_111, + R.drawable.tv_3b_112, + R.drawable.tv_3b_113, + R.drawable.tv_3b_114, + R.drawable.tv_3b_115, + R.drawable.tv_3b_116, + R.drawable.tv_3b_117, + R.drawable.tv_3b_118, + 0 + }; + + private static final int[] TV_FRAMES_4_START = { + R.drawable.tv_4a_15, + R.drawable.tv_4a_16, + R.drawable.tv_4a_17, + R.drawable.tv_4a_18, + R.drawable.tv_4a_19, + R.drawable.tv_4a_20, + R.drawable.tv_4a_21, + R.drawable.tv_4a_22, + R.drawable.tv_4a_23, + R.drawable.tv_4a_24, + R.drawable.tv_4a_25, + R.drawable.tv_4a_26, + R.drawable.tv_4a_27, + R.drawable.tv_4a_28, + R.drawable.tv_4a_29, + R.drawable.tv_4a_30, + R.drawable.tv_4a_31, + R.drawable.tv_4a_32, + R.drawable.tv_4a_33, + R.drawable.tv_4a_34, + R.drawable.tv_4a_35, + R.drawable.tv_4a_36, + R.drawable.tv_4a_37, + R.drawable.tv_4a_38, + R.drawable.tv_4a_39, + R.drawable.tv_4a_40, + R.drawable.tv_4a_41, + R.drawable.tv_4a_42, + R.drawable.tv_4a_43, + R.drawable.tv_4a_44, + R.drawable.tv_4a_45, + R.drawable.tv_4a_46, + R.drawable.tv_4a_47, + R.drawable.tv_4a_48, + R.drawable.tv_4a_49, + R.drawable.tv_4a_50, + R.drawable.tv_4a_51, + R.drawable.tv_4a_52, + R.drawable.tv_4a_53, + R.drawable.tv_4a_54, + R.drawable.tv_4a_55, + R.drawable.tv_4a_56, + R.drawable.tv_4a_57, + R.drawable.tv_4a_58, + R.drawable.tv_4a_59, + R.drawable.tv_4a_60, + R.drawable.tv_4a_61, + R.drawable.tv_4a_62, + R.drawable.tv_4a_63, + R.drawable.tv_4a_64, + R.drawable.tv_4a_65, + R.drawable.tv_4a_66, + R.drawable.tv_4a_67, + R.drawable.tv_4a_68, + R.drawable.tv_4a_69, + R.drawable.tv_4a_70, + R.drawable.tv_4a_71, + R.drawable.tv_4a_72, + R.drawable.tv_4a_73, + R.drawable.tv_4a_74, + R.drawable.tv_4a_75, + R.drawable.tv_4a_76, + R.drawable.tv_4a_77, + R.drawable.tv_4a_78, + R.drawable.tv_4a_79, + R.drawable.tv_4a_80, + R.drawable.tv_4a_81, + R.drawable.tv_4a_82, + R.drawable.tv_4a_83, + R.drawable.tv_4a_84, + R.drawable.tv_4a_85, + R.drawable.tv_4a_86, + R.drawable.tv_4a_87, + R.drawable.tv_4a_88, + R.drawable.tv_4a_89, + R.drawable.tv_4a_90, + R.drawable.tv_4a_91, + R.drawable.tv_4a_92, + R.drawable.tv_4a_93, + R.drawable.tv_4a_94, + R.drawable.tv_4a_95, + R.drawable.tv_4a_96, + R.drawable.tv_4a_97, + R.drawable.tv_4a_98, + R.drawable.tv_4a_99, + R.drawable.tv_4a_100, + R.drawable.tv_4a_101, + R.drawable.tv_4a_102, + R.drawable.tv_4a_103, + R.drawable.tv_4a_104, + R.drawable.tv_4a_105, + R.drawable.tv_4a_106, + R.drawable.tv_4a_107, + R.drawable.tv_4a_108, + R.drawable.tv_4a_109, + R.drawable.tv_4a_110, + R.drawable.tv_4a_111, + R.drawable.tv_4a_112, + R.drawable.tv_4a_113, + R.drawable.tv_4a_114, + R.drawable.tv_4a_115, + R.drawable.tv_4a_116, + R.drawable.tv_4a_117, + R.drawable.tv_4a_118, + R.drawable.tv_4a_119, + R.drawable.tv_4a_120, + R.drawable.tv_4a_121, + R.drawable.tv_4a_122, + R.drawable.tv_4a_123, + R.drawable.tv_4a_124, + R.drawable.tv_4a_125, + R.drawable.tv_4a_126, + R.drawable.tv_4a_127, + R.drawable.tv_4a_128, + R.drawable.tv_4a_129, + R.drawable.tv_4a_130, + R.drawable.tv_4a_131, + R.drawable.tv_4a_132, + R.drawable.tv_4a_133, + R.drawable.tv_4a_134, + R.drawable.tv_4a_135, + R.drawable.tv_4a_136, + R.drawable.tv_4a_137, + R.drawable.tv_4a_138, + R.drawable.tv_4a_139, + R.drawable.tv_4a_140, + R.drawable.tv_4a_141, + R.drawable.tv_4a_142, + R.drawable.tv_4a_143, + R.drawable.tv_4a_144, + R.drawable.tv_4a_145, + R.drawable.tv_4a_146, + R.drawable.tv_4a_147, + R.drawable.tv_4a_148, + R.drawable.tv_4a_149, + R.drawable.tv_4a_150, + R.drawable.tv_4a_151, + R.drawable.tv_4a_152, + R.drawable.tv_4a_153, + R.drawable.tv_4a_154, + R.drawable.tv_4a_155, + R.drawable.tv_4a_156, + R.drawable.tv_4a_157, + R.drawable.tv_4a_158, + R.drawable.tv_4a_159, + R.drawable.tv_4a_160, + R.drawable.tv_4a_161, + R.drawable.tv_4a_162, + R.drawable.tv_4a_163, + R.drawable.tv_4a_164, + R.drawable.tv_4a_165, + R.drawable.tv_4a_166, + R.drawable.tv_4a_167, + R.drawable.tv_4a_168, + R.drawable.tv_4a_169, + R.drawable.tv_4a_170, + R.drawable.tv_4a_171, + R.drawable.tv_4a_172, + R.drawable.tv_4a_173, + R.drawable.tv_4a_174, + R.drawable.tv_4a_175, + R.drawable.tv_4a_176, + R.drawable.tv_4a_177, + R.drawable.tv_4a_178, + R.drawable.tv_4a_179, + R.drawable.tv_4a_180, + R.drawable.tv_4a_181, + R.drawable.tv_4a_182, + R.drawable.tv_4a_183, + R.drawable.tv_4a_184, + R.drawable.tv_4a_185, + R.drawable.tv_4a_186, + R.drawable.tv_4a_187, + R.drawable.tv_4a_188, + R.drawable.tv_4a_189, + R.drawable.tv_4a_190, + R.drawable.tv_4a_191, + R.drawable.tv_4a_192, + R.drawable.tv_4a_193, + R.drawable.tv_4a_194, + R.drawable.tv_4a_195, + R.drawable.tv_4a_196, + R.drawable.tv_4a_197, + R.drawable.tv_4a_198, + R.drawable.tv_4a_199, + R.drawable.tv_4a_200, + R.drawable.tv_4a_201, + R.drawable.tv_4a_202, + R.drawable.tv_4a_203, + R.drawable.tv_4a_204, + R.drawable.tv_4a_205, + R.drawable.tv_4a_206, + R.drawable.tv_4a_207, + R.drawable.tv_4a_208, + R.drawable.tv_4a_209, + R.drawable.tv_4a_210, + R.drawable.tv_4a_211, + R.drawable.tv_4a_212, + R.drawable.tv_4a_213, + R.drawable.tv_4a_214, + R.drawable.tv_4a_215, + R.drawable.tv_4a_216, + R.drawable.tv_4a_217, + R.drawable.tv_4a_218, + R.drawable.tv_4a_219, + R.drawable.tv_4a_220, + R.drawable.tv_4a_221, + R.drawable.tv_4a_222, + R.drawable.tv_4a_223, + R.drawable.tv_4a_224, + R.drawable.tv_4a_225, + R.drawable.tv_4a_226, + R.drawable.tv_4a_227, + R.drawable.tv_4a_228, + R.drawable.tv_4a_229, + R.drawable.tv_4a_230, + R.drawable.tv_4a_231, + R.drawable.tv_4a_232, + R.drawable.tv_4a_233, + R.drawable.tv_4a_234, + R.drawable.tv_4a_235, + R.drawable.tv_4a_236, + R.drawable.tv_4a_237, + R.drawable.tv_4a_238, + R.drawable.tv_4a_239, + 0 + }; + private int mNumPages; private String[] mPageTitles; private String[] mPageDescriptions; private int mCurrentPageIndex; + private int mPageTransitionDistance; + private ImageView mTvContentView; private PagingIndicator mPageIndicator; - private Button mButton; + private ImageView mArrowView; + private View mLogoView; + + private Animator mAnimator; + + public WelcomeFragment() { + enableFragmentTransition(FRAGMENT_EXIT_TRANSITION); + setEnterTransition(new CustomTransition(new CustomTransitionProvider() { + @Override + public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, + TransitionValues endValues) { + Animator animator = null; + switch (endValues.view.getId()) { + case R.id.logo: { + Animator inAnimator = AnimatorInflater.loadAnimator(getActivity(), + R.animator.onboarding_welcome_logo_enter); + Animator outAnimator = AnimatorInflater.loadAnimator(getActivity(), + R.animator.onboarding_welcome_logo_exit); + outAnimator.setStartDelay(LOGO_SPLASH_PAUSE_DURATION_MS); + animator = new AnimatorSet(); + ((AnimatorSet) animator).playSequentially(inAnimator, outAnimator); + animator.setTarget(view); + break; + } + case R.id.page_indicator: + view.setAlpha(0); + animator = AnimatorInflater.loadAnimator(getActivity(), + R.animator.onboarding_welcome_page_indicator_enter); + animator.setStartDelay(START_DELAY_PAGE_INDICATOR_MS); + animator.setTarget(view); + break; + case R.id.title: + view.setAlpha(0); + animator = AnimatorInflater.loadAnimator(getActivity(), + R.animator.onboarding_welcome_title_enter); + animator.setStartDelay(START_DELAY_TITLE_MS); + animator.setTarget(view); + break; + case R.id.description: + view.setAlpha(0); + animator = AnimatorInflater.loadAnimator(getActivity(), + R.animator.onboarding_welcome_description_enter); + animator.setStartDelay(START_DELAY_DESCRIPTION_MS); + animator.setTarget(view); + break; + case R.id.cloud1: + case R.id.cloud2: + view.setAlpha(0); + animator = AnimatorInflater.loadAnimator(getActivity(), + R.animator.onboarding_welcome_cloud_enter); + animator.setStartDelay(START_DELAY_CLOUD_MS); + animator.setTarget(view); + break; + case R.id.tv_container: { + view.setAlpha(0); + Animator tvAnimator = AnimatorInflater.loadAnimator(getActivity(), + R.animator.onboarding_welcome_tv_enter); + tvAnimator.setTarget(view); + Animator frameAnimator = SetupAnimationHelper.createFrameAnimator( + mTvContentView, TV_FRAMES_1_START); + frameAnimator.setStartDelay(START_DELAY_TV_CONTENTS_MS); + frameAnimator.setTarget(mTvContentView); + animator = new AnimatorSet(); + ((AnimatorSet) animator).playTogether(tvAnimator, frameAnimator); + animator.setStartDelay(START_DELAY_TV_MS); + break; + } + case R.id.shadow: + view.setAlpha(0); + animator = AnimatorInflater.loadAnimator(getActivity(), + R.animator.onboarding_welcome_shadow_enter); + animator.setStartDelay(START_DELAY_SHADOW_MS); + animator.setTarget(view); + break; + } + return animator; + } + + @Override + public Animator onDisappear(ViewGroup sceneRoot, View view, + TransitionValues startValues, TransitionValues endValues) { + return null; + } + })); + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); + mAnimator = null; + mPageTransitionDistance = getResources().getDimensionPixelOffset( + R.dimen.onboarding_welcome_page_transition_distance); mPageTitles = getResources().getStringArray(R.array.welcome_page_titles); mPageDescriptions = getResources().getStringArray(R.array.welcome_page_descriptions); mNumPages = mPageTitles.length; mCurrentPageIndex = 0; + mTvContentView = (ImageView) view.findViewById(R.id.tv_content); mPageIndicator = (PagingIndicator) view.findViewById(R.id.page_indicator); mPageIndicator.setPageCount(mNumPages); - mButton = (Button) view.findViewById(R.id.button); - mButton.setOnClickListener(new OnClickListener() { + mPageIndicator.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (mCurrentPageIndex == mNumPages - 1) { onActionClick(ACTION_NEXT); } else { showPage(++mCurrentPageIndex); + startTvFrameAnimation(mCurrentPageIndex); } } }); + mArrowView = (ImageView) view.findViewById(R.id.arrow); + mLogoView = view.findViewById(R.id.logo); showPage(mCurrentPageIndex); return view; } @@ -83,19 +724,64 @@ public class WelcomeFragment extends SetupFragment { return fragment; } - private void showPage(int pageIndex) { + private void showPage(final int pageIndex) { SetupFragment fragment = getPage(pageIndex); - FragmentTransaction ft = getFragmentManager().beginTransaction(); - if (pageIndex != 0) { - ft.setCustomAnimations(SetupFragment.ANIM_ENTER, - SetupFragment.ANIM_EXIT); + if (pageIndex == 0) { + fragment.enableFragmentTransition(FRAGMENT_EXIT_TRANSITION); } - ft.replace(R.id.page_container, fragment).commit(); if (pageIndex == mNumPages - 1) { - mButton.setText(R.string.welcome_start_button_text); - } else { - mButton.setText(R.string.welcome_next_button_text); + fragment.enableFragmentTransition(FRAGMENT_ENTER_TRANSITION); } + fragment.setTransitionDistance(mPageTransitionDistance); + fragment.setTransitionDuration(WELCOME_PAGE_TRANSITION_DURATION_MS); + getChildFragmentManager().beginTransaction().replace(R.id.page_container, fragment) + .commit(); mPageIndicator.onPageSelected(pageIndex, pageIndex != 0); } + + @Override + protected int[] getParentIdsForDelay() { + return new int[] {R.id.welcome_fragment_root}; + } + + private void startTvFrameAnimation(int newPageIndex) { + if (mAnimator != null) { + mAnimator.cancel(); + } + // TODO: Change the magic numbers to constants once the animation specification is given. + AnimatorSet animatorSet = new AnimatorSet(); + switch (newPageIndex) { + case 1: + mLogoView.setVisibility(View.GONE); + animatorSet.playSequentially( + SetupAnimationHelper.createFrameAnimator(mTvContentView, TV_FRAMES_1_END), + SetupAnimationHelper.createFrameAnimator(mArrowView, + TV_FRAMES_2_BLUE_ARROW), + SetupAnimationHelper.createFrameAnimator(mTvContentView, + TV_FRAMES_2_BLUE_START), + SetupAnimationHelper.createFrameAnimatorWithDelay(mTvContentView, + TV_FRAMES_2_BLUE_END, BLUE_SCREEN_HOLD_DURATION_MS), + SetupAnimationHelper.createFrameAnimator(mArrowView, + TV_FRAMES_2_ORANGE_ARROW), + SetupAnimationHelper.createFrameAnimator(mTvContentView, + TV_FRAMES_2_ORANGE_START)); + mArrowView.setVisibility(View.VISIBLE); + break; + case 2: + mArrowView.setVisibility(View.GONE); + animatorSet.playSequentially( + SetupAnimationHelper.createFadeOutAnimator(mTvContentView, 333, true), + SetupAnimationHelper.createFrameAnimator(mTvContentView, + TV_FRAMES_3_START)); + break; + case 3: + animatorSet.playSequentially( + SetupAnimationHelper.createFadeOutAnimator(mTvContentView, 333, true), + SetupAnimationHelper.createFrameAnimator(mTvContentView, + TV_FRAMES_4_START)); + break; + } + mAnimator = SetupAnimationHelper.applyAnimationTimeScale(animatorSet); + mAnimator.start(); + } } |