diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AboutUserPreferencesActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AboutUserPreferencesActivity.java
index 7c24f760a..046146b4b 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AboutUserPreferencesActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AboutUserPreferencesActivity.java
@@ -42,7 +42,6 @@ import androidx.preference.Preference;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
-import nodomain.freeyourgadget.gadgetbridge.activities.charts.AbstractPreferenceFragment;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager;
public class AboutUserPreferencesActivity extends AbstractGBActivity {
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractPreferenceFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractPreferenceFragment.java
similarity index 99%
rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractPreferenceFragment.java
rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractPreferenceFragment.java
index 08aa41ff0..02eeb644e 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractPreferenceFragment.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractPreferenceFragment.java
@@ -14,7 +14,7 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see . */
-package nodomain.freeyourgadget.gadgetbridge.activities.charts;
+package nodomain.freeyourgadget.gadgetbridge.activities;
import android.content.SharedPreferences;
import android.os.Bundle;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryPairingPreferenceActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryPairingPreferenceActivity.java
index 6bbf27205..1b28f8091 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryPairingPreferenceActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryPairingPreferenceActivity.java
@@ -22,7 +22,6 @@ import android.os.Bundle;
import androidx.fragment.app.Fragment;
import nodomain.freeyourgadget.gadgetbridge.R;
-import nodomain.freeyourgadget.gadgetbridge.activities.charts.AbstractPreferenceFragment;
public class DiscoveryPairingPreferenceActivity extends AbstractGBActivity {
@Override
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/NotificationManagementActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/NotificationManagementActivity.java
index 16c7037d2..fe891ba04 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/NotificationManagementActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/NotificationManagementActivity.java
@@ -1,22 +1,5 @@
-/* Copyright (C) 2015-2020 Andreas Shimokawa, Carsten Pfeiffer, Lem Dulfo,
- vanous
-
- This file is part of Gadgetbridge.
-
- Gadgetbridge is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published
- by the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Gadgetbridge is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see . */
-/* Copyright (C) 2015-2020 Andreas Shimokawa, Carsten Pfeiffer, Lem Dulfo,
- vanous
+/* Copyright (C) 2015-2023 Andreas Shimokawa, Carsten Pfeiffer, Lem Dulfo,
+ vanous, José Rebelo
This file is part of Gadgetbridge.
@@ -35,18 +18,14 @@
package nodomain.freeyourgadget.gadgetbridge.activities;
import android.content.Intent;
-import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.preference.Preference;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceManager;
import android.provider.Settings;
-import android.widget.EditText;
-import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -56,7 +35,7 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
-public class NotificationManagementActivity extends AbstractSettingsActivity {
+public class NotificationManagementActivity extends AbstractGBActivity {
private static final Logger LOG = LoggerFactory.getLogger(NotificationManagementActivity.class);
private static final int RINGTONE_REQUEST_CODE = 4712;
private static final String DEFAULT_RINGTONE_URI = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE).toString();
@@ -64,112 +43,114 @@ public class NotificationManagementActivity extends AbstractSettingsActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.notifications_preferences);
+ setContentView(R.layout.activity_device_settings);
+
+ if (savedInstanceState == null) {
+ Fragment fragment = getSupportFragmentManager().findFragmentByTag(NotificationPreferencesFragment.FRAGMENT_TAG);
+ if (fragment == null) {
+ fragment = new NotificationPreferencesFragment();
+ }
+ getSupportFragmentManager()
+ .beginTransaction()
+ .replace(R.id.settings_container, fragment, NotificationPreferencesFragment.FRAGMENT_TAG)
+ .commit();
+ }
}
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
+ public static class NotificationPreferencesFragment extends AbstractPreferenceFragment {
+ static final String FRAGMENT_TAG = "NOTIFICATION_PREFERENCES_FRAGMENT";
- Prefs prefs = GBApplication.getPrefs();
- Preference pref = findPreference("notifications_generic");
- pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- public boolean onPreferenceClick(Preference preference) {
- Intent enableIntent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
+ @Override
+ protected void onSharedPreferenceChanged(final Preference preference) {
+ if (GBPrefs.PING_TONE.equals(preference.getKey())) {
+ try {
+ final Prefs prefs = GBApplication.getPrefs();
+ // This fails on some ROMs. The actual implementation falls-back to an internal ping tone
+ preference.setSummary(RingtoneManager.getRingtone(requireContext(), Uri.parse(prefs.getString(GBPrefs.PING_TONE, DEFAULT_RINGTONE_URI))).getTitle(requireContext()));
+ } catch (final Exception e) {
+ LOG.error("Failed to find the configured ping ringtone", e);
+ preference.setSummary("-");
+ }
+ }
+ }
+
+ @Override
+ public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
+ addPreferencesFromResource(R.xml.notifications_preferences);
+
+ Preference pref = findPreference("notifications_generic");
+ pref.setOnPreferenceClickListener(preference -> {
+ final Intent enableIntent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
startActivity(enableIntent);
return true;
- }
- });
+ });
-
- pref = findPreference(GBPrefs.PING_TONE);
- pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
+ pref = findPreference(GBPrefs.PING_TONE);
+ pref.setOnPreferenceClickListener(preference -> {
+ final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Set Ping tone");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
startActivityForResult(intent, RINGTONE_REQUEST_CODE);
return true;
- }
- });
+ });
- try {
- // This fails on some ROMs. The actual implementation falls-back to an internal ping tone
- pref.setSummary(RingtoneManager.getRingtone(this, Uri.parse(prefs.getString(GBPrefs.PING_TONE, DEFAULT_RINGTONE_URI))).getTitle(this));
- } catch (final Exception e) {
- LOG.error("Failed to find the configured ping ringtone");
- pref.setSummary("-");
- }
-
- pref = findPreference("pref_key_blacklist");
- pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- public boolean onPreferenceClick(Preference preference) {
- Intent enableIntent = new Intent(NotificationManagementActivity.this, AppBlacklistActivity.class);
+ pref = findPreference("pref_key_blacklist");
+ pref.setOnPreferenceClickListener(preference -> {
+ final Intent enableIntent = new Intent(requireContext(), AppBlacklistActivity.class);
startActivity(enableIntent);
return true;
- }
- });
+ });
- if (!GBApplication.isRunningMarshmallowOrLater()) {
- pref = findPreference("notification_filter");
- PreferenceCategory category = (PreferenceCategory) findPreference("pref_key_notifications");
- category.removePreference(pref);
- }
+ pref = findPreference("notifications_settings");
+ pref.setOnPreferenceClickListener(preference -> {
+ if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) {
+ LOG.warn("This preference should not be displayed in Android < O");
+ return true;
+ }
- pref = findPreference("notifications_settings");
- pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- public boolean onPreferenceClick(Preference preference) {
- Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
+ final Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
+ intent.putExtra(Settings.EXTRA_APP_PACKAGE, requireActivity().getPackageName());
//This could open notification channel settings, if needed...:
//Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
//intent.putExtra(Settings.EXTRA_CHANNEL_ID, GB.NOTIFICATION_CHANNEL_ID_TRANSFER);
startActivity(intent);
return true;
+ });
+
+ final PreferenceCategory notificationsCategory = findPreference("pref_key_notifications");
+
+ if (!GBApplication.isRunningMarshmallowOrLater()) {
+ pref = findPreference("notification_filter");
+ notificationsCategory.removePreference(pref);
}
- });
- if (GBApplication.isRunningTenOrLater()) {
- pref = findPreference("minimize_priority");
- PreferenceCategory category = (PreferenceCategory) findPreference("pref_key_notifications");
- category.removePreference(pref);
+ if (GBApplication.isRunningTenOrLater()) {
+ pref = findPreference("minimize_priority");
+ notificationsCategory.removePreference(pref);
+ }
+
+ if (!GBApplication.isRunningOreoOrLater()) {
+ pref = findPreference("notifications_settings");
+ notificationsCategory.removePreference(pref);
+ }
}
- if (!GBApplication.isRunningOreoOrLater()) {
- pref = findPreference("notifications_settings");
- PreferenceCategory category = (PreferenceCategory) findPreference("pref_key_notifications");
- category.removePreference(pref);
- }
- }
-
-
- @Override
- protected String[] getPreferenceKeysWithSummary() {
- return new String[]{
- };
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
- if (requestCode == RINGTONE_REQUEST_CODE && intent != null) {
- if (intent.getExtras().getParcelable(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) != null) {
- Uri uri = intent.getExtras().getParcelable(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
- Ringtone r = RingtoneManager.getRingtone(this, uri);
- findPreference(GBPrefs.PING_TONE).setSummary(r.toString());
-
- PreferenceManager
- .getDefaultSharedPreferences(this)
- .edit()
- .putString(GBPrefs.PING_TONE, uri.toString())
- .apply();
- findPreference(GBPrefs.PING_TONE).setSummary(r.getTitle(this));
+ // TODO: Migrate this to ActivityResultContract
+ @Override
+ public void onActivityResult(final int requestCode, final int resultCode, final Intent intent) {
+ if (requestCode == RINGTONE_REQUEST_CODE && intent != null) {
+ if (intent.getExtras().getParcelable(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) != null) {
+ final Uri uri = intent.getExtras().getParcelable(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
+ GBApplication.getPrefs()
+ .getPreferences()
+ .edit()
+ .putString(GBPrefs.PING_TONE, uri.toString())
+ .apply();
+ }
}
}
}
-
-
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsPreferencesActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsPreferencesActivity.java
index 6e2a893a7..a1d61e298 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsPreferencesActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsPreferencesActivity.java
@@ -27,6 +27,7 @@ import androidx.preference.Preference;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.AboutUserPreferencesActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity;
+import nodomain.freeyourgadget.gadgetbridge.activities.AbstractPreferenceFragment;
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
public class ChartsPreferencesActivity extends AbstractGBActivity {
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java
index a991acb6b..944d7b0d1 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java
@@ -40,7 +40,7 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.CalBlacklistActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.ConfigureContacts;
import nodomain.freeyourgadget.gadgetbridge.activities.ConfigureWorldClocks;
-import nodomain.freeyourgadget.gadgetbridge.activities.charts.AbstractPreferenceFragment;
+import nodomain.freeyourgadget.gadgetbridge.activities.AbstractPreferenceFragment;
import nodomain.freeyourgadget.gadgetbridge.activities.loyaltycards.LoyaltyCardsSettingsActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.loyaltycards.LoyaltyCardsSettingsConst;
import nodomain.freeyourgadget.gadgetbridge.capabilities.HeartRateCapability;
diff --git a/app/src/main/res/xml/notifications_preferences.xml b/app/src/main/res/xml/notifications_preferences.xml
index 4f965068a..81a621750 100644
--- a/app/src/main/res/xml/notifications_preferences.xml
+++ b/app/src/main/res/xml/notifications_preferences.xml
@@ -1,76 +1,92 @@
-
+
+ android:title="@string/pref_header_notifications"
+ app:iconSpaceReserved="false">
+ android:title="@string/pref_title_notifications_generic_settings"
+ app:iconSpaceReserved="false" />
+ android:title="@string/pref_title_notifications_generic"
+ app:iconSpaceReserved="false" />
-
+ android:title="@string/pref_title_whenscreenon"
+ app:iconSpaceReserved="false" />
-
+ app:iconSpaceReserved="false" />
-
+ app:iconSpaceReserved="false" />
-
+ app:iconSpaceReserved="false" />
-
+ android:title="@string/pref_title_minimize_priority"
+ app:iconSpaceReserved="false" />
+
-
+
+
+ android:title="@string/pref_title_support_voip_calls"
+ app:iconSpaceReserved="false" />
+
+ app:iconSpaceReserved="false" />
+ android:title="@string/pref_title_notifications_sms"
+ app:iconSpaceReserved="false" />
+ android:title="@string/pref_title_notifications_pebblemsg"
+ app:iconSpaceReserved="false" />
+ android:title="@string/pref_title_notifications_timeout"
+ app:iconSpaceReserved="false" />
-
+ android:title="@string/pref_title_notification_filter"
+ app:iconSpaceReserved="false" />
-
+
+
+
-
+
+
+ android:title="@string/pref_title_notification_media_ignores_application_list"
+ app:iconSpaceReserved="false" />
+
+ android:title="@string/pref_applications_settings"
+ app:iconSpaceReserved="false" />
-
+
+
+
+ android:title="@string/pref_title_call_privacy_mode"
+ app:iconSpaceReserved="false" />
+
+ android:title="@string/pref_title_message_privacy_mode"
+ app:iconSpaceReserved="false" />
\ No newline at end of file