Change summary
src/main/java/eu/siacs/conversations/AppSettings.java | 15
src/main/java/eu/siacs/conversations/ui/fragment/settings/NotificationsSettingsFragment.java | 33
src/main/res/values/strings.xml | 3
3 files changed, 40 insertions(+), 11 deletions(-)
Detailed changes
@@ -61,6 +61,21 @@ public class AppSettings {
sharedPreferences.edit().putString(RINGTONE, uri == null ? null : uri.toString()).apply();
}
+ public Uri getNotificationTone() {
+ final SharedPreferences sharedPreferences =
+ PreferenceManager.getDefaultSharedPreferences(context);
+ final String incomingCallRingtone =
+ sharedPreferences.getString(
+ NOTIFICATION_RINGTONE, context.getString(R.string.notification_ringtone));
+ return Strings.isNullOrEmpty(incomingCallRingtone) ? null : Uri.parse(incomingCallRingtone);
+ }
+
+ public void setNotificationTone(final Uri uri) {
+ final SharedPreferences sharedPreferences =
+ PreferenceManager.getDefaultSharedPreferences(context);
+ sharedPreferences.edit().putString(NOTIFICATION_RINGTONE, uri == null ? null : uri.toString()).apply();
+ }
+
public boolean isBTBVEnabled() {
return getBooleanPreference(BTBV, R.bool.btbv);
}
@@ -1,6 +1,5 @@
package eu.siacs.conversations.ui.fragment.settings;
-import android.content.SharedPreferences;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
@@ -9,9 +8,7 @@ import android.util.Log;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.preference.ListPreference;
import androidx.preference.Preference;
-import androidx.preference.PreferenceFragmentCompat;
import eu.siacs.conversations.AppSettings;
import eu.siacs.conversations.Config;
@@ -21,6 +18,18 @@ import eu.siacs.conversations.utils.Compatibility;
public class NotificationsSettingsFragment extends XmppPreferenceFragment {
+ private final ActivityResultLauncher<Uri> pickNotificationToneLauncher =
+ registerForActivityResult(
+ new PickRingtone(RingtoneManager.TYPE_NOTIFICATION),
+ result -> {
+ if (result == null) {
+ // do nothing. user aborted
+ return;
+ }
+ final Uri uri = PickRingtone.noneToNull(result);
+ appSettings().setNotificationTone(uri);
+ Log.i(Config.LOGTAG, "User set notification tone to " + uri);
+ });
private final ActivityResultLauncher<Uri> pickRingtoneLauncher =
registerForActivityResult(
new PickRingtone(RingtoneManager.TYPE_RINGTONE),
@@ -30,7 +39,7 @@ public class NotificationsSettingsFragment extends XmppPreferenceFragment {
return;
}
final Uri uri = PickRingtone.noneToNull(result);
- setRingtone(uri);
+ appSettings().setRingtone(uri);
Log.i(Config.LOGTAG, "User set ringtone to " + uri);
});
@@ -79,22 +88,30 @@ public class NotificationsSettingsFragment extends XmppPreferenceFragment {
@Override
public boolean onPreferenceTreeClick(final Preference preference) {
- if (AppSettings.RINGTONE.equals(preference.getKey())) {
+ final var key = preference.getKey();
+ if (AppSettings.RINGTONE.equals(key)) {
pickRingtone();
return true;
}
+ if (AppSettings.NOTIFICATION_RINGTONE.equals(key)) {
+ pickNotificationTone();
+ return true;
+ }
return super.onPreferenceTreeClick(preference);
}
+ private void pickNotificationTone() {
+ final Uri uri = appSettings().getNotificationTone();
+ Log.i(Config.LOGTAG, "current notification tone: " + uri);
+ this.pickNotificationToneLauncher.launch(uri);
+ }
+
private void pickRingtone() {
final Uri uri = appSettings().getRingtone();
Log.i(Config.LOGTAG, "current ringtone: " + uri);
this.pickRingtoneLauncher.launch(uri);
}
- private void setRingtone(final Uri uri) {
- appSettings().setRingtone(uri);
- }
private AppSettings appSettings() {
return new AppSettings(requireContext());
@@ -1025,9 +1025,6 @@
<string name="delete_and_close">Delete & Archive chat</string>
<string name="start_chat">Start chat</string>
<string name="no_certificate_selected">No client certificate selected!</string>
-
-
-
<string name="pref_title_interface">Interface</string>
<string name="pref_summary_appearance">Theme, Colors, Screenshots, Input</string>
<string name="pref_title_security">Security</string>