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 */ 14ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.leanback.widget; 15ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 16ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.animation.Animator; 17ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.graphics.drawable.Drawable; 18db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Guimport android.text.TextUtils; 19ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.view.LayoutInflater; 20ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.view.View; 21ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.view.ViewGroup; 22ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.widget.ImageView; 23ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport android.widget.TextView; 24ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 258619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport androidx.annotation.NonNull; 268619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport androidx.leanback.R; 278619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikas 28ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingimport java.util.List; 29ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 30ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing/** 31ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * GuidanceStylist is used within a {@link androidx.leanback.app.GuidedStepFragment} 32ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * to display contextual information for the decision(s) required at that step. 33ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 34ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Many aspects of the base GuidanceStylist can be customized through theming; see the theme 35ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * attributes below. Note that these attributes are not set on individual elements in layout 36ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * XML, but instead would be set in a custom theme. See 37ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <a href="http://developer.android.com/guide/topics/ui/themes.html">Styles and Themes</a> 38ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * for more information. 39ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 40ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * If these hooks are insufficient, this class may also be subclassed. Subclasses 41ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * may wish to override the {@link #onProvideLayoutId} method to change the layout file used to 42ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * display the guidance; more complex layouts may be supported by also providing a subclass of 43ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@link GuidanceStylist.Guidance} with extra fields. 44ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 45ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Note: If an alternate layout is provided, the following view IDs should be used to refer to base 46ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * elements: 47ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <ul> 48ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * <li>{@link androidx.leanback.R.id#guidance_title}</li> 49ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * <li>{@link androidx.leanback.R.id#guidance_description}</li> 50ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * <li>{@link androidx.leanback.R.id#guidance_breadcrumb}</li> 51ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * <li>{@link androidx.leanback.R.id#guidance_icon}</li> 52ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * </ul><p> 53ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * View IDs are allowed to be missing, in which case the corresponding views will be null. 54ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * 55ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * @attr ref androidx.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepImeAppearingAnimation 56ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * @attr ref androidx.leanback.R.styleable#LeanbackGuidedStepTheme_guidedStepImeDisappearingAnimation 57ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * @attr ref androidx.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceContainerStyle 58ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * @attr ref androidx.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceTitleStyle 59ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * @attr ref androidx.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceDescriptionStyle 60ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * @attr ref androidx.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceBreadcrumbStyle 61ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * @attr ref androidx.leanback.R.styleable#LeanbackGuidedStepTheme_guidanceIconStyle 62ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * @see androidx.leanback.app.GuidedStepFragment 63ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @see GuidanceStylist.Guidance 64ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 65ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesingpublic class GuidanceStylist implements FragmentAnimationProvider { 66ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 67ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 68ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * A data class representing contextual information for a {@link 69ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * androidx.leanback.app.GuidedStepFragment}. Guidance consists of a short title, 70ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * a longer description, a breadcrumb to help with global navigation (often indicating where 71ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * the back button will lead), and an optional icon. All this information is intended to 72ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * provide users with the appropriate context to make the decision(s) required by the current 73ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * step. 74ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 75ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Clients may provide a subclass of this if they wish to remember auxiliary data for use in 76ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * a customized GuidanceStylist. 77ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 78ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public static class Guidance { 79ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mTitle; 80ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mDescription; 81ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final String mBreadcrumb; 82ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private final Drawable mIconDrawable; 83ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 84ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 85ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Constructs a Guidance object with the specified title, description, breadcrumb, and 86ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * icon drawable. 87ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param title The title for the current guided step. 88ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param description The description for the current guided step. 89ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param breadcrumb The breadcrumb for the current guided step. 90ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param icon The icon drawable representing the current guided step. 91ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 92ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public Guidance(String title, String description, String breadcrumb, Drawable icon) { 93ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumb = breadcrumb; 94ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitle = title; 95ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescription = description; 96ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mIconDrawable = icon; 97ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 98ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 99ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 100ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the title specified when this Guidance was constructed. 101ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The title for this Guidance. 102ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 103ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getTitle() { 104ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mTitle; 105ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 106ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 107ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 108ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the description specified when this Guidance was constructed. 109ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The description for this Guidance. 110ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 111ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getDescription() { 112ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mDescription; 113ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 114ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 115ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 116ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the breadcrumb specified when this Guidance was constructed. 117ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The breadcrumb for this Guidance. 118ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 119ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public String getBreadcrumb() { 120ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mBreadcrumb; 121ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 122ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 123ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 124ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the icon drawable specified when this Guidance was constructed. 125ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The icon for this Guidance. 126ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 127ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public Drawable getIconDrawable() { 128ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mIconDrawable; 129ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 130ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 131ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 132ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mTitleView; 133ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mDescriptionView; 134ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private TextView mBreadcrumbView; 135ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing private ImageView mIconView; 136c6c8abcf06a958b8d1249d2d966daa8d267dca66susnata private View mGuidanceContainer; 137ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 138ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 139ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Creates an appropriately configured view for the given Guidance, using the provided 140ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * inflater and container. 141ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <p> 142ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <i>Note: Does not actually add the created view to the container; the caller should do 143ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * this.</i> 144ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param inflater The layout inflater to be used when constructing the view. 145ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param container The view group to be passed in the call to 146ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * <code>LayoutInflater.inflate</code>. 147ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @param guidance The guidance data for the view. 148ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The view to be added to the caller's view hierarchy. 149ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 150c6c8abcf06a958b8d1249d2d966daa8d267dca66susnata public View onCreateView( 151c6c8abcf06a958b8d1249d2d966daa8d267dca66susnata final LayoutInflater inflater, ViewGroup container, Guidance guidance) { 15250c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 153ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing View guidanceView = inflater.inflate(onProvideLayoutId(), container, false); 154ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitleView = (TextView) guidanceView.findViewById(R.id.guidance_title); 155ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumbView = (TextView) guidanceView.findViewById(R.id.guidance_breadcrumb); 156ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescriptionView = (TextView) guidanceView.findViewById(R.id.guidance_description); 157ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mIconView = (ImageView) guidanceView.findViewById(R.id.guidance_icon); 15850c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata mGuidanceContainer = guidanceView.findViewById(R.id.guidance_container); 159ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 160ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing // We allow any of the cached subviews to be null, so that subclasses can choose not to 161ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing // display a particular piece of information. 162ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mTitleView != null) { 163ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mTitleView.setText(guidance.getTitle()); 164ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 16550c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 166ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mBreadcrumbView != null) { 167ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mBreadcrumbView.setText(guidance.getBreadcrumb()); 168ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 16950c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 170ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mDescriptionView != null) { 171ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing mDescriptionView.setText(guidance.getDescription()); 172ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 17350c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 174ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing if (mIconView != null) { 17550c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata if (guidance.getIconDrawable() != null) { 17650c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata mIconView.setImageDrawable(guidance.getIconDrawable()); 17750c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata } else { 17850c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata mIconView.setVisibility(View.GONE); 17950c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata } 180ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 18150c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 18250c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata if (mGuidanceContainer != null) { 18350c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata CharSequence contentDescription = mGuidanceContainer.getContentDescription(); 184db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu if (TextUtils.isEmpty(contentDescription)) { 185259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu StringBuilder builder = new StringBuilder(); 186259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu if (!TextUtils.isEmpty(guidance.getBreadcrumb())) { 187259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu builder.append(guidance.getBreadcrumb()).append('\n'); 188259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu } 189259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu if (!TextUtils.isEmpty(guidance.getTitle())) { 190259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu builder.append(guidance.getTitle()).append('\n'); 191259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu } 192259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu if (!TextUtils.isEmpty(guidance.getDescription())) { 193259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu builder.append(guidance.getDescription()).append('\n'); 194259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu } 195259e5377e4a79f1060b16b7307a66fdd99530589Dake Gu mGuidanceContainer.setContentDescription(builder); 196db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu } 197db14ff55f779f2a0c6e2c4c8009bb67458beb267Dake Gu } 19850c611b216a4b2c8eb2bbd2a2848bb6da34677besusnata 199ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return guidanceView; 200ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 201ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 202ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 203d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu * Called when destroy the View created by GuidanceStylist. 204d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu */ 205d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu public void onDestroyView() { 20643e10e99e55c1c2eeca31fa13e9cc84160850f59Dake Gu mBreadcrumbView = null; 20743e10e99e55c1c2eeca31fa13e9cc84160850f59Dake Gu mDescriptionView = null; 20843e10e99e55c1c2eeca31fa13e9cc84160850f59Dake Gu mIconView = null; 20943e10e99e55c1c2eeca31fa13e9cc84160850f59Dake Gu mTitleView = null; 210d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu } 211d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu 212d14724d33d61385c27a00c31bbc67ad8eeb57b3cDake Gu /** 213ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Provides the resource ID of the layout defining the guidance view. Subclasses may override 214ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * to provide their own customized layouts. The base implementation returns 215ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * {@link androidx.leanback.R.layout#lb_guidance}. If overridden, the substituted 216ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * layout should contain matching IDs for any views that should be managed by the base class; 217ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * this can be achieved by starting with a copy of the base layout file. 218ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The resource ID of the layout to be inflated to define the guidance view. 219ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 220ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public int onProvideLayoutId() { 221ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return R.layout.lb_guidance; 222ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 223ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 224ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 225ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the title of the guidance. 226ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the title. 227ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 228ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getTitleView() { 229ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mTitleView; 230ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 231ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 232ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 233ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the description of the guidance. 234ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the description. 235ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 236ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getDescriptionView() { 237ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mDescriptionView; 238ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 239ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 240ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 241ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the breadcrumb of the guidance. 242ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The text view object for the breadcrumb. 243ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 244ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public TextView getBreadcrumbView() { 245ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mBreadcrumbView; 246ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 247ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 248ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 249ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * Returns the view displaying the icon of the guidance. 250ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * @return The image view object for the icon. 251ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 252ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing public ImageView getIconView() { 253ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing return mIconView; 254ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing } 255ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing 256ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing /** 257ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing * {@inheritDoc} 258ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing */ 259ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing @Override 2604158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing public void onImeAppearing(@NonNull List<Animator> animators) { 2614158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing } 2624158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing 2634158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing /** 2644158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing * {@inheritDoc} 2654158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing */ 2664158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing @Override 2674158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing public void onImeDisappearing(@NonNull List<Animator> animators) { 2684158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing } 2694158705d3f0751d419a08c47a659abeae5f6c196Kris Giesing 270ebd3d9078dbaebd10a9506ca086435eb63e8a2d2Kris Giesing} 271