From f97250d46bef2c64eff7db5d912d8a72adc1e43c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Thu, 27 Jul 2023 23:47:10 +0100 Subject: [PATCH] Upgrade ZeTime settings to androidx --- .../zetime/ZeTimePreferenceActivity.java | 183 ++++++----- app/src/main/res/xml/zetime_preferences.xml | 306 +++++++++++------- 2 files changed, 294 insertions(+), 195 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/zetime/ZeTimePreferenceActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/zetime/ZeTimePreferenceActivity.java index 759709717..0edcf32da 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/zetime/ZeTimePreferenceActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/zetime/ZeTimePreferenceActivity.java @@ -17,92 +17,115 @@ package nodomain.freeyourgadget.gadgetbridge.devices.zetime; import android.os.Bundle; -import android.preference.Preference; +import android.text.InputType; + +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.AbstractSettingsActivity; +import nodomain.freeyourgadget.gadgetbridge.activities.AbstractPreferenceFragment; +import nodomain.freeyourgadget.gadgetbridge.activities.AbstractSettingsActivityV2; -public class ZeTimePreferenceActivity extends AbstractSettingsActivity { +public class ZeTimePreferenceActivity extends AbstractSettingsActivityV2 { @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - addPreferencesFromResource(R.xml.zetime_preferences); - - GBApplication.deviceService().onReadConfiguration("do_it"); - - final Preference heartrateMeasurementInterval = findPreference(ZeTimeConstants.PREF_ZETIME_HEARTRATE_INTERVAL); - heartrateMeasurementInterval.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newVal) { - GBApplication.deviceService().onSetHeartRateMeasurementInterval(Integer.parseInt((String) newVal)); - return true; - } - }); - - addPreferenceHandlerFor(ZeTimeConstants.PREF_SCREENTIME); - - addPreferenceHandlerFor(ZeTimeConstants.PREF_ANALOG_MODE); - - addPreferenceHandlerFor(ZeTimeConstants.PREF_ACTIVITY_TRACKING); - - addPreferenceHandlerFor(ZeTimeConstants.PREF_HANDMOVE_DISPLAY); - - addPreferenceHandlerFor(ZeTimeConstants.PREF_CALORIES_TYPE); - - addPreferenceHandlerFor(ZeTimeConstants.PREF_DATE_FORMAT); - - addPreferenceHandlerFor(ZeTimeConstants.PREF_SMS_SIGNALING); - addPreferenceHandlerFor(ZeTimeConstants.PREF_ANTI_LOSS_SIGNALING); - addPreferenceHandlerFor(ZeTimeConstants.PREF_CALENDAR_SIGNALING); - addPreferenceHandlerFor(ZeTimeConstants.PREF_CALL_SIGNALING); - addPreferenceHandlerFor(ZeTimeConstants.PREF_MISSED_CALL_SIGNALING); - addPreferenceHandlerFor(ZeTimeConstants.PREF_EMAIL_SIGNALING); - addPreferenceHandlerFor(ZeTimeConstants.PREF_INACTIVITY_SIGNALING); - addPreferenceHandlerFor(ZeTimeConstants.PREF_LOW_POWER_SIGNALING); - addPreferenceHandlerFor(ZeTimeConstants.PREF_SOCIAL_SIGNALING); - - - addPreferenceHandlerFor(ZeTimeConstants.PREF_ZETIME_HEARTRATE_ALARM); - addPreferenceHandlerFor(ZeTimeConstants.PREF_ZETIME_MAX_HEARTRATE); - addPreferenceHandlerFor(ZeTimeConstants.PREF_ZETIME_MIN_HEARTRATE); - - - addPreferenceHandlerFor(ZeTimeConstants.PREF_USER_SLEEP_GOAL); - addPreferenceHandlerFor(ZeTimeConstants.PREF_USER_CALORIES_GOAL); - addPreferenceHandlerFor(ZeTimeConstants.PREF_USER_DISTANCE_GOAL); - addPreferenceHandlerFor(ZeTimeConstants.PREF_USER_ACTIVETIME_GOAL); + protected String fragmentTag() { + return ZeTimePreferencesFragment.FRAGMENT_TAG; } - /** - * delayed execution so that the preferences are applied first - */ -// private void invokeLater(Runnable runnable) { -// getListView().post(runnable); -// } + @Override + protected PreferenceFragmentCompat newFragment() { + return new ZeTimePreferencesFragment(); + } -// private void addTryListeners() { -// for (final NotificationType type : NotificationType.values()) { -// String prefKey = "zetime_try_" + type.getGenericType(); -// final Preference tryPref = findPreference(prefKey); -// if (tryPref != null) { -// tryPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { -// @Override -// public boolean onPreferenceClick(Preference preference) { -// tryVibration(type); -// return true; -// } -// }); -// } else { -// GB.toast(getBaseContext(), "Unable to find preference key: " + prefKey + ", trying the vibration won't work", Toast.LENGTH_LONG, GB.WARN); -// } -// } -// } -// -// private void tryVibration(NotificationType type) { -// NotificationSpec spec = new NotificationSpec(); -// spec.type = type; -// GBApplication.deviceService().onNotification(spec); -// } + @Override + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + GBApplication.deviceService().onReadConfiguration("do_it"); + } + + public static class ZeTimePreferencesFragment extends AbstractPreferenceFragment { + static final String FRAGMENT_TAG = "ZETIME_PREFERENCES_FRAGMENT"; + + @Override + public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { + setPreferencesFromResource(R.xml.zetime_preferences, rootKey); + + final Preference heartrateMeasurementInterval = findPreference(ZeTimeConstants.PREF_ZETIME_HEARTRATE_INTERVAL); + if (heartrateMeasurementInterval != null) { + heartrateMeasurementInterval.setOnPreferenceChangeListener((preference, newVal) -> { + GBApplication.deviceService().onSetHeartRateMeasurementInterval(Integer.parseInt((String) newVal)); + return true; + }); + } + + setInputTypeFor(ZeTimeConstants.PREF_SCREENTIME, InputType.TYPE_CLASS_NUMBER); + setInputTypeFor("fitness_goal", InputType.TYPE_CLASS_NUMBER); + setInputTypeFor("activity_user_sleep_duration", InputType.TYPE_CLASS_NUMBER); + setInputTypeFor("activity_user_calories_burnt", InputType.TYPE_CLASS_NUMBER); + setInputTypeFor("activity_user_distance_meters", InputType.TYPE_CLASS_NUMBER); + setInputTypeFor("activity_user_activetime_minutes", InputType.TYPE_CLASS_NUMBER); + setInputTypeFor("inactivity_warnings_threshold", InputType.TYPE_CLASS_NUMBER); + setInputTypeFor("alarm_max_heart_rate", InputType.TYPE_CLASS_NUMBER); + setInputTypeFor("alarm_min_heart_rate", InputType.TYPE_CLASS_NUMBER); + + addPreferenceHandlerFor(ZeTimeConstants.PREF_SCREENTIME); + + addPreferenceHandlerFor(ZeTimeConstants.PREF_ANALOG_MODE); + + addPreferenceHandlerFor(ZeTimeConstants.PREF_ACTIVITY_TRACKING); + + addPreferenceHandlerFor(ZeTimeConstants.PREF_HANDMOVE_DISPLAY); + + addPreferenceHandlerFor(ZeTimeConstants.PREF_CALORIES_TYPE); + + addPreferenceHandlerFor(ZeTimeConstants.PREF_DATE_FORMAT); + + addPreferenceHandlerFor(ZeTimeConstants.PREF_SMS_SIGNALING); + addPreferenceHandlerFor(ZeTimeConstants.PREF_ANTI_LOSS_SIGNALING); + addPreferenceHandlerFor(ZeTimeConstants.PREF_CALENDAR_SIGNALING); + addPreferenceHandlerFor(ZeTimeConstants.PREF_CALL_SIGNALING); + addPreferenceHandlerFor(ZeTimeConstants.PREF_MISSED_CALL_SIGNALING); + addPreferenceHandlerFor(ZeTimeConstants.PREF_EMAIL_SIGNALING); + addPreferenceHandlerFor(ZeTimeConstants.PREF_INACTIVITY_SIGNALING); + addPreferenceHandlerFor(ZeTimeConstants.PREF_LOW_POWER_SIGNALING); + addPreferenceHandlerFor(ZeTimeConstants.PREF_SOCIAL_SIGNALING); + + + addPreferenceHandlerFor(ZeTimeConstants.PREF_ZETIME_HEARTRATE_ALARM); + addPreferenceHandlerFor(ZeTimeConstants.PREF_ZETIME_MAX_HEARTRATE); + addPreferenceHandlerFor(ZeTimeConstants.PREF_ZETIME_MIN_HEARTRATE); + + + addPreferenceHandlerFor(ZeTimeConstants.PREF_USER_SLEEP_GOAL); + addPreferenceHandlerFor(ZeTimeConstants.PREF_USER_CALORIES_GOAL); + addPreferenceHandlerFor(ZeTimeConstants.PREF_USER_DISTANCE_GOAL); + addPreferenceHandlerFor(ZeTimeConstants.PREF_USER_ACTIVETIME_GOAL); + } + + private void addPreferenceHandlerFor(final String preferenceKey) { + final Preference pref = findPreference(preferenceKey); + if (pref != null) { + pref.setOnPreferenceChangeListener((preference, newVal) -> { + notifyPreferenceChanged(preferenceKey); + return true; + }); + } + } + + /* + * delayed execution so that the preferences are applied first + */ + private void invokeLater(Runnable runnable) { + getListView().post(runnable); + } + + /* + * delayed execution so that the preferences are applied first + */ + public void notifyPreferenceChanged(final String preferenceKey) { + invokeLater(() -> GBApplication.deviceService().onSendConfiguration(preferenceKey)); + } + } } diff --git a/app/src/main/res/xml/zetime_preferences.xml b/app/src/main/res/xml/zetime_preferences.xml index 43961786b..3ef3db8fe 100644 --- a/app/src/main/res/xml/zetime_preferences.xml +++ b/app/src/main/res/xml/zetime_preferences.xml @@ -1,72 +1,88 @@ - + + android:title="@string/pref_header_general" + app:iconSpaceReserved="false"> + android:maxLength="5" + android:title="@string/zetime_title_screentime" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> - + app:iconSpaceReserved="false" /> + android:title="@string/miband_prefs_fitness_goal" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/activity_prefs_sleep_duration" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/activity_prefs_calories_burnt" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/activity_prefs_distance_meters" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/activity_prefs_activetime_minutes" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> - + android:title="@string/mi2_prefs_inactivity_warnings" + app:iconSpaceReserved="false" /> + android:title="@string/mi2_prefs_inactivity_warnings_threshold" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> - + android:title="@string/mi2_prefs_do_not_disturb_start" + app:iconSpaceReserved="false" /> - + android:title="@string/mi2_prefs_do_not_disturb_end" + app:iconSpaceReserved="false" /> - - + - + - + - + - + - + - + + android:title="@string/zetime_prefs_inactivity_su" + app:iconSpaceReserved="false" /> @@ -128,13 +157,15 @@ android:entryValues="@array/zetime_calories_type_values" android:key="zetime_calories_type" android:title="@string/zetime_calories_type" - android:summary="%s" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> - + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> - + android:title="@string/pref_title_keep_data_on_device" + app:iconSpaceReserved="false" /> + android:summary="@string/mi2_prefs_do_not_disturb_summary" + android:title="@string/mi2_prefs_do_not_disturb" + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> - + android:title="@string/mi2_prefs_do_not_disturb_start" + app:iconSpaceReserved="false" /> - + android:title="@string/mi2_prefs_do_not_disturb_end" + app:iconSpaceReserved="false" /> + android:title="@string/zetime_title_heartrate" + app:iconSpaceReserved="false"> + android:title="@string/prefs_title_heartrate_measurement_interval" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + app:iconSpaceReserved="false"> - + + + android:title="@string/zetime_heart_rate_alarm_enable" + app:iconSpaceReserved="false" /> + android:title="@string/activity_prefs_alarm_max_heart_rate" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/activity_prefs_alarm_min_heart_rate" + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/pref_header_vibration_settings" + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/vibration_try" + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/vibration_try" + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/vibration_try" + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/vibration_try" + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/vibration_try" + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/vibration_try" + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/vibration_try" + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false"> + app:iconSpaceReserved="false" /> + app:iconSpaceReserved="false" + app:useSimpleSummaryProvider="true" /> + android:title="@string/vibration_try" + app:iconSpaceReserved="false" />