GuidanceStylist.java revision 4158705d3f0751d419a08c47a659abeae5f6c196
1ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing/* 2ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Copyright (C) 2015 The Android Open Source Project 3ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * 4ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * in compliance with the License. You may obtain a copy of the License at 6ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * 7ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * http://www.apache.org/licenses/LICENSE-2.0 8ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * 9ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Unless required by applicable law or agreed to in writing, software distributed under the License 10ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * or implied. See the License for the specific language governing permissions and limitations under 12ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * the License. 13ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 14ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingpackage android.support.v17.leanback.widget; 15ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 16ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.animation.Animator; 17ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.animation.AnimatorInflater; 18ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.content.Context; 19ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.content.res.TypedArray; 20ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.graphics.drawable.Drawable; 21ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.support.annotation.NonNull; 22ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.support.v17.leanback.R; 23ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.util.TypedValue; 24ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.view.LayoutInflater; 25ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.view.View; 26ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.view.ViewGroup; 27ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.widget.ImageView; 28ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.widget.TextView; 29ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 30ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport java.util.List; 31ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 32ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing/** 33ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * GuidanceStylist is used within a {@link android.support.v17.leanback.app.GuidedStepFragment} 34ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * to display contextual information for the decision(s) required at that step. 35ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 36ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Many aspects of the base GuidanceStylist can be customized through theming; see the theme 37ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * attributes below. Note that these attributes are not set on individual elements in layout 38ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * XML, but instead would be set in a custom theme. See 39ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <a href="http://developer.android.com/guide/topics/ui/themes.html">Styles and Themes</a> 40ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * for more information. 41ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 42ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * If these hooks are insufficient, this class may also be subclassed. Subclasses 43ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * may wish to override the {@link #onProvideLayoutId} method to change the layout file used to 44ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * display the guidance; more complex layouts may be supported by also providing a subclass of 45ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@link GuidanceStylist.Guidance} with extra fields. 46ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 47ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Note: If an alternate layout is provided, the following view IDs should be used to refer to base 48ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * elements: 49ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <ul> 50ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <li>{@link android.support.v17.leanback.R.id#guidance_title}</li> 51ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <li>{@link android.support.v17.leanback.R.id#guidance_description}</li> 52ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <li>{@link android.support.v17.leanback.R.id#guidance_breadcrumb}</li> 53ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <li>{@link android.support.v17.leanback.R.id#guidance_icon}</li> 54ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * </ul><p> 55ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * View IDs are allowed to be missing, in which case the corresponding views will be null. 56ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * 57ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceEntryAnimation 58ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepEntryAnimation 59ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepExitAnimation 60ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepReentryAnimation 61ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepReturnAnimation 624158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepImeAppearingAnimation 634158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepImeDisappearingAnimation 64ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceContainerStyle 65ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceTitleStyle 66ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceDescriptionStyle 67ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceBreadcrumbStyle 68ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceIconStyle 69ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @see android.support.v17.leanback.app.GuidedStepFragment 70ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @see GuidanceStylist.Guidance 71ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 72ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingpublic class GuidanceStylist implements FragmentAnimationProvider { 73ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 74ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 75ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * A data class representing contextual information for a {@link 76ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * android.support.v17.leanback.app.GuidedStepFragment}. Guidance consists of a short title, 77ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * a longer description, a breadcrumb to help with global navigation (often indicating where 78ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * the back button will lead), and an optional icon. All this information is intended to 79ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * provide users with the appropriate context to make the decision(s) required by the current 80ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * step. 81ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 82ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Clients may provide a subclass of this if they wish to remember auxiliary data for use in 83ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * a customized GuidanceStylist. 84ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 85ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public static class Guidance { 86ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mTitle; 87ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mDescription; 88ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mBreadcrumb; 89ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final Drawable mIconDrawable; 90ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 91ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 92ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Constructs a Guidance object with the specified title, description, breadcrumb, and 93ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * icon drawable. 94ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param title The title for the current guided step. 95ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param description The description for the current guided step. 96ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param breadcrumb The breadcrumb for the current guided step. 97ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param icon The icon drawable representing the current guided step. 98ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 99ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public Guidance(String title, String description, String breadcrumb, Drawable icon) { 100ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumb = breadcrumb; 101ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitle = title; 102ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescription = description; 103ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mIconDrawable = icon; 104ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 105ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 106ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 107ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the title specified when this Guidance was constructed. 108ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The title for this Guidance. 109ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 110ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getTitle() { 111ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mTitle; 112ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 113ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 114ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 115ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the description specified when this Guidance was constructed. 116ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The description for this Guidance. 117ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 118ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getDescription() { 119ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mDescription; 120ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 121ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 122ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 123ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the breadcrumb specified when this Guidance was constructed. 124ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The breadcrumb for this Guidance. 125ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 126ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getBreadcrumb() { 127ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mBreadcrumb; 128ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 129ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 130ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 131ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the icon drawable specified when this Guidance was constructed. 132ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The icon for this Guidance. 133ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 134ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public Drawable getIconDrawable() { 135ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mIconDrawable; 136ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 137ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 138ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 139ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mTitleView; 140ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mDescriptionView; 141ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mBreadcrumbView; 142ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private ImageView mIconView; 143ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 144ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 145ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Creates an appropriately configured view for the given Guidance, using the provided 146ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * inflater and container. 147ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 148ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <i>Note: Does not actually add the created view to the container; the caller should do 149ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * this.</i> 150ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param inflater The layout inflater to be used when constructing the view. 151ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param container The view group to be passed in the call to 152ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <code>LayoutInflater.inflate</code>. 153ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param guidance The guidance data for the view. 154ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The view to be added to the caller's view hierarchy. 155ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 156ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public View onCreateView(LayoutInflater inflater, ViewGroup container, Guidance guidance) { 157ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing View guidanceView = inflater.inflate(onProvideLayoutId(), container, false); 158ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitleView = (TextView) guidanceView.findViewById(R.id.guidance_title); 159ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumbView = (TextView) guidanceView.findViewById(R.id.guidance_breadcrumb); 160ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescriptionView = (TextView) guidanceView.findViewById(R.id.guidance_description); 161ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mIconView = (ImageView) guidanceView.findViewById(R.id.guidance_icon); 162ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 163ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing // We allow any of the cached subviews to be null, so that subclasses can choose not to 164ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing // display a particular piece of information. 165ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mTitleView != null) { 166ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitleView.setText(guidance.getTitle()); 167ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 168ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mBreadcrumbView != null) { 169ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumbView.setText(guidance.getBreadcrumb()); 170ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 171ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mDescriptionView != null) { 172ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescriptionView.setText(guidance.getDescription()); 173ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 174ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mIconView != null) { 175ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mIconView.setImageDrawable(guidance.getIconDrawable()); 176ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 177ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return guidanceView; 178ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 179ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 180ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 181ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Provides the resource ID of the layout defining the guidance view. Subclasses may override 182ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * to provide their own customized layouts. The base implementation returns 183ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@link android.support.v17.leanback.R.layout#lb_guidance}. If overridden, the substituted 184ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * layout should contain matching IDs for any views that should be managed by the base class; 185ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * this can be achieved by starting with a copy of the base layout file. 186ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The resource ID of the layout to be inflated to define the guidance view. 187ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 188ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public int onProvideLayoutId() { 189ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return R.layout.lb_guidance; 190ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 191ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 192ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 193ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the title of the guidance. 194ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the title. 195ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 196ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getTitleView() { 197ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mTitleView; 198ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 199ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 200ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 201ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the description of the guidance. 202ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the description. 203ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 204ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getDescriptionView() { 205ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mDescriptionView; 206ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 207ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 208ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 209ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the breadcrumb of the guidance. 210ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the breadcrumb. 211ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 212ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getBreadcrumbView() { 213ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mBreadcrumbView; 214ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 215ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 216ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 217ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the icon of the guidance. 218ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The image view object for the icon. 219ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 220ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public ImageView getIconView() { 221ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mIconView; 222ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 223ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 224ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 225ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@inheritDoc} 226ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 227ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing @Override 228ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public void onActivityEnter(@NonNull List<Animator> animators) { 229ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mTitleView, R.attr.guidanceEntryAnimation); 230ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mBreadcrumbView, R.attr.guidanceEntryAnimation); 231ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mDescriptionView, R.attr.guidanceEntryAnimation); 232ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mIconView, R.attr.guidanceEntryAnimation); 233ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 234ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 235ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 236ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@inheritDoc} 237ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 238ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing @Override 239ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public void onActivityExit(@NonNull List<Animator> animators) {} 240ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 241ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 242ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@inheritDoc} 243ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 244ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing @Override 245ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public void onFragmentEnter(@NonNull List<Animator> animators) { 246ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mTitleView, R.attr.guidedStepEntryAnimation); 247ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mBreadcrumbView, R.attr.guidedStepEntryAnimation); 248ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mDescriptionView, R.attr.guidedStepEntryAnimation); 249ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mIconView, R.attr.guidedStepEntryAnimation); 250ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 251ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 252ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 253ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@inheritDoc} 254ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 255ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing @Override 256ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public void onFragmentExit(@NonNull List<Animator> animators) { 257ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mTitleView, R.attr.guidedStepExitAnimation); 258ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mBreadcrumbView, R.attr.guidedStepExitAnimation); 259ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mDescriptionView, R.attr.guidedStepExitAnimation); 260ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mIconView, R.attr.guidedStepExitAnimation); 261ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 262ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 263ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 264ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@inheritDoc} 265ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 266ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing @Override 267ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public void onFragmentReenter(@NonNull List<Animator> animators) { 268ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mTitleView, R.attr.guidedStepReentryAnimation); 269ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mBreadcrumbView, R.attr.guidedStepReentryAnimation); 270ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mDescriptionView, R.attr.guidedStepReentryAnimation); 271ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mIconView, R.attr.guidedStepReentryAnimation); 272ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 273ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 274ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 275ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@inheritDoc} 276ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 277ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing @Override 278ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public void onFragmentReturn(@NonNull List<Animator> animators) { 279ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mTitleView, R.attr.guidedStepReturnAnimation); 280ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mBreadcrumbView, R.attr.guidedStepReturnAnimation); 281ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mDescriptionView, R.attr.guidedStepReturnAnimation); 282ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing addAnimator(animators, mIconView, R.attr.guidedStepReturnAnimation); 283ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 284ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 2854158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing /** 2864158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing * {@inheritDoc} 2874158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing */ 2884158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing @Override 2894158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing public void onImeAppearing(@NonNull List<Animator> animators) { 2904158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing addAnimator(animators, mTitleView, R.attr.guidedStepImeAppearingAnimation); 2914158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing addAnimator(animators, mBreadcrumbView, R.attr.guidedStepImeAppearingAnimation); 2924158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing addAnimator(animators, mDescriptionView, R.attr.guidedStepImeAppearingAnimation); 2934158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing addAnimator(animators, mIconView, R.attr.guidedStepImeAppearingAnimation); 2944158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing } 2954158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing 2964158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing /** 2974158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing * {@inheritDoc} 2984158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing */ 2994158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing @Override 3004158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing public void onImeDisappearing(@NonNull List<Animator> animators) { 3014158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing addAnimator(animators, mTitleView, R.attr.guidedStepImeDisappearingAnimation); 3024158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing addAnimator(animators, mBreadcrumbView, R.attr.guidedStepImeDisappearingAnimation); 3034158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing addAnimator(animators, mDescriptionView, R.attr.guidedStepImeDisappearingAnimation); 3044158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing addAnimator(animators, mIconView, R.attr.guidedStepImeDisappearingAnimation); 3054158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing } 3064158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing 307ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private void addAnimator(List<Animator> animators, View v, int attrId) { 308ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (v != null) { 309ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing Context ctx = v.getContext(); 310ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing TypedValue typedValue = new TypedValue(); 311ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing ctx.getTheme().resolveAttribute(attrId, typedValue, true); 312ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing Animator animator = AnimatorInflater.loadAnimator(ctx, typedValue.resourceId); 313ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing animator.setTarget(v); 314ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing animators.add(animator); 315ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 316ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 317ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 318ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing} 319