1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-28 21:06:50 +01:00

Merge branch 'master' into bip-wip

This commit is contained in:
Andreas Shimokawa 2017-11-11 00:08:19 +01:00
commit 2ccebe07f5
33 changed files with 423 additions and 23 deletions

View File

@ -1,5 +1,10 @@
### Changelog
#### Version 0.22.3
* Amazfit Bip: Allow flashing watchfaces
* Amazfit Cor: Fix flashing new .res files
* Mi Band 2/HRX/Bip/Cor: Try to fix stuck activity sync
#### Version 0.22.2
* Charts: Add setting to disable swiping charts left/right and some UI changes
* Pebble: Use the configured unit system also for system weather app

View File

@ -18,7 +18,7 @@ android {
targetCompatibility JavaVersion.VERSION_1_7
}
compileSdkVersion 25
buildToolsVersion '25.0.2'
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "nodomain.freeyourgadget.gadgetbridge"
@ -26,8 +26,8 @@ android {
targetSdkVersion 25
// note: always bump BOTH versionCode and versionName!
versionName "0.22.2"
versionCode 110
versionName "0.22.3"
versionCode 111
vectorDrawables.useSupportLibrary = true
}
buildTypes {

View File

@ -83,6 +83,8 @@ public interface EventHandler {
void onEnableHeartRateSleepSupport(boolean enable);
void onSetHeartRateMeasurementInterval(int seconds);
void onAddCalendarEvent(CalendarEventSpec calendarEventSpec);
void onDeleteCalendarEvent(byte type, long id);

View File

@ -202,6 +202,8 @@ public class MiBand2Service {
public static final byte[] COMMAND_ENABLE_HR_SLEEP_MEASUREMENT = new byte[]{0x15, 0x00, 0x01};
public static final byte[] COMMAND_DISABLE_HR_SLEEP_MEASUREMENT = new byte[]{0x15, 0x00, 0x00};
public static final byte COMMAND_SET_PERIODIC_HR_MEASUREMENT_INTERVAL = 0x14;
public static final byte[] COMMAND_TEXT_NOTIFICATION = new byte[] {0x05, 0x01};
static {

View File

@ -84,6 +84,15 @@ public class MiBandPreferencesActivity extends AbstractSettingsActivity {
}
});
final Preference heartrateMeasurementInterval = findPreference("heartrate_measurement_interval");
heartrateMeasurementInterval.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
GBApplication.deviceService().onSetHeartRateMeasurementInterval(Integer.parseInt((String) newVal));
return true;
}
});
final Preference goalNotification = findPreference(PREF_MI2_GOAL_NOTIFICATION);
goalNotification.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override

View File

