diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java index 1d5cf820c..9516b3f07 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java @@ -590,7 +590,7 @@ public class DiscoveryActivity extends AbstractGBActivity implements AdapterView DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(deviceCandidate); GBDevice device = DeviceHelper.getInstance().toSupportedDevice(deviceCandidate); - if (!coordinator.supportsDeviceSpecificSettings(device)) { + if (coordinator.getSupportedDeviceSpecificSettings(device) != null) { return true; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java index 5637ecf9f..059692102 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -64,14 +64,8 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; -import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISCONNECT_NOTIFICATION; -import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISCONNECT_NOTIFICATION_END; -import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISCONNECT_NOTIFICATION_START; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DATEFORMAT; -import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_OFF; -import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_SCHEDULED; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_ENABLE_TEXT_NOTIFICATIONS; -import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI3_BAND_SCREEN_UNLOCK; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI3_NIGHT_MODE; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI3_NIGHT_MODE_END; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI3_NIGHT_MODE_OFF; @@ -385,20 +379,6 @@ public class SettingsActivity extends AbstractSettingsActivity { } }); - final Preference miBand3ScreenUnlock = findPreference(PREF_MI3_BAND_SCREEN_UNLOCK); - miBand3ScreenUnlock.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newVal) { - invokeLater(new Runnable() { - @Override - public void run() { - GBApplication.deviceService().onSendConfiguration(PREF_MI3_BAND_SCREEN_UNLOCK); - } - }); - return true; - } - }); - String nightModeState = prefs.getString(MiBandConst.PREF_MI3_NIGHT_MODE, PREF_MI3_NIGHT_MODE_OFF); boolean nightModeScheduled = nightModeState.equals(PREF_MI3_NIGHT_MODE_SCHEDULED); @@ -453,59 +433,6 @@ public class SettingsActivity extends AbstractSettingsActivity { } }); - String disconnectNotificationState = prefs.getString(PREF_DISCONNECT_NOTIFICATION, PREF_MI2_DO_NOT_DISTURB_OFF); - boolean disconnectNotificationScheduled = disconnectNotificationState.equals(PREF_MI2_DO_NOT_DISTURB_SCHEDULED); - - final Preference disconnectNotificationStart = findPreference(PREF_DISCONNECT_NOTIFICATION_START); - disconnectNotificationStart.setEnabled(disconnectNotificationScheduled); - disconnectNotificationStart.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newVal) { - invokeLater(new Runnable() { - @Override - public void run() { - GBApplication.deviceService().onSendConfiguration(PREF_DISCONNECT_NOTIFICATION_START); - } - }); - return true; - } - }); - - - final Preference disconnectNotificationEnd = findPreference(PREF_DISCONNECT_NOTIFICATION_END); - disconnectNotificationStart.setEnabled(disconnectNotificationScheduled); - disconnectNotificationStart.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newVal) { - invokeLater(new Runnable() { - @Override - public void run() { - GBApplication.deviceService().onSendConfiguration(PREF_DISCONNECT_NOTIFICATION_END); - } - }); - return true; - } - }); - - - final Preference disconnectNotification = findPreference(PREF_DISCONNECT_NOTIFICATION); - disconnectNotification.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newVal) { - final boolean scheduled = PREF_MI2_DO_NOT_DISTURB_SCHEDULED.equals(newVal.toString()); - - disconnectNotificationStart.setEnabled(scheduled); - disconnectNotificationEnd.setEnabled(scheduled); - invokeLater(new Runnable() { - @Override - public void run() { - GBApplication.deviceService().onSendConfiguration(PREF_DISCONNECT_NOTIFICATION); - } - }); - return true; - } - }); - // Get all receivers of Media Buttons Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsActivity.java index 9daa84068..8b2e2ca93 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsActivity.java @@ -19,10 +19,10 @@ package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceScreen; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,31 +34,46 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; -public class DeviceSettingsActivity extends AbstractGBActivity { +public class DeviceSettingsActivity extends AbstractGBActivity implements + PreferenceFragmentCompat.OnPreferenceStartScreenCallback { private static final Logger LOG = LoggerFactory.getLogger(DeviceSettingsActivity.class); - private GBDevice device; + GBDevice device; + @Override protected void onCreate(Bundle savedInstanceState) { device = getIntent().getParcelableExtra(GBDevice.EXTRA_DEVICE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_device_settings); + if (savedInstanceState == null) { + Fragment fragment = getSupportFragmentManager().findFragmentByTag(DeviceSpecificSettingsFragment.FRAGMENT_TAG); + if (fragment == null) { + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); + fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), coordinator.getSupportedDeviceSpecificSettings(device)); + } + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.settings_container, fragment, DeviceSpecificSettingsFragment.FRAGMENT_TAG) + .commit(); - DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); - PreferenceFragmentCompat fragment = coordinator.getDeviceSpecificSettingsFragment(device); - - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.settings_container, fragment) - .commit(); - } - - - public class DoesNotExistSettingsFragment extends PreferenceFragmentCompat { - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { } } -} + @Override + public boolean onPreferenceStartScreen(PreferenceFragmentCompat caller, PreferenceScreen preferenceScreen) { + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); + + PreferenceFragmentCompat fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), coordinator.getSupportedDeviceSpecificSettings(device)); + Bundle args = fragment.getArguments(); + args.putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, preferenceScreen.getKey()); + fragment.setArguments(args); + + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.settings_container, fragment, preferenceScreen.getKey()) + .addToBackStack(preferenceScreen.getKey()) + .commit(); + return true; + } +} \ No newline at end of file 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 1eed477a3..0e5c10e6e 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 @@ -2,21 +2,193 @@ package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; +import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; -abstract public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat { +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; +import nodomain.freeyourgadget.gadgetbridge.util.Prefs; +import nodomain.freeyourgadget.gadgetbridge.util.XTimePreference; +import nodomain.freeyourgadget.gadgetbridge.util.XTimePreferenceFragment; - public void setSettingsFileSuffix(String settingsFileSuffix) { +import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISCONNECT_NOTIFICATION; +import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISCONNECT_NOTIFICATION_END; +import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISCONNECT_NOTIFICATION_START; +import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_OFF; +import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_SCHEDULED; +import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_SWIPE_UNLOCK; + +public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat { + + static final String FRAGMENT_TAG = "DEVICE_SPECIFIC_SETTINGS_FRAGMENT"; + + private void setSettingsFileSuffix(String settingsFileSuffix, @NonNull int[] supportedSettings) { Bundle args = new Bundle(); args.putString("settingsFileSuffix", settingsFileSuffix); + args.putIntArray("supportedSettings", supportedSettings); setArguments(args); } @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - String settingsFileSuffix = getArguments().getString("settingsFileSuffix", "_bug"); + Bundle arguments = getArguments(); + if (arguments == null) { + return; + } + String settingsFileSuffix = arguments.getString("settingsFileSuffix", null); + int[] supportedSettings = arguments.getIntArray("supportedSettings"); + if (settingsFileSuffix == null || supportedSettings == null) { + return; + } + getPreferenceManager().setSharedPreferencesName("devicesettings_" + settingsFileSuffix); + + if (rootKey == null) { + // we are the main preference screen + boolean first = true; + for (int setting : supportedSettings) { + if (first) { + setPreferencesFromResource(setting, null); + first = false; + } else { + addPreferencesFromResource(setting); + } + } + } else { + // Now, this is ugly: search all the xml files for the rootKey + for (int setting : supportedSettings) { + try { + setPreferencesFromResource(setting, rootKey); + } catch (Exception ignore) { + continue; + } + break; + } + } + setChangeListener(); + } + + /* + * delayed execution so that the preferences are applied first + */ + private void invokeLater(Runnable runnable) { + getListView().post(runnable); + } + + private void setChangeListener() { + final Preference displayItems = findPreference("display_items"); + if (displayItems != null) { + displayItems.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + invokeLater(new Runnable() { + @Override + public void run() { + GBApplication.deviceService().onSendConfiguration(HuamiConst.PREF_DISPLAY_ITEMS); + } + }); + return true; + } + }); + } + + Prefs prefs = new Prefs(getPreferenceManager().getSharedPreferences()); + String disconnectNotificationState = prefs.getString(PREF_DISCONNECT_NOTIFICATION, PREF_MI2_DO_NOT_DISTURB_OFF); + boolean disconnectNotificationScheduled = disconnectNotificationState.equals(PREF_MI2_DO_NOT_DISTURB_SCHEDULED); + + final Preference disconnectNotificationStart = findPreference(PREF_DISCONNECT_NOTIFICATION_START); + if (disconnectNotificationStart != null) { + disconnectNotificationStart.setEnabled(disconnectNotificationScheduled); + disconnectNotificationStart.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + invokeLater(new Runnable() { + @Override + public void run() { + GBApplication.deviceService().onSendConfiguration(PREF_DISCONNECT_NOTIFICATION_START); + } + }); + return true; + } + }); + } + + final Preference disconnectNotificationEnd = findPreference(PREF_DISCONNECT_NOTIFICATION_END); + if (disconnectNotificationEnd != null) { + disconnectNotificationEnd.setEnabled(disconnectNotificationScheduled); + disconnectNotificationEnd.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + invokeLater(new Runnable() { + @Override + public void run() { + GBApplication.deviceService().onSendConfiguration(PREF_DISCONNECT_NOTIFICATION_END); + } + }); + return true; + } + }); + } + + final Preference disconnectNotification = findPreference(PREF_DISCONNECT_NOTIFICATION); + if (disconnectNotification != null) { + disconnectNotification.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + final boolean scheduled = PREF_MI2_DO_NOT_DISTURB_SCHEDULED.equals(newVal.toString()); + + disconnectNotificationStart.setEnabled(scheduled); + disconnectNotificationEnd.setEnabled(scheduled); + invokeLater(new Runnable() { + @Override + public void run() { + GBApplication.deviceService().onSendConfiguration(PREF_DISCONNECT_NOTIFICATION); + } + }); + return true; + } + }); + + } + final Preference swipeUnlock = findPreference(PREF_SWIPE_UNLOCK); + if (swipeUnlock != null) { + swipeUnlock.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + invokeLater(new Runnable() { + @Override + public void run() { + GBApplication.deviceService().onSendConfiguration(PREF_SWIPE_UNLOCK); + } + }); + return true; + } + }); + } + } + + static DeviceSpecificSettingsFragment newInstance(String settingsFileSuffix, @NonNull int[] supportedSettings) { + DeviceSpecificSettingsFragment fragment = new DeviceSpecificSettingsFragment(); + fragment.setSettingsFileSuffix(settingsFileSuffix, supportedSettings); + + return fragment; + } + + @Override + public void onDisplayPreferenceDialog(Preference preference) { + DialogFragment dialogFragment = null; + if (preference instanceof XTimePreference) { + dialogFragment = new XTimePreferenceFragment(); + Bundle bundle = new Bundle(1); + bundle.putString("key", preference.getKey()); + dialogFragment.setArguments(bundle); + dialogFragment.setTargetFragment(this, 0); + dialogFragment.show(getFragmentManager(), "androidx.preference.PreferenceFragment.DIALOG"); + } else { + super.onDisplayPreferenceDialog(preference); + } } } - diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/AmazfitBipSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/AmazfitBipSettingsFragment.java deleted file mode 100644 index 0151b7bb2..000000000 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/AmazfitBipSettingsFragment.java +++ /dev/null @@ -1,21 +0,0 @@ -package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami; - -import android.os.Bundle; - -import nodomain.freeyourgadget.gadgetbridge.R; - -public class AmazfitBipSettingsFragment extends HuamiSettingsFragment { - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - super.onCreatePreferences(savedInstanceState, rootKey); - addPreferencesFromResource(R.xml.devicesettings_huami_bip); - setChangeListener(); - } - - public static HuamiSettingsFragment newInstance(String settingsFileSuffix) { - HuamiSettingsFragment fragment = new AmazfitBipSettingsFragment(); - fragment.setSettingsFileSuffix(settingsFileSuffix); - - return fragment; - } -} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/AmazfitCorSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/AmazfitCorSettingsFragment.java deleted file mode 100644 index ad3b145cc..000000000 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/AmazfitCorSettingsFragment.java +++ /dev/null @@ -1,21 +0,0 @@ -package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami; - -import android.os.Bundle; - -import nodomain.freeyourgadget.gadgetbridge.R; - -public class AmazfitCorSettingsFragment extends HuamiSettingsFragment{ - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - super.onCreatePreferences(savedInstanceState, rootKey); - addPreferencesFromResource(R.xml.devicesettings_huami_cor); - setChangeListener(); - } - - public static HuamiSettingsFragment newInstance(String settingsFileSuffix) { - HuamiSettingsFragment fragment = new AmazfitCorSettingsFragment(); - fragment.setSettingsFileSuffix(settingsFileSuffix); - - return fragment; - } -} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/HuamiSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/HuamiSettingsFragment.java deleted file mode 100644 index 26792da3a..000000000 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/HuamiSettingsFragment.java +++ /dev/null @@ -1,53 +0,0 @@ -package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami; - -import android.os.Bundle; - -import androidx.preference.Preference; - -import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsFragment; -import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; - -public class HuamiSettingsFragment extends DeviceSpecificSettingsFragment { - - /* - * delayed execution so that the preferences are applied first - */ - private void invokeLater(Runnable runnable) { - getListView().post(runnable); - } - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - super.onCreatePreferences(savedInstanceState, rootKey); - setPreferencesFromResource(R.xml.devicesettings_huami, rootKey); - } - - public static HuamiSettingsFragment newInstance(String settingsFileSuffix) { - HuamiSettingsFragment fragment = new HuamiSettingsFragment(); - fragment.setSettingsFileSuffix(settingsFileSuffix); - - return fragment; - } - - void setChangeListener() { - final Preference displayItems = findPreference("display_items"); - if (displayItems != null) { - displayItems.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newVal) { - invokeLater(new Runnable() { - @Override - public void run() { - GBApplication.deviceService().onSendConfiguration(HuamiConst.PREF_DISPLAY_ITEMS); - } - }); - return true; - } - }); - } - } -} - - diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/MiBand2SettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/MiBand2SettingsFragment.java deleted file mode 100644 index 941559d06..000000000 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/MiBand2SettingsFragment.java +++ /dev/null @@ -1,21 +0,0 @@ -package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami; - -import android.os.Bundle; - -import nodomain.freeyourgadget.gadgetbridge.R; - -public class MiBand2SettingsFragment extends HuamiSettingsFragment { - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - super.onCreatePreferences(savedInstanceState, rootKey); - addPreferencesFromResource(R.xml.devicesettings_huami_miband2); - setChangeListener(); - } - - public static HuamiSettingsFragment newInstance(String settingsFileSuffix) { - HuamiSettingsFragment fragment = new MiBand2SettingsFragment(); - fragment.setSettingsFileSuffix(settingsFileSuffix); - - return fragment; - } -} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/MiBand3SettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/MiBand3SettingsFragment.java deleted file mode 100644 index ddef83cfb..000000000 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/huami/MiBand3SettingsFragment.java +++ /dev/null @@ -1,21 +0,0 @@ -package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami; - -import android.os.Bundle; - -import nodomain.freeyourgadget.gadgetbridge.R; - -public class MiBand3SettingsFragment extends HuamiSettingsFragment { - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - super.onCreatePreferences(savedInstanceState, rootKey); - addPreferencesFromResource(R.xml.devicesettings_huami_miband3); - setChangeListener(); - } - - public static HuamiSettingsFragment newInstance(String settingsFileSuffix) { - HuamiSettingsFragment fragment = new MiBand3SettingsFragment(); - fragment.setSettingsFileSuffix(settingsFileSuffix); - - return fragment; - } -} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java index 5a7d8a989..f756d65cd 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java @@ -152,7 +152,7 @@ public class GBDeviceAdapterv2 extends RecyclerView.Adapter. */ +package nodomain.freeyourgadget.gadgetbridge.util; + +import android.content.Context; +import android.content.res.TypedArray; +import android.text.format.DateFormat; +import android.util.AttributeSet; + +import androidx.preference.DialogPreference; + +public class XTimePreference extends DialogPreference { + protected int hour = 0; + protected int minute = 0; + + public XTimePreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected Object onGetDefaultValue(TypedArray a, int index) { + return a.getString(index); + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + String time; + + if (restoreValue) { + if (defaultValue == null) { + time = getPersistedString("00:00"); + } else { + time = getPersistedString(defaultValue.toString()); + } + } else { + if (defaultValue != null) { + time = defaultValue.toString(); + } else { + time = "00:00"; + } + } + + String[] pieces = time.split(":"); + + hour = Integer.parseInt(pieces[0]); + minute = Integer.parseInt(pieces[1]); + + updateSummary(); + } + + void updateSummary() { + if (DateFormat.is24HourFormat(getContext())) + setSummary(getTime24h()); + else + setSummary(getTime12h()); + } + + String getTime24h() { + return String.format("%02d", hour) + ":" + String.format("%02d", minute); + } + + private String getTime12h() { + String suffix = hour < 12 ? " AM" : " PM"; + int h = hour > 12 ? hour - 12 : hour; + + return h + ":" + String.format("%02d", minute) + suffix; + } + + void persistStringValue(String value) { + persistString(value); + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/XTimePreferenceFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/XTimePreferenceFragment.java new file mode 100644 index 000000000..1cfb0d35e --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/XTimePreferenceFragment.java @@ -0,0 +1,71 @@ +/* Copyright (C) 2017-2019 Carsten Pfeiffer, José Rebelo + + 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 . */ +package nodomain.freeyourgadget.gadgetbridge.util; + +import android.content.Context; +import android.text.format.DateFormat; +import android.view.View; +import android.widget.TimePicker; + +import androidx.preference.DialogPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceDialogFragmentCompat; + +public class XTimePreferenceFragment extends PreferenceDialogFragmentCompat implements DialogPreference.TargetFragment { + private TimePicker picker = null; + + @Override + protected View onCreateDialogView(Context context) { + picker = new TimePicker(context); + picker.setIs24HourView(DateFormat.is24HourFormat(getContext())); + picker.setPadding(0, 50, 0, 50); + + return picker; + } + + @Override + protected void onBindDialogView(View v) { + super.onBindDialogView(v); + XTimePreference pref = (XTimePreference) getPreference(); + + picker.setCurrentHour(pref.hour); + picker.setCurrentMinute(pref.minute); + } + + @Override + public void onDialogClosed(boolean positiveResult) { + + if (positiveResult) { + XTimePreference pref = (XTimePreference) getPreference(); + + pref.hour = picker.getCurrentHour(); + pref.minute = picker.getCurrentMinute(); + + String time = pref.getTime24h(); + if (pref.callChangeListener(time)) { + pref.persistStringValue(time); + pref.updateSummary(); + } + } + } + + + @Override + public Preference findPreference(CharSequence key) { + return getPreference(); + } +} diff --git a/app/src/main/res/xml/devicesettings_huami_bip.xml b/app/src/main/res/xml/devicesettings_amazfitbip.xml similarity index 100% rename from app/src/main/res/xml/devicesettings_huami_bip.xml rename to app/src/main/res/xml/devicesettings_amazfitbip.xml diff --git a/app/src/main/res/xml/devicesettings_huami_cor.xml b/app/src/main/res/xml/devicesettings_amazfitcor.xml similarity index 100% rename from app/src/main/res/xml/devicesettings_huami_cor.xml rename to app/src/main/res/xml/devicesettings_amazfitcor.xml diff --git a/app/src/main/res/xml/devicesettings_disconnectnotification.xml b/app/src/main/res/xml/devicesettings_disconnectnotification.xml new file mode 100644 index 000000000..c198e9ca9 --- /dev/null +++ b/app/src/main/res/xml/devicesettings_disconnectnotification.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/xml/devicesettings_huami_miband2.xml b/app/src/main/res/xml/devicesettings_miband2.xml similarity index 100% rename from app/src/main/res/xml/devicesettings_huami_miband2.xml rename to app/src/main/res/xml/devicesettings_miband2.xml diff --git a/app/src/main/res/xml/devicesettings_huami_miband3.xml b/app/src/main/res/xml/devicesettings_miband3.xml similarity index 100% rename from app/src/main/res/xml/devicesettings_huami_miband3.xml rename to app/src/main/res/xml/devicesettings_miband3.xml diff --git a/app/src/main/res/xml/devicesettings_huami.xml b/app/src/main/res/xml/devicesettings_pairingkey.xml similarity index 100% rename from app/src/main/res/xml/devicesettings_huami.xml rename to app/src/main/res/xml/devicesettings_pairingkey.xml diff --git a/app/src/main/res/xml/devicesettings_swipeunlock.xml b/app/src/main/res/xml/devicesettings_swipeunlock.xml new file mode 100644 index 000000000..22f35cf81 --- /dev/null +++ b/app/src/main/res/xml/devicesettings_swipeunlock.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index e96ec11b5..87c390ef5 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -293,12 +293,6 @@ - - - - - - - - - - - - - - - -