diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index 91199c1fe8d7c..4144c803dbd32 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -30,6 +30,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserManager; import android.provider.Settings; +import android.telephony.TelephonyManager; import android.text.TextUtils; import java.util.Locale; @@ -38,11 +39,14 @@ public class SettingsHelper { private static final String SILENT_RINGTONE = "_silent"; private Context mContext; private AudioManager mAudioManager; + private TelephonyManager mTelephonyManager; public SettingsHelper(Context context) { mContext = context; mAudioManager = (AudioManager) context .getSystemService(Context.AUDIO_SERVICE); + mTelephonyManager = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); } /** @@ -75,12 +79,23 @@ public class SettingsHelper { } public String onBackupValue(String name, String value) { - // Special processing for backing up ringtones + // Special processing for backing up ringtones & notification sounds if (Settings.System.RINGTONE.equals(name) || Settings.System.NOTIFICATION_SOUND.equals(name)) { if (value == null) { - // Silent ringtone - return SILENT_RINGTONE; + if (Settings.System.RINGTONE.equals(name)) { + // For ringtones, we need to distinguish between non-telephony vs telephony + if (mTelephonyManager != null && mTelephonyManager.isVoiceCapable()) { + // Backup a null ringtone as silent on voice-capable devices + return SILENT_RINGTONE; + } else { + // Skip backup of ringtone on non-telephony devices. + return null; + } + } else { + // Backup a null notification sound as silent + return SILENT_RINGTONE; + } } else { return getCanonicalRingtoneValue(value); }