1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-09-27 08:47:03 +02:00

Merge remote-tracking branch 'origin/master'

This commit is contained in:
Daniel Dakhno 2020-11-29 17:10:19 +01:00
commit 66d3cdcc5c
19 changed files with 209 additions and 50 deletions

View File

@ -1,9 +1,16 @@
### Changelog
#### 0.50.0 (WIP)
#### 0.50.0
* Initial support for Casio GBX-100
* Mi/Amazfit Band 5: Support watchface installation
* Mi Band 5: Add missing NFC menu item
* Casio GB-5600B/GB-6900B: Add configurable disconnect notification
* Casio: Add support for synchronizing profile settings
* Fossil Hybrid HR: Keep widget values after widget reload
* Allow sorting and disabling charts/statistics tabs in per-device settings
* Improve Sports Activities dashboard and Filter
* Bug fixes for notification removal
* Allow to clear activity labels
#### 0.49.0
* Initial support for Amazfit Bip S Lite

View File

@ -66,7 +66,11 @@ import java.util.concurrent.TimeUnit;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummary;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.Device;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryItems;
@ -164,7 +168,7 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
currentItem = newItem;
makeSummaryHeader(newItem);
makeSummaryContent(newItem);
activitySummariesChartFragment.setDateAndGetData(gbDevice, currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
activitySummariesChartFragment.setDateAndGetData(getGBDevice(currentItem.getDevice()), currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
if (get_gpx_file() != null) {
showCanvas();
activitySummariesGpsFragment.set_data(get_gpx_file());
@ -186,7 +190,7 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
currentItem = newItem;
makeSummaryHeader(newItem);
makeSummaryContent(newItem);
activitySummariesChartFragment.setDateAndGetData(gbDevice, currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
activitySummariesChartFragment.setDateAndGetData(getGBDevice(currentItem.getDevice()), currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
if (get_gpx_file() != null) {
showCanvas();
activitySummariesGpsFragment.set_data(get_gpx_file());
@ -207,7 +211,7 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
if (currentItem != null) {
makeSummaryHeader(currentItem);
makeSummaryContent(currentItem);
activitySummariesChartFragment.setDateAndGetData(gbDevice, currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
activitySummariesChartFragment.setDateAndGetData(getGBDevice(currentItem.getDevice()), currentItem.getStartTime().getTime() / 1000, currentItem.getEndTime().getTime() / 1000);
if (get_gpx_file() != null) {
showCanvas();
activitySummariesGpsFragment.set_data(get_gpx_file());
@ -253,8 +257,8 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = input.getText().toString();
if (name.length() < 1) name = null;
currentItem.setName(name);
currentItem.update();
makeSummaryHeader(currentItem);
@ -522,4 +526,22 @@ public class ActivitySummaryDetail extends AbstractGBActivity {
show_hide_gpx_menu();
return true;
}
private GBDevice getGBDevice(Device findDevice) {
DaoSession daoSession;
GBApplication gbApp = (GBApplication) getApplicationContext();
List<? extends GBDevice> devices = gbApp.getDeviceManager().getDevices();
try (DBHandler handler = GBApplication.acquireDB()) {
daoSession = handler.getDaoSession();
for (GBDevice device : devices) {
Device dbDevice = DBHelper.findDevice(device, daoSession);
if (dbDevice.equals(findDevice)) return device;
}
} catch (Exception e) {
LOG.debug("Error getting device: " + e);
}
return null;
}
}

View File

@ -33,16 +33,23 @@ import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.viewpager.widget.ViewPager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractFragmentPagerAdapter;
@ -54,8 +61,10 @@ import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.LimitedQueue;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class ChartsActivity extends AbstractGBFragmentActivity implements ChartsHost {
private static final Logger LOG = LoggerFactory.getLogger(ChartsActivity.class);
private TextView mDateControl;
@ -64,6 +73,7 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
private SwipeRefreshLayout swipeLayout;
LimitedQueue mActivityAmountCache = new LimitedQueue(60);
List<String> enabledTabsList;
public static class ShowDurationDialog extends Dialog {
private final String mDuration;
@ -137,6 +147,19 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
} else {
throw new IllegalArgumentException("Must provide a device when invoking this activity");
}
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(getDevice().getAddress()));
String myTabs = prefs.getString("charts_tabs", null);
if (myTabs == null) {
//make list mutable to be able to remove items later
enabledTabsList = new ArrayList<String>(Arrays.asList(this.getResources().getStringArray(R.array.pref_charts_tabs_items_default)));
} else {
enabledTabsList = new ArrayList<String>(Arrays.asList(myTabs.split(",")));
}
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(mGBDevice);
if (!coordinator.supportsRealtimeData()) {
enabledTabsList.remove("livestats");
}
swipeLayout = findViewById(R.id.activity_swipe_layout);
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@ -339,33 +362,35 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
}
/**
* A {@link FragmentStatePagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends AbstractFragmentPagerAdapter {
SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
switch (position) {
case 0:
switch (enabledTabsList.get(position)) {
case "activity":
return new ActivitySleepChartFragment();
case 1:
case "activitylist":
return new ActivityListingChartFragment();
case 2:
case "sleep":
return new SleepChartFragment();
case 3:
case "sleepweek":
return new WeekSleepChartFragment();
case 4:
case "stepsweek":
return new WeekStepsChartFragment();
case 5:
case "speedzones":
return new SpeedZonesFragment();
case 6:
case "livestats":
return new LiveActivityFragment();
}
return null;
@ -373,12 +398,7 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
@Override
public int getCount() {
// Show 5 or 6 total pages.
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(mGBDevice);
if (coordinator.supportsRealtimeData()) {
return 7;
}
return 6;
return enabledTabsList.toArray().length;
}
private String getSleepTitle() {
@ -401,20 +421,21 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
switch (enabledTabsList.get(position)) {
case "activity":
return getString(R.string.activity_sleepchart_activity_and_sleep);
case 1:
case "activitylist":
return getString(R.string.charts_activity_list);
case 2:
case "sleep":
return getString(R.string.sleepchart_your_sleep);
case 3:
case "sleepweek":
return getSleepTitle();
case 4:
case "stepsweek":
return getStepsTitle();
case 5:
case "speedzones":
return getString(R.string.stats_title);
case 6:
case "livestats":
return getString(R.string.liveactivity_live_activity);
}
return super.getPageTitle(position);

View File

@ -19,10 +19,10 @@ package nodomain.freeyourgadget.gadgetbridge.activities.devicesettings;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -49,7 +49,11 @@ public class DeviceSettingsActivity extends AbstractGBActivity implements
Fragment fragment = getSupportFragmentManager().findFragmentByTag(DeviceSpecificSettingsFragment.FRAGMENT_TAG);
if (fragment == null) {
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device);
fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), coordinator.getSupportedDeviceSpecificSettings(device));
int[] supportedSettings = coordinator.getSupportedDeviceSpecificSettings(device);
if (coordinator.supportsActivityTracking()) {
supportedSettings = ArrayUtils.addAll(supportedSettings, R.xml.devicesettings_chartstabs);
}
fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), supportedSettings);
}
getSupportFragmentManager()
.beginTransaction()
@ -62,8 +66,12 @@ public class DeviceSettingsActivity extends AbstractGBActivity implements
@Override
public boolean onPreferenceStartScreen(PreferenceFragmentCompat caller, PreferenceScreen preferenceScreen) {
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device);
int[] supportedSettings = coordinator.getSupportedDeviceSpecificSettings(device);
if (coordinator.supportsActivityTracking()) {
supportedSettings = ArrayUtils.addAll(supportedSettings, R.xml.devicesettings_chartstabs);
}
PreferenceFragmentCompat fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), coordinator.getSupportedDeviceSpecificSettings(device));
PreferenceFragmentCompat fragment = DeviceSpecificSettingsFragment.newInstance(device.getAddress(), supportedSettings);
Bundle args = fragment.getArguments();
args.putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, preferenceScreen.getKey());
fragment.setArguments(args);

View File

@ -16,7 +16,9 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class ArrayUtils {
/**

View File

@ -1119,4 +1119,6 @@
<string name="activity_list_summary_active_time">Aktivní čas</string>
<string name="activity_list_summary_distance">Vzdálenost</string>
<string name="activity_list_summary_active_steps">Aktivní kroky</string>
<string name="devicetype_casiogbx100">Casio GBX-100</string>
<string name="devicetype_amazfit_gts2">Amazfit GTS 2</string>
</resources>

View File

@ -1132,4 +1132,5 @@
<string name="activity_list_summary_active_time">Aktive Zeit</string>
<string name="activity_list_summary_distance">Strecke</string>
<string name="activity_list_summary_active_steps">Aktive Schritte</string>
<string name="devicetype_casiogbx100">Casio GBX-100</string>
</resources>

View File

@ -1117,4 +1117,5 @@ Temps de sommeil préféré en heures</string>
<string name="activity_list_summary_distance">Distance</string>
<string name="activity_list_summary_active_steps">Pas réalisés</string>
<string name="devicetype_amazfit_gts2">Amazfit GTS 2</string>
<string name="devicetype_casiogbx100">Casio GBX-100</string>
</resources>

View File

@ -1119,4 +1119,5 @@
<string name="activity_list_summary_active_time">זמן פעילות</string>
<string name="activity_list_summary_distance">מרחק</string>
<string name="devicetype_amazfit_gts2">Amazfit GTS 2</string>
<string name="devicetype_casiogbx100">Casio GBX-100</string>
</resources>

View File

@ -171,9 +171,11 @@
<string name="installation_successful">Installert</string>
<string name="firmware_install_warning">DU PRØVER Å INSTALLERE EN FASTVARE, FORTSETT PÅ EGEN RISIKO.
\n
\n
\nDENNE FASTVAREN ER FOR MASKINVAREVERSJON: %s</string>
<string name="app_install_info">Du er i ferd med å installere følgende program:
\n
\n
\n%1$s version %2$s av %3$s
\n</string>
<string name="n_a">I/T</string>
@ -1104,7 +1106,8 @@
<string name="charts_legend_heartrate_average">Pulsgjennomsnitt</string>
<string name="activity_prefs_step_length_cm">Steglengde i cm</string>
<string name="charts_min_max_heartrate_popup">Laveste puls: %1$d
\nHøyeste puls: %2$d</string>
\nHøyeste puls: %2$d
\nBevegelsesintensitet: %3$s</string>
<string name="find_lost_device_message">Søk etter %1$s\?</string>
<string name="devicetype_amazfit_gtr2">Amazfit GTR 2</string>
<string name="menuitem_dnd">Ikke forstyrr</string>
@ -1120,4 +1123,6 @@
\nIntensitet</string>
<string name="activity_list_summary_active_time">Aktiv tid</string>
<string name="activity_list_summary_distance">Distanse</string>
<string name="devicetype_casiogbx100">Casio GBX-100</string>
<string name="devicetype_amazfit_gts2">Amazfit GTS 2</string>
</resources>

View File

@ -219,7 +219,7 @@
<string name="updatefirmwareoperation_update_complete_rebooting">Instalacja firmware\'u zakończona, restartowanie urządzenia…</string>
<string name="updatefirmwareoperation_write_failed">Instalacja oprogramowania nie powiodła się</string>
<string name="chart_steps">Kroki</string>
<string name="liveactivity_live_activity">Ostatnia aktywność</string>
<string name="liveactivity_live_activity">Obecna aktywność</string>
<string name="weeksteps_today_steps_description">Kroków dziś, cel: %1$s</string>
<string name="pref_title_dont_ack_transfer">Nie przesyłaj danych aktywności ACK</string>
<string name="pref_summary_dont_ack_transfers">Jeśli transmisja danych nie zostanie potwierdzona przez opaskę, dane dotyczące aktywności nie zostaną wyczyszczone. Przydatne, jeśli GB jest używany razem z innymi aplikacjami.</string>
@ -255,7 +255,7 @@
<string name="device_fw">Wersja oprogramowania: %1$s</string>
<string name="updatefirmwareoperation_update_in_progress">Aktualizowanie oprogramowania</string>
<string name="charts_legend_heartrate">Puls</string>
<string name="live_activity_heart_rate">Puls</string>
<string name="live_activity_heart_rate">Tętno</string>
<string name="action_db_management">Zarządzanie bazą danych</string>
<string name="title_activity_db_management">Zarządzanie bazą danych</string>
<string name="dbmanagementactivity_exported_to">Wyeksportowano do: %1$s</string>
@ -377,7 +377,7 @@
\n
\nROBISZ TO NA WŁASNE RYZYKO!</string>
<string name="fw_multi_upgrade_notice">Zamierzasz zainstalować oprogramowanie %1$s oraz %2$s, na miejsce obecnie zainstalowanego na opasce Mi Band.</string>
<string name="pref_title_charts_swipe">Włącz przesuwanie w lewo i w prawo na kartach czynności</string>
<string name="pref_title_charts_swipe">Włącz gesty przesuwania w lewo i w prawo na kartach aktywności</string>
<string name="pref_title_notifications_timeout">Minimalny czas pomiędzy powiadomieniami</string>
<string name="pref_title_call_privacy_mode">Tryb prywatności połączeń telefonicznych</string>
<string name="pref_title_weather_location">Lokalizacja pogody (dla dostawcy pogody LineageOS)</string>
@ -427,7 +427,7 @@
<string name="minutes_30">30 minut</string>
<string name="lack_of_step">Pozostało kroków: %1$d</string>
<string name="pref_title_low_latency_fw_update">Użyj trybu o niskiej latencji przy aktualizacji firmware</string>
<string name="live_activity_max_heart_rate">Aktualny / Maks. puls: %1$d / %2$d</string>
<string name="live_activity_max_heart_rate">Aktualny / Maks. tętno: %1$d / %2$d</string>
<string name="you_slept">Sen trwał od %1$s do %2$s</string>
<string name="miband_prefs_device_time_offset_hours">Offset snu w godzinach (do detekcji snu pracowników zmianowych)</string>
<string name="mi2_prefs_button_action_summary">Włącz akcję po naciśnięciu przycisku określoną ilość razy</string>
@ -456,8 +456,8 @@
<string name="korean">Koreański</string>
<string name="japanese">Japoński</string>
<string name="activity_prefs_charts">Ustawienia wykresów</string>
<string name="activity_prefs_chart_max_heart_rate">Puls maksymalny</string>
<string name="activity_prefs_chart_min_heart_rate">Puls minimalny</string>
<string name="activity_prefs_chart_max_heart_rate">Tętno maksymalne</string>
<string name="activity_prefs_chart_min_heart_rate">Tętno minimalne</string>
<string name="authenticating">Uwierzytelnianie</string>
<string name="authentication_required">Wymagane uwierzytelnienie</string>
<string name="appwidget_text">Zzz</string>
@ -550,7 +550,7 @@
<string name="FetchActivityOperation_about_to_transfer_since">Przeniesienie danych z okresu %1$s</string>
<string name="appwidget_setting_alarm">Ustawienie alarmu na %1$02d:%2$02d</string>
<string name="error_creating_directory_for_logfiles">Błąd tworzenia folderu na pliki log: %1$s</string>
<string name="DEVINFO_HR_VER">"Puls: "</string>
<string name="DEVINFO_HR_VER">"Tętno: "</string>
<string name="filter_mode_whitelist">Pokazuj gdy zawiera słowa</string>
<string name="pref_chart_heartrate_color_red">Czerwony</string>
<string name="mi2_prefs_button_press_broadcast_default_value" translatable="false">nodomain.freeyourgadget.gadgetbridge.ButtonPressed</string>
@ -609,7 +609,7 @@
<string name="zetime_title_heartrate">Ustawienia pomiaru tętna</string>
<string name="zetime_title_screentime">Czas podświetlenia ekranu w sekundach</string>
<string name="zetime_title_heart_rate_alarm">Alarm o poziomie tętna</string>
<string name="zetime_title_heart_rate_alarm_summary">Zegarek cię poinformuje, kiedy twój puls przekroczy limit.</string>
<string name="zetime_title_heart_rate_alarm_summary">Zegarek cię poinformuje, kiedy twoje tętno przekroczy limit.</string>
<string name="zetime_heart_rate_alarm_enable">Włącz alarm o nieprawidłowym poziomie tętna</string>
<string name="activity_prefs_alarm_max_heart_rate">Maksymalny poziom tętna</string>
<string name="activity_prefs_alarm_min_heart_rate">Minimalny poziom tętna</string>
@ -781,7 +781,7 @@
<string name="zetime_signaling_beep_twice">Zabrzęcz dwa razy</string>
<string name="zetime_signaling_vibrate_beep_once">Wibracja i brzęczenie raz</string>
<string name="pref_title_support_voip_calls">Uwzględnij rozmowy przez internet (VoIP)</string>
<string name="pref_summary_authkey">Zmień klucz autoryzacji na wspólny dla wszystkich urządzeń z Androidem, z których chcesz się połączyć. Poprzedni domyślny klucz dla wszystkich urządzeń to 0123456789@ABCDE</string>
<string name="pref_summary_authkey">Zmień klucz autoryzacji na wspólny dla wszystkich urządzeń z Androidem, z których chcesz się połączyć. Dawniej, domyślnym kluczem dla wszystkich urządzeń był 0123456789@ABCDE</string>
<string name="prefs_hr_alarm_activity">Alarm tętna podczas aktywności sportowej</string>
<string name="prefs_hr_alarm_low">Dolny limit</string>
<string name="prefs_hr_alarm_high">Górny limit</string>
@ -993,12 +993,12 @@
<string name="sports_activity_quick_filter_7days">7 dni</string>
<string name="no">Nie</string>
<string name="yes">Tak</string>
<string name="activity_detail_start_label">Start</string>
<string name="activity_detail_start_label">Początek</string>
<string name="seconds_m">sek/m</string>
<string name="seconds_km">sek/km</string>
<string name="seconds">sek</string>
<string name="averageSpeed">Średnia prędkość</string>
<string name="activeSeconds">Aktywny</string>
<string name="activeSeconds">Czas aktywności</string>
<string name="pref_check_permission_status">Sprawdzanie stanu uprawnień</string>
<string name="device_is_currently_bonded">JUŻ POWIĄZANE</string>
<string name="activity_type_badminton">Badminton</string>
@ -1024,7 +1024,7 @@
<string name="about_additional_contributions">Dziękujemy wszystkim nie notowanym na liście współtwórcom za udostępnienie kodu, tłumaczenia, wsparcie, pomysły, motywację, zgłoszenia błędów, pieniądze… ✊</string>
<string name="about_core_team_title">Zespół główny (w kolejności od pierwszego wkładu w kod aplikacji)</string>
<string name="about_description">Wolny od chmury zamiennik dla aplikacji dla systemu Android o zamkniętym kodzie źródłowym dostarczanych przez producentów gadżetów.</string>
<string name="activity_summary_edit_name_title">Etykieta edycyjna</string>
<string name="activity_summary_edit_name_title">Edytuj etykietę</string>
<string name="activity_type_pingpong">Ping-pong</string>
<string name="activity_type_cricket">Krykiet</string>
<string name="activity_type_rowing_machine">Ergometr wioślarski</string>
@ -1097,7 +1097,7 @@
<string name="sports_activity_quick_filter_last_week">Poprzedni tydzień</string>
<string name="sports_activity_quick_filter_this_week">Ten tydzień</string>
<string name="activity_summaries_all_activities">Wszystkie aktywności</string>
<string name="Strokes">Ruchów</string>
<string name="Strokes">Ruchy</string>
<string name="swolf_index">indeks swolf</string>
<string name="lefun_prefs_hydration_reminder_title">Przypomnienie o nawodnieniu</string>
<string name="about_version">Wersja %s</string>
@ -1120,4 +1120,12 @@
<string name="menuitem_findphone">Znajdź telefon</string>
<string name="activity_list_summary_distance">Dystans</string>
<string name="devicetype_amazfit_gts2">Amazfit GTS 2</string>
<string name="activity_list_summary_active_steps">Kroki podczas aktywności</string>
<string name="movement_intensity">Intensywność ruchu</string>
<string name="activity_list_summary_intensity">Intensywność
\nRuchu</string>
<string name="activity_list_summary_active_time">Czas aktywności</string>
<string name="prefs_events_forwarding_action_title">Uruchom</string>
<string name="devicetype_casiogbx100">Casio GBX-100</string>
<string name="activity_list_summary_activities">Aktywności</string>
</resources>

View File

@ -1147,4 +1147,5 @@
<string name="activity_list_summary_distance">Mesafe</string>
<string name="activity_list_summary_active_steps">Etkin adımlar</string>
<string name="devicetype_amazfit_gts2">Amazfit GTS 2</string>
<string name="devicetype_casiogbx100">Casio GBX-100</string>
</resources>

View File

@ -1128,4 +1128,5 @@
<string name="activity_list_summary_distance">距离</string>
<string name="activity_list_summary_active_steps">活跃步数</string>
<string name="devicetype_amazfit_gts2">华米 GTS 2</string>
<string name="devicetype_casiogbx100">卡西欧 GBX-100</string>
</resources>

View File

@ -1162,4 +1162,36 @@
<item>50</item>
<item>60</item>
</string-array>
<string-array name="pref_charts_tabs_items">
<item>@string/activity_sleepchart_activity_and_sleep</item>
<item>@string/charts_activity_list</item>
<item>@string/weeksleepchart_sleep_a_week</item>
<item>@string/weeksleepchart_sleep_a_month</item>
<item>@string/weekstepschart_steps_a_month</item>
<item>@string/stats_title</item>
<item>@string/liveactivity_live_activity</item>
</string-array>
<string-array name="pref_charts_tabs_values">
<item>@string/p_activity</item>
<item>@string/p_activity_list</item>
<item>@string/p_sleep</item>
<item>@string/p_sleep_week</item>
<item>@string/p_steps_week</item>
<item>@string/p_speed_zones</item>
<item>@string/p_live_stats</item>
</string-array>
<string-array name="pref_charts_tabs_items_default">
<item>@string/p_activity</item>
<item>@string/p_activity_list</item>
<item>@string/p_sleep</item>
<item>@string/p_sleep_week</item>
<item>@string/p_steps_week</item>
<item>@string/p_speed_zones</item>
<item>@string/p_live_stats</item>
</string-array>
</resources>

View File

@ -437,6 +437,8 @@
<string name="notif_battery_low">%1$s battery low</string>
<string name="notif_battery_low_extended">%1$s battery low: %2$s</string>
<string name="notif_export_failed_title">Export database failed! Please check your settings.</string>
<string name="prefs_charts_tabs">Charts tabs</string>
<string name="prefs_charts_tabs_summary">Visible charts tabs</string>
<string name="sleepchart_your_sleep">Sleep</string>
<string name="weeksleepchart_sleep_a_week">Sleep per week</string>
<string name="weeksleepchart_today_sleep_description">Sleep today, target: %1$s</string>

View File

@ -69,4 +69,13 @@
<item name="p_call_privacy_mode_name" type="string">name</item>
<item name="p_call_privacy_mode_number" type="string">number</item>
<item name="p_call_privacy_mode_complete" type="string">complete</item>
<item name="p_activity" type="string">activity</item>
<item name="p_activity_list" type="string">activitylist</item>
<item name="p_sleep" type="string">sleep</item>
<item name="p_sleep_week" type="string">sleepweek</item>
<item name="p_steps_week" type="string">stepsweek</item>
<item name="p_speed_zones" type="string">speedzones</item>
<item name="p_live_stats" type="string">livestats</item>
</resources>

View File

@ -1,5 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<changelog>
<release version="0.50.0" versioncode="184">
<change>Initial support for Casio GBX-100</change>
<change>Mi/Amazfit Band 5: Support watchface installation</change>
<change>Mi Band 5: Add missing NFC menu item</change>
<change>Casio GB-5600B/GB-6900B: Add configurable disconnect notification</change>
<change>Casio: Add support for synchronizing profile settings</change>
<change>Fossil Hybrid HR: Keep widget values after widget reload</change>
<change>Allow sorting and disabling charts/statistics tabs in per-device settings</change>
<change>Improve Sports Activities dashboard and Filter</change>
<change>Bug fixes for notification removal</change>
<change>Allow to clear activity labels</change>
</release>
<release version="0.49.0" versioncode="183">
<change>Initial support for Amazfit Bip S Lite</change>
<change>Initial support for Amazfit GTR/GTS 2</change>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.mobeta.android.dslv.DragSortListPreference
android:icon="@drawable/ic_activity_graphs"
android:defaultValue="@array/pref_charts_tabs_items_default"
android:dialogTitle="@string/mi2_prefs_display_items"
android:entries="@array/pref_charts_tabs_items"
android:entryValues="@array/pref_charts_tabs_values"
android:key="charts_tabs"
android:persistent="true"
android:summary="@string/prefs_charts_tabs_summary"
android:title="@string/prefs_charts_tabs" />
</androidx.preference.PreferenceScreen>

View File

@ -0,0 +1,10 @@
* Initial support for Casio GBX-100
* Mi/Amazfit Band 5: Support watchface installation
* Mi Band 5: Add missing NFC menu item
* Casio GB-5600B/GB-6900B: Add configurable disconnect notification
* Casio: Add support for synchronizing profile settings
* Fossil Hybrid HR: Keep widget values after widget reload
* Allow sorting and disabling charts/statistics tabs in per-device settings
* Improve Sports Activities dashboard and Filter
* Bug fixes for notification removal
* Allow to clear activity labels