mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-25 11:26:47 +01:00
Merge branch 'master' of https://codeberg.org/Freeyourgadget/Gadgetbridge
This commit is contained in:
commit
b290e035f1
@ -1,4 +1,11 @@
|
|||||||
### Changelog
|
### Changelog
|
||||||
|
#### Version 0.43.0
|
||||||
|
* Initial support for Fossil Hybrid HR (needs complicated key extraction, read wiki)
|
||||||
|
* Fossil: Allow switching off the Q Icon and use the default Gadgetbridge icon
|
||||||
|
* Fix VoIP call handling during DND
|
||||||
|
* Fix find-my-phone for Android 10
|
||||||
|
* Huami: Fix crash when calendar event desctription or title was null
|
||||||
|
* Huami: Igore all-day events when syncing calendar events
|
||||||
|
|
||||||
#### Version 0.42.1
|
#### Version 0.42.1
|
||||||
* Fix accepting/rejecting calls on Android 9
|
* Fix accepting/rejecting calls on Android 9
|
||||||
|
@ -29,13 +29,14 @@ vendor's servers.
|
|||||||
|
|
||||||
## Supported Devices (Some of them WIP and some of them without maintainer)
|
## Supported Devices (Some of them WIP and some of them without maintainer)
|
||||||
* Amazfit Bip [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Bip)
|
* Amazfit Bip [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Bip)
|
||||||
* Amazfit Bip Lite (NOT RECOMMENDED, NEEDS MI FIT WITH ACCOUNT ONCE) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Bip-Lite)
|
* Amazfit Bip Lite (WARNING: NEEDS MI FIT WITH ACCOUNT ONCE) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Bip-Lite)
|
||||||
* Amazfit Cor [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Cor)
|
* Amazfit Cor [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Cor)
|
||||||
* Amazfit Cor 2 [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Cor-2)
|
* Amazfit Cor 2 [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Cor-2)
|
||||||
* Amazfit GTR (NOT RECOMMENDED, NEEDS MI FIT WITH ACCOUNT ONCE) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-GTR)
|
* Amazfit GTR (WARNING: NEEDS MI FIT WITH ACCOUNT ONCE) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-GTR)
|
||||||
* Amazfit GTS (NOT RECOMMENDED, NEEDS MI FIT WITH ACCOUNT ONCE) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-GTS)
|
* Amazfit GTS (WARNING: NEEDS MI FIT WITH ACCOUNT ONCE) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Amazfit-GTS)
|
||||||
* BFH-16
|
* BFH-16
|
||||||
* Casio GB-6900B
|
* Casio GB-6900B
|
||||||
|
* Fossil Hybrid HR (WARNING: NEEDS FOSSIL APP WITH ACCOUNT ONCE AND COMPLICATED PROCEDURE) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/Fossil-Hybrid-HR)
|
||||||
* Fossil Q Hybrid
|
* Fossil Q Hybrid
|
||||||
* HPlus Devices (e.g. ZeBand) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/HPlus)
|
* HPlus Devices (e.g. ZeBand) [Wiki](https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/HPlus)
|
||||||
* iTag
|
* iTag
|
||||||
@ -81,7 +82,7 @@ Please see [FEATURES.md](https://codeberg.org/Freeyourgadget/Gadgetbridge/src/ma
|
|||||||
* Jean-François Greffier (Mi Scale 2)
|
* Jean-François Greffier (Mi Scale 2)
|
||||||
* Johannes Schmitt (BFH-16)
|
* Johannes Schmitt (BFH-16)
|
||||||
* Lukas Schwichtenberg (Makibes HR3)
|
* Lukas Schwichtenberg (Makibes HR3)
|
||||||
* Daniel Dakhno (Fossil Q Hybrid)
|
* Daniel Dakhno (Fossil Q Hybrid, Fossil Hybrid HR)
|
||||||
* Gordon Williams (Bangle.js)
|
* Gordon Williams (Bangle.js)
|
||||||
* Pavel Elagin (JYou Y5)
|
* Pavel Elagin (JYou Y5)
|
||||||
* Taavi Eomäe (iTag)
|
* Taavi Eomäe (iTag)
|
||||||
|
@ -28,4 +28,6 @@ public class DeviceSettingsPreferenceConst {
|
|||||||
public static final String PREF_BUTTON_1_FUNCTION = "button_1_function";
|
public static final String PREF_BUTTON_1_FUNCTION = "button_1_function";
|
||||||
public static final String PREF_BUTTON_2_FUNCTION = "button_2_function";
|
public static final String PREF_BUTTON_2_FUNCTION = "button_2_function";
|
||||||
public static final String PREF_BUTTON_3_FUNCTION = "button_3_function";
|
public static final String PREF_BUTTON_3_FUNCTION = "button_3_function";
|
||||||
|
public static final String PREF_VIBRATION_STRENGH_PERCENTAGE = "vibration_strength";
|
||||||
|
public static final String PREF_RELAX_FIRMWARE_CHECKS = "relax_firmware_checks";
|
||||||
}
|
}
|
@ -45,6 +45,7 @@ import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.Dev
|
|||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DATEFORMAT;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DATEFORMAT;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_SCREEN_ORIENTATION;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_SCREEN_ORIENTATION;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_TIMEFORMAT;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_TIMEFORMAT;
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_VIBRATION_STRENGH_PERCENTAGE;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_WEARLOCATION;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_WEARLOCATION;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_ACTIVATE_DISPLAY_ON_LIFT;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_ACTIVATE_DISPLAY_ON_LIFT;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISCONNECT_NOTIFICATION;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst.PREF_DISCONNECT_NOTIFICATION;
|
||||||
@ -319,6 +320,7 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat {
|
|||||||
addPreferenceHandlerFor(PREF_BUTTON_1_FUNCTION);
|
addPreferenceHandlerFor(PREF_BUTTON_1_FUNCTION);
|
||||||
addPreferenceHandlerFor(PREF_BUTTON_2_FUNCTION);
|
addPreferenceHandlerFor(PREF_BUTTON_2_FUNCTION);
|
||||||
addPreferenceHandlerFor(PREF_BUTTON_3_FUNCTION);
|
addPreferenceHandlerFor(PREF_BUTTON_3_FUNCTION);
|
||||||
|
addPreferenceHandlerFor(PREF_VIBRATION_STRENGH_PERCENTAGE);
|
||||||
|
|
||||||
String displayOnLiftState = prefs.getString(PREF_ACTIVATE_DISPLAY_ON_LIFT, PREF_DO_NOT_DISTURB_OFF);
|
String displayOnLiftState = prefs.getString(PREF_ACTIVATE_DISPLAY_ON_LIFT, PREF_DO_NOT_DISTURB_OFF);
|
||||||
boolean displayOnLiftScheduled = displayOnLiftState.equals(PREF_DO_NOT_DISTURB_SCHEDULED);
|
boolean displayOnLiftScheduled = displayOnLiftState.equals(PREF_DO_NOT_DISTURB_SCHEDULED);
|
||||||
|
@ -26,7 +26,9 @@ import androidx.annotation.NonNull;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
||||||
|
|
||||||
@ -63,4 +65,21 @@ public class AmazfitBipLiteCoordinator extends AmazfitBipCoordinator {
|
|||||||
public int getBondingStyle() {
|
public int getBondingStyle() {
|
||||||
return BONDING_STYLE_REQUIRE_KEY;
|
return BONDING_STYLE_REQUIRE_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
|
return new int[]{
|
||||||
|
R.xml.devicesettings_amazfitbip,
|
||||||
|
R.xml.devicesettings_timeformat,
|
||||||
|
R.xml.devicesettings_wearlocation,
|
||||||
|
R.xml.devicesettings_custom_emoji_font,
|
||||||
|
R.xml.devicesettings_liftwrist_display,
|
||||||
|
R.xml.devicesettings_disconnectnotification,
|
||||||
|
R.xml.devicesettings_sync_calendar,
|
||||||
|
R.xml.devicesettings_expose_hr_thirdparty,
|
||||||
|
R.xml.devicesettings_buttonactions_with_longpress,
|
||||||
|
R.xml.devicesettings_pairingkey,
|
||||||
|
R.xml.devicesettings_relax_firmware_checks,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,99 @@
|
|||||||
|
/* Copyright (C) 2017-2020 Andreas Shimokawa, Carsten Pfeiffer, Daniele
|
||||||
|
Gobbetti, João Paulo Barraca, Nephiel, vanous
|
||||||
|
|
||||||
|
This file is part of Gadgetbridge.
|
||||||
|
|
||||||
|
Gadgetbridge is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published
|
||||||
|
by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Gadgetbridge is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
package nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbips;
|
||||||
|
|
||||||
|
import android.bluetooth.BluetoothDevice;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
||||||
|
|
||||||
|
public class AmazfitBipSCoordinator extends HuamiCoordinator {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(AmazfitBipSCoordinator.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DeviceType getDeviceType() {
|
||||||
|
return DeviceType.AMAZFITBIPS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public DeviceType getSupportedType(GBDeviceCandidate candidate) {
|
||||||
|
try {
|
||||||
|
BluetoothDevice device = candidate.getDevice();
|
||||||
|
String name = device.getName();
|
||||||
|
if (name != null && (name.equalsIgnoreCase("Amazfit Bip S"))) {
|
||||||
|
return DeviceType.AMAZFITBIPS;
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
LOG.error("unable to check device support", ex);
|
||||||
|
}
|
||||||
|
return DeviceType.UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InstallHandler findInstallHandler(Uri uri, Context context) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsHeartRateMeasurement(GBDevice device) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsActivityTracks() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsWeather() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
|
||||||
|
return new int[]{
|
||||||
|
R.xml.devicesettings_amazfitbip,
|
||||||
|
R.xml.devicesettings_timeformat,
|
||||||
|
R.xml.devicesettings_wearlocation,
|
||||||
|
R.xml.devicesettings_custom_emoji_font,
|
||||||
|
R.xml.devicesettings_liftwrist_display,
|
||||||
|
R.xml.devicesettings_disconnectnotification,
|
||||||
|
R.xml.devicesettings_sync_calendar,
|
||||||
|
R.xml.devicesettings_expose_hr_thirdparty,
|
||||||
|
R.xml.devicesettings_buttonactions_with_longpress,
|
||||||
|
R.xml.devicesettings_pairingkey
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getBondingStyle() {
|
||||||
|
return BONDING_STYLE_REQUIRE_KEY;
|
||||||
|
}
|
||||||
|
}
|
@ -43,6 +43,7 @@ public enum DeviceType {
|
|||||||
AMAZFITBIP_LITE(17, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_amazfit_bip_lite),
|
AMAZFITBIP_LITE(17, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_amazfit_bip_lite),
|
||||||
AMAZFITGTR(18, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_amazfit_gtr),
|
AMAZFITGTR(18, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_amazfit_gtr),
|
||||||
AMAZFITGTS(19, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_amazfit_gts),
|
AMAZFITGTS(19, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_amazfit_gts),
|
||||||
|
AMAZFITBIPS(20, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_amazfit_bips),
|
||||||
LIVEVIEW(30, R.drawable.ic_device_default, R.drawable.ic_device_default_disabled, R.string.devicetype_liveview),
|
LIVEVIEW(30, R.drawable.ic_device_default, R.drawable.ic_device_default_disabled, R.string.devicetype_liveview),
|
||||||
HPLUS(40, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_hplus),
|
HPLUS(40, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_hplus),
|
||||||
MAKIBESF68(41, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_makibes_f68),
|
MAKIBESF68(41, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled, R.string.devicetype_makibes_f68),
|
||||||
|
@ -36,6 +36,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.casiogb6900.CasioGB6
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.hplus.HPlusSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.hplus.HPlusSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip.AmazfitBipLiteSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip.AmazfitBipLiteSupport;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip.AmazfitBipSSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip.AmazfitBipSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip.AmazfitBipSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitgtr.AmazfitGTRSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitgtr.AmazfitGTRSupport;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitcor.AmazfitCorSupport;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitcor.AmazfitCorSupport;
|
||||||
@ -148,6 +149,9 @@ public class DeviceSupportFactory {
|
|||||||
case AMAZFITBIP_LITE:
|
case AMAZFITBIP_LITE:
|
||||||
deviceSupport = new ServiceDeviceSupport(new AmazfitBipLiteSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING));
|
deviceSupport = new ServiceDeviceSupport(new AmazfitBipLiteSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING));
|
||||||
break;
|
break;
|
||||||
|
case AMAZFITBIPS:
|
||||||
|
deviceSupport = new ServiceDeviceSupport(new AmazfitBipSSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING));
|
||||||
|
break;
|
||||||
case AMAZFITGTR:
|
case AMAZFITGTR:
|
||||||
deviceSupport = new ServiceDeviceSupport(new AmazfitGTRSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING));
|
deviceSupport = new ServiceDeviceSupport(new AmazfitGTRSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING));
|
||||||
break;
|
break;
|
||||||
|
@ -1697,6 +1697,9 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
int iteration = 0;
|
int iteration = 0;
|
||||||
|
|
||||||
for (CalendarEvents.CalendarEvent mEvt : mEvents) {
|
for (CalendarEvents.CalendarEvent mEvt : mEvents) {
|
||||||
|
if (mEvt.isAllDay()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (iteration >= availableSlots || iteration > 2) {
|
if (iteration >= availableSlots || iteration > 2) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1724,6 +1727,10 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
int iteration = 0;
|
int iteration = 0;
|
||||||
|
|
||||||
for (CalendarEvents.CalendarEvent calendarEvent : calendarEvents) {
|
for (CalendarEvents.CalendarEvent calendarEvent : calendarEvents) {
|
||||||
|
if (calendarEvent.isAllDay()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (iteration > 8) { // limit ?
|
if (iteration > 8) { // limit ?
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -19,11 +19,14 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareInfo;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareInfo;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareType;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareType;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||||
|
|
||||||
public class AmazfitBipLiteFirmwareInfo extends HuamiFirmwareInfo {
|
public class AmazfitBipLiteFirmwareInfo extends HuamiFirmwareInfo {
|
||||||
|
|
||||||
@ -66,6 +69,15 @@ public class AmazfitBipLiteFirmwareInfo extends HuamiFirmwareInfo {
|
|||||||
if (searchString32BitAligned(bytes, "Amazfit Bip Lite")) {
|
if (searchString32BitAligned(bytes, "Amazfit Bip Lite")) {
|
||||||
return HuamiFirmwareType.FIRMWARE;
|
return HuamiFirmwareType.FIRMWARE;
|
||||||
}
|
}
|
||||||
|
GBDevice device = GBApplication.app().getDeviceManager().getSelectedDevice();
|
||||||
|
if (device != null) {
|
||||||
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(device.getAddress()));
|
||||||
|
if (prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_RELAX_FIRMWARE_CHECKS, false)) {
|
||||||
|
if (searchString32BitAligned(bytes, "Amazfit Bip")) {
|
||||||
|
return HuamiFirmwareType.FIRMWARE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return HuamiFirmwareType.INVALID;
|
return HuamiFirmwareType.INVALID;
|
||||||
}
|
}
|
||||||
if (ArrayUtils.startsWith(bytes, WATCHFACE_HEADER)) {
|
if (ArrayUtils.startsWith(bytes, WATCHFACE_HEADER)) {
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
/* Copyright (C) 2017-2020 Andreas Shimokawa, Carsten Pfeiffer
|
||||||
|
|
||||||
|
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.service.devices.huami.amazfitbip;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
|
|
||||||
|
public class AmazfitBipSSupport extends AmazfitBipSupport {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte getCryptFlags() {
|
||||||
|
return (byte) 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNotification(NotificationSpec notificationSpec) {
|
||||||
|
super.sendNotificationNew(notificationSpec, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected byte getAuthFlags() {
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HuamiFWHelper createFWHelper(Uri uri, Context context) throws IOException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -106,7 +106,7 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
|
|||||||
|
|
||||||
loadNotificationConfigurations();
|
loadNotificationConfigurations();
|
||||||
queueWrite(new NotificationFilterPutHRRequest(this.notificationConfigurations, this));
|
queueWrite(new NotificationFilterPutHRRequest(this.notificationConfigurations, this));
|
||||||
setVibrationStrength((short) 75);
|
setVibrationStrength();
|
||||||
|
|
||||||
syncSettings();
|
syncSettings();
|
||||||
|
|
||||||
@ -123,6 +123,15 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
|
|||||||
queueWrite(new SetDeviceStateRequest(GBDevice.State.INITIALIZED));
|
queueWrite(new SetDeviceStateRequest(GBDevice.State.INITIALIZED));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setVibrationStrength() {
|
||||||
|
Prefs prefs = new Prefs(getDeviceSpecificPreferences());
|
||||||
|
int vibrationStrengh = prefs.getInt(DeviceSettingsPreferenceConst.PREF_VIBRATION_STRENGH_PERCENTAGE, 2);
|
||||||
|
if (vibrationStrengh > 0) {
|
||||||
|
vibrationStrengh = (vibrationStrengh + 1) * 25; // Seems 0,50,75,100 are working...
|
||||||
|
}
|
||||||
|
setVibrationStrength((short) (vibrationStrengh));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setVibrationStrength(short strength) {
|
public void setVibrationStrength(short strength) {
|
||||||
negotiateSymmetricKey();
|
negotiateSymmetricKey();
|
||||||
@ -692,6 +701,9 @@ public class FossilHRWatchAdapter extends FossilWatchAdapter {
|
|||||||
case DeviceSettingsPreferenceConst.PREF_BUTTON_2_FUNCTION:
|
case DeviceSettingsPreferenceConst.PREF_BUTTON_2_FUNCTION:
|
||||||
case DeviceSettingsPreferenceConst.PREF_BUTTON_3_FUNCTION:
|
case DeviceSettingsPreferenceConst.PREF_BUTTON_3_FUNCTION:
|
||||||
overwriteButtons(null);
|
overwriteButtons(null);
|
||||||
|
break;
|
||||||
|
case DeviceSettingsPreferenceConst.PREF_VIBRATION_STRENGH_PERCENTAGE:
|
||||||
|
setVibrationStrength();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fo
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.zip.CRC32;
|
import java.util.zip.CRC32;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
|
||||||
@ -57,7 +58,9 @@ public abstract class PlayNotificationRequest extends FilePutRequest {
|
|||||||
byte[] senderBytes = nullTerminatedSender.getBytes(charsetUTF8);
|
byte[] senderBytes = nullTerminatedSender.getBytes(charsetUTF8);
|
||||||
String nullTerminatedMessage = StringUtils.terminateNull(message);
|
String nullTerminatedMessage = StringUtils.terminateNull(message);
|
||||||
byte[] messageBytes = nullTerminatedMessage.getBytes(charsetUTF8);
|
byte[] messageBytes = nullTerminatedMessage.getBytes(charsetUTF8);
|
||||||
|
if (messageBytes.length > 490) {
|
||||||
|
messageBytes = Arrays.copyOf(messageBytes, 490);
|
||||||
|
}
|
||||||
short mainBufferLength = (short) (lengthBufferLength + uidLength + appBundleCRCLength + titleBytes.length + senderBytes.length + messageBytes.length);
|
short mainBufferLength = (short) (lengthBufferLength + uidLength + appBundleCRCLength + titleBytes.length + senderBytes.length + messageBytes.length);
|
||||||
|
|
||||||
ByteBuffer mainBuffer = ByteBuffer.allocate(mainBufferLength);
|
ByteBuffer mainBuffer = ByteBuffer.allocate(mainBufferLength);
|
||||||
|
@ -48,6 +48,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.hplus.EXRIZUK8Coordinator;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.hplus.MakibesF68Coordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.hplus.MakibesF68Coordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipLiteCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipLiteCoordinator;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbips.AmazfitBipSCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitgtr.AmazfitGTRCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitgtr.AmazfitGTRCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitgts.AmazfitGTSCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitgts.AmazfitGTSCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.itag.ITagCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.itag.ITagCoordinator;
|
||||||
@ -216,6 +217,7 @@ public class DeviceHelper {
|
|||||||
result.add(new AmazfitCor2Coordinator());
|
result.add(new AmazfitCor2Coordinator());
|
||||||
result.add(new AmazfitGTRCoordinator());
|
result.add(new AmazfitGTRCoordinator());
|
||||||
result.add(new AmazfitGTSCoordinator());
|
result.add(new AmazfitGTSCoordinator());
|
||||||
|
result.add(new AmazfitBipSCoordinator());
|
||||||
result.add(new MiBand3Coordinator());
|
result.add(new MiBand3Coordinator());
|
||||||
result.add(new MiBand4Coordinator());
|
result.add(new MiBand4Coordinator());
|
||||||
result.add(new MiBand2HRXCoordinator());
|
result.add(new MiBand2HRXCoordinator());
|
||||||
|
@ -335,7 +335,7 @@
|
|||||||
<string name="mi2_prefs_button_actions">Accions del botó</string>
|
<string name="mi2_prefs_button_actions">Accions del botó</string>
|
||||||
<string name="mi2_prefs_button_actions_summary">Especifiqueu les accions en prémer el botó</string>
|
<string name="mi2_prefs_button_actions_summary">Especifiqueu les accions en prémer el botó</string>
|
||||||
<string name="mi2_prefs_button_press_count">Nombre de pulsacions del botó</string>
|
<string name="mi2_prefs_button_press_count">Nombre de pulsacions del botó</string>
|
||||||
<string name="mi2_prefs_button_press_count_summary">Nombre de vegades que cal prémer el botó per activar la difusió de missatge</string>
|
<string name="mi2_prefs_button_press_count_summary">Nombre de vegades que cal prémer el botó per activar un Esdeveniment 1. Després, prémer el mateix nombre de vegades crearà un Esdeveniment 2, i successivament.</string>
|
||||||
<string name="mi2_prefs_button_press_broadcast">Missatge de difusió a enviar</string>
|
<string name="mi2_prefs_button_press_broadcast">Missatge de difusió a enviar</string>
|
||||||
<string name="mi2_prefs_button_action">Activa el botó d\'acció</string>
|
<string name="mi2_prefs_button_action">Activa el botó d\'acció</string>
|
||||||
<string name="mi2_prefs_button_action_summary">Activa un acció en prémer un botó un cert nombre de vegades</string>
|
<string name="mi2_prefs_button_action_summary">Activa un acció en prémer un botó un cert nombre de vegades</string>
|
||||||
@ -347,7 +347,7 @@
|
|||||||
<string name="mi2_prefs_goal_notification">Notificació d\'objectiu</string>
|
<string name="mi2_prefs_goal_notification">Notificació d\'objectiu</string>
|
||||||
<string name="mi2_prefs_goal_notification_summary">La polsera vibrarà quan l\'objectiu diari de passes siga assolit</string>
|
<string name="mi2_prefs_goal_notification_summary">La polsera vibrarà quan l\'objectiu diari de passes siga assolit</string>
|
||||||
<string name="mi2_prefs_display_items">Elements a mostrar</string>
|
<string name="mi2_prefs_display_items">Elements a mostrar</string>
|
||||||
<string name="mi2_prefs_display_items_summary">Escolliu els elements a mostrar en la pantalla de la polsera</string>
|
<string name="mi2_prefs_display_items_summary">Escolliu els elements a mostrar a la pantalla de la polsera</string>
|
||||||
<string name="mi2_prefs_activate_display_on_lift">Activa la pantalla en alçar-la</string>
|
<string name="mi2_prefs_activate_display_on_lift">Activa la pantalla en alçar-la</string>
|
||||||
<string name="mi2_prefs_rotate_wrist_to_switch_info">Gira el canell per canviar la informació</string>
|
<string name="mi2_prefs_rotate_wrist_to_switch_info">Gira el canell per canviar la informació</string>
|
||||||
<string name="mi2_prefs_do_not_disturb">No molesteu</string>
|
<string name="mi2_prefs_do_not_disturb">No molesteu</string>
|
||||||
@ -437,7 +437,7 @@
|
|||||||
<string name="pref_title_dont_ack_transfer">No enviïs l\'ACK de les dades d\'activitats</string>
|
<string name="pref_title_dont_ack_transfer">No enviïs l\'ACK de les dades d\'activitats</string>
|
||||||
<string name="pref_summary_dont_ack_transfers">Si l\'arribada de les dades d\'activitats no és notificada a la polsera, aquestes dades no s\'eliminaran. Aquesta opció pot ser útil si feu servir el Gadgebridge també amb altres aplicacions.</string>
|
<string name="pref_summary_dont_ack_transfers">Si l\'arribada de les dades d\'activitats no és notificada a la polsera, aquestes dades no s\'eliminaran. Aquesta opció pot ser útil si feu servir el Gadgebridge també amb altres aplicacions.</string>
|
||||||
<string name="pref_summary_keep_data_on_device">Les dades d\'activitats de la Mi Band es guardaran fins i tot després de sincronitzar. Aquesta opció pot ser útil si feu servir el Gadgebridge també amb altres aplicacions.</string>
|
<string name="pref_summary_keep_data_on_device">Les dades d\'activitats de la Mi Band es guardaran fins i tot després de sincronitzar. Aquesta opció pot ser útil si feu servir el Gadgebridge també amb altres aplicacions.</string>
|
||||||
<string name="mi2_prefs_button_press_broadcast_summary">Messatge que s\'enviarà quan s\'hagi premut el botó el nombre de vegades establert</string>
|
<string name="mi2_prefs_button_press_broadcast_summary">Difón el missatge enviat amb l\'esdeveniment. El paràmetre `button_id` és afegit automàticament a cada missatge.</string>
|
||||||
<string name="mi2_prefs_button_press_count_match_delay_summary">Retard després d\'una acció de botó (el nombre és a l\'intent extra de button_id) o 0 per procedir immediatament</string>
|
<string name="mi2_prefs_button_press_count_match_delay_summary">Retard després d\'una acció de botó (el nombre és a l\'intent extra de button_id) o 0 per procedir immediatament</string>
|
||||||
<string name="pref_title_pebble_health_store_raw">Desa dades sense processar a la base de dades</string>
|
<string name="pref_title_pebble_health_store_raw">Desa dades sense processar a la base de dades</string>
|
||||||
<string name="pref_summary_pebble_health_store_raw">Desa les dades \"tal qual\", tot augmentant l\'ús de la base de dades per tal de permetre possibles interpretacions més tard.</string>
|
<string name="pref_summary_pebble_health_store_raw">Desa les dades \"tal qual\", tot augmentant l\'ús de la base de dades per tal de permetre possibles interpretacions més tard.</string>
|
||||||
@ -793,4 +793,56 @@
|
|||||||
<string name="prefs_find_phone_summary">Fes servir la teva banda per a reproduir el to del telèfon.</string>
|
<string name="prefs_find_phone_summary">Fes servir la teva banda per a reproduir el to del telèfon.</string>
|
||||||
<string name="discovery_need_to_enter_authkey">Aquest aparell requereix una clau d\'autenticació secreta, mantingueu premut sobre l\'aparell per a introduir-la. Consulteu la wiki.</string>
|
<string name="discovery_need_to_enter_authkey">Aquest aparell requereix una clau d\'autenticació secreta, mantingueu premut sobre l\'aparell per a introduir-la. Consulteu la wiki.</string>
|
||||||
<string name="pref_summary_allow_high_mtu">Augmenta la velocitat de transferència, però pot ser que no funcioni en alguns aparells Android.</string>
|
<string name="pref_summary_allow_high_mtu">Augmenta la velocitat de transferència, però pot ser que no funcioni en alguns aparells Android.</string>
|
||||||
|
<string name="devicetype_qhybrid">Fossil Q Hybrid</string>
|
||||||
|
<string name="preferences_qhybrid_settings">Configuració de Q Hybrid</string>
|
||||||
|
<string name="watch_not_connected">Rellotge no connectat</string>
|
||||||
|
<string name="qhybrid_vibration_strength">intensitat de vibració:</string>
|
||||||
|
<string name="qhybrid_goal_in_steps">Objectiu en passes</string>
|
||||||
|
<string name="qhybrid_time_shift">decalat horari</string>
|
||||||
|
<string name="qhybrid_second_timezone_offset_relative_to_utc">decalat del segon fus horari relatiu a UTC</string>
|
||||||
|
<string name="qhybrid_overwrite_buttons">sobreescriu els botons</string>
|
||||||
|
<string name="qhybrid_use_activity_hand_as_notification_counter">utilitza la maneta d\'activitat com a comptador de notificacions</string>
|
||||||
|
<string name="qhybrid_prompt_million_steps">Si us plau, estableix el comptador de passes a un milió per a activar-ho.</string>
|
||||||
|
<string name="qhybrid_buttons_overwrite_success">Botons sobreescrits</string>
|
||||||
|
<string name="qhybrid_buttons_overwrite_error">Error al sobreescriure botons</string>
|
||||||
|
<string name="qhybrid_offset_timezone">decala el fus horari en</string>
|
||||||
|
<string name="qhybrid_changes_delay_prompt">el canvi pot trigar uns segons…</string>
|
||||||
|
<string name="qhybrid_offset_time_by">temps decalat en</string>
|
||||||
|
<string name="pref_disable_new_ble_scanning">Desactiva el nou escaneig BLE</string>
|
||||||
|
<string name="pref_summary_disable_new_ble_scanning">Marca aquesta opció si el teu aparell no pot ser trobat durant la detecció</string>
|
||||||
|
<string name="devicetype_banglejs">Bangle.js</string>
|
||||||
|
<string name="devicetype_y5">Y5</string>
|
||||||
|
<string name="prefs_button_single_press_action_selection_title">Acció d\'esdeveniment 1</string>
|
||||||
|
<string name="prefs_button_double_press_action_selection_title">Acció d\'esdeveniment 2</string>
|
||||||
|
<string name="prefs_button_triple_press_action_selection_title">Acció d\'esdeveniment 3</string>
|
||||||
|
<string name="prefs_button_variable_actions">Configuració detallada de premuda de botó</string>
|
||||||
|
<string name="prefs_button_long_press_action_selection_title">Acció de premuda llarga de botó</string>
|
||||||
|
<string name="alarm_snooze">Posposa</string>
|
||||||
|
<string name="error_no_location_access">S\'ha de permetre i activar l\'accés a la localitztació per al correcte funcionament de l\'escaneig</string>
|
||||||
|
<string name="devicetype_itag">iTag</string>
|
||||||
|
<string name="pref_title_allow_high_mtu">Permet una alta MTU</string>
|
||||||
|
<string name="pref_summary_sync_calendar">Activa les alertes de calendari, fins i tot quan estigui desconnectat</string>
|
||||||
|
<string name="pref_title_sync_caldendar">Sincronitza els esdeveniments del calendari</string>
|
||||||
|
<string name="hr_widget_heart_rate">Ritme cardíac</string>
|
||||||
|
<string name="hr_widget_steps">Passes</string>
|
||||||
|
<string name="hr_widget_date">Data</string>
|
||||||
|
<string name="hr_widget_active_minutes">Minuts actius</string>
|
||||||
|
<string name="hr_widget_calories">Calories</string>
|
||||||
|
<string name="hr_widget_battery">Bateria</string>
|
||||||
|
<string name="hr_widget_weather">El temps</string>
|
||||||
|
<string name="hr_widget_nothing">Res</string>
|
||||||
|
<string name="find_lost_device_you_found_it">Trobat!</string>
|
||||||
|
<string name="pref_title_force_white_color_scheme">Força l\'esquema de color blanc sobre negre</string>
|
||||||
|
<string name="pref_summary_force_white_color_scheme">Útil si si el teu rellotge té les manetes negres</string>
|
||||||
|
<string name="find_my_phone_notification">Troba el meu telèfon</string>
|
||||||
|
<string name="notification_channel_high_priority_name">Notificacions de Gadgetbridge d\'alta prioritat</string>
|
||||||
|
<string name="pref_title_custom_deviceicon">Mostra l\'icona de notificació específica de l\'aparell</string>
|
||||||
|
<string name="pref_summary_custom_deviceicon">Mostra l\'icona de notificació d\'Android específica de l\'aparell enlloc de l\'icona de Gadgetbridge quan estigui connectat</string>
|
||||||
|
<string name="hr_appname_wellness">Benestar</string>
|
||||||
|
<string name="hr_appname_workout">Entrenament</string>
|
||||||
|
<string name="hr_appname_stopwatch">Cronòmetre</string>
|
||||||
|
<string name="hr_appname_commute">Desplçament</string>
|
||||||
|
<string name="pref_title_upper_button_function">Botó superior</string>
|
||||||
|
<string name="pref_title_middle_button_function">Botó mitger</string>
|
||||||
|
<string name="pref_title_lower_button_function">Botó inferior</string>
|
||||||
</resources>
|
</resources>
|
@ -845,4 +845,14 @@
|
|||||||
<string name="find_lost_device_you_found_it">Gefunden!</string>
|
<string name="find_lost_device_you_found_it">Gefunden!</string>
|
||||||
<string name="pref_title_force_white_color_scheme">Schwarz-Weiß-Farbschema erzwingen</string>
|
<string name="pref_title_force_white_color_scheme">Schwarz-Weiß-Farbschema erzwingen</string>
|
||||||
<string name="pref_summary_force_white_color_scheme">Nützlich, wenn deine Uhr dunkle Zeiger hat</string>
|
<string name="pref_summary_force_white_color_scheme">Nützlich, wenn deine Uhr dunkle Zeiger hat</string>
|
||||||
|
<string name="find_my_phone_notification">Mein Telefon finden</string>
|
||||||
|
<string name="notification_channel_high_priority_name">Gadgetbridge-Benachrichtigungen mit hoher Priorität</string>
|
||||||
|
<string name="pref_title_custom_deviceicon">Gerätespezifisches Benachrichtigungssymbol anzeigen</string>
|
||||||
|
<string name="pref_summary_custom_deviceicon">Zeige ein gerätespezifisches Android-Benachrichtigungssymbol anstelle des Gadgetbridge-Symbols, wenn eine Verbindung besteht</string>
|
||||||
|
<string name="hr_appname_wellness">Wellness</string>
|
||||||
|
<string name="hr_appname_workout">Training</string>
|
||||||
|
<string name="hr_appname_stopwatch">Stoppuhr</string>
|
||||||
|
<string name="pref_title_upper_button_function">Obere Taste</string>
|
||||||
|
<string name="pref_title_middle_button_function">Mittlere Taste</string>
|
||||||
|
<string name="pref_title_lower_button_function">Untere Taste</string>
|
||||||
</resources>
|
</resources>
|
@ -838,4 +838,15 @@
|
|||||||
<string name="find_lost_device_you_found_it">מצאתי!</string>
|
<string name="find_lost_device_you_found_it">מצאתי!</string>
|
||||||
<string name="pref_title_force_white_color_scheme">לאכוף ערכת צבעים שחור על לבן</string>
|
<string name="pref_title_force_white_color_scheme">לאכוף ערכת צבעים שחור על לבן</string>
|
||||||
<string name="pref_summary_force_white_color_scheme">שימושי לידיים כהות</string>
|
<string name="pref_summary_force_white_color_scheme">שימושי לידיים כהות</string>
|
||||||
|
<string name="find_my_phone_notification">איתור הטלפון שלי</string>
|
||||||
|
<string name="notification_channel_high_priority_name">התראות מ־Gadgetbridge בעדיפות גבוהה</string>
|
||||||
|
<string name="pref_title_custom_deviceicon">הצגת סמל התראה ייעודי למכשיר</string>
|
||||||
|
<string name="pref_summary_custom_deviceicon">הצגת התראת Android תואמת מכשיר במקום הסמל של Gadgetbridge כשיש חיבור</string>
|
||||||
|
<string name="hr_appname_wellness">רווחה</string>
|
||||||
|
<string name="hr_appname_workout">אימון</string>
|
||||||
|
<string name="hr_appname_stopwatch">שעון עצר</string>
|
||||||
|
<string name="hr_appname_commute">התניידות</string>
|
||||||
|
<string name="pref_title_upper_button_function">כפתור עליון</string>
|
||||||
|
<string name="pref_title_middle_button_function">כפתור אמצעי</string>
|
||||||
|
<string name="pref_title_lower_button_function">כפתור תחתון</string>
|
||||||
</resources>
|
</resources>
|
@ -836,4 +836,15 @@
|
|||||||
<string name="find_lost_device_you_found_it">Gevonden!</string>
|
<string name="find_lost_device_you_found_it">Gevonden!</string>
|
||||||
<string name="pref_title_force_white_color_scheme">Zwart op wit kleurenschema forceren</string>
|
<string name="pref_title_force_white_color_scheme">Zwart op wit kleurenschema forceren</string>
|
||||||
<string name="pref_summary_force_white_color_scheme">Nuttig als je horloge donkere wijzers heeft</string>
|
<string name="pref_summary_force_white_color_scheme">Nuttig als je horloge donkere wijzers heeft</string>
|
||||||
|
<string name="find_my_phone_notification">Vind mijn telefoon</string>
|
||||||
|
<string name="notification_channel_high_priority_name">Gadgetbridge hoge prioriteit meldingen</string>
|
||||||
|
<string name="pref_title_custom_deviceicon">Toon apparaat specifieke meldingspictogram</string>
|
||||||
|
<string name="pref_summary_custom_deviceicon">Toon een apparaatspecifiek Android-meldpictogram in plaats van het Gadgetbridge-pictogram indien verbonden</string>
|
||||||
|
<string name="hr_appname_wellness">Welzijn</string>
|
||||||
|
<string name="hr_appname_workout">Training</string>
|
||||||
|
<string name="hr_appname_stopwatch">Stopwatch</string>
|
||||||
|
<string name="hr_appname_commute">Woon-werkverkeer</string>
|
||||||
|
<string name="pref_title_upper_button_function">Bovenste knop</string>
|
||||||
|
<string name="pref_title_middle_button_function">Middelste knop</string>
|
||||||
|
<string name="pref_title_lower_button_function">Onderste knop</string>
|
||||||
</resources>
|
</resources>
|
@ -848,4 +848,15 @@
|
|||||||
<string name="find_lost_device_you_found_it">Encontrei!</string>
|
<string name="find_lost_device_you_found_it">Encontrei!</string>
|
||||||
<string name="pref_title_force_white_color_scheme">Forçar preto no esquema de cores branco</string>
|
<string name="pref_title_force_white_color_scheme">Forçar preto no esquema de cores branco</string>
|
||||||
<string name="pref_summary_force_white_color_scheme">Útil se seu relógio possui ponteiros escuros</string>
|
<string name="pref_summary_force_white_color_scheme">Útil se seu relógio possui ponteiros escuros</string>
|
||||||
|
<string name="find_my_phone_notification">Localizar meu telefone</string>
|
||||||
|
<string name="notification_channel_high_priority_name">Notificações de Gadgetbridge de alta prioridade</string>
|
||||||
|
<string name="pref_title_custom_deviceicon">Mostrar ícone de notificação específica do dispositivo</string>
|
||||||
|
<string name="pref_summary_custom_deviceicon">Mostra o ícone de notificação Android específico de um dispositivo em vez do ícone do Gadgetbridge quando conectado</string>
|
||||||
|
<string name="hr_appname_wellness">Bem-estar</string>
|
||||||
|
<string name="hr_appname_workout">Treino</string>
|
||||||
|
<string name="hr_appname_stopwatch">Cronômetro</string>
|
||||||
|
<string name="hr_appname_commute">Comutar</string>
|
||||||
|
<string name="pref_title_upper_button_function">Botão superior</string>
|
||||||
|
<string name="pref_title_middle_button_function">Botão do meio</string>
|
||||||
|
<string name="pref_title_lower_button_function">Botão inferior</string>
|
||||||
</resources>
|
</resources>
|
@ -823,4 +823,9 @@
|
|||||||
<string name="devicetype_itag">iTag</string>
|
<string name="devicetype_itag">iTag</string>
|
||||||
<string name="pref_title_allow_high_mtu">Разрешить высокий MTU</string>
|
<string name="pref_title_allow_high_mtu">Разрешить высокий MTU</string>
|
||||||
<string name="pref_summary_allow_high_mtu">Увеличивает скорость передачи данных, но может не работать на некоторых Android-устройствах.</string>
|
<string name="pref_summary_allow_high_mtu">Увеличивает скорость передачи данных, но может не работать на некоторых Android-устройствах.</string>
|
||||||
|
<string name="pref_summary_sync_calendar">Включает уведомления календаря, даже когда отключено</string>
|
||||||
|
<string name="pref_title_sync_caldendar">Синхронизировать события в календаре</string>
|
||||||
|
<string name="find_my_phone_notification">Найти телефон</string>
|
||||||
|
<string name="pref_title_custom_deviceicon">Показывать собственную иконку устройства</string>
|
||||||
|
<string name="pref_summary_custom_deviceicon">При подключении показывать в уведомлении собственную иконку устройства вместо иконки Gadgetbridge</string>
|
||||||
</resources>
|
</resources>
|
@ -838,4 +838,13 @@
|
|||||||
<string name="pref_summary_force_white_color_scheme">如果您双手颜色较深,将会有帮助</string>
|
<string name="pref_summary_force_white_color_scheme">如果您双手颜色较深,将会有帮助</string>
|
||||||
<string name="find_my_phone_notification">查找我的手机</string>
|
<string name="find_my_phone_notification">查找我的手机</string>
|
||||||
<string name="notification_channel_high_priority_name">Gadgetbridge 通知高优先级</string>
|
<string name="notification_channel_high_priority_name">Gadgetbridge 通知高优先级</string>
|
||||||
|
<string name="pref_title_custom_deviceicon">显示设备特定的通知图标</string>
|
||||||
|
<string name="pref_summary_custom_deviceicon">显示设备指定的 Android 通知图标以替代已连接时的 Gadgetbridge 图标</string>
|
||||||
|
<string name="hr_appname_wellness">健康</string>
|
||||||
|
<string name="hr_appname_workout">健身</string>
|
||||||
|
<string name="hr_appname_stopwatch">秒表</string>
|
||||||
|
<string name="hr_appname_commute">通勤</string>
|
||||||
|
<string name="pref_title_upper_button_function">上按钮</string>
|
||||||
|
<string name="pref_title_middle_button_function">中按钮</string>
|
||||||
|
<string name="pref_title_lower_button_function">下按钮</string>
|
||||||
</resources>
|
</resources>
|
@ -401,4 +401,71 @@
|
|||||||
<string name="fw_upgrade_notice">您即將安裝 %s。</string>
|
<string name="fw_upgrade_notice">您即將安裝 %s。</string>
|
||||||
<string name="notif_battery_low_title">裝置電量不足!</string>
|
<string name="notif_battery_low_title">裝置電量不足!</string>
|
||||||
<string name="notif_battery_low_percent">%1$s 電量剩餘:%2$s%%</string>
|
<string name="notif_battery_low_percent">%1$s 電量剩餘:%2$s%%</string>
|
||||||
|
<string name="pref_title_location_longitude">經度</string>
|
||||||
|
<string name="pref_title_screentime">螢幕逾時</string>
|
||||||
|
<string name="zetime_title_screentime">螢幕逾時(秒)</string>
|
||||||
|
<string name="activity_prefs_alarm_min_heart_rate">最低心率</string>
|
||||||
|
<string name="test">測試</string>
|
||||||
|
<string name="cannot_connect_bt_address_invalid_">無法連線。藍芽位址無效?</string>
|
||||||
|
<string name="n_a">不適用</string>
|
||||||
|
<string name="pairing">正在與 %s 配對…</string>
|
||||||
|
<string name="message_cannot_pair_no_mac">未輸入 MAC 位址,無法配對。</string>
|
||||||
|
<string name="miband_pairing_using_dummy_userdata">未提供有效的使用者資料,目前使用假定資料。</string>
|
||||||
|
<string name="discovery_connected_devices_hint">請確認您的裝置可以被偵測到。已連接的裝置將無法被偵測。請在 Android 6 以上的裝置啟用位置權限(如:GPS)。請對 Gadgetbridge 停用隱私守衛,因為這可能會導致您的手機崩潰並重新啟動。如果在數分鐘後仍未找到任何裝置,請重新啟動您的手機並再試一次。</string>
|
||||||
|
<string name="discovery_note">備註:</string>
|
||||||
|
<string name="initializing">正在初始化</string>
|
||||||
|
<string name="pref_screen_notification_profile_low_power">低電量警告</string>
|
||||||
|
<string name="control_center_cancel_to_stop_vibration">取消以停止振動。</string>
|
||||||
|
<string name="notif_battery_low_bigtext_last_charge_time">上次充電:%s
|
||||||
|
\n</string>
|
||||||
|
<string name="notif_export_failed_title">匯出資料庫失敗!請檢查您的設定值。</string>
|
||||||
|
<string name="updatefirmwareoperation_update_complete">韌體安裝完成</string>
|
||||||
|
<string name="updatefirmwareoperation_update_complete_rebooting">韌體安裝完成,正在重啟裝置…</string>
|
||||||
|
<string name="chart_steps">步數</string>
|
||||||
|
<string name="calories">卡路里</string>
|
||||||
|
<string name="distance">距離</string>
|
||||||
|
<string name="prefs_find_phone">尋找手機</string>
|
||||||
|
<string name="updatefirmwareoperation_update_in_progress">正在安裝韌體</string>
|
||||||
|
<string name="dbmanagementactivity_import_data_title">您確定要匯入資料?</string>
|
||||||
|
<string name="dbmanagementactivity_error_importing_db">匯入資料庫時發生錯誤:%1$s</string>
|
||||||
|
<string name="dbmanagementactivity_database_successfully_deleted">資料已刪除。</string>
|
||||||
|
<string name="activity_db_management_autoexport_explanation">資料庫的自動匯出位置已設定為:</string>
|
||||||
|
<string name="activity_db_management_autoexport_label">自動匯出</string>
|
||||||
|
<string name="activity_DB_test_export_button">立即執行自動匯出</string>
|
||||||
|
<string name="activity_DB_test_export_message">正在匯出資料庫…</string>
|
||||||
|
<string name="Cancel">取消</string>
|
||||||
|
<string name="Delete">刪除</string>
|
||||||
|
<string name="discovery_yes_pair">配對</string>
|
||||||
|
<string name="activity_type_exercise">運動</string>
|
||||||
|
<string name="kind_gps_cep">GPS 誤差校正</string>
|
||||||
|
<string name="kind_resources">資源包</string>
|
||||||
|
<string name="devicetype_unknown">未知的裝置</string>
|
||||||
|
<string name="devicetype_test">測試用裝置</string>
|
||||||
|
<string name="menuitem_shortcut_alipay">支付寶(捷徑)</string>
|
||||||
|
<string name="menuitem_alarm">鬧鐘</string>
|
||||||
|
<string name="menuitem_alipay">支付寶</string>
|
||||||
|
<string name="title_activity_notification_filter">通知過濾</string>
|
||||||
|
<string name="edittext_notification_filter_words_hint">輸入要進行比對的字,使用換行作為分隔</string>
|
||||||
|
<string name="toast_notification_filter_saved_successfully">通知過濾已儲存</string>
|
||||||
|
<string name="filter_mode_none">不過濾</string>
|
||||||
|
<string name="filter_mode_whitelist">在包含這些字時顯示</string>
|
||||||
|
<string name="filter_mode_blacklist">在包含這些字時隱藏</string>
|
||||||
|
<string name="filter_submode_at_least_one">部份符合</string>
|
||||||
|
<string name="filter_submode_all">完全符合</string>
|
||||||
|
<string name="toast_notification_filter_words_empty_hint">請至少輸入一個字</string>
|
||||||
|
<string name="filter_mode">過濾模式</string>
|
||||||
|
<string name="mode_configuration">模式設定</string>
|
||||||
|
<string name="add_widget">新增小工具</string>
|
||||||
|
<string name="alarm_snooze">貪睡</string>
|
||||||
|
<string name="pref_title_allow_high_mtu">允許較高的 MTU 值</string>
|
||||||
|
<string name="pref_summary_allow_high_mtu">提高傳送速度,但可能無法在某些 Android 裝置上使用。</string>
|
||||||
|
<string name="pref_summary_sync_calendar">啟用日曆事件通知,即便在未連線時</string>
|
||||||
|
<string name="pref_title_sync_caldendar">同步日曆事件</string>
|
||||||
|
<string name="hr_widget_heart_rate">心率</string>
|
||||||
|
<string name="hr_widget_steps">步數</string>
|
||||||
|
<string name="hr_widget_date">日期</string>
|
||||||
|
<string name="hr_widget_battery">電量</string>
|
||||||
|
<string name="hr_widget_weather">天氣</string>
|
||||||
|
<string name="find_lost_device_you_found_it">找到了!</string>
|
||||||
|
<string name="find_my_phone_notification">尋找我的手機</string>
|
||||||
</resources>
|
</resources>
|
@ -186,6 +186,9 @@
|
|||||||
<string name="pref_summary_allow_high_mtu">Increases transfer speed, but might not work on some Android devices.</string>
|
<string name="pref_summary_allow_high_mtu">Increases transfer speed, but might not work on some Android devices.</string>
|
||||||
<string name="pref_summary_sync_calendar">Enables calendar alerts, even when disconnected</string>
|
<string name="pref_summary_sync_calendar">Enables calendar alerts, even when disconnected</string>
|
||||||
<string name="pref_title_sync_caldendar">Sync calendar events</string>
|
<string name="pref_title_sync_caldendar">Sync calendar events</string>
|
||||||
|
<string name="pref_summary_relax_firmware_checks">Relax firmware checks</string>
|
||||||
|
<string name="pref_title_relax_firmware_checks">Enable this if you want to flash a firmware not intended for you device (at your own risk)</string>
|
||||||
|
<string name="pref_title_vibration_strength">Vibration strength</string>
|
||||||
<string name="pref_display_add_device_fab">Connect new device button</string>
|
<string name="pref_display_add_device_fab">Connect new device button</string>
|
||||||
<string name="pref_display_add_device_fab_on">Always visible</string>
|
<string name="pref_display_add_device_fab_on">Always visible</string>
|
||||||
<string name="pref_display_add_device_fab_off">Visible only if no device is added</string>
|
<string name="pref_display_add_device_fab_off">Visible only if no device is added</string>
|
||||||
@ -678,6 +681,7 @@
|
|||||||
<string name="devicetype_amazfit_cor">Amazfit Cor</string>
|
<string name="devicetype_amazfit_cor">Amazfit Cor</string>
|
||||||
<string name="devicetype_amazfit_cor2">Amazfit Cor 2</string>
|
<string name="devicetype_amazfit_cor2">Amazfit Cor 2</string>
|
||||||
<string name="devicetype_amazfit_gtr">Amazfit GTR</string>
|
<string name="devicetype_amazfit_gtr">Amazfit GTR</string>
|
||||||
|
<string name="devicetype_amazfit_bips">Amazfit Bip S</string>
|
||||||
<string name="devicetype_vibratissimo">Vibratissimo</string>
|
<string name="devicetype_vibratissimo">Vibratissimo</string>
|
||||||
<string name="devicetype_liveview">LiveView</string>
|
<string name="devicetype_liveview">LiveView</string>
|
||||||
<string name="devicetype_hplus">HPlus</string>
|
<string name="devicetype_hplus">HPlus</string>
|
||||||
|
@ -1,5 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<changelog>
|
<changelog>
|
||||||
|
<release version="0.43.0" versioncode="169">
|
||||||
|
<change>Initial support for Fossil Hybrid HR (needs complicated key extraction, read wiki)</change>
|
||||||
|
<change>Fossil: Allow switching off the Q Icon and use the default Gadgetbridge icon</change>
|
||||||
|
<change>Fix VoIP call handling during DND</change>
|
||||||
|
<change>Fix find-my-phone for Android 10</change>
|
||||||
|
<change>Huami: Fix crash when calendar event desctription or title was null</change>
|
||||||
|
<change>Huami: Igore all-day events when syncing calendar events</change>
|
||||||
|
</release>
|
||||||
<release version="0.42.1" versioncode="168">
|
<release version="0.42.1" versioncode="168">
|
||||||
<change>Fix accepting/rejecting calls on Android 9</change>
|
<change>Fix accepting/rejecting calls on Android 9</change>
|
||||||
<change>Mi Band 3/4, Amazfit Bip/Cor/GTS/GTR: Option to sync calender events as reminder</change>
|
<change>Mi Band 3/4, Amazfit Bip/Cor/GTS/GTR: Option to sync calender events as reminder</change>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="weatherApp"
|
android:defaultValue="weatherApp"
|
||||||
android:entries="@array/pref_hybridhr_buttonfunctions"
|
android:entries="@array/pref_hybridhr_buttonfunctions"
|
||||||
@ -26,4 +27,11 @@
|
|||||||
android:key="force_white_color_scheme"
|
android:key="force_white_color_scheme"
|
||||||
android:summary="@string/pref_summary_force_white_color_scheme"
|
android:summary="@string/pref_summary_force_white_color_scheme"
|
||||||
android:title="@string/pref_title_force_white_color_scheme" />
|
android:title="@string/pref_title_force_white_color_scheme" />
|
||||||
|
<SeekBarPreference
|
||||||
|
android:defaultValue="2"
|
||||||
|
android:key="@string/pref_title_vibration_strength"
|
||||||
|
android:max="3"
|
||||||
|
android:title="@string/pref_title_vibration_strength"
|
||||||
|
app:showSeekBarValue="true" />
|
||||||
|
|
||||||
</androidx.preference.PreferenceScreen>
|
</androidx.preference.PreferenceScreen>
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="relax_firmware_checks"
|
||||||
|
android:summary="@string/pref_summary_relax_firmware_checks"
|
||||||
|
android:title="@string/pref_title_relax_firmware_checks" />
|
||||||
|
</androidx.preference.PreferenceScreen>
|
6
fastlane/metadata/android/en-US/changelogs/169.txt
Normal file
6
fastlane/metadata/android/en-US/changelogs/169.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
* Initial support for Fossil Hybrid HR (needs complicated key extraction, read wiki)
|
||||||
|
* Fossil: Allow switching off the Q Icon and use the default Gadgetbridge icon
|
||||||
|
* Fix VoIP call handling during DND
|
||||||
|
* Fix find-my-phone for Android 10
|
||||||
|
* Huami: Fix crash when calendar event desctription or title was null
|
||||||
|
* Huami: Igore all-day events when syncing calendar events
|
Loading…
Reference in New Issue
Block a user