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.graphics.drawable.Drawable; 20ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.support.annotation.NonNull; 21ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.support.v17.leanback.R; 22db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Guimport android.text.TextUtils; 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 * 574158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepImeAppearingAnimation 584158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepImeDisappearingAnimation 59ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceContainerStyle 60ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceTitleStyle 61ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceDescriptionStyle 62ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceBreadcrumbStyle 63ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @attr ref android.support.v17.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceIconStyle 64ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @see android.support.v17.leanback.app.GuidedStepFragment 65ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @see GuidanceStylist.Guidance 66ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 67ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingpublic class GuidanceStylist implements FragmentAnimationProvider { 68ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 69ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 70ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * A data class representing contextual information for a {@link 71ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * android.support.v17.leanback.app.GuidedStepFragment}. Guidance consists of a short title, 72ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * a longer description, a breadcrumb to help with global navigation (often indicating where 73ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * the back button will lead), and an optional icon. All this information is intended to 74ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * provide users with the appropriate context to make the decision(s) required by the current 75ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * step. 76ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 77ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Clients may provide a subclass of this if they wish to remember auxiliary data for use in 78ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * a customized GuidanceStylist. 79ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 80ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public static class Guidance { 81ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mTitle; 82ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mDescription; 83ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mBreadcrumb; 84ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final Drawable mIconDrawable; 85ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 86ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 87ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Constructs a Guidance object with the specified title, description, breadcrumb, and 88ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * icon drawable. 89ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param title The title for the current guided step. 90ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param description The description for the current guided step. 91ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param breadcrumb The breadcrumb for the current guided step. 92ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param icon The icon drawable representing the current guided step. 93ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 94ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public Guidance(String title, String description, String breadcrumb, Drawable icon) { 95ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumb = breadcrumb; 96ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitle = title; 97ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescription = description; 98ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mIconDrawable = icon; 99ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 100ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 101ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 102ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the title specified when this Guidance was constructed. 103ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The title for this Guidance. 104ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 105ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getTitle() { 106ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mTitle; 107ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 108ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 109ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 110ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the description specified when this Guidance was constructed. 111ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The description for this Guidance. 112ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 113ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getDescription() { 114ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mDescription; 115ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 116ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 117ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 118ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the breadcrumb specified when this Guidance was constructed. 119ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The breadcrumb for this Guidance. 120ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 121ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getBreadcrumb() { 122ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mBreadcrumb; 123ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 124ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 125ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 126ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the icon drawable specified when this Guidance was constructed. 127ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The icon for this Guidance. 128ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 129ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public Drawable getIconDrawable() { 130ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mIconDrawable; 131ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 132ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 133ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 134ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mTitleView; 135ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mDescriptionView; 136ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mBreadcrumbView; 137ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private ImageView mIconView; 138c6c8abcf06a958b8d1249d2d966daa8d267dca66susnata private View mGuidanceContainer; 139ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 140ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 141ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Creates an appropriately configured view for the given Guidance, using the provided 142ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * inflater and container. 143ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 144ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <i>Note: Does not actually add the created view to the container; the caller should do 145ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * this.</i> 146ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param inflater The layout inflater to be used when constructing the view. 147ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param container The view group to be passed in the call to 148ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <code>LayoutInflater.inflate</code>. 149ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param guidance The guidance data for the view. 150ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The view to be added to the caller's view hierarchy. 151ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 152c6c8abcf06a958b8d1249d2d966daa8d267dca66susnata public View onCreateView( 153c6c8abcf06a958b8d1249d2d966daa8d267dca66susnata final LayoutInflater inflater, ViewGroup container, Guidance guidance) { 15450c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 155ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing View guidanceView = inflater.inflate(onProvideLayoutId(), container, false); 156ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitleView = (TextView) guidanceView.findViewById(R.id.guidance_title); 157ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumbView = (TextView) guidanceView.findViewById(R.id.guidance_breadcrumb); 158ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescriptionView = (TextView) guidanceView.findViewById(R.id.guidance_description); 159ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mIconView = (ImageView) guidanceView.findViewById(R.id.guidance_icon); 16050c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata mGuidanceContainer = guidanceView.findViewById(R.id.guidance_container); 161ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 162ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing // We allow any of the cached subviews to be null, so that subclasses can choose not to 163ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing // display a particular piece of information. 164ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mTitleView != null) { 165ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitleView.setText(guidance.getTitle()); 166ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 16750c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 168ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mBreadcrumbView != null) { 169ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumbView.setText(guidance.getBreadcrumb()); 170ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 17150c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 172ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mDescriptionView != null) { 173ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescriptionView.setText(guidance.getDescription()); 174ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 17550c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 176ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mIconView != null) { 17750c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata if (guidance.getIconDrawable() != null) { 17850c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata mIconView.setImageDrawable(guidance.getIconDrawable()); 17950c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata } else { 18050c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata mIconView.setVisibility(View.GONE); 18150c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata } 182ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 18350c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 18450c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata if (mGuidanceContainer != null) { 18550c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata CharSequence contentDescription = mGuidanceContainer.getContentDescription(); 186db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu if (TextUtils.isEmpty(contentDescription)) { 18750c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata mGuidanceContainer.setContentDescription(new StringBuilder() 188db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu .append(guidance.getBreadcrumb()).append('\n') 189db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu .append(guidance.getTitle()).append('\n') 190db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu .append(guidance.getDescription()) 191db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu .toString()); 192db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu } 193db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu } 19450c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 195ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return guidanceView; 196ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 197ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 198ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 199d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu * Called when destroy the View created by GuidanceStylist. 200d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu */ 201d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu public void onDestroyView() { 20243e10e99e55c1c2eeca31fa13e9cc84160850f59Dake Gu mBreadcrumbView = null; 20343e10e99e55c1c2eeca31fa13e9cc84160850f59Dake Gu mDescriptionView = null; 20443e10e99e55c1c2eeca31fa13e9cc84160850f59Dake Gu mIconView = null; 20543e10e99e55c1c2eeca31fa13e9cc84160850f59Dake Gu mTitleView = null; 206d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu } 207d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu 208d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu /** 209ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Provides the resource ID of the layout defining the guidance view. Subclasses may override 210ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * to provide their own customized layouts. The base implementation returns 211ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@link android.support.v17.leanback.R.layout#lb_guidance}. If overridden, the substituted 212ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * layout should contain matching IDs for any views that should be managed by the base class; 213ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * this can be achieved by starting with a copy of the base layout file. 214ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The resource ID of the layout to be inflated to define the guidance view. 215ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 216ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public int onProvideLayoutId() { 217ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return R.layout.lb_guidance; 218ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 219ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 220ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 221ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the title of the guidance. 222ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the title. 223ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 224ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getTitleView() { 225ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mTitleView; 226ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 227ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 228ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 229ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the description of the guidance. 230ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the description. 231ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 232ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getDescriptionView() { 233ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mDescriptionView; 234ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 235ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 236ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 237ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the breadcrumb of the guidance. 238ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the breadcrumb. 239ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 240ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getBreadcrumbView() { 241ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mBreadcrumbView; 242ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 243ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 244ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 245ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the icon of the guidance. 246ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The image view object for the icon. 247ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 248ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public ImageView getIconView() { 249ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mIconView; 250ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 251ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 252ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 253ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@inheritDoc} 254ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 255ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing @Override 2564158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing public void onImeAppearing(@NonNull List<Animator> animators) { 2574158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing } 2584158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing 2594158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing /** 2604158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing * {@inheritDoc} 2614158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing */ 2624158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing @Override 2634158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing public void onImeDisappearing(@NonNull List<Animator> animators) { 2644158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing } 2654158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing 266ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing} 267