1b86a6c2c71514e0cb693597a955e224811b90f96Dake Gu// CHECKSTYLE:OFF Generated code
2b86a6c2c71514e0cb693597a955e224811b90f96Dake Gu/* This file is auto-generated from ErrorSupportFragment.java.  DO NOT MODIFY. */
3b86a6c2c71514e0cb693597a955e224811b90f96Dake Gu
4b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout/*
5b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * Copyright (C) 2014 The Android Open Source Project
6b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout *
7b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * in compliance with the License. You may obtain a copy of the License at
9b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout *
10b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * http://www.apache.org/licenses/LICENSE-2.0
11b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout *
12b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License
13b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * or implied. See the License for the specific language governing permissions and limitations under
15b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * the License.
16b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout */
17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.leanback.app;
18b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
193103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.graphics.Paint;
203103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.graphics.Paint.FontMetricsInt;
213103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.graphics.PixelFormat;
223103f63e99d47573823957f7aa34308555873221Aurimas Liutikasimport android.graphics.drawable.Drawable;
23b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stoutimport android.os.Bundle;
24b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stoutimport android.text.TextUtils;
25b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stoutimport android.view.LayoutInflater;
26b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stoutimport android.view.View;
27b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stoutimport android.view.ViewGroup;
28b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stoutimport android.widget.Button;
29b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stoutimport android.widget.ImageView;
30b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stoutimport android.widget.TextView;
31b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
328619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikasimport androidx.leanback.R;
338619e0ef7062b6a714f22af993e4b440fae7ef08Aurimas Liutikas
34b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout/**
35b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout * A fragment for displaying an error indication.
369870cf8fc2cbe52e761b850f58d5ac26db26a4c8Dake Gu * @deprecated use {@link ErrorSupportFragment}
37b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout */
389870cf8fc2cbe52e761b850f58d5ac26db26a4c8Dake Gu@Deprecated
39a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gupublic class ErrorFragment extends BrandedFragment {
40b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
41a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu    private ViewGroup mErrorFrame;
42b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private ImageView mImageView;
43b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private TextView mTextView;
44b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private Button mButton;
45b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private Drawable mDrawable;
46b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private CharSequence mMessage;
47b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private String mButtonText;
48b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private View.OnClickListener mButtonClickListener;
49b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private Drawable mBackgroundDrawable;
50b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private boolean mIsBackgroundTranslucent = true;
51b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
52b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
53b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Sets the default background.
54b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     *
55b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * @param translucent True to set a translucent background.
56b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
57b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public void setDefaultBackground(boolean translucent) {
58b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mBackgroundDrawable = null;
59b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mIsBackgroundTranslucent = translucent;
60b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateBackground();
61b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateMessage();
62b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
63b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
64b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
65b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Returns true if the background is translucent.
66b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
67b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public boolean isBackgroundTranslucent() {
68b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        return mIsBackgroundTranslucent;
69b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
70b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
71b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
72b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Sets a drawable for the fragment background.
73b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     *
74b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * @param drawable The drawable used for the background.
75b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
76b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public void setBackgroundDrawable(Drawable drawable) {
77b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mBackgroundDrawable = drawable;
78b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        if (drawable != null) {
79b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            final int opacity = drawable.getOpacity();
803103f63e99d47573823957f7aa34308555873221Aurimas Liutikas            mIsBackgroundTranslucent = (opacity == PixelFormat.TRANSLUCENT
813103f63e99d47573823957f7aa34308555873221Aurimas Liutikas                    || opacity == PixelFormat.TRANSPARENT);
82b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        }
83b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateBackground();
84b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateMessage();
85b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
86b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
87b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
88b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Returns the background drawable.  May be null if a default is used.
89b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
90b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public Drawable getBackgroundDrawable() {
91b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        return mBackgroundDrawable;
92b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
93b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
94b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
95b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Sets the drawable to be used for the error image.
96b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     *
97b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * @param drawable The drawable used for the error image.
98b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
99b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public void setImageDrawable(Drawable drawable) {
100b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mDrawable = drawable;
101b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateImageDrawable();
102b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
103b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
104b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
105b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Returns the drawable used for the error image.
106b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
107b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public Drawable getImageDrawable() {
108b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        return mDrawable;
109b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
110b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
111b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
112b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Sets the error message.
113b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     *
114b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * @param message The error message.
115b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
116b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public void setMessage(CharSequence message) {
117b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mMessage = message;
118b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateMessage();
119b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
120b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
121b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
122b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Returns the error message.
123b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
124b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public CharSequence getMessage() {
125b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        return mMessage;
126b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
127b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
128b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
129b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Sets the button text.
130b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     *
131b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * @param text The button text.
132b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
133b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public void setButtonText(String text) {
134b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mButtonText = text;
135b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateButton();
136b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
137b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
138b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
139b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Returns the button text.
140b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
141b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public String getButtonText() {
142b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        return mButtonText;
143b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
144b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
145b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
146b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Set the button click listener.
147b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     *
148b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * @param clickListener The click listener for the button.
149b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
150b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public void setButtonClickListener(View.OnClickListener clickListener) {
151b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mButtonClickListener = clickListener;
152b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateButton();
153b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
154b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
155b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    /**
156b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     * Returns the button click listener.
157b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout     */
158b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public View.OnClickListener getButtonClickListener() {
159b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        return mButtonClickListener;
160b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
161b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
162b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    @Override
163b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public View onCreateView(LayoutInflater inflater, ViewGroup container,
164b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            Bundle savedInstanceState) {
165b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        View root = inflater.inflate(R.layout.lb_error_fragment, container, false);
166b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
167a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu        mErrorFrame = (ViewGroup) root.findViewById(R.id.error_frame);
168b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateBackground();
169b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
170a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu        installTitleView(inflater, mErrorFrame, savedInstanceState);
171a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu
172b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mImageView = (ImageView) root.findViewById(R.id.image);
173b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateImageDrawable();
174b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
175b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mTextView = (TextView) root.findViewById(R.id.message);
176b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateMessage();
177b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
178b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mButton = (Button) root.findViewById(R.id.button);
179b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        updateButton();
180b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
181b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        FontMetricsInt metrics = getFontMetricsInt(mTextView);
182b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        int underImageBaselineMargin = container.getResources().getDimensionPixelSize(
183b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout                R.dimen.lb_error_under_image_baseline_margin);
184b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        setTopMargin(mTextView, underImageBaselineMargin + metrics.ascent);
185b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
186b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        int underMessageBaselineMargin = container.getResources().getDimensionPixelSize(
187b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout                R.dimen.lb_error_under_message_baseline_margin);
188b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        setTopMargin(mButton, underMessageBaselineMargin - metrics.descent);
189b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
190b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        return root;
191b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
192b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
193b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private void updateBackground() {
194b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        if (mErrorFrame != null) {
195b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            if (mBackgroundDrawable != null) {
196b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout                mErrorFrame.setBackground(mBackgroundDrawable);
197b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            } else {
198b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout                mErrorFrame.setBackgroundColor(mErrorFrame.getResources().getColor(
1993103f63e99d47573823957f7aa34308555873221Aurimas Liutikas                        mIsBackgroundTranslucent
2003103f63e99d47573823957f7aa34308555873221Aurimas Liutikas                                ? R.color.lb_error_background_color_translucent
2013103f63e99d47573823957f7aa34308555873221Aurimas Liutikas                                : R.color.lb_error_background_color_opaque));
202b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            }
203b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        }
204b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
205b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
206b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private void updateMessage() {
207b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        if (mTextView != null) {
208b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            mTextView.setText(mMessage);
209b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            mTextView.setVisibility(TextUtils.isEmpty(mMessage) ? View.GONE : View.VISIBLE);
210b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        }
211b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
212b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
213b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private void updateImageDrawable() {
214b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        if (mImageView != null) {
215b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            mImageView.setImageDrawable(mDrawable);
216b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            mImageView.setVisibility(mDrawable == null ? View.GONE : View.VISIBLE);
217b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        }
218b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
219b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
220b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private void updateButton() {
221b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        if (mButton != null) {
222b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            mButton.setText(mButtonText);
223b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            mButton.setOnClickListener(mButtonClickListener);
224b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            mButton.setVisibility(TextUtils.isEmpty(mButtonText) ? View.GONE : View.VISIBLE);
225b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout            mButton.requestFocus();
226b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        }
227b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
228b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
229b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    @Override
230b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    public void onStart() {
231b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        super.onStart();
232b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        mErrorFrame.requestFocus();
233b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
234b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
235b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private static FontMetricsInt getFontMetricsInt(TextView textView) {
236b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
237b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        paint.setTextSize(textView.getTextSize());
238b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        paint.setTypeface(textView.getTypeface());
239b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        return paint.getFontMetricsInt();
240b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
241b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout
242b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    private static void setTopMargin(TextView textView, int topMargin) {
243b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) textView.getLayoutParams();
244b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        lp.topMargin = topMargin;
245b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout        textView.setLayoutParams(lp);
246b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout    }
247a373804d10f93a9488adc35cf6ce44dce09b3778Dake Gu
248b7c2e023ab13ac158badfc9f4e17fd33fd6bf274Craig Stout}
249