blob: 7f5bb796a706602d275e4b9a1f5503af29822ccb [file] [log] [blame]
Eric Erfaniand5e47f62017-03-15 14:41:07 -07001/**
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 * <p>http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * <p>Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
11 * express or implied. See the License for the specific language governing permissions and
12 * limitations under the License
13 */
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -080014package com.android.dialer.voicemail.settings;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070015
16import android.annotation.TargetApi;
mdooleyb9ca3352017-11-29 08:53:31 -080017import android.app.AlertDialog;
18import android.content.DialogInterface;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070019import android.content.Intent;
20import android.os.Build.VERSION_CODES;
21import android.os.Bundle;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070022import android.preference.Preference;
Eric Erfanian9a090c82017-03-16 19:22:24 -070023import android.preference.Preference.OnPreferenceClickListener;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070024import android.preference.PreferenceFragment;
25import android.preference.PreferenceScreen;
26import android.preference.SwitchPreference;
Eric Erfanian2ca43182017-08-31 06:57:16 -070027import android.provider.Settings;
Eric Erfaniand8046e52017-04-06 09:41:50 -070028import android.support.annotation.Nullable;
twyen5c7524f2017-11-15 18:24:45 -080029import android.support.annotation.VisibleForTesting;
30import android.telecom.PhoneAccount;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070031import android.telecom.PhoneAccountHandle;
twyen5c7524f2017-11-15 18:24:45 -080032import android.telecom.TelecomManager;
33import android.telephony.SubscriptionInfo;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070034import android.telephony.TelephonyManager;
mdooleyfa95b2d2018-02-20 17:19:45 -080035import android.text.Html;
Eric Erfaniand8046e52017-04-06 09:41:50 -070036import com.android.dialer.common.Assert;
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -080037import com.android.dialer.common.LogUtil;
Eric Erfanian8369df02017-05-03 10:27:13 -070038import com.android.dialer.logging.DialerImpression;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070039import com.android.dialer.logging.Logger;
Eric Erfanian10b34a52017-05-04 08:23:17 -070040import com.android.dialer.notification.NotificationChannelManager;
twyen5c7524f2017-11-15 18:24:45 -080041import com.android.dialer.telecom.TelecomUtil;
mdooleyfa95b2d2018-02-20 17:19:45 -080042import com.android.dialer.widget.TextViewPreference;
Eric Erfaniand8046e52017-04-06 09:41:50 -070043import com.android.voicemail.VoicemailClient;
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -080044import com.android.voicemail.VoicemailClient.ActivationStateListener;
Eric Erfaniand8046e52017-04-06 09:41:50 -070045import com.android.voicemail.VoicemailComponent;
twyen5c7524f2017-11-15 18:24:45 -080046import com.google.common.base.Optional;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070047
Eric Erfaniand8046e52017-04-06 09:41:50 -070048/**
49 * Fragment for voicemail settings. Requires {@link VoicemailClient#PARAM_PHONE_ACCOUNT_HANDLE} set
50 * in arguments.
51 */
Eric Erfaniand5e47f62017-03-15 14:41:07 -070052@TargetApi(VERSION_CODES.O)
53public class VoicemailSettingsFragment extends PreferenceFragment
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -080054 implements Preference.OnPreferenceChangeListener, ActivationStateListener {
Eric Erfaniand5e47f62017-03-15 14:41:07 -070055
56 private static final String TAG = "VmSettingsActivity";
57
twyen5c7524f2017-11-15 18:24:45 -080058 // Extras copied from com.android.phone.settings.VoicemailSettingsActivity,
59 // it does not recognize EXTRA_PHONE_ACCOUNT_HANDLE in O.
60 @VisibleForTesting
61 static final String SUB_ID_EXTRA =
62 "com.android.phone.settings.SubscriptionInfoHelper.SubscriptionId";
63 // Extra on intent containing the label of a subscription.
64 @VisibleForTesting
65 static final String SUB_LABEL_EXTRA =
66 "com.android.phone.settings.SubscriptionInfoHelper.SubscriptionLabel";
67
Eric Erfaniand8046e52017-04-06 09:41:50 -070068 @Nullable private PhoneAccountHandle phoneAccountHandle;
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -080069
70 private VoicemailClient voicemailClient;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070071
Eric Erfanian10b34a52017-05-04 08:23:17 -070072 private Preference voicemailNotificationPreference;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070073 private SwitchPreference voicemailVisualVoicemail;
74 private SwitchPreference autoArchiveSwitchPreference;
mdooleyec1a9702017-10-27 16:20:32 -070075 private SwitchPreference donateVoicemailSwitchPreference;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070076 private Preference voicemailChangePinPreference;
77 private PreferenceScreen advancedSettings;
mdooleyfa95b2d2018-02-20 17:19:45 -080078 private TextViewPreference voicemailTranscriptionInstructionText;
Eric Erfaniand5e47f62017-03-15 14:41:07 -070079
Eric Erfaniand5e47f62017-03-15 14:41:07 -070080 @Override
81 public void onCreate(Bundle icicle) {
82 super.onCreate(icicle);
83
84 phoneAccountHandle =
Eric Erfaniand8046e52017-04-06 09:41:50 -070085 Assert.isNotNull(getArguments().getParcelable(VoicemailClient.PARAM_PHONE_ACCOUNT_HANDLE));
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -080086 voicemailClient = VoicemailComponent.get(getContext()).getVoicemailClient();
Eric Erfaniand5e47f62017-03-15 14:41:07 -070087 }
88
89 @Override
90 public void onResume() {
91 super.onResume();
Eric Erfanian9a090c82017-03-16 19:22:24 -070092 Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_SETTINGS_VIEWED);
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -080093 voicemailClient.addActivationStateListener(this);
Eric Erfaniand5e47f62017-03-15 14:41:07 -070094 PreferenceScreen preferenceScreen = getPreferenceScreen();
95 if (preferenceScreen != null) {
96 preferenceScreen.removeAll();
97 }
98
99 addPreferencesFromResource(R.xml.voicemail_settings);
100
101 PreferenceScreen prefSet = getPreferenceScreen();
102
Eric Erfanian10b34a52017-05-04 08:23:17 -0700103 voicemailNotificationPreference =
104 findPreference(getString(R.string.voicemail_notifications_key));
Eric Erfanian2ca43182017-08-31 06:57:16 -0700105 voicemailNotificationPreference.setIntent(getNotificationSettingsIntent());
106
Eric Erfanian10b34a52017-05-04 08:23:17 -0700107 voicemailNotificationPreference.setOnPreferenceClickListener(
Eric Erfanian9a090c82017-03-16 19:22:24 -0700108 new OnPreferenceClickListener() {
109 @Override
110 public boolean onPreferenceClick(Preference preference) {
111 Logger.get(getContext())
112 .logImpression(DialerImpression.Type.VVM_CHANGE_RINGTONE_CLICKED);
113 // Let the preference handle the click.
114 return false;
115 }
116 });
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700117
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700118 voicemailVisualVoicemail =
119 (SwitchPreference) findPreference(getString(R.string.voicemail_visual_voicemail_key));
120
121 autoArchiveSwitchPreference =
122 (SwitchPreference)
123 findPreference(getString(R.string.voicemail_visual_voicemail_archive_key));
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700124
mdooleyec1a9702017-10-27 16:20:32 -0700125 donateVoicemailSwitchPreference =
126 (SwitchPreference)
127 findPreference(getString(R.string.voicemail_visual_voicemail_donation_key));
128
Eric Erfaniand8046e52017-04-06 09:41:50 -0700129 if (!VoicemailComponent.get(getContext())
130 .getVoicemailClient()
131 .isVoicemailArchiveAvailable(getContext())) {
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700132 getPreferenceScreen().removePreference(autoArchiveSwitchPreference);
133 }
134
mdooleyec1a9702017-10-27 16:20:32 -0700135 if (!VoicemailComponent.get(getContext())
136 .getVoicemailClient()
mdooley96f71f72017-11-01 15:26:50 -0700137 .isVoicemailDonationAvailable(getContext())) {
mdooleyec1a9702017-10-27 16:20:32 -0700138 getPreferenceScreen().removePreference(donateVoicemailSwitchPreference);
139 }
140
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700141 voicemailChangePinPreference = findPreference(getString(R.string.voicemail_change_pin_key));
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700142
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800143 if (voicemailClient.hasCarrierSupport(getContext(), phoneAccountHandle)) {
Eric Erfaniand8046e52017-04-06 09:41:50 -0700144 Assert.isNotNull(phoneAccountHandle);
145 Intent changePinIntent =
146 new Intent(new Intent(getContext(), VoicemailChangePinActivity.class));
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800147 changePinIntent.putExtra(VoicemailClient.PARAM_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
Eric Erfaniand8046e52017-04-06 09:41:50 -0700148
149 voicemailChangePinPreference.setIntent(changePinIntent);
150 voicemailChangePinPreference.setOnPreferenceClickListener(
151 new OnPreferenceClickListener() {
152 @Override
153 public boolean onPreferenceClick(Preference preference) {
154 Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_CHANGE_PIN_CLICKED);
155 // Let the preference handle the click.
156 return false;
157 }
158 });
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800159 if (VoicemailChangePinActivity.isPinScrambled(getContext(), phoneAccountHandle)) {
Eric Erfaniand8046e52017-04-06 09:41:50 -0700160 voicemailChangePinPreference.setTitle(R.string.voicemail_set_pin_preference_title);
161 } else {
162 voicemailChangePinPreference.setTitle(R.string.voicemail_change_pin_preference_title);
163 }
164 updateChangePin();
165
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700166 voicemailVisualVoicemail.setOnPreferenceChangeListener(this);
167 voicemailVisualVoicemail.setChecked(
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800168 voicemailClient.isVoicemailEnabled(getContext(), phoneAccountHandle));
Eric Erfanianfc37b022017-03-21 10:11:17 -0700169
170 autoArchiveSwitchPreference.setOnPreferenceChangeListener(this);
Eric Erfanianfc37b022017-03-21 10:11:17 -0700171 autoArchiveSwitchPreference.setChecked(
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800172 voicemailClient.isVoicemailArchiveEnabled(getContext(), phoneAccountHandle));
mdooleyec1a9702017-10-27 16:20:32 -0700173
174 donateVoicemailSwitchPreference.setOnPreferenceChangeListener(this);
175 donateVoicemailSwitchPreference.setChecked(
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800176 voicemailClient.isVoicemailDonationEnabled(getContext(), phoneAccountHandle));
mdooleyec1a9702017-10-27 16:20:32 -0700177 updateDonateVoicemail();
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700178 } else {
179 prefSet.removePreference(voicemailVisualVoicemail);
Eric Erfanianfc37b022017-03-21 10:11:17 -0700180 prefSet.removePreference(autoArchiveSwitchPreference);
mdooleyec1a9702017-10-27 16:20:32 -0700181 prefSet.removePreference(donateVoicemailSwitchPreference);
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700182 prefSet.removePreference(voicemailChangePinPreference);
183 }
184
185 advancedSettings =
186 (PreferenceScreen) findPreference(getString(R.string.voicemail_advanced_settings_key));
187 Intent advancedSettingsIntent = new Intent(TelephonyManager.ACTION_CONFIGURE_VOICEMAIL);
188 advancedSettingsIntent.putExtra(TelephonyManager.EXTRA_HIDE_PUBLIC_SETTINGS, true);
twyenbf900242017-09-08 11:10:16 -0700189 advancedSettingsIntent.putExtra(
190 TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
twyen5c7524f2017-11-15 18:24:45 -0800191
192 // (a bug): EXTRA_PHONE_ACCOUNT_HANDLE not implemented in telephony in O.
193 Optional<SubscriptionInfo> subscriptionInfo =
194 TelecomUtil.getSubscriptionInfo(getContext(), phoneAccountHandle);
195 if (subscriptionInfo.isPresent()) {
196 advancedSettingsIntent.putExtra(SUB_ID_EXTRA, subscriptionInfo.get().getSubscriptionId());
197 PhoneAccount phoneAccount =
198 getContext().getSystemService(TelecomManager.class).getPhoneAccount(phoneAccountHandle);
199 if (phoneAccount != null) {
200 advancedSettingsIntent.putExtra(SUB_LABEL_EXTRA, phoneAccount.getLabel());
201 }
202 }
203
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700204 advancedSettings.setIntent(advancedSettingsIntent);
Eric Erfanian9a090c82017-03-16 19:22:24 -0700205 voicemailChangePinPreference.setOnPreferenceClickListener(
206 new OnPreferenceClickListener() {
207 @Override
208 public boolean onPreferenceClick(Preference preference) {
209 Logger.get(getContext())
210 .logImpression(DialerImpression.Type.VVM_ADVANCED_SETINGS_CLICKED);
211 // Let the preference handle the click.
212 return false;
213 }
214 });
mdooleyfa95b2d2018-02-20 17:19:45 -0800215
216 voicemailTranscriptionInstructionText =
217 (TextViewPreference) findPreference(getString(R.string.voicemail_transcription_text_key));
218 voicemailTranscriptionInstructionText.setTitle(getVoicemailTranscriptionInstructionsText());
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700219 }
220
221 @Override
222 public void onPause() {
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800223 voicemailClient.removeActivationStateListener(this);
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700224 super.onPause();
225 }
226
227 /**
228 * Implemented to support onPreferenceChangeListener to look for preference changes.
229 *
230 * @param preference is the preference to be changed
231 * @param objValue should be the value of the selection, NOT its localized display value.
232 */
233 @Override
234 public boolean onPreferenceChange(Preference preference, Object objValue) {
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800235 LogUtil.d(TAG, "onPreferenceChange: \"" + preference + "\" changed to \"" + objValue + "\"");
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700236 if (preference.getKey().equals(voicemailVisualVoicemail.getKey())) {
237 boolean isEnabled = (boolean) objValue;
mdooleyb9ca3352017-11-29 08:53:31 -0800238 if (!isEnabled) {
239 showDisableConfirmationDialog();
240 // Don't let the preference setting proceed.
241 return false;
Eric Erfanian9a090c82017-03-16 19:22:24 -0700242 } else {
mdooleyb9ca3352017-11-29 08:53:31 -0800243 updateVoicemailEnabled(true);
Eric Erfanian9a090c82017-03-16 19:22:24 -0700244 }
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700245 } else if (preference.getKey().equals(autoArchiveSwitchPreference.getKey())) {
246 logArchiveToggle((boolean) objValue);
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800247 voicemailClient.setVoicemailArchiveEnabled(
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700248 getContext(), phoneAccountHandle, (boolean) objValue);
mdooleyec1a9702017-10-27 16:20:32 -0700249 } else if (preference.getKey().equals(donateVoicemailSwitchPreference.getKey())) {
250 logArchiveToggle((boolean) objValue);
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800251 voicemailClient.setVoicemailDonationEnabled(
mdooleyec1a9702017-10-27 16:20:32 -0700252 getContext(), phoneAccountHandle, (boolean) objValue);
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700253 }
254
mdooleyb9ca3352017-11-29 08:53:31 -0800255 // Let the preference setting proceed.
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700256 return true;
257 }
258
mdooleyb9ca3352017-11-29 08:53:31 -0800259 private void updateVoicemailEnabled(boolean isEnabled) {
260 voicemailClient.setVoicemailEnabled(getContext(), phoneAccountHandle, isEnabled);
261 voicemailVisualVoicemail.setChecked(isEnabled);
262
263 if (isEnabled) {
264 Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_USER_ENABLED_IN_SETTINGS);
265 } else {
266 Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_USER_DISABLED_IN_SETTINGS);
267 }
268
269 updateChangePin();
270 updateDonateVoicemail();
271 }
272
Eric Erfaniand8046e52017-04-06 09:41:50 -0700273 private void updateChangePin() {
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800274 if (!voicemailClient.isVoicemailEnabled(getContext(), phoneAccountHandle)) {
Eric Erfaniand8046e52017-04-06 09:41:50 -0700275 voicemailChangePinPreference.setSummary(
276 R.string.voicemail_change_pin_preference_summary_disable);
277 voicemailChangePinPreference.setEnabled(false);
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800278 } else if (!voicemailClient.isActivated(getContext(), phoneAccountHandle)) {
Eric Erfaniand8046e52017-04-06 09:41:50 -0700279 voicemailChangePinPreference.setSummary(
280 R.string.voicemail_change_pin_preference_summary_not_activated);
281 voicemailChangePinPreference.setEnabled(false);
282 } else {
283 voicemailChangePinPreference.setSummary(null);
284 voicemailChangePinPreference.setEnabled(true);
285 }
286 }
287
mdooleyec1a9702017-10-27 16:20:32 -0700288 private void updateDonateVoicemail() {
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800289 if (!voicemailClient.isVoicemailEnabled(getContext(), phoneAccountHandle)) {
mdooleyec1a9702017-10-27 16:20:32 -0700290 donateVoicemailSwitchPreference.setSummary(
291 R.string.voicemail_donate_preference_summary_disable);
292 donateVoicemailSwitchPreference.setEnabled(false);
Zachary Heidepriem7547d3e2017-11-06 19:10:44 -0800293 } else if (!voicemailClient.isActivated(getContext(), phoneAccountHandle)) {
mdooleyec1a9702017-10-27 16:20:32 -0700294 donateVoicemailSwitchPreference.setSummary(
295 R.string.voicemail_donate_preference_summary_not_activated);
296 donateVoicemailSwitchPreference.setEnabled(false);
297 } else {
298 donateVoicemailSwitchPreference.setSummary(R.string.voicemail_donate_preference_summary_info);
299 donateVoicemailSwitchPreference.setEnabled(true);
300 }
301 }
302
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700303 private void logArchiveToggle(boolean userTurnedOn) {
304 if (userTurnedOn) {
305 Logger.get(getContext())
306 .logImpression(DialerImpression.Type.VVM_USER_TURNED_ARCHIVE_ON_FROM_SETTINGS);
307 } else {
308 Logger.get(getContext())
309 .logImpression(DialerImpression.Type.VVM_USER_TURNED_ARCHIVE_OFF_FROM_SETTINGS);
310 }
311 }
312
313 @Override
Eric Erfaniand8046e52017-04-06 09:41:50 -0700314 public void onActivationStateChanged(PhoneAccountHandle phoneAccountHandle, boolean isActivated) {
315 if (this.phoneAccountHandle.equals(phoneAccountHandle)) {
316 updateChangePin();
mdooleyec1a9702017-10-27 16:20:32 -0700317 updateDonateVoicemail();
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700318 }
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700319 }
Eric Erfanian2ca43182017-08-31 06:57:16 -0700320
321 private Intent getNotificationSettingsIntent() {
322 String channelId =
323 NotificationChannelManager.getVoicemailChannelId(getContext(), phoneAccountHandle);
324 return new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
325 .putExtra(Settings.EXTRA_CHANNEL_ID, channelId)
326 .putExtra(Settings.EXTRA_APP_PACKAGE, getContext().getPackageName());
327 }
mdooleyb9ca3352017-11-29 08:53:31 -0800328
329 private void showDisableConfirmationDialog() {
330 LogUtil.i(TAG, "showDisableConfirmationDialog");
331 AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
332 builder.setTitle(R.string.confirm_disable_voicemail_dialog_title);
333 builder.setMessage(R.string.confirm_disable_voicemail_dialog_message);
334 builder.setPositiveButton(
335 R.string.confirm_disable_voicemail_accept_dialog_label,
336 new DialogInterface.OnClickListener() {
337 @Override
338 public void onClick(DialogInterface dialog, int which) {
339 LogUtil.i(TAG, "showDisableConfirmationDialog, confirmed");
340 updateVoicemailEnabled(false);
341 dialog.dismiss();
342 }
343 });
344
345 builder.setNegativeButton(
346 android.R.string.cancel,
347 new DialogInterface.OnClickListener() {
348 @Override
349 public void onClick(DialogInterface dialog, int which) {
350 LogUtil.i(TAG, "showDisableConfirmationDialog, cancelled");
351 dialog.dismiss();
352 }
353 });
354
355 builder.setCancelable(true);
356 builder.show();
357 }
mdooleyfa95b2d2018-02-20 17:19:45 -0800358
359 /**
360 * Builds a spannable string containing the voicemail transcription instructions text containing
361 * the appropriate "Learn More" urls.
362 *
363 * @return The voicemail transcription instructions text.
364 */
365 private CharSequence getVoicemailTranscriptionInstructionsText() {
366 String settingText =
367 getString(
368 R.string.voicemail_transcription_instruction_text,
369 getString(R.string.transcription_learn_more_url),
370 getString(R.string.donation_learn_more_url));
371 CharSequence settingSeq = Html.fromHtml(settingText);
372 return settingSeq;
373 }
Eric Erfaniand5e47f62017-03-15 14:41:07 -0700374}