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