Merge "Import translations. DO NOT MERGE" into oc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f8cb957..b0aae34 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -172,6 +172,12 @@
     <string name="voicemail_settings_with_label">Voicemail (<xliff:g id="subscriptionlabel" example="Mock Carrier">%s</xliff:g>)</string>
     <!-- Call forwarding dialog box, voicemail number prefix -->
     <string name="voicemail_abbreviated">VM:</string>
+    <!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
+    <string name="voicemail_notifications_key" translatable="false">voicemail_notification_key</string>
+
+    <!-- Voicemail notifications title. The user clicks on this preference navigate to the system settings screen for that channel
+    .[CHAR LIMIT=30] -->
+    <string name="voicemail_notifications_preference_title">Notifications</string>
     <!-- Mobile network settings screen, setting option name -->
     <string name="networks">Network operators</string>
     <!-- Cell Broadcast settings title.  [CHAR LIMIT=50] -->
@@ -1261,11 +1267,6 @@
     -->
     <string name="description_dial_button">dial</string>
 
-    <!-- Title for the vibration settings for voicemail notifications [CHAR LIMIT=40] -->
-    <string name="voicemail_notification_vibrate_when_title" msgid="8731372580674292759">Vibrate</string>
-    <!-- Dialog title for the vibration settings for voice mail notifications [CHAR LIMIT=40]-->
-    <string name="voicemail_notification_vibarte_when_dialog_title" msgid="8995274609647451109">Vibrate</string>
-
     <!-- Visual voicemail on/off title [CHAR LIMIT=40] -->
     <string name="voicemail_visual_voicemail_switch_title">Visual Voicemail</string>
 
@@ -1274,21 +1275,6 @@
     <!-- Voicemail change PIN dialog title [CHAR LIMIT=40] -->
     <string name="voicemail_change_pin_dialog_title">Change PIN</string>
 
-    <!-- Voicemail ringtone title. The user clicks on this preference to select
-         which sound to play when a voicemail notification is received.
-         [CHAR LIMIT=30] -->
-    <string name="voicemail_notification_ringtone_title">Sound</string>
-
-    <!-- The default value value for voicemail notification. -->
-    <string name="voicemail_notification_vibrate_when_default" translatable="false">never</string>
-
-    <!-- Actual values used in our code for voicemail notifications. DO NOT TRANSLATE -->
-    <string-array name="voicemail_notification_vibrate_when_values" translatable="false">
-        <item>always</item>
-        <item>silent</item>
-        <item>never</item>
-    </string-array>
-
     <!-- Title for the category "ringtone", which is shown above ringtone and vibration
          related settings.
          [CHAR LIMIT=30] -->
@@ -1335,10 +1321,6 @@
     <!-- Status hint label for a call being made over a wifi network. [CHAR LIMIT=25] -->
     <string name="status_hint_label_wifi_call">Wi-Fi call</string>
 
-    <!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
-    <string name="voicemail_notification_ringtone_key">voicemail_notification_ringtone_key</string>
-    <!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
-    <string name="voicemail_notification_vibrate_key">voicemail_notification_vibrate_key</string>
     <!-- DO NOT TRANSLATE. Internal key for a visual voicemail preference. -->
     <string name="voicemail_visual_voicemail_key">voicemail_visual_voicemail_key</string>
     <!-- DO NOT TRANSLATE. Internal key for a voicemail change pin preference. -->
diff --git a/res/xml/voicemail_settings.xml b/res/xml/voicemail_settings.xml
index 1fc1fe1..021a764 100644
--- a/res/xml/voicemail_settings.xml
+++ b/res/xml/voicemail_settings.xml
@@ -50,14 +50,7 @@
 
     </PreferenceScreen>
 
-    <com.android.phone.settings.VoicemailRingtonePreference
-        android:key="@string/voicemail_notification_ringtone_key"
-        android:title="@string/voicemail_notification_ringtone_title"
-        android:persistent="false"
-        android:ringtoneType="notification" />
-
-    <SwitchPreference
-        android:key="@string/voicemail_notification_vibrate_key"
-        android:title="@string/voicemail_notification_vibrate_when_title"
-        android:persistent="true" />
+    <Preference
+        android:key="@string/voicemail_notifications_key"
+        android:title="@string/voicemail_notifications_preference_title"/>
 </PreferenceScreen>
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 07b1b10..69c0871 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -55,7 +55,6 @@
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.TelephonyCapabilities;
 import com.android.internal.telephony.util.NotificationChannelController;
-import com.android.phone.settings.VoicemailNotificationSettingsUtil;
 import com.android.phone.settings.VoicemailSettingsActivity;
 
 import java.util.Iterator;
