From 822017c69c552b1f2fc2f5dc6abe989327404647 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Mon, 18 Sep 2017 13:36:32 +0100
Subject: [PATCH] Don't crash if the chosen ringtone can't be loaded.

---
 .../briar/android/settings/SettingsFragment.java  | 15 +++++++++++----
 briar-android/src/main/res/values/strings.xml     |  1 +
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
index 98afedd525..ea213e3b83 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
@@ -15,6 +15,7 @@ import android.support.v7.preference.PreferenceFragmentCompat;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.ViewGroup;
+import android.widget.Toast;
 
 import org.acra.ACRA;
 import org.briarproject.bramble.api.db.DbException;
@@ -46,6 +47,7 @@ import static android.media.RingtoneManager.EXTRA_RINGTONE_TITLE;
 import static android.media.RingtoneManager.EXTRA_RINGTONE_TYPE;
 import static android.media.RingtoneManager.TYPE_NOTIFICATION;
 import static android.provider.Settings.System.DEFAULT_NOTIFICATION_URI;
+import static android.widget.Toast.LENGTH_SHORT;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.bramble.api.plugin.BluetoothConstants.PREF_BT_ENABLE;
@@ -400,10 +402,15 @@ public class SettingsFragment extends PreferenceFragmentCompat
 			} else {
 				// The user chose a ringtone other than the default
 				Ringtone r = RingtoneManager.getRingtone(getContext(), uri);
-				String name = r.getTitle(getContext());
-				s.putBoolean(PREF_NOTIFY_SOUND, true);
-				s.put(PREF_NOTIFY_RINGTONE_NAME, name);
-				s.put(PREF_NOTIFY_RINGTONE_URI, uri.toString());
+				if (r == null) {
+					Toast.makeText(getContext(), R.string.cannot_load_ringtone,
+							LENGTH_SHORT).show();
+				} else {
+					String name = r.getTitle(getContext());
+					s.putBoolean(PREF_NOTIFY_SOUND, true);
+					s.put(PREF_NOTIFY_RINGTONE_NAME, name);
+					s.put(PREF_NOTIFY_RINGTONE_URI, uri.toString());
+				}
 			}
 			storeSettings(s);
 		}
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index 3a20ab2e72..d09edd5302 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -357,6 +357,7 @@
 	<string name="notify_sound_setting_default">Default ringtone</string>
 	<string name="notify_sound_setting_disabled">None</string>
 	<string name="choose_ringtone_title">Choose ringtone</string>
+	<string name="cannot_load_ringtone">Cannot load ringtone</string>
 
 	<!-- Settings Feedback -->
 	<string name="feedback_settings_title">Feedback</string>
-- 
GitLab