2019-04-21 21:18:08 +02:00
|
|
|
package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings;
|
|
|
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
2019-05-22 00:42:22 +02:00
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.fragment.app.DialogFragment;
|
|
|
|
import androidx.preference.Preference;
|
2019-04-21 21:18:08 +02:00
|
|
|
import androidx.preference.PreferenceFragmentCompat;
|
|
|
|
|
2019-05-22 00:42:22 +02:00
|
|
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
2019-05-22 10:49:59 +02:00
|
|
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst;
|
2019-05-22 00:42:22 +02:00
|
|
|
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.util.XTimePreference;
|
|
|
|
import nodomain.freeyourgadget.gadgetbridge.util.XTimePreferenceFragment;
|
2019-04-21 21:18:08 +02:00
|
|
|
|
2019-05-22 00:42:22 +02:00
|
|
|
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;
|
2019-05-24 23:46:20 +02:00
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DO_NOT_DISTURB;
|
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DO_NOT_DISTURB_END;
|
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DO_NOT_DISTURB_OFF;
|
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DO_NOT_DISTURB_SCHEDULED;
|
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DO_NOT_DISTURB_START;
|
2019-05-23 21:33:35 +02:00
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DATEFORMAT;
|
2019-05-22 10:49:59 +02:00
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_NIGHT_MODE;
|
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_NIGHT_MODE_END;
|
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_NIGHT_MODE_OFF;
|
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_NIGHT_MODE_SCHEDULED;
|
|
|
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_NIGHT_MODE_START;
|
2019-05-22 00:42:22 +02:00
|
|
|
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) {
|
2019-04-21 21:18:08 +02:00
|
|
|
Bundle args = new Bundle();
|
|
|
|
args.putString("settingsFileSuffix", settingsFileSuffix);
|
2019-05-22 00:42:22 +02:00
|
|
|
args.putIntArray("supportedSettings", supportedSettings);
|
2019-04-21 21:18:08 +02:00
|
|
|
setArguments(args);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
2019-05-22 00:42:22 +02:00
|
|
|
Bundle arguments = getArguments();
|
|
|
|
if (arguments == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
String settingsFileSuffix = arguments.getString("settingsFileSuffix", null);
|
|
|
|
int[] supportedSettings = arguments.getIntArray("supportedSettings");
|
|
|
|
if (settingsFileSuffix == null || supportedSettings == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-04-21 21:18:08 +02:00
|
|
|
getPreferenceManager().setSharedPreferencesName("devicesettings_" + settingsFileSuffix);
|
2019-05-22 00:42:22 +02:00
|
|
|
|
|
|
|
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();
|
2019-04-21 21:18:08 +02:00
|
|
|
}
|
|
|
|
|
2019-05-22 00:42:22 +02:00
|
|
|
/*
|
|
|
|
* delayed execution so that the preferences are applied first
|
|
|
|
*/
|
|
|
|
private void invokeLater(Runnable runnable) {
|
|
|
|
getListView().post(runnable);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void setChangeListener() {
|
|
|
|
Prefs prefs = new Prefs(getPreferenceManager().getSharedPreferences());
|
2019-05-24 23:46:20 +02:00
|
|
|
String disconnectNotificationState = prefs.getString(PREF_DISCONNECT_NOTIFICATION, PREF_DO_NOT_DISTURB_OFF);
|
|
|
|
boolean disconnectNotificationScheduled = disconnectNotificationState.equals(PREF_DO_NOT_DISTURB_SCHEDULED);
|
2019-05-22 00:42:22 +02:00
|
|
|
|
|
|
|
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) {
|
2019-05-24 23:46:20 +02:00
|
|
|
final boolean scheduled = PREF_DO_NOT_DISTURB_SCHEDULED.equals(newVal.toString());
|
2019-05-22 00:42:22 +02:00
|
|
|
|
|
|
|
disconnectNotificationStart.setEnabled(scheduled);
|
|
|
|
disconnectNotificationEnd.setEnabled(scheduled);
|
|
|
|
invokeLater(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
GBApplication.deviceService().onSendConfiguration(PREF_DISCONNECT_NOTIFICATION);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
2019-05-22 10:49:59 +02:00
|
|
|
|
|
|
|
String nightModeState = prefs.getString(MiBandConst.PREF_NIGHT_MODE, PREF_NIGHT_MODE_OFF);
|
|
|
|
boolean nightModeScheduled = nightModeState.equals(PREF_NIGHT_MODE_SCHEDULED);
|
|
|
|
|
|
|
|
final Preference nightModeStart = findPreference(PREF_NIGHT_MODE_START);
|
|
|
|
if (nightModeStart != null) {
|
|
|
|
nightModeStart.setEnabled(nightModeScheduled);
|
|
|
|
nightModeStart.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
|
|
|
invokeLater(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
GBApplication.deviceService().onSendConfiguration(PREF_NIGHT_MODE_START);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
final Preference nightModeEnd = findPreference(PREF_NIGHT_MODE_END);
|
|
|
|
if (nightModeEnd != null) {
|
|
|
|
nightModeEnd.setEnabled(nightModeScheduled);
|
|
|
|
nightModeEnd.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
|
|
|
invokeLater(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
GBApplication.deviceService().onSendConfiguration(PREF_NIGHT_MODE_END);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
final Preference nightMode = findPreference(PREF_NIGHT_MODE);
|
|
|
|
if (nightMode != null) {
|
|
|
|
|
|
|
|
nightMode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
|
|
|
final boolean scheduled = PREF_NIGHT_MODE_SCHEDULED.equals(newVal.toString());
|
|
|
|
|
|
|
|
nightModeStart.setEnabled(scheduled);
|
|
|
|
nightModeEnd.setEnabled(scheduled);
|
|
|
|
|
|
|
|
invokeLater(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
GBApplication.deviceService().onSendConfiguration(PREF_NIGHT_MODE);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-05-24 23:46:20 +02:00
|
|
|
|
|
|
|
String doNotDisturbState = prefs.getString(MiBandConst.PREF_DO_NOT_DISTURB, PREF_DO_NOT_DISTURB_OFF);
|
|
|
|
boolean doNotDisturbScheduled = doNotDisturbState.equals(PREF_DO_NOT_DISTURB_SCHEDULED);
|
|
|
|
|
|
|
|
final Preference doNotDisturbStart = findPreference(PREF_DO_NOT_DISTURB_START);
|
|
|
|
if (doNotDisturbStart != null) {
|
|
|
|
doNotDisturbStart.setEnabled(doNotDisturbScheduled);
|
|
|
|
doNotDisturbStart.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
|
|
|
invokeLater(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
GBApplication.deviceService().onSendConfiguration(PREF_DO_NOT_DISTURB_START);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
final Preference doNotDisturbEnd = findPreference(PREF_DO_NOT_DISTURB_END);
|
|
|
|
if (doNotDisturbEnd != null) {
|
|
|
|
doNotDisturbEnd.setEnabled(doNotDisturbScheduled);
|
|
|
|
doNotDisturbEnd.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
|
|
|
invokeLater(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
GBApplication.deviceService().onSendConfiguration(PREF_DO_NOT_DISTURB_END);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
final Preference doNotDisturb = findPreference(PREF_DO_NOT_DISTURB);
|
|
|
|
if (doNotDisturb != null) {
|
|
|
|
doNotDisturb.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
|
|
|
final boolean scheduled = PREF_DO_NOT_DISTURB_SCHEDULED.equals(newVal.toString());
|
|
|
|
|
|
|
|
doNotDisturbStart.setEnabled(scheduled);
|
|
|
|
doNotDisturbEnd.setEnabled(scheduled);
|
|
|
|
|
|
|
|
invokeLater(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
GBApplication.deviceService().onSendConfiguration(PREF_DO_NOT_DISTURB);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-06-05 12:16:10 +02:00
|
|
|
addPreferenceHandlerFor(PREF_SWIPE_UNLOCK);
|
|
|
|
addPreferenceHandlerFor(PREF_MI2_DATEFORMAT);
|
|
|
|
addPreferenceHandlerFor(HuamiConst.PREF_DISPLAY_ITEMS);
|
2019-05-22 00:42:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
2019-06-05 12:16:10 +02:00
|
|
|
|
|
|
|
private void addPreferenceHandlerFor(final String preferenceKey) {
|
|
|
|
Preference pref = findPreference(preferenceKey);
|
|
|
|
if (pref != null) {
|
|
|
|
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
|
|
|
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
|
|
|
invokeLater(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
GBApplication.deviceService().onSendConfiguration(preferenceKey);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
2019-05-22 00:42:22 +02:00
|
|
|
}
|