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