• 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     } else if (getTitleRes() != 0) {
112       setTitle(getTitleRes());
113     }
114   }
115 
116   /**
117    * Sets the preference title from a {@link CharSequence}.
118    *
119    * @param text The text.
120    */
121   @Override
setTitle(CharSequence text)122   public void setTitle(CharSequence text) {
123     textResourceId = 0;
124     this.text = text;
125     if (textView == null) {
126       return;
127     }
128 
129     textView.setMovementMethod(LinkMovementMethod.getInstance());
130     textView.setText(text);
131   }
132 
133   /**
134    * Sets the preference title from a resource id.
135    *
136    * @param textResId The string resource Id.
137    */
138   @Override
setTitle(int textResId)139   public void setTitle(int textResId) {
140     textResourceId = textResId;
141     setTitle(getContext().getString(textResId));
142   }
143 }
144