diff --git a/src-N/com/android/dialer/calllog/VoicemailNotificationSettingsLookup.java b/src-N/com/android/dialer/calllog/VoicemailNotificationSettingsLookup.java
deleted file mode 100644
index 4ca0c65..0000000
--- a/src-N/com/android/dialer/calllog/VoicemailNotificationSettingsLookup.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2016 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.calllog;
-
-import android.app.Notification;
-import android.content.ComponentName;
-import android.content.Context;
-import android.net.Uri;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.TelephonyManager;
-
-import com.android.dialer.calllog.DefaultVoicemailNotifier.NewCall;
-
-/**
- * Class to do lookup for voicemail ringtone and vibration. On N and above, this will look up
- * voicemail notification settings from Telephony.
- */
-public class VoicemailNotificationSettingsLookup {
-    public static Uri getVoicemailRingtoneUri(Context context, PhoneAccountHandle accountHandle) {
-        return getTelephonyManager(context).getVoicemailRingtoneUri(accountHandle);
-    }
-
-    public static int getNotificationDefaults(Context context, PhoneAccountHandle accountHandle) {
-        return getTelephonyManager(context).isVoicemailVibrationEnabled(accountHandle)
-                ? Notification.DEFAULT_VIBRATE : 0;
-    }
-
-    private static TelephonyManager getTelephonyManager(Context context) {
-        return (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-    }
-}
diff --git a/src-pre-N/com/android/dialer/calllog/VoicemailNotificationSettingsLookup.java b/src-pre-N/com/android/dialer/calllog/VoicemailNotificationSettingsLookup.java
deleted file mode 100644
index 5e161f2..0000000
--- a/src-pre-N/com/android/dialer/calllog/VoicemailNotificationSettingsLookup.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2016 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.calllog;
-
-import android.app.Notification;
-import android.content.Context;
-import android.net.Uri;
-import android.telecom.PhoneAccountHandle;
-
-/**
- * Class to do lookup for voicemail ringtone. On pre-N, this is just the system defaults.
- */
-public class VoicemailNotificationSettingsLookup {
-    public static Uri getVoicemailRingtoneUri(Context context, PhoneAccountHandle accountHandle) {
-        return null;
-    }
-
-    public static int getNotificationDefaults(Context context, PhoneAccountHandle accountHandle) {
-        return Notification.DEFAULT_ALL;
-    }
-}
diff --git a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
index d0156cf..2b894a1 100644
--- a/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
+++ b/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
@@ -24,7 +24,6 @@
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
-import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.Context;
@@ -34,7 +33,6 @@
 import android.net.Uri;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.PhoneLookup;
-import android.telecom.PhoneAccountHandle;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import android.util.Log;
@@ -196,26 +194,13 @@
         // TODO: Use the photo of contact if all calls are from the same person.
         final int icon = android.R.drawable.stat_notify_voicemail;
 
-        Uri ringtoneUri = null;
-        int notificationDefaults = 0;
-        if (callToNotify != null) {
-            PhoneAccountHandle accountHandle = new PhoneAccountHandle(
-                    ComponentName.unflattenFromString(callToNotify.accountComponentName),
-                    callToNotify.accountId);
-            ringtoneUri = VoicemailNotificationSettingsLookup
-                    .getVoicemailRingtoneUri(mContext, accountHandle);
-            notificationDefaults = VoicemailNotificationSettingsLookup
-                    .getNotificationDefaults(mContext, accountHandle);
-        }
-
         Notification.Builder notificationBuilder = new Notification.Builder(mContext)
                 .setSmallIcon(icon)
                 .setContentTitle(title)
                 .setContentText(callers)
                 .setStyle(new Notification.BigTextStyle().bigText(transcription))
                 .setColor(resources.getColor(R.color.dialer_theme_color))
-                .setSound(ringtoneUri)
-                .setDefaults(notificationDefaults)
+                .setDefaults(callToNotify != null ? Notification.DEFAULT_ALL : 0)
                 .setDeleteIntent(createMarkNewVoicemailsAsOldIntent())
                 .setAutoCancel(true);
 
