mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2025-01-13 11:17:33 +01:00
Make per-device settings more versatile, move more settings
This allows to construct per-device settings by device type very easily device coordinators just do the following to declare which setting they support, the settings activity is then composed at runtime. @Override public int[] getSupportedDeviceSpecificSettings(GBDevice device) { return new int[]{ R.xml.devicesettings_miband3, R.xml.devicesettings_swipeunlock, R.xml.devicesettings_pairingkey }; }
This commit is contained in:
parent
49667451d7
commit
9bfef4cf4f
@ -590,7 +590,7 @@ public class DiscoveryActivity extends AbstractGBActivity implements AdapterView
|
|||||||
|
|
||||||
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(deviceCandidate);
|
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(deviceCandidate);
|
||||||
GBDevice device = DeviceHelper.getInstance().toSupportedDevice(deviceCandidate);
|
GBDevice device = DeviceHelper.getInstance().toSupportedDevice(deviceCandidate);
|
||||||
if (!coordinator.supportsDeviceSpecificSettings(device)) {
|
if (coordinator.getSupportedDeviceSpecificSettings(device) != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,14 +64,8 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
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_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_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;
|
||||||
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_END;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI3_NIGHT_MODE_OFF;
|
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);
|
String nightModeState = prefs.getString(MiBandConst.PREF_MI3_NIGHT_MODE, PREF_MI3_NIGHT_MODE_OFF);
|
||||||
boolean nightModeScheduled = nightModeState.equals(PREF_MI3_NIGHT_MODE_SCHEDULED);
|
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
|
// Get all receivers of Media Buttons
|
||||||
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
|
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
|
||||||
|
|
||||||
|
@ -19,10 +19,10 @@ package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings;
|
|||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
import androidx.fragment.app.FragmentTransaction;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
import androidx.preference.PreferenceFragmentCompat;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -34,31 +34,46 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
|
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 static final Logger LOG = LoggerFactory.getLogger(DeviceSettingsActivity.class);
|
||||||
|
|
||||||
private GBDevice device;
|
GBDevice device;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
device = getIntent().getParcelableExtra(GBDevice.EXTRA_DEVICE);
|
device = getIntent().getParcelableExtra(GBDevice.EXTRA_DEVICE);
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_device_settings);
|
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;
|
||||||
|
}
|
||||||
|
}
|
@ -2,21 +2,193 @@ package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings;
|
|||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
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();
|
Bundle args = new Bundle();
|
||||||
args.putString("settingsFileSuffix", settingsFileSuffix);
|
args.putString("settingsFileSuffix", settingsFileSuffix);
|
||||||
|
args.putIntArray("supportedSettings", supportedSettings);
|
||||||
setArguments(args);
|
setArguments(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
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);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -152,7 +152,7 @@ public class GBDeviceAdapterv2 extends RecyclerView.Adapter<GBDeviceAdapterv2.Vi
|
|||||||
}
|
}
|
||||||
|
|
||||||
//device specific settings
|
//device specific settings
|
||||||
holder.deviceSpecificSettingsView.setVisibility(coordinator.supportsDeviceSpecificSettings(device) ? View.VISIBLE : View.GONE);
|
holder.deviceSpecificSettingsView.setVisibility(coordinator.getSupportedDeviceSpecificSettings(device) != null ? View.VISIBLE : View.GONE);
|
||||||
holder.deviceSpecificSettingsView.setOnClickListener(new View.OnClickListener()
|
holder.deviceSpecificSettingsView.setOnClickListener(new View.OnClickListener()
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,6 @@ import androidx.annotation.NonNull;
|
|||||||
import de.greenrobot.dao.query.QueryBuilder;
|
import de.greenrobot.dao.query.QueryBuilder;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBException;
|
import nodomain.freeyourgadget.gadgetbridge.GBException;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsFragment;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
|
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
|
||||||
@ -155,12 +154,7 @@ public abstract class AbstractDeviceCoordinator implements DeviceCoordinator {
|
|||||||
public boolean supportsUnicodeEmojis() { return false; }
|
public boolean supportsUnicodeEmojis() { return false; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsDeviceSpecificSettings(GBDevice device) {
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceSpecificSettingsFragment getDeviceSpecificSettingsFragment(GBDevice device) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,12 +281,7 @@ public interface DeviceCoordinator {
|
|||||||
boolean supportsUnicodeEmojis();
|
boolean supportsUnicodeEmojis();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether the device supports device specific settings (not per device type or family, but unique per device).
|
* Indicates which device specific settings the device supports (not per device type or family, but unique per device).
|
||||||
*/
|
*/
|
||||||
boolean supportsDeviceSpecificSettings(GBDevice device);
|
int[] getSupportedDeviceSpecificSettings(GBDevice device);
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates and returns a device specific settings fragment, or null if there is none
|
|
||||||
*/
|
|
||||||
DeviceSpecificSettingsFragment getDeviceSpecificSettingsFragment(GBDevice device);
|
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,6 @@ import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.GBException;
|
import nodomain.freeyourgadget.gadgetbridge.GBException;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsFragment;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami.HuamiSettingsFragment;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractDeviceCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.AbstractDeviceCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
|
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.DateTimeDisplay;
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.DateTimeDisplay;
|
||||||
@ -124,13 +122,8 @@ public abstract class HuamiCoordinator extends AbstractDeviceCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsDeviceSpecificSettings(GBDevice device) {
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
return true;
|
return new int[]{R.xml.devicesettings_pairingkey};
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeviceSpecificSettingsFragment getDeviceSpecificSettingsFragment(GBDevice device) {
|
|
||||||
return HuamiSettingsFragment.newInstance(device.getAddress());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -173,8 +166,8 @@ public abstract class HuamiCoordinator extends AbstractDeviceCoordinator {
|
|||||||
return getTimePreference(HuamiConst.PREF_DISPLAY_ON_LIFT_END, "00:00");
|
return getTimePreference(HuamiConst.PREF_DISPLAY_ON_LIFT_END, "00:00");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DisconnectNotificationSetting getDisconnectNotificationSetting(Context context) {
|
public static DisconnectNotificationSetting getDisconnectNotificationSetting(Context context, String deviceAddress) {
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(deviceAddress));
|
||||||
|
|
||||||
String liftOff = context.getString(R.string.p_off);
|
String liftOff = context.getString(R.string.p_off);
|
||||||
String liftOn = context.getString(R.string.p_on);
|
String liftOn = context.getString(R.string.p_on);
|
||||||
@ -253,6 +246,11 @@ public abstract class HuamiCoordinator extends AbstractDeviceCoordinator {
|
|||||||
return getTimePreference(MiBandConst.PREF_MI2_DO_NOT_DISTURB_END, "06:00");
|
return getTimePreference(MiBandConst.PREF_MI2_DO_NOT_DISTURB_END, "06:00");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean getBandScreenUnlock(String deviceAddress) {
|
||||||
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(deviceAddress));
|
||||||
|
return prefs.getBoolean(MiBandConst.PREF_SWIPE_UNLOCK, false);
|
||||||
|
}
|
||||||
|
|
||||||
public static Date getTimePreference(String key, String defaultValue) {
|
public static Date getTimePreference(String key, String defaultValue) {
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
Prefs prefs = GBApplication.getPrefs();
|
||||||
String time = prefs.getString(key, defaultValue);
|
String time = prefs.getString(key, defaultValue);
|
||||||
|
@ -26,8 +26,7 @@ import androidx.annotation.NonNull;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami.AmazfitBipSettingsFragment;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsFragment;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
@ -79,7 +78,11 @@ public class AmazfitBipCoordinator extends HuamiCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeviceSpecificSettingsFragment getDeviceSpecificSettingsFragment(GBDevice device) {
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
return AmazfitBipSettingsFragment.newInstance(device.getAddress());
|
return new int[]{
|
||||||
|
R.xml.devicesettings_amazfitbip,
|
||||||
|
R.xml.devicesettings_disconnectnotification,
|
||||||
|
R.xml.devicesettings_pairingkey
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,7 @@ import androidx.annotation.NonNull;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami.AmazfitCorSettingsFragment;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsFragment;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
@ -82,7 +81,11 @@ public class AmazfitCorCoordinator extends HuamiCoordinator {
|
|||||||
public boolean supportsUnicodeEmojis() { return true; }
|
public boolean supportsUnicodeEmojis() { return true; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeviceSpecificSettingsFragment getDeviceSpecificSettingsFragment(GBDevice device) {
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
return AmazfitCorSettingsFragment.newInstance(device.getAddress());
|
return new int[]{
|
||||||
|
R.xml.devicesettings_amazfitcor,
|
||||||
|
R.xml.devicesettings_disconnectnotification,
|
||||||
|
R.xml.devicesettings_swipeunlock,
|
||||||
|
R.xml.devicesettings_pairingkey};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,7 @@ import androidx.annotation.NonNull;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsFragment;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami.MiBand2SettingsFragment;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
||||||
@ -82,7 +81,7 @@ public class MiBand2Coordinator extends HuamiCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeviceSpecificSettingsFragment getDeviceSpecificSettingsFragment(GBDevice device) {
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
return MiBand2SettingsFragment.newInstance(device.getAddress());
|
return new int[]{R.xml.devicesettings_miband2, R.xml.devicesettings_pairingkey};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsFragment;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.huami.MiBand3SettingsFragment;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
||||||
@ -85,10 +84,6 @@ public class MiBand3Coordinator extends HuamiCoordinator {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean getBandScreenUnlock() {
|
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
|
||||||
return prefs.getBoolean(MiBandConst.PREF_MI3_BAND_SCREEN_UNLOCK, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getNightMode() {
|
public static String getNightMode() {
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
Prefs prefs = GBApplication.getPrefs();
|
||||||
@ -105,7 +100,11 @@ public class MiBand3Coordinator extends HuamiCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeviceSpecificSettingsFragment getDeviceSpecificSettingsFragment(GBDevice device) {
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
return MiBand3SettingsFragment.newInstance(device.getAddress());
|
return new int[]{
|
||||||
|
R.xml.devicesettings_miband3,
|
||||||
|
R.xml.devicesettings_swipeunlock,
|
||||||
|
R.xml.devicesettings_pairingkey
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ public final class MiBandConst {
|
|||||||
public static final String PREF_MI2_INACTIVITY_WARNINGS_DND_END = "mi2_inactivity_warnings_dnd_end";
|
public static final String PREF_MI2_INACTIVITY_WARNINGS_DND_END = "mi2_inactivity_warnings_dnd_end";
|
||||||
public static final String PREF_MIBAND_SETUP_BT_PAIRING = "mi_setup_bt_pairing";
|
public static final String PREF_MIBAND_SETUP_BT_PAIRING = "mi_setup_bt_pairing";
|
||||||
|
|
||||||
public static final String PREF_MI3_BAND_SCREEN_UNLOCK = "mi3_band_screen_unlock";
|
public static final String PREF_SWIPE_UNLOCK = "swipe_unlock";
|
||||||
public static final String PREF_MI3_NIGHT_MODE = "mi3_night_mode";
|
public static final String PREF_MI3_NIGHT_MODE = "mi3_night_mode";
|
||||||
public static final String PREF_MI3_NIGHT_MODE_START = "mi3_night_mode_start";
|
public static final String PREF_MI3_NIGHT_MODE_START = "mi3_night_mode_start";
|
||||||
public static final String PREF_MI3_NIGHT_MODE_END = "mi3_night_mode_end";
|
public static final String PREF_MI3_NIGHT_MODE_END = "mi3_night_mode_end";
|
||||||
|
@ -135,7 +135,7 @@ public class MiBandPairingActivity extends AbstractGBActivity {
|
|||||||
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(deviceCandidate);
|
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(deviceCandidate);
|
||||||
GBDevice device = DeviceHelper.getInstance().toSupportedDevice(deviceCandidate);
|
GBDevice device = DeviceHelper.getInstance().toSupportedDevice(deviceCandidate);
|
||||||
|
|
||||||
if (coordinator.supportsDeviceSpecificSettings(device)) {
|
if (coordinator.getSupportedDeviceSpecificSettings(device) != null) { // FIXME: this will no longer be sane in the future
|
||||||
SharedPreferences sharedPrefs = GBApplication.getDeviceSpecificSharedPrefs(device.getAddress());
|
SharedPreferences sharedPrefs = GBApplication.getDeviceSpecificSharedPrefs(device.getAddress());
|
||||||
String authKey = sharedPrefs.getString("authkey", null);
|
String authKey = sharedPrefs.getString("authkey", null);
|
||||||
if (authKey == null || authKey.isEmpty()) {
|
if (authKey == null || authKey.isEmpty()) {
|
||||||
|
@ -68,6 +68,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipService;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipService;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.miband2.MiBand2FWHelper;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.miband2.MiBand2FWHelper;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.miband3.MiBand3Coordinator;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.miband3.MiBand3Service;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.DateTimeDisplay;
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.DateTimeDisplay;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.DoNotDisturb;
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.DoNotDisturb;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBand2SampleProvider;
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBand2SampleProvider;
|
||||||
@ -110,6 +112,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.common.SimpleNotific
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.actions.StopNotificationAction;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.actions.StopNotificationAction;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.Mi2NotificationStrategy;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.Mi2NotificationStrategy;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.Mi2TextNotificationStrategy;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.Mi2TextNotificationStrategy;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband3.MiBand3Support;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.operations.FetchActivityOperation;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.operations.FetchActivityOperation;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.operations.FetchSportsSummaryOperation;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.operations.FetchSportsSummaryOperation;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.operations.InitOperation;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.operations.InitOperation;
|
||||||
@ -1547,6 +1550,9 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
case SettingsActivity.PREF_MEASUREMENT_SYSTEM:
|
||||||
setDistanceUnit(builder);
|
setDistanceUnit(builder);
|
||||||
break;
|
break;
|
||||||
|
case MiBandConst.PREF_SWIPE_UNLOCK:
|
||||||
|
setBandScreenUnlock(builder);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
builder.queue(getQueue());
|
builder.queue(getQueue());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -1772,7 +1778,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private HuamiSupport setDisconnectNotification(TransactionBuilder builder) {
|
private HuamiSupport setDisconnectNotification(TransactionBuilder builder) {
|
||||||
DisconnectNotificationSetting disconnectNotificationSetting = HuamiCoordinator.getDisconnectNotificationSetting(getContext());
|
DisconnectNotificationSetting disconnectNotificationSetting = HuamiCoordinator.getDisconnectNotificationSetting(getContext(), gbDevice.getAddress());
|
||||||
LOG.info("Setting disconnect notification to " + disconnectNotificationSetting);
|
LOG.info("Setting disconnect notification to " + disconnectNotificationSetting);
|
||||||
|
|
||||||
switch (disconnectNotificationSetting) {
|
switch (disconnectNotificationSetting) {
|
||||||
@ -1813,6 +1819,20 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected HuamiSupport setBandScreenUnlock(TransactionBuilder builder) {
|
||||||
|
boolean enable = MiBand3Coordinator.getBandScreenUnlock(gbDevice.getAddress());
|
||||||
|
LOG.info("Setting band screen unlock to " + enable);
|
||||||
|
|
||||||
|
if (enable) {
|
||||||
|
builder.write(getCharacteristic(HuamiService.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand3Service.COMMAND_ENABLE_BAND_SCREEN_UNLOCK);
|
||||||
|
} else {
|
||||||
|
builder.write(getCharacteristic(HuamiService.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand3Service.COMMAND_DISABLE_BAND_SCREEN_UNLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected HuamiSupport setLanguage(TransactionBuilder builder) {
|
protected HuamiSupport setLanguage(TransactionBuilder builder) {
|
||||||
String localeString = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()).getString("language", "auto");
|
String localeString = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()).getString("language", "auto");
|
||||||
if (localeString == null || localeString.equals("auto")) {
|
if (localeString == null || localeString.equals("auto")) {
|
||||||
|
@ -78,6 +78,13 @@ public class AmazfitCorSupport extends AmazfitBipSupport {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void phase2Initialize(TransactionBuilder builder) {
|
||||||
|
super.phase2Initialize(builder);
|
||||||
|
LOG.info("phase2Initialize...");
|
||||||
|
setBandScreenUnlock(builder);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HuamiFWHelper createFWHelper(Uri uri, Context context) throws IOException {
|
public HuamiFWHelper createFWHelper(Uri uri, Context context) throws IOException {
|
||||||
return new AmazfitCorFWHelper(uri, context);
|
return new AmazfitCorFWHelper(uri, context);
|
||||||
|
@ -27,7 +27,6 @@ import java.io.IOException;
|
|||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
@ -107,9 +106,6 @@ public class MiBand3Support extends AmazfitBipSupport {
|
|||||||
try {
|
try {
|
||||||
builder = performInitialized("Sending configuration for option: " + config);
|
builder = performInitialized("Sending configuration for option: " + config);
|
||||||
switch (config) {
|
switch (config) {
|
||||||
case MiBandConst.PREF_MI3_BAND_SCREEN_UNLOCK:
|
|
||||||
setBandScreenUnlock(builder);
|
|
||||||
break;
|
|
||||||
case MiBandConst.PREF_MI3_NIGHT_MODE:
|
case MiBandConst.PREF_MI3_NIGHT_MODE:
|
||||||
case MiBandConst.PREF_MI3_NIGHT_MODE_START:
|
case MiBandConst.PREF_MI3_NIGHT_MODE_START:
|
||||||
case MiBandConst.PREF_MI3_NIGHT_MODE_END:
|
case MiBandConst.PREF_MI3_NIGHT_MODE_END:
|
||||||
@ -125,19 +121,6 @@ public class MiBand3Support extends AmazfitBipSupport {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private MiBand3Support setBandScreenUnlock(TransactionBuilder builder) {
|
|
||||||
boolean enable = MiBand3Coordinator.getBandScreenUnlock();
|
|
||||||
LOG.info("Setting band screen unlock to " + enable);
|
|
||||||
|
|
||||||
if (enable) {
|
|
||||||
builder.write(getCharacteristic(HuamiService.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand3Service.COMMAND_ENABLE_BAND_SCREEN_UNLOCK);
|
|
||||||
} else {
|
|
||||||
builder.write(getCharacteristic(HuamiService.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand3Service.COMMAND_DISABLE_BAND_SCREEN_UNLOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private MiBand3Support setNightMode(TransactionBuilder builder) {
|
private MiBand3Support setNightMode(TransactionBuilder builder) {
|
||||||
String nightMode = MiBand3Coordinator.getNightMode();
|
String nightMode = MiBand3Coordinator.getNightMode();
|
||||||
LOG.info("Setting night mode to " + nightMode);
|
LOG.info("Setting night mode to " + nightMode);
|
||||||
@ -178,6 +161,7 @@ public class MiBand3Support extends AmazfitBipSupport {
|
|||||||
public void phase2Initialize(TransactionBuilder builder) {
|
public void phase2Initialize(TransactionBuilder builder) {
|
||||||
super.phase2Initialize(builder);
|
super.phase2Initialize(builder);
|
||||||
LOG.info("phase2Initialize...");
|
LOG.info("phase2Initialize...");
|
||||||
|
setLanguage(builder);
|
||||||
setBandScreenUnlock(builder);
|
setBandScreenUnlock(builder);
|
||||||
setNightMode(builder);
|
setNightMode(builder);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,86 @@
|
|||||||
|
/* 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 <http://www.gnu.org/licenses/>. */
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
@ -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 <http://www.gnu.org/licenses/>. */
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<PreferenceScreen
|
||||||
|
android:key="screen_disconnect_nofifiction"
|
||||||
|
android:persistent="false"
|
||||||
|
android:title="@string/prefs_disconnect_notification">
|
||||||
|
|
||||||
|
<!-- workaround for missing toolbar -->
|
||||||
|
<PreferenceCategory android:title="@string/prefs_disconnect_notification" />
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:defaultValue="@string/p_off"
|
||||||
|
android:entries="@array/activate_display_on_lift"
|
||||||
|
android:entryValues="@array/activate_display_on_lift_values"
|
||||||
|
android:key="disconnect_notification"
|
||||||
|
android:summary="%s"
|
||||||
|
android:title="@string/prefs_disconnect_notification" />
|
||||||
|
|
||||||
|
<nodomain.freeyourgadget.gadgetbridge.util.XTimePreference
|
||||||
|
android:defaultValue="00:00"
|
||||||
|
android:key="disconnect_notification_start"
|
||||||
|
android:title="@string/mi2_prefs_do_not_disturb_start" />
|
||||||
|
<nodomain.freeyourgadget.gadgetbridge.util.XTimePreference
|
||||||
|
android:defaultValue="00:00"
|
||||||
|
android:key="disconnect_notification_end"
|
||||||
|
android:title="@string/mi2_prefs_do_not_disturb_end" />
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
||||||
|
|
||||||
|
</androidx.preference.PreferenceScreen>
|
9
app/src/main/res/xml/devicesettings_swipeunlock.xml
Normal file
9
app/src/main/res/xml/devicesettings_swipeunlock.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="swipe_unlock"
|
||||||
|
android:layout="@layout/preference_checkbox"
|
||||||
|
android:summary="@string/mi3_prefs_band_screen_unlock_summary"
|
||||||
|
android:title="@string/mi3_prefs_band_screen_unlock" />
|
||||||
|
</androidx.preference.PreferenceScreen>
|
@ -293,12 +293,6 @@
|
|||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:icon="@drawable/ic_device_miband2"
|
android:icon="@drawable/ic_device_miband2"
|
||||||
android:title="@string/preferences_miband3_settings">
|
android:title="@string/preferences_miband3_settings">
|
||||||
<CheckBoxPreference
|
|
||||||
android:layout="@layout/preference_checkbox"
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="mi3_band_screen_unlock"
|
|
||||||
android:summary="@string/mi3_prefs_band_screen_unlock_summary"
|
|
||||||
android:title="@string/mi3_prefs_band_screen_unlock" />
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/mi3_prefs_night_mode"
|
android:title="@string/mi3_prefs_night_mode"
|
||||||
@ -327,37 +321,6 @@
|
|||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
<PreferenceScreen
|
|
||||||
android:icon="@drawable/ic_device_hplus"
|
|
||||||
android:title="@string/preferences_amazfitbip_settings">
|
|
||||||
<PreferenceScreen
|
|
||||||
android:persistent="false"
|
|
||||||
android:title="@string/prefs_disconnect_notification">
|
|
||||||
|
|
||||||
<!-- workaround for missing toolbar -->
|
|
||||||
<PreferenceCategory android:title="@string/prefs_disconnect_notification" />
|
|
||||||
|
|
||||||
<ListPreference
|
|
||||||
android:defaultValue="@string/p_off"
|
|
||||||
android:entries="@array/activate_display_on_lift"
|
|
||||||
android:entryValues="@array/activate_display_on_lift_values"
|
|
||||||
android:key="disconnect_notification"
|
|
||||||
android:summary="%s"
|
|
||||||
android:title="@string/prefs_disconnect_notification" />
|
|
||||||
|
|
||||||
<nodomain.freeyourgadget.gadgetbridge.util.TimePreference
|
|
||||||
android:defaultValue="00:00"
|
|
||||||
android:key="disconnect_notification_start"
|
|
||||||
android:title="@string/mi2_prefs_do_not_disturb_start" />
|
|
||||||
|
|
||||||
<nodomain.freeyourgadget.gadgetbridge.util.TimePreference
|
|
||||||
android:defaultValue="00:00"
|
|
||||||
android:key="disconnect_notification_end"
|
|
||||||
android:title="@string/mi2_prefs_do_not_disturb_end" />
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:icon="@drawable/ic_device_pebble"
|
android:icon="@drawable/ic_device_pebble"
|
||||||
android:key="pref_key_pebble"
|
android:key="pref_key_pebble"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user