1package eu.siacs.conversations;
2
3import android.content.Context;
4import android.content.SharedPreferences;
5import android.net.Uri;
6
7import androidx.annotation.BoolRes;
8import androidx.annotation.NonNull;
9import androidx.preference.PreferenceManager;
10
11import com.google.common.base.Strings;
12
13public class AppSettings {
14
15 public static final String KEEP_FOREGROUND_SERVICE = "enable_foreground_service";
16 public static final String AWAY_WHEN_SCREEN_IS_OFF = "away_when_screen_off";
17 public static final String TREAT_VIBRATE_AS_SILENT = "treat_vibrate_as_silent";
18 public static final String DND_ON_SILENT_MODE = "dnd_on_silent_mode";
19 public static final String MANUALLY_CHANGE_PRESENCE = "manually_change_presence";
20 public static final String BLIND_TRUST_BEFORE_VERIFICATION = "btbv";
21 public static final String AUTOMATIC_MESSAGE_DELETION = "automatic_message_deletion";
22 public static final String BROADCAST_LAST_ACTIVITY = "last_activity";
23 public static final String THEME = "theme";
24 public static final String SHOW_DYNAMIC_TAGS = "show_dynamic_tags";
25 public static final String OMEMO = "omemo";
26 public static final String ALLOW_SCREENSHOTS = "allow_screenshots";
27 public static final String RINGTONE = "call_ringtone";
28 public static final String BTBV = "btbv";
29
30 public static final String CONFIRM_MESSAGES = "confirm_messages";
31 public static final String ALLOW_MESSAGE_CORRECTION = "allow_message_correction";
32
33 public static final String TRUST_SYSTEM_CA_STORE = "trust_system_ca_store";
34 public static final String REQUIRE_CHANNEL_BINDING = "channel_binding_required";
35 public static final String NOTIFICATION_RINGTONE = "notification_ringtone";
36 public static final String NOTIFICATION_HEADS_UP = "notification_headsup";
37 public static final String NOTIFICATION_VIBRATE = "vibrate_on_notification";
38 public static final String NOTIFICATION_LED = "led";
39 public static final String SHOW_CONNECTION_OPTIONS = "show_connection_options";
40 public static final String USE_TOR = "use_tor";
41 public static final String CHANNEL_DISCOVERY_METHOD = "channel_discovery_method";
42
43 public static final String SEND_CRASH_REPORTS = "send_crash_reports";
44
45 private final Context context;
46
47 public AppSettings(final Context context) {
48 this.context = context;
49 }
50
51 public Uri getRingtone() {
52 final SharedPreferences sharedPreferences =
53 PreferenceManager.getDefaultSharedPreferences(context);
54 final String incomingCallRingtone =
55 sharedPreferences.getString(
56 RINGTONE, context.getString(R.string.incoming_call_ringtone));
57 return Strings.isNullOrEmpty(incomingCallRingtone) ? null : Uri.parse(incomingCallRingtone);
58 }
59
60 public void setRingtone(final Uri uri) {
61 final SharedPreferences sharedPreferences =
62 PreferenceManager.getDefaultSharedPreferences(context);
63 sharedPreferences.edit().putString(RINGTONE, uri == null ? null : uri.toString()).apply();
64 }
65
66 public Uri getNotificationTone() {
67 final SharedPreferences sharedPreferences =
68 PreferenceManager.getDefaultSharedPreferences(context);
69 final String incomingCallRingtone =
70 sharedPreferences.getString(
71 NOTIFICATION_RINGTONE, context.getString(R.string.notification_ringtone));
72 return Strings.isNullOrEmpty(incomingCallRingtone) ? null : Uri.parse(incomingCallRingtone);
73 }
74
75 public void setNotificationTone(final Uri uri) {
76 final SharedPreferences sharedPreferences =
77 PreferenceManager.getDefaultSharedPreferences(context);
78 sharedPreferences
79 .edit()
80 .putString(NOTIFICATION_RINGTONE, uri == null ? null : uri.toString())
81 .apply();
82 }
83
84 public boolean isBTBVEnabled() {
85 return getBooleanPreference(BTBV, R.bool.btbv);
86 }
87
88 public boolean isTrustSystemCAStore() {
89 return getBooleanPreference(TRUST_SYSTEM_CA_STORE, R.bool.trust_system_ca_store);
90 }
91
92 public boolean isAllowScreenshots() {
93 return getBooleanPreference(ALLOW_SCREENSHOTS, R.bool.allow_screenshots);
94 }
95
96 public boolean isUseTor() {
97 return getBooleanPreference(USE_TOR, R.bool.use_tor);
98 }
99
100 private boolean getBooleanPreference(@NonNull final String name, @BoolRes int res) {
101 final SharedPreferences sharedPreferences =
102 PreferenceManager.getDefaultSharedPreferences(context);
103 return sharedPreferences.getBoolean(name, context.getResources().getBoolean(res));
104 }
105
106 public String getOmemo() {
107 final SharedPreferences sharedPreferences =
108 PreferenceManager.getDefaultSharedPreferences(context);
109 return sharedPreferences.getString(
110 OMEMO, context.getString(R.string.omemo_setting_default));
111 }
112
113 public boolean isSendCrashReports() {
114 return getBooleanPreference(SEND_CRASH_REPORTS, R.bool.send_crash_reports);
115 }
116
117 public void setSendCrashReports(boolean value) {
118 final SharedPreferences sharedPreferences =
119 PreferenceManager.getDefaultSharedPreferences(context);
120 sharedPreferences.edit().putBoolean(SEND_CRASH_REPORTS, value).apply();
121 }
122
123 public boolean isRequireChannelBinding() {
124 return getBooleanPreference(REQUIRE_CHANNEL_BINDING, R.bool.require_channel_binding);
125 }
126}