• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.dialer.widget;
18 
19 import android.content.Context;
20 import android.preference.Preference;
21 import android.text.method.LinkMovementMethod;
22 import android.util.AttributeSet;
23 import android.view.View;
24 import android.widget.TextView;
25 
26 /**
27  * Provides a {@link TextView} inside a preference. Useful for displaying static text which may
28  * contain hyperlinks.
29  */
30 public class TextViewPreference extends Preference {
31 
32   /**
33    * The resource ID of the text to be populated in the {@link TextView} when a resource ID is used.
34    */
35   private int textResourceId = 0;
36 
37   /** The text to be populated in the {@link TextView} when a {@link CharSequence} is used. */
38   private CharSequence text;
39 
40   /** The {@link TextView} containing the text. */
41   private TextView textView;
42 
43   /**
44    * Instantiates the {@link TextViewPreference} instance.
45    *
46    * @param context The Context this is associated with, through which it can access the current
47    *     theme, resources, etc.
48    * @param attrs The attributes of the XML tag that is inflating the preference.
49    * @param defStyleAttr An attribute in the current theme that contains a reference to a style
50    *     resource that supplies default values for the view. Can be 0 to not look for defaults.
51    * @param defStyleRes A resource identifier of a style resource that supplies default values for
52    *     the view, used only if defStyleAttr is 0 or can not be found in the theme. Can be 0 to not
53    *     look for defaults.
54    */
TextViewPreference( Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)55   public TextViewPreference(
56       Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
57     super(context, attrs, defStyleAttr, defStyleRes);
58 
59     setLayoutResource(R.layout.text_view_preference);
60   }
61 
62   /**
63    * Instantiates the {@link TextViewPreference} instance.
64    *
65    * @param context The Context this is associated with, through which it can access the current
66    *     theme, resources, etc.
67    * @param attrs The attributes of the XML tag that is inflating the preference.
68    * @param defStyleAttr An attribute in the current theme that contains a reference to a style
69    *     resource that supplies default values for the view. Can be 0 to not look for defaults.
70    */
TextViewPreference(Context context, AttributeSet attrs, int defStyleAttr)71   public TextViewPreference(Context context, AttributeSet attrs, int defStyleAttr) {
72     this(context, attrs, defStyleAttr, 0);
73   }
74 
75   /**
76    * Instantiates the {@link TextViewPreference} instance.
77    *
78    * @param context The Context this is associated with, through which it can access the current
79    *     theme, resources, etc.
80    * @param attrs The attributes of the XML tag that is inflating the preference.
81    */
TextViewPreference(Context context, AttributeSet attrs)82   public TextViewPreference(Context context, AttributeSet attrs) {
83     this(context, attrs, android.R.attr.preferenceStyle, 0);
84   }
85 
86   /**
87    * Instantiates the {@link TextViewPreference} instance.
88    *
89    * @param context The Context this is associated with, through which it can access the current
90    *     theme, resources, etc.
91    */
TextViewPreference(Context context)92   public TextViewPreference(Context context) {
93     super(context, null);
94 
95     setLayoutResource(R.layout.text_view_preference);
96   }
97 
98   /**
99    * Handles binding the preference.
100    *
101    * @param view The view.
102    */
103   @Override
onBindView(View view)104   protected void onBindView(View view) {
105     super.onBindView(view);
106     textView = (TextView) view.findViewById(R.id.text);
107     if (textResourceId != 0) {
108       setTitle(textResourceId);
109     } else if (text != null) {
110       setTitle(text);
111     }
112   }
113 
114   /**
115    * Sets the preference title from a {@link CharSequence}.
116    *
117    * @param text The text.
118    */
119   @Override
setTitle(CharSequence text)120   public void setTitle(CharSequence text) {
121     textResourceId = 0;
122     this.text = text;
123     if (textView == null) {
124       return;
125     }
126 
127     textView.setMovementMethod(LinkMovementMethod.getInstance());
128     textView.setText(text);
129   }
130 
131   /**
132    * Sets the preference title from a resource id.
133    *
134    * @param textResId The string resource Id.
135    */
136   @Override
setTitle(int textResId)137   public void setTitle(int textResId) {
138     textResourceId = textResId;
139     setTitle(getContext().getString(textResId));
140   }
141 }
142