Adding information section to voicemail settings

this cl moves the TextViewPreference from dialer to third_party so it can be
shared (sorry i meant to make that a separate cl, but forgot to switch branches).
and it uses the TextViewPreference to add some informational text to the voicemail settings.

screen shot:
https://drive.google.com/open?id=0B9o_KvtLkcuIbENkeHRCSTUyOVpkM0JEZ0liMHphMnVzVHlN

mock:
https://drive.google.com/file/d/1gKt72pY-igXfphpamf8CqZV8HEmnOexj/view

Bug: 37340510
Test: manual test
PiperOrigin-RevId: 186388299
Change-Id: I2c142f1214a9424bec0bc7f12d841f0eeaef96f1
diff --git a/java/com/android/dialer/app/res/values/strings.xml b/java/com/android/dialer/app/res/values/strings.xml
index 2d5542b..34ec611 100644
--- a/java/com/android/dialer/app/res/values/strings.xml
+++ b/java/com/android/dialer/app/res/values/strings.xml
@@ -686,8 +686,8 @@
   <!-- Content of voicemail donation promo dialog
        [CHAR LIMIT=NONE] -->
   <string name="voicemail_donation_promo_content">
-    Let Google review your voicemail messages to improve transcription quality. Your
-    voicemail messages will not be tied to your Google Account.
+    Let Google review your voicemail messages to improve transcription quality.
+    For voicemail transcription analysis, your voicemail messages are stored anonymously.
   </string>
 
   <!-- Text for a 'learn more' link at the end of the voicemail donation promo dialog content -->
diff --git a/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java b/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
index 5ae26f5..7f5bb79 100644
--- a/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
+++ b/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java
@@ -32,12 +32,14 @@
 import android.telecom.TelecomManager;
 import android.telephony.SubscriptionInfo;
 import android.telephony.TelephonyManager;
+import android.text.Html;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.notification.NotificationChannelManager;
 import com.android.dialer.telecom.TelecomUtil;
+import com.android.dialer.widget.TextViewPreference;
 import com.android.voicemail.VoicemailClient;
 import com.android.voicemail.VoicemailClient.ActivationStateListener;
 import com.android.voicemail.VoicemailComponent;
@@ -73,6 +75,7 @@
   private SwitchPreference donateVoicemailSwitchPreference;
   private Preference voicemailChangePinPreference;
   private PreferenceScreen advancedSettings;
+  private TextViewPreference voicemailTranscriptionInstructionText;
 
   @Override
   public void onCreate(Bundle icicle) {
@@ -209,6 +212,10 @@
             return false;
           }
         });
+
+    voicemailTranscriptionInstructionText =
+        (TextViewPreference) findPreference(getString(R.string.voicemail_transcription_text_key));
+    voicemailTranscriptionInstructionText.setTitle(getVoicemailTranscriptionInstructionsText());
   }
 
   @Override
@@ -348,4 +355,20 @@
     builder.setCancelable(true);
     builder.show();
   }
+
+  /**
+   * Builds a spannable string containing the voicemail transcription instructions text containing
+   * the appropriate "Learn More" urls.
+   *
+   * @return The voicemail transcription instructions text.
+   */
+  private CharSequence getVoicemailTranscriptionInstructionsText() {
+    String settingText =
+        getString(
+            R.string.voicemail_transcription_instruction_text,
+            getString(R.string.transcription_learn_more_url),
+            getString(R.string.donation_learn_more_url));
+    CharSequence settingSeq = Html.fromHtml(settingText);
+    return settingSeq;
+  }
 }
diff --git a/java/com/android/dialer/voicemail/settings/res/values/strings.xml b/java/com/android/dialer/voicemail/settings/res/values/strings.xml
index 10fa459..47228b7 100644
--- a/java/com/android/dialer/voicemail/settings/res/values/strings.xml
+++ b/java/com/android/dialer/voicemail/settings/res/values/strings.xml
@@ -44,7 +44,7 @@
   <string name="voicemail_change_pin_key" translatable="false">voicemail_change_pin_key</string>
 
   <!-- Visual voicemail on/off title [CHAR LIMIT=40] -->
-  <string name="voicemail_visual_voicemail_switch_title">Visual Voicemail</string>
+  <string name="voicemail_visual_voicemail_switch_title">Visual voicemail</string>
 
   <!-- Visual voicemail archive on/off title [CHAR LIMIT=40] -->
   <string name="voicemail_visual_voicemail_auto_archive_switch_title">Extra backup and storage</string>
@@ -125,4 +125,18 @@
   <!-- The label for the confirm-disable-voicemail button [CHAR LIMIT=16] -->
   <string name="confirm_disable_voicemail_accept_dialog_label">TURN OFF</string>
 
+  <!-- Internal preferences key for static instruction text. -->
+  <string name="voicemail_transcription_text_key" translatable="false">voicemail_transcription_text_key</string>
+
+  <!-- Additional information text and links for visual voicemail and voicemail donation setting page
+       [CHAR LIMIT=NONE] -->
+  <string name="voicemail_transcription_instruction_text">
+    Visual voicemail allows you to check voicemail messages without having to call voicemail. Transcripts provided by Google. &lt;a href="<xliff:g example="http://www.google.com" id="url1">%1$s</xliff:g>">Learn&#160;more&lt;/a>
+    &lt;br>&lt;br>
+    For voicemail transcription analysis, your voicemail messages are stored anonymously. &lt;a href="<xliff:g example="http://www.google.com" id="url2">%2$s</xliff:g>">Learn&#160;more&lt;/a>
+  </string>
+
+  <string translatable="false" name="transcription_learn_more_url">https://support.google.com/phoneapp/answer/2811844?hl=en%26ref_topic=7539039</string>
+  <string translatable="false" name="donation_learn_more_url">https://support.google.com/phoneapp/answer/2811844#voicemail_transcript</string>
+
 </resources>