@ -322,6 +322,13 @@ public class GBDeviceService implements DeviceService {
invokeService(intent);
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
Intent intent = createIntent().setAction(ACTION_SET_HEARTRATE_MEASUREMENT_INTERVAL)
.putExtra(EXTRA_INTERVAL_SECONDS, seconds);
invokeService(intent);
}
@Override
public void onEnableRealtimeHeartRateMeasurement(boolean enable) {
Intent intent = createIntent().setAction(ACTION_ENABLE_REALTIME_HEARTRATE_MEASUREMENT)

View File

@ -58,6 +58,7 @@ public interface DeviceService extends EventHandler {
String ACTION_REALTIME_SAMPLES = PREFIX + ".action.realtime_samples";
String ACTION_ENABLE_REALTIME_HEARTRATE_MEASUREMENT = PREFIX + ".action.realtime_hr_measurement";
String ACTION_ENABLE_HEARTRATE_SLEEP_SUPPORT = PREFIX + ".action.enable_heartrate_sleep_support";
String ACTION_SET_HEARTRATE_MEASUREMENT_INTERVAL = PREFIX + ".action.set_heartrate_measurement_intervarl";
String ACTION_HEARTRATE_MEASUREMENT = PREFIX + ".action.hr_measurement";
String ACTION_ADD_CALENDAREVENT = PREFIX + ".action.add_calendarevent";
String ACTION_DELETE_CALENDAREVENT = PREFIX + ".action.delete_calendarevent";
@ -101,6 +102,7 @@ public interface DeviceService extends EventHandler {
String EXTRA_ALARMS = "alarms";
String EXTRA_CONNECT_FIRST_TIME = "connect_first_time";
String EXTRA_BOOLEAN_ENABLE = "enable_realtime_steps";
String EXTRA_INTERVAL_SECONDS = "interval_seconds";
String EXTRA_WEATHER_TIMESTAMP = "weather_timestamp";
String EXTRA_WEATHER_LOCATION = "weather_location";

View File

@ -100,6 +100,7 @@ import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_SE
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_SETTIME;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_SET_ALARMS;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_SET_CONSTANT_VIBRATION;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_SET_HEARTRATE_MEASUREMENT_INTERVAL;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_START;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_STARTAPP;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_TEST_NEW_FUNCTION;
@ -124,6 +125,7 @@ import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_CAN
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_CONFIG;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_CONNECT_FIRST_TIME;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_FIND_START;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_INTERVAL_SECONDS;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_MUSIC_ALBUM;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_MUSIC_ARTIST;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_MUSIC_DURATION;
@ -518,6 +520,11 @@ public class DeviceCommunicationService extends Service implements SharedPrefere
mDeviceSupport.onEnableHeartRateSleepSupport(enable);
break;
}
case ACTION_SET_HEARTRATE_MEASUREMENT_INTERVAL: {
Integer seconds = intent.getIntExtra(EXTRA_INTERVAL_SECONDS, 0);
mDeviceSupport.onSetHeartRateMeasurementInterval(seconds);
break;
}
case ACTION_ENABLE_REALTIME_HEARTRATE_MEASUREMENT: {
boolean enable = intent.getBooleanExtra(EXTRA_BOOLEAN_ENABLE, false);
mDeviceSupport.onEnableRealtimeHeartRateMeasurement(enable);

View File

@ -313,12 +313,20 @@ public class ServiceDeviceSupport implements DeviceSupport {
@Override
public void onEnableHeartRateSleepSupport(boolean enable) {
if (checkBusy("enable heartrate sleep support: " + enable)) {
if (checkBusy("enable heart rate sleep support: " + enable)) {
return;
}
delegate.onEnableHeartRateSleepSupport(enable);
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
if (checkBusy("set heart rate measurement interval: " + seconds + "s")) {
return;
}
delegate.onSetHeartRateMeasurementInterval(seconds);
}
@Override
public void onEnableRealtimeHeartRateMeasurement(boolean enable) {
if (checkBusy("enable realtime heart rate measurement: " + enable)) {

View File

@ -62,12 +62,14 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo {
crcToVersion.put(3462, "0.0.8.98");
crcToVersion.put(55420, "0.0.9.14");
crcToVersion.put(39465, "0.0.9.26");
crcToVersion.put(27394, "0.0.9.40");
// resources
crcToVersion.put(12586, "RES 0.0.8.74");
crcToVersion.put(34068, "RES 0.0.8.88");
crcToVersion.put(59839, "RES 0.0.8.96-98");
crcToVersion.put(50401, "RES 0.0.9.14-26");
crcToVersion.put(22051, "RES 0.0.9.40");
// gps
crcToVersion.put(61520, "GPS 9367,8f79a91,0,0,");
@ -99,6 +101,9 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo {
// TODO: this is certainly not a correct validation, but it works for now
return HuamiFirmwareType.FIRMWARE;
}
if (ArrayUtils.startsWith(bytes, WATCHFACE_HEADER)) {
return HuamiFirmwareType.WATCHFACE;
}
return HuamiFirmwareType.INVALID;
}

View File

@ -635,6 +635,11 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport {
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
}
@Override
public void onAddCalendarEvent(CalendarEventSpec calendarEventSpec) {

View File

@ -30,11 +30,12 @@ public abstract class HuamiFirmwareInfo {
0x48, 0x4d, 0x52, 0x45, 0x53
};
protected static final byte[] WATCHFACE_HEADER = new byte[]{
0x48, 0x4d, 0x44, 0x49, 0x41, 0x4c
};
protected static final byte[] FT_HEADER = new byte[]{ // HMZK font file (*.ft, *.ft.xx)
0x48,
0x4d,
0x5a,
0x4b
0x48, 0x4d, 0x5a, 0x4b
};
private HuamiFirmwareType firmwareType = HuamiFirmwareType.FIRMWARE;

View File

@ -20,9 +20,11 @@ public enum HuamiFirmwareType {
FIRMWARE((byte) 0),
FONT((byte) 1),
RES((byte) 2),
RES_NEW((byte)130),
GPS((byte) 3),
GPS_CEP((byte) 4),
GPS_ALMANAC((byte)5),
WATCHFACE((byte)8),
INVALID(Byte.MIN_VALUE);
private final byte value;

View File

@ -60,7 +60,7 @@ public class AmazfitCorFirmwareInfo extends HuamiFirmwareInfo {
}
return HuamiFirmwareType.RES;
} else if (ArrayUtils.equals(bytes, RES_HEADER, NEW_RES_HEADER_OFFSET)) {
return HuamiFirmwareType.RES;
return HuamiFirmwareType.RES_NEW;
} else if (ArrayUtils.equals(bytes, FW_HEADER, FW_HEADER_OFFSET)) {
// TODO: this is certainly not a correct validation, but it works for now
return HuamiFirmwareType.FIRMWARE;

View File

@ -429,6 +429,11 @@ public class TeclastH30Support extends AbstractBTLEDeviceSupport {
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
}
@Override
public void onAddCalendarEvent(CalendarEventSpec calendarEventSpec) {

View File

@ -74,6 +74,11 @@ public class LiveviewSupport extends AbstractSerialDeviceSupport {
//nothing to do ATM
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
}
@Override
public synchronized LiveviewIoThread getDeviceIOThread() {
return (LiveviewIoThread) super.getDeviceIOThread();

View File

@ -442,6 +442,11 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
}
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
}
@Override
public void onAddCalendarEvent(CalendarEventSpec calendarEventSpec) {
// not supported

View File

@ -482,6 +482,20 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
}
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
try {
int minuteInterval = seconds / 60;
minuteInterval = Math.min(minuteInterval, 120);
minuteInterval = Math.max(0,minuteInterval);
TransactionBuilder builder = performInitialized("set heart rate interval to: " + minuteInterval + " minutes");
setHeartrateMeasurementInterval(builder, minuteInterval);
builder.queue(getQueue());
} catch (IOException e) {
GB.toast(getContext(), "Error toggling heart rate sleep support: " + e.getLocalizedMessage(), Toast.LENGTH_LONG, GB.ERROR);
}
}
@Override
public void onAddCalendarEvent(CalendarEventSpec calendarEventSpec) {
// not supported
@ -513,6 +527,16 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
return this;
}
private MiBand2Support setHeartrateMeasurementInterval(TransactionBuilder builder, int minutes) {
if (characteristicHRControlPoint != null) {
builder.notify(characteristicHRControlPoint, true);
LOG.info("Setting heart rate measurement interval to " + minutes + " minutes");
builder.write(characteristicHRControlPoint, new byte[]{MiBand2Service.COMMAND_SET_PERIODIC_HR_MEASUREMENT_INTERVAL, (byte) minutes});
builder.notify(characteristicHRControlPoint, false); // TODO: this should actually be in some kind of finally-block in the queue. It should also be sent asynchronously after the notifications have completely arrived and processed.
}
return this;
}
private void performDefaultNotification(String task, SimpleNotification simpleNotification, short repeat, BtLEAction extraAction) {
try {
TransactionBuilder builder = performInitialized(task);
@ -1551,6 +1575,11 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
setGoalNotification(builder);
setInactivityWarnings(builder);
setHeartrateSleepSupport(builder);
setHeartrateMeasurementInterval(builder, getHeartRateMeasurementInterval());
}
private int getHeartRateMeasurementInterval() {
return GBApplication.getPrefs().getInt("heartrate_measurement_interval", 0) / 60;
}
public HuamiFWHelper createFWHelper(Uri uri, Context context) throws IOException {

View File

@ -350,6 +350,11 @@ public class No1F1Support extends AbstractBTLEDeviceSupport {
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
}
@Override
public void onAddCalendarEvent(CalendarEventSpec calendarEventSpec) {

View File

@ -132,6 +132,11 @@ public class PebbleSupport extends AbstractSerialDeviceSupport {
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
}
@Override
public synchronized PebbleIoThread getDeviceIOThread() {
return (PebbleIoThread) super.getDeviceIOThread();

View File

@ -253,6 +253,11 @@ public class VibratissimoSupport extends AbstractBTLEDeviceSupport {
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
}
@Override
public void onAddCalendarEvent(CalendarEventSpec calendarEventSpec) {

View File

@ -0,0 +1,214 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources><string name="app_name">Gadgetbridge</string>
<string name="title_activity_controlcenter">Gadgetbridge</string>
<string name="action_settings">Paràmetres</string>
<string name="action_debug">Depuració</string>
<string name="action_quit">Sortir</string>
<string name="action_donate">Donació</string>
<string name="controlcenter_fetch_activity_data">Sincronitza</string>
<string name="controlcenter_start_sleepmonitor">Seguiment del son (ALPHA)</string>
<string name="controlcenter_find_device">Cercar dispositiu perdut</string>
<string name="controlcenter_take_screenshot">Fer captura de pantalla</string>
<string name="controlcenter_connect">Connectar</string>
<string name="controlcenter_disconnect">Desconnecta</string>
<string name="controlcenter_delete_device">Esborra dispositiu</string>
<string name="controlcenter_delete_device_name">Esborrar %1$s</string>
<string name="controlcenter_delete_device_dialogmessage">Aquesta acció esborrarà el dispositiu i tota la seva informació associada!</string>
<string name="controlcenter_navigation_drawer_open">Obrir el calaix de navegació</string>
<string name="controlcenter_navigation_drawer_close">Tancar el calaix de navegació</string>
<string name="controlcenter_snackbar_need_longpress">Mantenir premut la icona per desconnecta</string>
<string name="controlcenter_snackbar_disconnecting">Desconnectant</string>
<string name="controlcenter_snackbar_connecting">Connectant</string>
<string name="controlcenter_snackbar_requested_screenshot">Fer captura de pantalla del dispositiu</string>
<string name="title_activity_debug">Depuració</string>
<string name="title_activity_appmanager">Gestor de l\'aplicació</string>
<string name="appmanager_cached_watchapps_watchfaces">Aplicació en memòria cau</string>
<string name="appmanager_installed_watchapps">Aplicacions instal·lades</string>
<string name="appmanager_installed_watchfaces">Esferes instal·lades</string>
<string name="appmananger_app_delete">Esborrar</string>
<string name="appmananger_app_delete_cache">Esborra i treu de la memòria cau</string>
<string name="appmananger_app_reinstall">Reinstal·lar</string>
<string name="appmanager_app_openinstore">Cerca a Pebble Appstore</string>
<string name="appmanager_health_activate">Activar</string>
<string name="appmanager_health_deactivate">Desactivar</string>
<string name="appmanager_hrm_activate">Activar seguiment d\'activitat cardíaca</string>
<string name="appmanager_hrm_deactivate">Desactivar seguiment d\'activitat cardíaca</string>
<string name="appmanager_weather_activate">Activar l\'aplicació del temps del sistema</string>
<string name="appmanager_weather_deactivate">Desactivar l\'aplicació del temps del sistema</string>
<string name="appmanager_weather_install_provider">Instal·lar l\'aplicació del temps del sistema</string>
<string name="app_configure">Configurar</string>
<string name="app_move_to_top">Moure a la part superior</string>
<string name="title_activity_appblacklist">Llista negra de notificacions</string>
<string name="title_activity_calblacklist">Calendaris en llista negra</string>
<string name="title_activity_fw_app_insaller">Instal·lador de FW/App</string>
<string name="fw_upgrade_notice">Estàs a punt d\'instal·lar el firmware %s en lloc del que està a la teva MiBand.</string>
<string name="fw_upgrade_notice_amazfitbip">Estàs a punt d\'instal·lar el firmware %s en el teu Amazfit Bip.
\n
\nSi us plau, assegura\'t d\'instal·lar el firmware .gps, després l\'arxiu .res, i finalment el binari .fw. El teu rellotge reiniciarà després d\'instal·lar l\'arxiu .fw.
\n
\nNota: no has d\'instal·lar .res i .gps si aquests arxius són els mateixos que els prèviament instal·lats.
\n
\nPROCEDEIX SOTA LA TEVA PRÒPIA RESPONSABILITAT!</string>
<string name="fw_upgrade_notice_amazfitcor">Estàs a punt d\'instal·lar el firmware %s en el teu Amazfit Cor.
\n
\nSi us plau, assegura\'t d\'instal·lar el firmware .gps, després l\'arxiu .res, i finalment el binari .fw. El teu rellotge reiniciarà després d\'instal·lar l\'arxiu .fw.
\n
\nNota: no has d\'instal·lar .res i .gps si aquests arxius són els mateixos que els prèviament instal·lats.
\n
\nNO PROBAT, PODEU TRENCAR EL VOSTRE DISPOSITIU. PROCEDEIX SOTA LA TEVA PRÒPIA RESPONSABILITAT!</string>
<string name="fw_multi_upgrade_notice">Estàs a punt d\'instal·lar els firmwares %1$s i %2$s en lloc dels de la vostra MiBand.</string>
<string name="miband_firmware_known">Aquest firmware ha estat provat i se sap que és compatible amb Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Aquest firmware no ha estat provat i pot ser que no sigui compatible amb Gadgetbridge.
\n
\nNO es recomana la instal·lació en el teu MiBand!</string>
<string name="miband_firmware_suggest_whitelist">Si tot i així vols seguir i les coses continuen funcionant correctament, si us plau indica\'ls als desenvolupadors de Gadgetbridge que aquesta versió del firmware funciona bé: %s</string>
<string name="title_activity_settings">Paràmetres</string>
<string name="pref_header_general">Paràmetres generals</string>
<string name="pref_title_general_autoconnectonbluetooth">Connectar-se al dispositiu quan el Bluetooth estigui activat</string>
<string name="pref_title_general_autostartonboot">Inicia automàticament</string>
<string name="pref_title_general_autocreonnect">Reconnecta automàticament</string>
<string name="pref_title_audo_player">Reproductor preferit</string>
<string name="pref_default">Per defecte</string>
<string name="pref_title_charts_swipe">Permetre lliscar cap a l\'esquerra/dreta en els gràfics d\'activitat</string>
<string name="pref_header_datetime">Data i Hora</string>
<string name="pref_title_datetime_syctimeonconnect">Sincronitza l\'hora</string>
<string name="pref_summary_datetime_syctimeonconnect">Sincronitza l\'hora en el dispositiu quan es connecti o es canviï l\'hora o zona horària en Android</string>
<string name="pref_title_theme">Aparença</string>
<string name="pref_theme_light">Clar</string>
<string name="pref_theme_dark">Fosc</string>
<string name="pref_title_language">Idioma</string>
<string name="pref_title_minimize_priority">Oculta la notificació de Gadgetbridge</string>
<string name="pref_summary_minimize_priority_off">La icona a la barra d\'estat i la notificació a la pantalla de bloqueig estan actius</string>
<string name="pref_summary_minimize_priority_on">La icona a la barra d\'estat i la notificació a la pantalla de bloqueig estan ocults</string>
<string name="pref_header_notifications">Notificacions</string>
<string name="pref_title_notifications_repetitions">Repeticions</string>
<string name="pref_title_notifications_call">Trucades telefòniques</string>
<string name="pref_title_notifications_sms">SMS</string>
<string name="pref_title_notifications_pebblemsg">Missatges de Pebble</string>
<string name="pref_summary_notifications_pebblemsg">Suport per a aplicacions que envien notificacions a Pebble a través de PebbleKit.</string>
<string name="pref_title_notifications_generic">Suport per a notificacions genèriques</string>
<string name="pref_title_whenscreenon">... també amb la pantalla encesa</string>
<string name="pref_title_notification_filter">No molestar</string>
<string name="pref_summary_notification_filter">Deixar d\'enviar notificacions no desitjades basant-se en el mode No Molestar</string>
<string name="pref_title_transliteration">Transcripció</string>
<string name="pref_summary_transliteration">Utilitzar en cas que el teu dispositiu no suporti la font del teu idioma</string>
<string name="always">Sempre</string>
<string name="when_screen_off">Quan la pantalla està apagada</string>
<string name="never">Mai</string>
<string name="pref_header_privacy">Privacitat</string>
<string name="pref_title_call_privacy_mode">Mode de privacitat de trucada</string>
<string name="pref_call_privacy_mode_off">Mostrar nom i número</string>
<string name="pref_call_privacy_mode_name">Oculta nom però mostrar número</string>
<string name="pref_call_privacy_mode_number">Ocultar número però mostrar nom</string>
<string name="pref_call_privacy_mode_complete">Ocultar nom i número</string>
<string name="pref_blacklist">Llista negra d\'aplicacions</string>
<string name="pref_blacklist_calendars">Llista negra de calendaris</string>
<string name="pref_header_cannned_messages">Missatges predeterminants</string>
<string name="pref_title_canned_replies">Respostes</string>
<string name="pref_title_canned_reply_suffix">Sufixe habitual</string>
<string name="pref_title_canned_messages_dismisscall">Rebutjar trucada</string>
<string name="pref_title_canned_messages_set">Actualitza a Pebble</string>
<string name="pref_header_development">Opcions de desenvolupadors</string>
<string name="pref_title_development_miaddr">Direcció de MiBand</string>
<string name="pref_title_pebble_settings">Paràmetres de Pebble</string>
<string name="pref_header_activitytrackers">Seguiment d\'activitat</string>
<string name="pref_title_pebble_activitytracker">Seguiment d\'activitat preferit</string>
<string name="pref_title_pebble_sync_health">Sincronitzar amb Pebble Health</string>
<string name="pref_title_pebble_sync_misfit">Sincronitzar amb Misfit</string>
<string name="pref_title_pebble_sync_morpheuz">Sincronitzar amb Morpheuz</string>
<string name="pref_title_enable_outgoing_call">Suport per trucades sortints</string>
<string name="pref_summary_enable_outgoing_call">Desactivar això evitarà que Pebble 2/LE vibri en trucades sortints</string>
<string name="pref_title_enable_pebblekit">Permetre l\'accés a aplicacions Android de tercers</string>
<string name="pref_summary_enable_pebblekit">Permetre el suport experimental per aplicacions Android que fan servir PebbleKit</string>
<string name="pref_header_pebble_timeline">Timeline Pebble</string>
<string name="pref_title_sunrise_sunset">Sortida i posta de sol</string>
<string name="pref_summary_sunrise_sunset">Envia les hores de sortida i posta de sol basant-se en la localització a la timeline del Pebble</string>
<string name="pref_title_enable_calendar_sync">Sincronitzar calendari</string>
<string name="pref_summary_enable_calendar_sync">Envia els esdeveniments del calendari a la línia de temps</string>
<string name="pref_title_autoremove_notifications">Esborra automàticament les notificacions rebutjades</string>
<string name="pref_summary_autoremove_notifications">Les notificacions s\'esborren automàticament de Pebble quan es rebutgen a Android</string>
<string name="pref_title_pebble_privacy_mode">Mode privat</string>
<string name="pref_pebble_privacy_mode_off">Notificació normal</string>
<string name="pref_pebble_privacy_mode_content">Desplaça la notificació fora de la pantalla</string>
<string name="pref_pebble_privacy_mode_complete">Mostra només la icona de notificació</string>
<string name="pref_header_location">Localització</string>
<string name="pref_title_location_aquire">Obtenir localització</string>
<string name="pref_title_location_latitude">Latitud</string>
<string name="pref_title_location_longitude">Longitud</string>
<string name="pref_title_location_keep_uptodate">Mantenir la localització actualitzada</string>
<string name="pref_summary_location_keep_uptodate">Intentar aconseguir la localització en marxa, fer servir la desada com a alternatiu</string>
<string name="toast_enable_networklocationprovider">Si us plau, activa la localització per xarxa</string>
<string name="toast_aqurired_networklocation">Localització trobada</string>
<string name="pref_title_pebble_forceprotocol">Forçar el protocol de notificació</string>
<string name="pref_summary_pebble_forceprotocol">Aquesta opció força l\'ús del darrer protocol de notificació en funció de la versió del firmware. ACTIVA-HO NOMÉS SI SAPS EL QUE ESTÀS FENT!</string>
<string name="pref_title_pebble_forceuntested">Activar característiques no provades</string>
<string name="pref_summary_pebble_forceuntested">Activar les característiques que no han estat provades. ACTIVA-HO NOMÉS SI SAPS EL QUE ESTÀS FENT!</string>
<string name="pref_title_pebble_forcele">Preferir sempre BLE</string>
<string name="pref_summary_pebble_forcele">Utilitza el suport experimental de Pebble LE a tots els Pebble en lloc del Bluetooth clàssic, la qual cosa requereix vincular \"Pebble LE\" si un Pebble no-LI ha estat vinculat abans</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LI límit de GATT MTU</string>
<string name="pref_summary_pebble_mtu_limit">Si el teu Pebble 2/Pebble LE no funciona correctament, prova aquesta opció per limitar l\'MTU (rang vàlid 20-512)</string>
<string name="pref_title_pebble_enable_applogs">Activa els registres de les aplicacions del rellotge</string>
<string name="pref_summary_pebble_enable_applogs">Produirà registres de les apps del rellotge que Gadgetbridge guardarà (necessita reconnexió)</string>
<string name="pref_title_pebble_always_ack_pebblekit">ACK abans d\'hora de PebbleKit</string>
<string name="pref_summary_pebble_always_ack_pebblekit">Permetrà als missatges enviats a apps de tercers ser reconeguts sempre i immediatament</string>
<string name="pref_title_pebble_enable_bgjs">Activa JS en segon pla</string>
<string name="pref_summary_pebble_enable_bgjs">Permet a les pantalles mostrar el temps, informació de bateria, etc.</string>
<string name="pref_title_pebble_reconnect_attempts">Intents de reconnexions</string>
<string name="pref_title_unit_system">Preferències HPlus</string>
<string name="pref_title_timeformat">Format d\'hora</string>
<string name="pref_title_screentime">Temps de pantalla encesa</string>
<string name="prefs_title_all_day_heart_rate">Mesura el ritme cardíac tot el dia</string>
<string name="preferences_hplus_settings">Paràmetres HPlus/Makibes</string>
<string name="not_connected">No connectat</string>
<string name="connecting">Connectant</string>
<string name="connected">Connectat</string>
<string name="unknown_state">Estat desconegut</string>
<string name="_unknown_">(desconegut)</string>
<string name="test">Prova</string>
<string name="test_notification">Prova notificació</string>
<string name="this_is_a_test_notification_from_gadgetbridge">Això és una notificació de prova des de Gadgetbridge</string>
<string name="bluetooth_is_not_supported_">El Bluetooth no està suportat.</string>
<string name="bluetooth_is_disabled_">El Bluetooth està inhabilitat.</string>
<string name="tap_connected_device_for_app_mananger">Fes un toc al dispositiu connectat per a configurar les aplicacions</string>
<string name="tap_connected_device_for_activity">Fes un toc al dispositiu connectat per activitat</string>
<string name="tap_connected_device_for_vibration">Fes un toc al dispositiu per vibració</string>
<string name="tap_a_device_to_connect">Fes un toc a un dispositius per connectar</string>
<string name="cannot_connect_bt_address_invalid_">No és pot connectar. Direcció BT incorrecta?</string>
<string name="gadgetbridge_running">Gadgetbridge funcionant</string>
<string name="installing_binary_d_d">Instal·lat binari $1$d/%2$d</string>
<string name="installation_failed_">La instal·lació ha fallat</string>
<string name="installation_successful">Instal·lació correcta</string>
</resources>

View File

@ -443,4 +443,12 @@
\n
\nNO PROBADO, PUEDE BRICKEAR TU DISPOSITIVO. PROCEDE BAJO TU PROPIA RESPONSABILIDAD !</string>
<string name="amazfitcor_firmware">Firmware Amazfit Cor %1$s</string>
<string name="pref_title_charts_swipe">Permitir deslizar hacia izquierda/derecha en los gráficos de actividad</string>
<string name="preferences_amazfitbip_settings">Ajustes Amazfit Bip</string>
<string name="automatic">Automático</string>
<string name="simplified_chinese">Chino simplificado</string>
<string name="traditional_chinese">Chino tradicional</string>
<string name="english">Inglés</string>
</resources>

View File

@ -447,4 +447,12 @@ NOTE: la base de données sera bien évidement plus grande !</string>
\n
\nNON TESTÉ, PEUT BRICKER L\'APPAREIL. CONTINUEZ À VOS RISQUES !</string>
<string name="amazfitcor_firmware">Micrologiciel Amazfit Cor %1$s</string>
<string name="pref_title_charts_swipe">Permettre le balayage gauche/droite dans les graphiques d\'activité</string>
<string name="preferences_amazfitbip_settings">Paramètres Amazfit Bip</string>
<string name="automatic">Automatique</string>
<string name="simplified_chinese">Chinois simplifié</string>
<string name="traditional_chinese">Chinois traditionnel</string>
<string name="english">Anglais</string>
</resources>

View File

@ -218,7 +218,7 @@
<string name="pairing_in_progress">Asociación en progreso: %1$s (%2$s)</string>
<string name="pairing_already_bonded">Xa asociado con %1$s (%2$s), conectando …</string>
<string name="message_cannot_pair_no_mac">Nengún enderezo MAC fornecido, non é posíbel emparellar.</string>
<string name="preferences_miband_settings">Axustes de MiBand / Bip</string>
<string name="preferences_miband_settings">Axustes de MiBand / Amazfit</string>
<string name="male">Home</string>
<string name="female">Muller</string>
<string name="other">Outro</string>
@ -463,13 +463,13 @@
<string name="_pebble_watch_open_on_phone">Abrir no teléfono</string>
<string name="_pebble_watch_mute">Silenciar</string>
<string name="_pebble_watch_reply">Responder</string>
<string name="fw_upgrade_notice_amazfitbip">Estás a piques de instalar o firmware %s nas veces do que está actualmente no teu Amazfit Bip.
<string name="fw_upgrade_notice_amazfitbip">Estás a piques de instalar o firmware %s no teu Amazfit Bip.
\n
\nPor favor, asegúrate de instalar o firmware .gps, despois o arquivo .res, e finalmente o binario .fw. O teu reloxo reiniciará despois de instalar o arquivo .fw.
\n
\nNota: non tes que instalar .res e .gps se estes arquivos son os mesmos que os previamente instalados.
\n
\nEXPERIMENTAL, PROCEDE BAIXO A TÚA PROPIA RESPONSABILIDADE</string>
\nPROCEDE BAIXO A TÚA PROPIA RESPONSABILIDADE!</string>
<string name="pref_summary_pebble_forcele">Use soporte experimental do Pebble LE nas veces do Bluetooth clásico, require emparellar un \"Pebble LE\" despois de que nengún LE teña sido conectado</string>
<string name="pref_summary_pebble_always_ack_pebblekit">Isto fará que as mensaxes enviadas para apps de terceiros sexan recoñecidas sempre e inmediatamente</string>
@ -488,17 +488,25 @@
\nAs \"watchfaces\" soportadas amosarán a información do clima automáticamente.</string>
<string name="discovery_pair_question">Selecciona Emparellar para emparellar os teus dispositivos. Se isto falla, proba de novo sen emparellar.</string>
<string name="controlcenter_connect">Conectar</string>
<string name="fw_upgrade_notice_amazfitcor">Estás a piques de instalar o firmware %s nas veces do que está actualmente no teu Amazfit Cor.
<string name="fw_upgrade_notice_amazfitcor">Estás a piques de instalar o firmware %s no teu Amazfit Cor.
\n
\nPor favor, asegúrate de instalar o ficheiro .res, e despois diso o binario .fw. O teu reloxo reiniciará despois de instalar o arquivo .fw.
\n
\nNota: non tes que instalar .res se este arquivo é exactamente o mesmo que o previamente instalado.
\n
\nEXPERIMENTAL, PROCEDE BAIXO A TÚA PROPIA RESPONSABILIDADE</string>
\nNON PROBADO, PODERÍA BLOQUEAR O TEU DISPOSITIVO, PROCEDE BAIXO A TÚA PROPIA RESPONSABILIDADE!</string>
<string name="pref_title_pebble_enable_bgjs">Habilitar JS de fondo</string>
<string name="pref_summary_pebble_enable_bgjs">"Permite ás watchfaces amosar o tempo, información de batería, etc."</string>
<string name="amazfitcor_firmware">Firmware do Amazfit Cor %1$s</string>
<string name="activity_web_view">Actividade Vista Web</string>
<string name="pref_title_charts_swipe">Permitir deslizar a esquerda/dereita nas gráficas de actividade</string>
<string name="preferences_amazfitbip_settings">Axustes de Amazfit Bip</string>
<string name="automatic">Automático</string>
<string name="simplified_chinese">Chinés simplificado</string>
<string name="traditional_chinese">Chinés tradicional</string>
<string name="english">Inglés</string>
</resources>

View File

@ -30,10 +30,12 @@
<string name="title_activity_appblacklist">Перелік заблокованих сповіщень</string>
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">Встановлення мікропрограми</string>
<string name="fw_upgrade_notice">Ви збираєтесь встановити мікропрограму %s на заміну поточній Вашого MiBand</string>
<string name="fw_multi_upgrade_notice">Ви збираєтесь встановити мікропрограми %1$s та %2$s на заміну поточній Вашого MiBand</string>
<string name="miband_firmware_known">Ця мікропрограма була перевірена на сумісність із Gadgetbridge</string>
<string name="miband_firmware_unknown_warning">Ця мікропрограма не перевірялася і може бути не сумісною із Gadgetbridge.\n\nНе рекомендується встановлювати її на Ваш MiBand</string>
<string name="fw_upgrade_notice">Ви збираєтесь встановити мікропрограму %s на заміну поточній Вашого MiBand.</string>
<string name="fw_multi_upgrade_notice">Ви збираєтесь встановити мікропрограми %1$s та %2$s на заміну поточній Вашого MiBand.</string>
<string name="miband_firmware_known">Ця мікропрограма була перевірена на сумісність із Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Ця мікропрограма не перевірялася і може бути не сумісною із Gadgetbridge.
\n
\nНе рекомендується встановлювати її на Ваш MiBand!</string>
<string name="miband_firmware_suggest_whitelist">Якщо ж Ви вирішили продовжити та все працює, будь ласка, повідомте про це розробникам, аби відмітити цю версію мікропрограми сумісною: %s</string>
<!--Strings related to Settings-->
<string name="title_activity_settings">Параметри</string>
@ -81,7 +83,7 @@
<string name="pref_title_location_latitude">Широта</string>
<string name="pref_title_location_longitude">Довгота</string>
<string name="pref_title_pebble_forceprotocol">Примусовий протокол сповіщень</string>
<string name="pref_summary_pebble_forceprotocol">Цей параметр примусово вмикає новий протокол сповіщень, який залежить від версії мікропрограми. ВМИКАЙТЕ, ЯКЩО ВИ ЗНАЄТЕ НА ЩО ЙДЕТЕ.</string>
<string name="pref_summary_pebble_forceprotocol">Цей параметр примусово вмикає новий протокол сповіщень, який залежить від версії мікропрограми. ВМИКАЙТЕ, ЯКЩО ВИ ЗНАЄТЕ НА ЩО ЙДЕТЕ!</string>
<string name="pref_title_pebble_forceuntested">Увімкнути не перевірені можливості</string>
<string name="pref_summary_pebble_forceuntested">Увімкнути функції, які ще не перевірені. ВМИКАЙТЕ НА СВІЙ СТРАХ ТА РИЗИК!</string>
<string name="pref_title_pebble_reconnect_attempts">Спроби повторного з\'єднання</string>
@ -151,7 +153,7 @@
<string name="pref_screen_notification_profile_generic_navigation">Навігація</string>
<string name="pref_screen_notification_profile_generic_social">Соціальні мережі</string>
<string name="control_center_find_lost_device">Знайти загублений пристрій</string>
<string name="control_center_cancel_to_stop_vibration">Скасуйте, аби зупинити вібро</string>
<string name="control_center_cancel_to_stop_vibration">Скасуйте, аби зупинити вібрацію.</string>
<string name="title_activity_charts">Ваша активність</string>
<string name="title_activity_set_alarm">Завести Будильник</string>
<string name="controlcenter_start_configure_alarms">Завести будильник</string>
@ -174,7 +176,7 @@
<string name="cannot_connect">Неможливо з\'єднатися: %1$s</string>
<string name="installer_activity_unable_to_find_handler">Не вдалося знайти обробник подій для встановлення даного файлу.</string>
<string name="pbw_install_handler_unable_to_install">Не вдалося встановити даний файл: %1$s</string>
<string name="pbw_install_handler_hw_revision_mismatch">Не вдалося встановити дану мікропрограму: вона не відповідає версії пристрою Вашого Pebble</string>
<string name="pbw_install_handler_hw_revision_mismatch">Не вдалося встановити дану мікропрограму: вона не відповідає версії пристрою Вашого Pebble.</string>
<string name="installer_activity_wait_while_determining_status">Будь ласка, зачекайте, триває визначення стану встановлення…</string>
<string name="notif_battery_low_title">Низький заряд пристрою!</string>
<string name="notif_battery_low_percent">%1$s заряду лишилось: %2$s%%</string>

View File

@ -216,4 +216,22 @@
<item>2</item>
</string-array>
<string-array name="prefs_heartrate_measurement_interval">
<item name="0">@string/off</item>
<item name="60">@string/interval_one_minute</item>
<item name="300">@string/interval_five_minutes</item>
<item name="600">@string/interval_ten_minutes</item>
<item name="1800">@string/interval_thirty_minutes</item>
<item name="3600">@string/interval_one_hour</item>
</string-array>
<string-array name="prefs_heartrate_measurement_interval_values">
<item>0</item>
<item>60</item>
<item>300</item>
<item>600</item>
<item>1800</item>
<item>3600</item>
</string-array>
</resources>

View File

@ -268,6 +268,13 @@
<string name="pref_screen_notification_profile_generic_navigation">Navigation</string>
<string name="pref_screen_notification_profile_generic_social">Social network</string>
<string name="prefs_title_heartrate_measurement_interval">Whole day HR measurement</string>
<string name="interval_one_minute">once a minute</string>
<string name="interval_five_minutes">every 5 minutes</string>
<string name="interval_ten_minutes">every 10 minutes</string>
<string name="interval_thirty_minutes">every 30 minutes</string>
<string name="interval_one_hour">once an hour</string>
<string name="stats_title">Speed zones</string>
<string name="stats_x_axis_label">Total minutes</string>
<string name="stats_y_axis_label">Steps per minute</string>

View File

@ -1,5 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<changelog>
<release version="0.22.3" versioncode="111">
<change>Amazfit Bip: Allow flashing watchfaces</change>
<change>Amazfit Cor: Fix flashing new .res files</change>
<change>Mi Band 2/HRX/Bip/Cor: Try to fix stuck activity sync</change>
</release>
<release version="0.22.2" versioncode="110">
<change>Charts: Add setting to disable swiping charts left/right and some UI changes</change>
<change>Pebble: Use the configured unit system also for system weather app</change>

View File

@ -98,7 +98,15 @@
android:key="mi_hr_sleep_detection"
android:title="@string/miband_prefs_hr_sleep_detection" />
<EditTextPreference
<ListPreference
android:defaultValue="0"
android:entries="@array/prefs_heartrate_measurement_interval"
android:entryValues="@array/prefs_heartrate_measurement_interval_values"
android:key="heartrate_measurement_interval"
android:summary="%s"
android:title="@string/prefs_title_heartrate_measurement_interval" />
<EditTextPreference
android:defaultValue="0"
android:inputType="numberSigned"
android:key="mi_device_time_offset_hours"

View File

@ -154,6 +154,11 @@ class TestDeviceSupport extends AbstractDeviceSupport {
}
@Override
public void onSetHeartRateMeasurementInterval(int seconds) {
}
@Override
public void onAddCalendarEvent(CalendarEventSpec calendarEventSpec) {

View File

@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.android.tools.build:gradle:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

View File

@ -0,0 +1,3 @@
* Amazfit Bip: Allow flashing watchfaces
* Amazfit Cor: Fix flashing new .res files
* Mi Band 2/HRX/Bip/Cor: Try to fix stuck activity sync