@@ -333,11 +332,6 @@
 
             PendingIntent pendingIntent =
                     PendingIntent.getActivity(mContext, subId /* requestCode */, intent, 0);
-            Uri ringtoneUri = null;
-
-            if (enableNotificationSound) {
-                ringtoneUri = VoicemailNotificationSettingsUtil.getRingtoneUri(phone);
-            }
 
             Resources res = mContext.getResources();
             PersistableBundle carrierConfig = PhoneGlobals.getInstance().getCarrierConfigForSubId(
@@ -349,16 +343,11 @@
                     .setContentTitle(notificationTitle)
                     .setContentText(notificationText)
                     .setContentIntent(pendingIntent)
-                    .setSound(ringtoneUri)
                     .setColor(res.getColor(R.color.dialer_theme_color))
                     .setOngoing(carrierConfig.getBoolean(
                             CarrierConfigManager.KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL))
                     .setChannel(NotificationChannelController.CHANNEL_ID_VOICE_MAIL);
 
-            if (VoicemailNotificationSettingsUtil.isVibrationEnabled(phone)) {
-                builder.setDefaults(Notification.DEFAULT_VIBRATE);
-            }
-
             final Notification notification = builder.build();
             List<UserInfo> users = mUserManager.getUsers(true);
             for (int i = 0; i < users.size(); i++) {
diff --git a/src/com/android/phone/settings/VoicemailNotificationSettingsUtil.java b/src/com/android/phone/settings/VoicemailNotificationSettingsUtil.java
index 9654ea7..fb7baf5 100644
--- a/src/com/android/phone/settings/VoicemailNotificationSettingsUtil.java
+++ b/src/com/android/phone/settings/VoicemailNotificationSettingsUtil.java
@@ -16,15 +16,14 @@
 
 package com.android.phone.settings;
 
-import android.content.Context;
+import android.app.NotificationChannel;
 import android.content.SharedPreferences;
 import android.net.Uri;
 import android.preference.PreferenceManager;
-import android.provider.Settings;
 import android.telephony.TelephonyManager;
-import android.text.TextUtils;
 
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.util.NotificationChannelController;
 import com.android.phone.R;
 
 public class VoicemailNotificationSettingsUtil {
@@ -53,9 +52,9 @@
     }
 
     public static boolean isVibrationEnabled(Phone phone) {
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
-        migrateVoicemailVibrationSettingsIfNeeded(phone, prefs);
-        return prefs.getBoolean(getVoicemailVibrationSharedPrefsKey(phone), false /* defValue */);
+        final NotificationChannel channel = NotificationChannelController.getChannel(
+                NotificationChannelController.CHANNEL_ID_VOICE_MAIL, phone.getContext());
+        return (channel != null) ? channel.shouldVibrate() : false;
     }
 
    public static void setRingtoneUri(Phone phone, Uri ringtoneUri) {
@@ -68,12 +67,9 @@
     }
 
     public static Uri getRingtoneUri(Phone phone) {
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
-        migrateVoicemailRingtoneSettingsIfNeeded(phone, prefs);
-        String uriString = prefs.getString(
-                getVoicemailRingtoneSharedPrefsKey(phone),
-                Settings.System.DEFAULT_NOTIFICATION_URI.toString());
-        return !TextUtils.isEmpty(uriString) ? Uri.parse(uriString) : null;
+        final NotificationChannel channel = NotificationChannelController.getChannel(
+                NotificationChannelController.CHANNEL_ID_VOICE_MAIL, phone.getContext());
+        return (channel != null) ? channel.getSound() : null;
     }
 
     /**
diff --git a/src/com/android/phone/settings/VoicemailRingtonePreference.java b/src/com/android/phone/settings/VoicemailRingtonePreference.java
deleted file mode 100644
index bb82d4f..0000000
--- a/src/com/android/phone/settings/VoicemailRingtonePreference.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.android.phone.settings;
-
-import android.content.Context;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Message;
-import android.preference.Preference;
-import android.preference.RingtonePreference;
-import android.util.AttributeSet;
-
-import com.android.internal.telephony.Phone;
-import com.android.phone.common.util.SettingsUtil;
-
-/**
- * Looks up the voicemail ringtone's name asynchronously and updates the preference's summary when
- * it is created or updated.
- */
-public class VoicemailRingtonePreference extends RingtonePreference {
-    public interface VoicemailRingtoneNameChangeListener {
-        void onVoicemailRingtoneNameChanged(CharSequence name);
-    }
-
-    private static final int MSG_UPDATE_VOICEMAIL_RINGTONE_SUMMARY = 1;
-
-    private VoicemailRingtoneNameChangeListener mVoicemailRingtoneNameChangeListener;
-    private Runnable mVoicemailRingtoneLookupRunnable;
-    private Handler mVoicemailRingtoneLookupComplete;
-
-    private Phone mPhone;
-
-    public VoicemailRingtonePreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        mVoicemailRingtoneLookupComplete = new Handler() {
-            @Override
-            public void handleMessage(Message msg) {
-                switch (msg.what) {
-                    case MSG_UPDATE_VOICEMAIL_RINGTONE_SUMMARY:
-                        if (mVoicemailRingtoneNameChangeListener != null) {
-                            mVoicemailRingtoneNameChangeListener.onVoicemailRingtoneNameChanged(
-                                    (CharSequence) msg.obj);
-                        }
-                        setSummary((CharSequence) msg.obj);
-                        break;
-                }
-            }
-        };
-    }
-
-    public void init(Phone phone, CharSequence oldRingtoneName) {
-        mPhone = phone;
-
-        // Requesting the ringtone will trigger migration if necessary.
-        VoicemailNotificationSettingsUtil.getRingtoneUri(phone);
-
-        final Preference preference = this;
-        final String preferenceKey =
-                VoicemailNotificationSettingsUtil.getVoicemailRingtoneSharedPrefsKey(mPhone);
-        setSummary(oldRingtoneName);
-        mVoicemailRingtoneLookupRunnable = new Runnable() {
-            @Override
-            public void run() {
-                SettingsUtil.updateRingtoneName(
-                        preference.getContext(),
-                        mVoicemailRingtoneLookupComplete,
-                        RingtoneManager.TYPE_NOTIFICATION,
-                        preferenceKey,
-                        MSG_UPDATE_VOICEMAIL_RINGTONE_SUMMARY);
-            }
-        };
-
-        updateRingtoneName();
-    }
-
-    public void setVoicemailRingtoneNameChangeListener(VoicemailRingtoneNameChangeListener l) {
-        mVoicemailRingtoneNameChangeListener = l;
-    }
-
-    @Override
-    protected Uri onRestoreRingtone() {
-        return VoicemailNotificationSettingsUtil.getRingtoneUri(mPhone);
-    }
-
-    @Override
-    protected void onSaveRingtone(Uri ringtoneUri) {
-        // Don't call superclass method because it uses the pref key as the SharedPreferences key.
-        // Delegate to the voicemail notification utility to save the ringtone instead.
-        VoicemailNotificationSettingsUtil.setRingtoneUri(mPhone, ringtoneUri);
-
-        updateRingtoneName();
-    }
-
-    private void updateRingtoneName() {
-        new Thread(mVoicemailRingtoneLookupRunnable).start();
-    }
-}
diff --git a/src/com/android/phone/settings/VoicemailSettingsActivity.java b/src/com/android/phone/settings/VoicemailSettingsActivity.java
index d0e0656..04e8bf5 100644
--- a/src/com/android/phone/settings/VoicemailSettingsActivity.java
+++ b/src/com/android/phone/settings/VoicemailSettingsActivity.java
@@ -30,6 +30,7 @@
 import android.preference.PreferenceScreen;
 import android.preference.SwitchPreference;
 import android.provider.ContactsContract.CommonDataKinds;
+import android.provider.Settings;
 import android.telephony.TelephonyManager;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
@@ -42,6 +43,7 @@
 import com.android.internal.telephony.CallForwardInfo;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.util.NotificationChannelController;
 import com.android.phone.EditPhoneNumberPreference;
 import com.android.phone.PhoneGlobals;
 import com.android.phone.R;
@@ -57,8 +59,7 @@
         implements DialogInterface.OnClickListener,
                 Preference.OnPreferenceChangeListener,
                 EditPhoneNumberPreference.OnDialogClosedListener,
-                EditPhoneNumberPreference.GetDefaultNumberListener,
-                VoicemailRingtonePreference.VoicemailRingtoneNameChangeListener {
+                EditPhoneNumberPreference.GetDefaultNumberListener{
     private static final String LOG_TAG = VoicemailSettingsActivity.class.getSimpleName();
     private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
 
@@ -185,8 +186,6 @@
     private CallForwardInfo[] mNewFwdSettings;
     private String mNewVMNumber;
 
-    private CharSequence mOldVmRingtoneName = "";
-
     /**
      * Used to indicate that the voicemail preference should be shown.
      */
@@ -199,8 +198,7 @@
     private EditPhoneNumberPreference mSubMenuVoicemailSettings = null;
     private VoicemailProviderListPreference mVoicemailProviders;
     private PreferenceScreen mVoicemailSettings;
-    private VoicemailRingtonePreference mVoicemailNotificationRingtone;
-    private SwitchPreference mVoicemailNotificationVibrate;
+    private Preference mVoicemailNotificationPreference;
 
     //*********************************************************************************************
     // Preference Activity Methods
@@ -227,6 +225,14 @@
                 getActionBar(), getResources(), R.string.voicemail_settings_with_label);
         mPhone = mSubscriptionInfoHelper.getPhone();
         addPreferencesFromResource(R.xml.voicemail_settings);
+
+        mVoicemailNotificationPreference =
+                findPreference(getString(R.string.voicemail_notifications_key));
+        final Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
+        intent.putExtra(Settings.EXTRA_CHANNEL_ID,
+                NotificationChannelController.CHANNEL_ID_VOICE_MAIL);
+        intent.putExtra(Settings.EXTRA_APP_PACKAGE, mPhone.getContext().getPackageName());
+        mVoicemailNotificationPreference.setIntent(intent);
     }
 
     @Override
@@ -254,15 +260,6 @@
 
         mVoicemailSettings = (PreferenceScreen) findPreference(BUTTON_VOICEMAIL_SETTING_KEY);
 
-        mVoicemailNotificationRingtone = (VoicemailRingtonePreference) findPreference(
-                getResources().getString(R.string.voicemail_notification_ringtone_key));
-        mVoicemailNotificationRingtone.setVoicemailRingtoneNameChangeListener(this);
-        mVoicemailNotificationRingtone.init(mPhone, mOldVmRingtoneName);
-
-        mVoicemailNotificationVibrate = (SwitchPreference) findPreference(
-                getResources().getString(R.string.voicemail_notification_vibrate_key));
-        mVoicemailNotificationVibrate.setOnPreferenceChangeListener(this);
-
         maybeHidePublicSettings();
 
         updateVMPreferenceWidgets(mVoicemailProviders.getValue());
@@ -286,9 +283,6 @@
 
         updateVoiceNumberField();
         mVMProviderSettingsForced = false;
-
-        mVoicemailNotificationVibrate.setChecked(
-                VoicemailNotificationSettingsUtil.isVibrationEnabled(mPhone));
     }
 
     /**
@@ -304,8 +298,7 @@
             log("maybeHidePublicSettings: settings hidden by EXTRA_HIDE_PUBLIC_SETTINGS");
         }
         PreferenceScreen preferenceScreen = getPreferenceScreen();
-        preferenceScreen.removePreference(mVoicemailNotificationRingtone);
-        preferenceScreen.removePreference(mVoicemailNotificationVibrate);
+        preferenceScreen.removePreference(mVoicemailNotificationPreference);
     }
 
     @Override
@@ -401,12 +394,6 @@
                 mChangingVMorFwdDueToProviderChange = true;
                 saveVoiceMailAndForwardingNumber(newProviderKey, newProviderSettings);
             }
-        } else if (preference.getKey().equals(mVoicemailNotificationVibrate.getKey())) {
-            // Check key instead of comparing reference because closing the voicemail notification
-            // ringtone dialog invokes onResume(), but leaves the old preference screen up,
-            // TODO: Revert to checking reference after migrating voicemail to its own activity.
-            VoicemailNotificationSettingsUtil.setVibrationEnabled(
-                    mPhone, Boolean.TRUE.equals(objValue));
         }
         // Always let the preference setting proceed.
         return true;
@@ -539,11 +526,6 @@
         super.onActivityResult(requestCode, resultCode, data);
     }
 
-    @Override
-    public void onVoicemailRingtoneNameChanged(CharSequence name) {
-        mOldVmRingtoneName = name;
-    }
-
     /**
      * Simulates user clicking on a passed preference.
      * Usually needed when the preference is a dialog preference and we want to invoke
@@ -1012,7 +994,6 @@
             mVoicemailProviders.setSummary(getString(R.string.sum_voicemail_choose_provider));
             mVoicemailSettings.setEnabled(false);
             mVoicemailSettings.setIntent(null);
-            mVoicemailNotificationVibrate.setEnabled(false);
         } else {
             if (DBG) log("updateVMPreferenceWidget: key: " + key + " -> " + provider.toString());
 
@@ -1020,7 +1001,6 @@
             mVoicemailProviders.setSummary(providerName);
             mVoicemailSettings.setEnabled(true);
             mVoicemailSettings.setIntent(provider.intent);
-            mVoicemailNotificationVibrate.setEnabled(true);
         }
     }