diff --git a/java/com/android/dialer/voicemail/settings/res/xml/voicemail_settings.xml b/java/com/android/dialer/voicemail/settings/res/xml/voicemail_settings.xml
index 9b0391a..75c8cfe 100644
--- a/java/com/android/dialer/voicemail/settings/res/xml/voicemail_settings.xml
+++ b/java/com/android/dialer/voicemail/settings/res/xml/voicemail_settings.xml
@@ -43,4 +43,8 @@
     android:key="@string/voicemail_advanced_settings_key"
     android:title="@string/voicemail_advanced_settings_title">
     </PreferenceScreen>
+
+  <com.android.dialer.widget.TextViewPreference
+    android:key="@string/voicemail_transcription_text_key"/>
+
 </PreferenceScreen>
diff --git a/java/com/android/dialer/widget/TextViewPreference.java b/java/com/android/dialer/widget/TextViewPreference.java
new file mode 100644
index 0000000..2c1885c
--- /dev/null
+++ b/java/com/android/dialer/widget/TextViewPreference.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.widget;
+
+import android.content.Context;
+import android.preference.Preference;
+import android.text.method.LinkMovementMethod;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+/**
+ * Provides a {@link TextView} inside a preference. Useful for displaying static text which may
+ * contain hyperlinks.
+ */
+public class TextViewPreference extends Preference {
+
+  /**
+   * The resource ID of the text to be populated in the {@link TextView} when a resource ID is used.
+   */
+  private int textResourceId = 0;
+
+  /** The text to be populated in the {@link TextView} when a {@link CharSequence} is used. */
+  private CharSequence text;
+
+  /** The {@link TextView} containing the text. */
+  private TextView textView;
+
+  /**
+   * Instantiates the {@link TextViewPreference} instance.
+   *
+   * @param context The Context this is associated with, through which it can access the current
+   *     theme, resources, etc.
+   * @param attrs The attributes of the XML tag that is inflating the preference.
+   * @param defStyleAttr An attribute in the current theme that contains a reference to a style
+   *     resource that supplies default values for the view. Can be 0 to not look for defaults.
+   * @param defStyleRes A resource identifier of a style resource that supplies default values for
+   *     the view, used only if defStyleAttr is 0 or can not be found in the theme. Can be 0 to not
+   *     look for defaults.
+   */
+  public TextViewPreference(
+      Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+    super(context, attrs, defStyleAttr, defStyleRes);
+
+    setLayoutResource(R.layout.text_view_preference);
+  }
+
+  /**
+   * Instantiates the {@link TextViewPreference} instance.
+   *
+   * @param context The Context this is associated with, through which it can access the current
+   *     theme, resources, etc.
+   * @param attrs The attributes of the XML tag that is inflating the preference.
+   * @param defStyleAttr An attribute in the current theme that contains a reference to a style
+   *     resource that supplies default values for the view. Can be 0 to not look for defaults.
+   */
+  public TextViewPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+    this(context, attrs, defStyleAttr, 0);
+  }
+
+  /**
+   * Instantiates the {@link TextViewPreference} instance.
+   *
+   * @param context The Context this is associated with, through which it can access the current
+   *     theme, resources, etc.
+   * @param attrs The attributes of the XML tag that is inflating the preference.
+   */
+  public TextViewPreference(Context context, AttributeSet attrs) {
+    this(context, attrs, android.R.attr.preferenceStyle, 0);
+  }
+
+  /**
+   * Instantiates the {@link TextViewPreference} instance.
+   *
+   * @param context The Context this is associated with, through which it can access the current
+   *     theme, resources, etc.
+   */
+  public TextViewPreference(Context context) {
+    super(context, null);
+
+    setLayoutResource(R.layout.text_view_preference);
+  }
+
+  /**
+   * Handles binding the preference.
+   *
+   * @param view The view.
+   */
+  @Override
+  protected void onBindView(View view) {
+    super.onBindView(view);
+    textView = (TextView) view.findViewById(R.id.text);
+    if (textResourceId != 0) {
+      setTitle(textResourceId);
+    } else if (text != null) {
+      setTitle(text);
+    }
+  }
+
+  /**
+   * Sets the preference title from a {@link CharSequence}.
+   *
+   * @param text The text.
+   */
+  @Override
+  public void setTitle(CharSequence text) {
+    textResourceId = 0;
+    this.text = text;
+    if (textView == null) {
+      return;
+    }
+
+    textView.setMovementMethod(LinkMovementMethod.getInstance());
+    textView.setText(text);
+  }
+
+  /**
+   * Sets the preference title from a resource id.
+   *
+   * @param textResId The string resource Id.
+   */
+  @Override
+  public void setTitle(int textResId) {
+    textResourceId = textResId;
+    setTitle(getContext().getString(textResId));
+  }
+}
diff --git a/java/com/android/dialer/widget/res/layout/text_view_preference.xml b/java/com/android/dialer/widget/res/layout/text_view_preference.xml
new file mode 100644
index 0000000..39b5506
--- /dev/null
+++ b/java/com/android/dialer/widget/res/layout/text_view_preference.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+  android:id="@+id/text"
+  android:layout_width="match_parent"
+  android:layout_height="wrap_content"
+  android:padding="16dp"
+  android:fontFamily="sans-serif"
+  android:linksClickable="true"
+  android:singleLine="false"/>