1 // CHECKSTYLE:OFF Generated code
2 /* This file is auto-generated from OnboardingDemoFragment.java.  DO NOT MODIFY. */
3 
4 /*
5  * Copyright (C) 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software distributed under the License
13  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14  * or implied. See the License for the specific language governing permissions and limitations under
15  * the License.
16  */
17 package com.example.android.leanback;
18 
19 import android.animation.Animator;
20 import android.animation.AnimatorListenerAdapter;
21 import android.animation.AnimatorSet;
22 import android.animation.ObjectAnimator;
23 import android.graphics.drawable.AnimationDrawable;
24 import android.view.LayoutInflater;
25 import android.view.View;
26 import android.view.ViewGroup;
27 import android.widget.ImageView;
28 
29 import androidx.leanback.app.OnboardingSupportFragment;
30 
31 import org.jspecify.annotations.NonNull;
32 import org.jspecify.annotations.Nullable;
33 
34 import java.util.ArrayList;
35 
36 public class OnboardingDemoSupportFragment extends OnboardingSupportFragment {
37     private static final long ANIMATION_DURATION = 1000;
38 
39     private static final int[] CONTENT_BACKGROUNDS = {
40             R.drawable.tv_bg,
41             R.drawable.gallery_photo_6,
42             R.drawable.gallery_photo_8
43     };
44 
45     private static final int[] CONTENT_ANIMATIONS = {
46             R.drawable.tv_content,
47             android.R.drawable.stat_sys_download,
48             android.R.drawable.ic_popup_sync
49     };
50 
51     private String[] mTitles;
52     private String[] mDescriptions;
53 
54     private View mBackgroundView;
55     private View mContentView;
56     private ImageView mContentBackgroundView;
57     private ImageView mContentAnimationView;
58 
59     private Animator mContentAnimator;
60 
61     @SuppressWarnings("deprecation")
62     @Override
onAttach(android.app.Activity activity)63     public void onAttach(android.app.Activity activity) {
64         super.onAttach(activity);
65         mTitles = getResources().getStringArray(R.array.onboarding_page_titles);
66         mDescriptions = getResources().getStringArray(R.array.onboarding_page_descriptions);
67         setLogoResourceId(R.drawable.ic_launcher);
68     }
69 
70     @Override
getPageCount()71     protected int getPageCount() {
72         return mTitles.length;
73     }
74 
75     @Override
getPageTitle(int i)76     protected CharSequence getPageTitle(int i) {
77         return mTitles[i];
78     }
79 
80     @Override
getPageDescription(int i)81     protected CharSequence getPageDescription(int i) {
82         return mDescriptions[i];
83     }
84 
85     @Override
onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup)86     protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {
87         mBackgroundView = layoutInflater.inflate(R.layout.onboarding_image, viewGroup, false);
88         return mBackgroundView;
89     }
90 
91     @Override
onCreateContentView(@onNull LayoutInflater layoutInflater, @NonNull ViewGroup viewGroup)92     protected @Nullable View onCreateContentView(@NonNull LayoutInflater layoutInflater,
93             @NonNull ViewGroup viewGroup) {
94         mContentView = layoutInflater.inflate(R.layout.onboarding_content, viewGroup, false);
95         mContentBackgroundView = (ImageView) mContentView.findViewById(R.id.background_image);
96         mContentAnimationView = (ImageView) mContentView.findViewById(R.id.animation_image);
97         return mContentView;
98     }
99 
100     @Override
onCreateForegroundView(@onNull LayoutInflater layoutInflater, @NonNull ViewGroup viewGroup)101     protected @Nullable View onCreateForegroundView(@NonNull LayoutInflater layoutInflater,
102             @NonNull ViewGroup viewGroup) {
103         return null;
104     }
105 
106     @Override
onCreateEnterAnimation()107     protected Animator onCreateEnterAnimation() {
108         ArrayList<Animator> animators = new ArrayList<>();
109         animators.add(createFadeInAnimator(mBackgroundView));
110         mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[0]);
111         mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[0]);
112         mContentAnimator = createFadeInAnimator(mContentView);
113         animators.add(mContentAnimator);
114         AnimatorSet set = new AnimatorSet();
115         set.playTogether(animators);
116         set.addListener(new AnimatorListenerAdapter() {
117             @Override
118             public void onAnimationEnd(Animator animation) {
119                 ((AnimationDrawable) mContentAnimationView.getDrawable()).start();
120             }
121         });
122         return set;
123     }
124 
125     @Override
onPageChanged(final int newPage, int previousPage)126     protected void onPageChanged(final int newPage, int previousPage) {
127         if (mContentAnimator != null) {
128             mContentAnimator.cancel();
129         }
130         ((AnimationDrawable) mContentAnimationView.getDrawable()).stop();
131         Animator fadeOut = createFadeOutAnimator(mContentView);
132         fadeOut.addListener(new AnimatorListenerAdapter() {
133             @Override
134             public void onAnimationEnd(Animator animation) {
135                 mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);
136                 mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);
137             }
138         });
139         Animator fadeIn = createFadeInAnimator(mContentView);
140         fadeIn.addListener(new AnimatorListenerAdapter() {
141             @Override
142             public void onAnimationEnd(Animator animation) {
143                 ((AnimationDrawable) mContentAnimationView.getDrawable()).start();
144             }
145         });
146         AnimatorSet set = new AnimatorSet();
147         set.playSequentially(fadeOut, fadeIn);
148         set.start();
149         mContentAnimator = set;
150     }
151 
createFadeInAnimator(View view)152     private Animator createFadeInAnimator(View view) {
153         return ObjectAnimator.ofFloat(view, View.ALPHA, 0.0f, 1.0f).setDuration(ANIMATION_DURATION);
154     }
155 
createFadeOutAnimator(View view)156     private Animator createFadeOutAnimator(View view) {
157         return ObjectAnimator.ofFloat(view, View.ALPHA, 1.0f, 0.0f).setDuration(ANIMATION_DURATION);
158     }
159 
160     @Override
onFinishFragment()161     protected void onFinishFragment() {
162         getActivity().finish();
163     }
164 }
165