diff options
Diffstat (limited to 'java/com/android')
6 files changed, 220 insertions, 28 deletions
diff --git a/java/com/android/dialer/common/preference/AndroidManifest.xml b/java/com/android/dialer/common/preference/AndroidManifest.xml new file mode 100644 index 000000000..3e8062216 --- /dev/null +++ b/java/com/android/dialer/common/preference/AndroidManifest.xml @@ -0,0 +1,18 @@ +<!-- + ~ 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 + --> +<manifest + package="com.android.dialer.common.preference"> +</manifest> diff --git a/java/com/android/dialer/common/preference/SwitchPreferenceWithClickableSummary.java b/java/com/android/dialer/common/preference/SwitchPreferenceWithClickableSummary.java new file mode 100644 index 000000000..7b3564ddc --- /dev/null +++ b/java/com/android/dialer/common/preference/SwitchPreferenceWithClickableSummary.java @@ -0,0 +1,104 @@ +/* + * 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.common.preference; + +import static android.support.v4.content.ContextCompat.startActivity; + +import android.content.Context; +import android.content.Intent; +import android.content.res.TypedArray; +import android.net.Uri; +import android.preference.SwitchPreference; +import android.util.AttributeSet; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import com.android.dialer.common.Assert; + +/** + * Utility to allow the summary of a {@link SwitchPreference} to be clicked and opened via a browser + * to the specified {@link urlToOpen} attribute while maintaining all other aspects of a {@link + * SwitchPreference}. + * + * <p>Example usage: + * + * <pre> + * <com.android.dialer.common.preference.SwitchPreferenceWithClickableSummary + * android:dependency="...." + * android:key="...." + * android:title="...." + * app:urlToOpen="...."/> + * </pre> + */ +public class SwitchPreferenceWithClickableSummary extends SwitchPreference { + private final String urlToOpen; + + public SwitchPreferenceWithClickableSummary( + Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + TypedArray typedArray = + context.obtainStyledAttributes(attrs, R.styleable.SwitchPreferenceWithClickableSummary); + urlToOpen = + String.valueOf( + typedArray.getText(R.styleable.SwitchPreferenceWithClickableSummary_urlToOpen)); + } + + public SwitchPreferenceWithClickableSummary( + Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr, defStyleAttr); + TypedArray typedArray = + context.obtainStyledAttributes(attrs, R.styleable.SwitchPreferenceWithClickableSummary); + urlToOpen = + String.valueOf( + typedArray.getText(R.styleable.SwitchPreferenceWithClickableSummary_urlToOpen)); + } + + public SwitchPreferenceWithClickableSummary(Context context, AttributeSet attrs) { + super(context, attrs); + TypedArray typedArray = + context.obtainStyledAttributes(attrs, R.styleable.SwitchPreferenceWithClickableSummary); + urlToOpen = + String.valueOf( + typedArray.getText(R.styleable.SwitchPreferenceWithClickableSummary_urlToOpen)); + } + + public SwitchPreferenceWithClickableSummary(Context context) { + this(context, null); + } + + @Override + protected View onCreateView(ViewGroup parent) { + return super.onCreateView(parent); + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + Assert.checkArgument( + urlToOpen != null, + "must have a urlToOpen attribute when using SwitchPreferenceWithClickableSummary"); + view.findViewById(android.R.id.summary) + .setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlToOpen)); + startActivity(view.getContext(), intent, null); + } + }); + } +} diff --git a/java/com/android/dialer/common/preference/res/values/attrs.xml b/java/com/android/dialer/common/preference/res/values/attrs.xml new file mode 100644 index 000000000..c1d1de015 --- /dev/null +++ b/java/com/android/dialer/common/preference/res/values/attrs.xml @@ -0,0 +1,22 @@ +<?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 + --> +<resources> + <declare-styleable name="SwitchPreferenceWithClickableSummary"> + <attr name="urlToOpen" format="string"/> + </declare-styleable> +</resources> + diff --git a/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java b/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java index 53c14b795..2e76b70fe 100644 --- a/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java +++ b/java/com/android/dialer/voicemail/settings/VoicemailSettingsFragment.java @@ -25,6 +25,7 @@ import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; import android.provider.Settings; +import android.support.annotation.IntDef; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.telecom.PhoneAccount; @@ -34,14 +35,18 @@ import android.telephony.SubscriptionInfo; import android.telephony.TelephonyManager; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; +import com.android.dialer.common.preference.SwitchPreferenceWithClickableSummary; import com.android.dialer.logging.DialerImpression; import com.android.dialer.logging.Logger; import com.android.dialer.notification.NotificationChannelManager; +import com.android.dialer.spannable.ContentWithLearnMoreSpanner; import com.android.dialer.telecom.TelecomUtil; import com.android.voicemail.VoicemailClient; import com.android.voicemail.VoicemailClient.ActivationStateListener; import com.android.voicemail.VoicemailComponent; import com.google.common.base.Optional; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; /** * Fragment for voicemail settings. Requires {@link VoicemailClient#PARAM_PHONE_ACCOUNT_HANDLE} set @@ -63,19 +68,16 @@ public class VoicemailSettingsFragment extends PreferenceFragment private static final String TAG = "VmSettingsActivity"; @Nullable private PhoneAccountHandle phoneAccountHandle; - private VoicemailClient voicemailClient; - // Settings that are independent of the carrier configurations private Preference voicemailNotificationPreference; private PreferenceScreen advancedSettingsPreference; - // Settings that are supported by dialer only if the carrier configurations are valid. private SwitchPreference visualVoicemailPreference; private SwitchPreference voicemailAutoArchivePreference; private SwitchPreference transcribeVoicemailPreference; // Voicemail transcription analysis toggle - private SwitchPreference donateTranscribedVoicemailPreference; + private SwitchPreferenceWithClickableSummary donateTranscribedVoicemailPreference; private Preference voicemailChangePinPreference; @Override @@ -98,7 +100,7 @@ public class VoicemailSettingsFragment extends PreferenceFragment addPreferencesFromResource(R.xml.voicemail_settings); - initializePreferences(); + initializeXmlPreferences(); setupVisualVoicemailPreferences(); @@ -163,15 +165,28 @@ public class VoicemailSettingsFragment extends PreferenceFragment } private void showTranscriptionDonationEnabledPreferences() { - donateTranscribedVoicemailPreference.setOnPreferenceChangeListener(this); + donateTranscribedVoicemailPreference.setEnabled(true); donateTranscribedVoicemailPreference.setChecked( voicemailClient.isVoicemailDonationEnabled(getContext(), phoneAccountHandle)); + donateTranscribedVoicemailPreference.setOnPreferenceChangeListener(this); donateTranscribedVoicemailPreference.setSummary( - R.string.voicemail_donate_preference_summary_info); - donateTranscribedVoicemailPreference.setEnabled(true); + getVoicemailTranscriptionDonationInformationalText()); getPreferenceScreen().addPreference(donateTranscribedVoicemailPreference); } + /** + * Builds a spannable string containing the voicemail donation informational text containing the + * appropriate "Learn More" urls. + * + * @return The voicemail donation information text. + */ + private CharSequence getVoicemailTranscriptionDonationInformationalText() { + return new ContentWithLearnMoreSpanner(getContext()) + .create( + getContext().getString(R.string.voicemail_donate_preference_summary_info), + getContext().getString(R.string.donation_learn_more_url)); + } + private void removeAllTranscriptionPreferences() { getPreferenceScreen().removePreference(transcribeVoicemailPreference); getPreferenceScreen().removePreference(donateTranscribedVoicemailPreference); @@ -196,29 +211,38 @@ public class VoicemailSettingsFragment extends PreferenceFragment updateVoicemailSummaryMessage(); } - private void initializePreferences() { + /** The preferences that are present in the voicemail_settings.xml file are initialized here. */ + private void initializeXmlPreferences() { voicemailNotificationPreference = findPreference(getString(R.string.voicemail_notifications_key)); + voicemailNotificationPreference.setOrder(VMSettingOrdering.NOTIFICATIONS); advancedSettingsPreference = (PreferenceScreen) findPreference(getString(R.string.voicemail_advanced_settings_key)); + advancedSettingsPreference.setOrder(VMSettingOrdering.ADVANCED_SETTING); visualVoicemailPreference = (SwitchPreference) findPreference(getString(R.string.voicemail_visual_voicemail_key)); + visualVoicemailPreference.setOrder(VMSettingOrdering.VISUAL_VOICEMAIL); voicemailAutoArchivePreference = (SwitchPreference) findPreference(getString(R.string.voicemail_visual_voicemail_archive_key)); + voicemailAutoArchivePreference.setOrder(VMSettingOrdering.VOICEMAIL_AUTO_ARCHIVE); transcribeVoicemailPreference = (SwitchPreference) findPreference(getString(R.string.voicemail_visual_voicemail_transcription_key)); + transcribeVoicemailPreference.setOrder(VMSettingOrdering.VOICEMAIL_TRANSCRIPTION); donateTranscribedVoicemailPreference = - (SwitchPreference) + (SwitchPreferenceWithClickableSummary) findPreference(getString(R.string.voicemail_visual_voicemail_donation_key)); + donateTranscribedVoicemailPreference.setOrder( + VMSettingOrdering.VOICEMAIL_TRANSCRIPTION_DONATION); voicemailChangePinPreference = findPreference(getString(R.string.voicemail_change_pin_key)); + voicemailChangePinPreference.setOrder(VMSettingOrdering.VOICEMAIL_CHANGE_PIN); } /** Removes vvm settings since the carrier setup is not supported by Dialer */ @@ -462,4 +486,25 @@ public class VoicemailSettingsFragment extends PreferenceFragment builder.setCancelable(true); builder.show(); } + + /** The ordering in which to show the voicemail settings */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + VMSettingOrdering.NOTIFICATIONS, + VMSettingOrdering.VISUAL_VOICEMAIL, + VMSettingOrdering.VOICEMAIL_TRANSCRIPTION, + VMSettingOrdering.VOICEMAIL_TRANSCRIPTION_DONATION, + VMSettingOrdering.VOICEMAIL_CHANGE_PIN, + VMSettingOrdering.VOICEMAIL_AUTO_ARCHIVE, + VMSettingOrdering.ADVANCED_SETTING + }) + private @interface VMSettingOrdering { + int NOTIFICATIONS = 1; + int VISUAL_VOICEMAIL = 2; + int VOICEMAIL_TRANSCRIPTION = 3; + int VOICEMAIL_TRANSCRIPTION_DONATION = 4; + int VOICEMAIL_CHANGE_PIN = 5; + int VOICEMAIL_AUTO_ARCHIVE = 6; + int ADVANCED_SETTING = 7; + } } 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 db6309800..7df8a0192 100644 --- a/java/com/android/dialer/voicemail/settings/res/values/strings.xml +++ b/java/com/android/dialer/voicemail/settings/res/values/strings.xml @@ -119,9 +119,9 @@ <string name="voicemail_activating_summary_info">Activating voicemail</string> <!-- Summary information for visual voicemail transcription setting [CHAR LIMIT=NONE] --> - <string name="voicemail_transcription_preference_summary_info">Get transcripts of your voicemail using Google\'s transcription service</string> + <string name="voicemail_transcription_preference_summary_info">Get transcripts of your voicemail using Google\'s transcription service.</string> <!-- Summary information for visual voicemail donation setting [CHAR LIMIT=NONE] --> - <string name="voicemail_donate_preference_summary_info">Let Google review your voicemail messages to improve transcription accuracy</string> + <string name="voicemail_donate_preference_summary_info">Let Google review your voicemail messages to improve transcription accuracy. Your voicemail messages are stored anonymously. <xliff:g example="Learn more">%1$s</xliff:g></string> <!-- Title for disable visual voicemail confirmation dialog [CHAR LIMIT=40] --> <string name="confirm_disable_voicemail_dialog_title">Turn off visual voicemail</string> 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 175a12740..e5af813b6 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 @@ -15,37 +15,40 @@ --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" - android:title="@string/voicemail_settings_title"> + xmlns:app="http://schemas.android.com/apk/res-auto" + android:title="@string/voicemail_settings_title"> <Preference android:key="@string/voicemail_notifications_key" android:title="@string/voicemail_notifications_preference_title"/> <SwitchPreference - android:key="@string/voicemail_visual_voicemail_key" - android:title="@string/voicemail_visual_voicemail_switch_title"/>" + android:key="@string/voicemail_visual_voicemail_key" + android:title="@string/voicemail_visual_voicemail_switch_title"/>" <SwitchPreference - android:key="@string/voicemail_visual_voicemail_archive_key" - android:dependency="@string/voicemail_visual_voicemail_key" - android:title="@string/voicemail_visual_voicemail_auto_archive_switch_title"/>" + android:dependency="@string/voicemail_visual_voicemail_key" + android:key="@string/voicemail_visual_voicemail_archive_key" + android:title="@string/voicemail_visual_voicemail_auto_archive_switch_title"/>" <SwitchPreference - android:key="@string/voicemail_visual_voicemail_transcription_key" android:dependency="@string/voicemail_visual_voicemail_key" + android:key="@string/voicemail_visual_voicemail_transcription_key" android:title="@string/voicemail_visual_voicemail_transcription_switch_title"/>" - <SwitchPreference - android:key="@string/voicemail_visual_voicemail_donation_key" - android:dependency="@string/voicemail_visual_voicemail_transcription_key" - android:title="@string/voicemail_visual_voicemail_donation_switch_title"/>" + + <com.android.dialer.common.preference.SwitchPreferenceWithClickableSummary + android:dependency="@string/voicemail_visual_voicemail_transcription_key" + android:key="@string/voicemail_visual_voicemail_donation_key" + android:title="@string/voicemail_visual_voicemail_donation_switch_title" + app:urlToOpen="@string/donation_learn_more_url"/> <Preference - android:key="@string/voicemail_change_pin_key" - android:title="@string/voicemail_change_pin_preference_title"/> + android:key="@string/voicemail_change_pin_key" + android:title="@string/voicemail_change_pin_preference_title"/> <PreferenceScreen - android:key="@string/voicemail_advanced_settings_key" - android:title="@string/voicemail_advanced_settings_title"> - </PreferenceScreen> + android:key="@string/voicemail_advanced_settings_key" + android:title="@string/voicemail_advanced_settings_title"> + </PreferenceScreen> </PreferenceScreen> |