1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-09-26 16:26:52 +02:00

Merge branch 'master' into bip-wip

This commit is contained in:
Andreas Shimokawa 2018-02-15 23:38:06 +01:00
commit e48885df7d
49 changed files with 860 additions and 386 deletions

View File

@ -16,10 +16,10 @@ android:
- tools
# The BuildTools version used by your project
- build-tools-26.0.2
- build-tools-27.0.3
# The SDK version used to compile your project
- android-25
- android-27
# Additional components
- extra-android-m2repository

View File

@ -1,5 +1,33 @@
### Changelog
#### Version 0.24.5
* Fix crash in settings activity with export location
* Fix notification deletion regression
* Add 'Ł' and 'ł' to transliteration map
* Omnijaws Weather: correctly pick todays' min and max temperature
* Fix alarm details activity on small screen
* Pebble: minic online check of TrekVolle when using background js
#### Version 0.24.4
* Amazfit Bip: Fix language setting on new firmwares
#### Version 0.24.3
* Charts: Try to fix another crash
* Pebble: Fix weather for some watchfaces when using background JS
* Amazfit Cor: Allow watchfaces to be flashed (untested)
* Amazfit Bip: Better detection for flashable font types
* Fix number only privacy option
#### Version 0.24.2
* Fix crash when changing the periodic database export interval
* Amazfit Bip: Allow fonts and new res format to be flashed
* Amazfit Cor: Allow new res format to be flashed
* Pebble: Background js fixes
#### Version 0.24.1
* Amazfit Bip: prevent menu icons from vanishing when using firmware 0.1.0.51
* Pebble: "find phone" feature for upcoming pebble helper app
#### Version 0.24.0
* Fix logs sometimes not containing stacktraces
* Support periodic database export

View File

@ -72,6 +72,7 @@ For more information read [this wiki article](https://github.com/Freeyourgadget/
* While all Mi Band devices are supported, some firmware versions might work better than others.
You can consult the [projects wiki pages](https://github.com/Freeyourgadget/Gadgetbridge/wiki/Mi-Band)
to check if your firmware version is fully supported or if an upgrade/downgrade might be beneficial.
* In order to display text notifications on the Mi Band 2, you have to [install a font on the band](https://github.com/Freeyourgadget/Gadgetbridge/wiki/Mi-Band-2).
## Features (Liveview)

View File

@ -17,17 +17,17 @@ android {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
compileSdkVersion 25
buildToolsVersion '26.0.2'
compileSdkVersion 27
buildToolsVersion '27.0.3'
defaultConfig {
applicationId "nodomain.freeyourgadget.gadgetbridge"
minSdkVersion 19
targetSdkVersion 25
targetSdkVersion 27
// note: always bump BOTH versionCode and versionName!
versionName "0.24.0"
versionCode 117
versionName "0.24.5"
versionCode 122
vectorDrawables.useSupportLibrary = true
}
buildTypes {
@ -64,18 +64,18 @@ dependencies {
testCompile "org.robolectric:robolectric:3.5.1"
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.4.0'
compile 'com.android.support:cardview-v7:25.4.0'
compile 'com.android.support:recyclerview-v7:25.4.0'
compile 'com.android.support:support-v4:25.4.0'
compile 'com.android.support:gridlayout-v7:25.4.0'
compile 'com.android.support:design:25.4.0'
compile 'com.android.support:palette-v7:25.4.0'
compile 'com.android.support:appcompat-v7:27.0.2'
compile 'com.android.support:cardview-v7:27.0.2'
compile 'com.android.support:recyclerview-v7:27.0.2'
compile 'com.android.support:support-v4:27.0.2'
compile 'com.android.support:gridlayout-v7:27.0.2'
compile 'com.android.support:design:27.0.2'
compile 'com.android.support:palette-v7:27.0.2'
compile('com.github.tony19:logback-android-classic:1.1.1-6') {
exclude group: 'com.google.android', module: 'android'
}
compile 'org.slf4j:slf4j-api:1.7.12'
compile 'com.github.Freeyourgadget:MPAndroidChart:40c924deab89945a2c7820f51c2fed8b1b803cb4'
compile 'com.github.Freeyourgadget:MPAndroidChart:5e5bd6c1d3e95c515d4853647ae554e48ee1d593'
compile 'com.github.pfichtner:durationformatter:0.1.1'
compile 'de.cketti.library.changelog:ckchangelog:1.2.2'
compile 'net.e175.klaus:solarpositioning:0.0.9'

View File

@ -85,21 +85,21 @@ function hideSteps() {
function gbPebble() {
this.configurationURL = null;
this.configurationValues = null;
this.appMessageCallbackACK = {};
this.appMessageCallbackNACK = {};
var self = this;
appMessageCallbackACK = {};
appMessageCallbackNACK = {};
function appMessageCallbackProcessed(transactionId) {
if (appMessageCallbackACK[transactionId]) {
self.removeEventListener("ACK"+transactionId, self.appMessageCallbackACK[transactionId]);
appMessageCallbackACK[transactionId] = undefined;
}
if (appMessageCallbackNACK[transactionId]) {
self.removeEventListener("NACK"+transactionId, self.appMessageCallbackNACK[transactionId]);
appMessageCallbackNACK[transactionId] = undefined;
}
self.appMessageCallbackProcessed = function (transactionId) {
if (self.appMessageCallbackACK[transactionId]) {
self.removeEventListener("ACK"+transactionId, self.appMessageCallbackACK[transactionId]);
self.appMessageCallbackACK[transactionId] = undefined;
}
if (self.appMessageCallbackNACK[transactionId]) {
self.removeEventListener("NACK"+transactionId, self.appMessageCallbackNACK[transactionId]);
self.appMessageCallbackNACK[transactionId] = undefined;
}
}
self.events = {};
//events processing: see http://stackoverflow.com/questions/10978311/implementing-events-in-my-own-object
@ -198,7 +198,7 @@ function gbPebble() {
}
var transactionId = GBjs.sendAppMessage(JSON.stringify(dict), needsTransaction);
if (needsTransaction) {
if (callbackAck != undefined) {
if (typeof callbackAck != "undefined") {
self.appMessageCallbackACK[transactionId] = function(e) {
// console.log("ACK FOR " + JSON.stringify(e));
callbackAck(e);
@ -208,7 +208,7 @@ function gbPebble() {
this.addEventListener("ACK"+transactionId, self.appMessageCallbackACK[transactionId]);
}
if (callbackNack != undefined) {
if (typeof callbackNack != "undefined") {
self.appMessageCallbackNACK[transactionId] = function(e) {
// console.log("NACK FOR " + JSON.stringify(e));
callbackNack(e);
@ -221,7 +221,7 @@ function gbPebble() {
}
}
catch (e) {
GBjs.gbLog("sendAppMessage failed");
GBjs.gbLog("sendAppMessage failed: " + e);
}
}

View File

@ -19,6 +19,7 @@ package nodomain.freeyourgadget.gadgetbridge;
import android.annotation.TargetApi;
import android.app.Application;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
import android.content.Context;
@ -67,6 +68,8 @@ import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs;
import nodomain.freeyourgadget.gadgetbridge.util.LimitedQueue;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_ID;
/**
* Main Application class that initializes and provides access to certain things like
* logging and DB access.
@ -175,6 +178,15 @@ public class GBApplication extends Application {
if (isRunningMarshmallowOrLater()) {
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//the following will ensure the notification manager is kept alive
if(isRunningOreoOrLater()) {
NotificationChannel channel = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID);
if(channel == null) {
channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,
getString(R.string.notification_channel_name),
NotificationManager.IMPORTANCE_LOW);
notificationManager.createNotificationChannel(channel);
}
}
startService(new Intent(this, NotificationCollectorMonitorService.class));
}
}
@ -293,6 +305,10 @@ public class GBApplication extends Application {
return VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
public static boolean isRunningOreoOrLater(){
return VERSION.SDK_INT >= Build.VERSION_CODES.O;
}
private static boolean isPrioritySender(int prioritySenders, String number) {
if (prioritySenders == Policy.PRIORITY_SENDERS_ANY) {
return true;

View File

@ -52,6 +52,8 @@ import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_ID;
public class DebugActivity extends AbstractGBActivity {
private static final Logger LOG = LoggerFactory.getLogger(DebugActivity.class);
@ -266,7 +268,7 @@ public class DebugActivity extends AbstractGBActivity {
NotificationCompat.WearableExtender wearableExtender = new NotificationCompat.WearableExtender().addAction(action);
NotificationCompat.Builder ncomp = new NotificationCompat.Builder(this)
NotificationCompat.Builder ncomp = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
.setContentTitle(getString(R.string.test_notification))
.setContentText(getString(R.string.this_is_a_test_notification_from_gadgetbridge))
.setTicker(getString(R.string.this_is_a_test_notification_from_gadgetbridge))

View File

@ -308,10 +308,10 @@ public class SettingsActivity extends AbstractSettingsActivity {
public boolean onPreferenceChange(Preference preference, Object autoExportInterval) {
String summary = String.format(
getApplicationContext().getString(R.string.pref_summary_auto_export_interval),
(int) autoExportInterval);
Integer.valueOf((String) autoExportInterval));
preference.setSummary(summary);
boolean auto_export_enabled = GBApplication.getPrefs().getBoolean(GBPrefs.AUTO_EXPORT_ENABLED, false);
PeriodicExporter.sheduleAlarm(getApplicationContext(), (int) autoExportInterval, auto_export_enabled);
PeriodicExporter.sheduleAlarm(getApplicationContext(), Integer.valueOf((String) autoExportInterval), auto_export_enabled);
return true;
}
});
@ -377,7 +377,7 @@ public class SettingsActivity extends AbstractSettingsActivity {
}
/*
Either returns the file path of the selected document, or the display name
Either returns the file path of the selected document, or the display name, or an empty string
*/
private String getAutoExportLocationSummary() {
String autoExportLocation = GBApplication.getPrefs().getString(GBPrefs.AUTO_EXPORT_LOCATION, null);
@ -386,20 +386,16 @@ public class SettingsActivity extends AbstractSettingsActivity {
}
Uri uri = Uri.parse(autoExportLocation);
try {
String filePath = AndroidUtils.getFilePath(getApplicationContext(), uri);
if (filePath != null) {
return filePath;
return AndroidUtils.getFilePath(getApplicationContext(), uri);
} catch (IllegalArgumentException e) {
Cursor cursor = getContentResolver().query(
uri,
new String[] { DocumentsContract.Document.COLUMN_DISPLAY_NAME },
null, null, null, null
);
if (cursor != null && cursor.moveToFirst()) {
return cursor.getString(cursor.getColumnIndex(DocumentsContract.Document.COLUMN_DISPLAY_NAME));
}
} catch (URISyntaxException e) {
return "";
}
Cursor cursor = getContentResolver().query(
uri,
new String[] { DocumentsContract.Document.COLUMN_DISPLAY_NAME },
null, null, null, null
);
if (cursor != null && cursor.moveToFirst()) {
return cursor.getString(cursor.getColumnIndex(DocumentsContract.Document.COLUMN_DISPLAY_NAME));
}
return "";
}

View File

@ -27,7 +27,6 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.AbstractMiBandFWHelper;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareInfo;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareType;
public abstract class HuamiFWHelper extends AbstractMiBandFWHelper {
protected HuamiFirmwareInfo firmwareInfo;
@ -47,6 +46,7 @@ public abstract class HuamiFWHelper extends AbstractMiBandFWHelper {
int resId = R.string.kind_invalid;
switch (getFirmwareInfo().getFirmwareType()) {
case FONT:
case FONT_LATIN:
resId = R.string.kind_font;
break;
case GPS:
@ -59,9 +59,7 @@ public abstract class HuamiFWHelper extends AbstractMiBandFWHelper {
resId = R.string.kind_gps_cep;
break;
case RES:
resId = R.string.kind_resources;
break;
case RES_NEW:
case RES_COMPRESSED:
resId = R.string.kind_resources;
break;
case FIRMWARE:

View File

@ -32,6 +32,9 @@ public class AmazfitBipService {
public static final byte[] COMMAND_SET_LANGUAGE_SIMPLIFIED_CHINESE = new byte[]{ENDPOINT_DISPLAY, 0x13, 0x00, 0x00};
public static final byte[] COMMAND_SET_LANGUAGE_TRADITIONAL_CHINESE = new byte[]{ENDPOINT_DISPLAY, 0x13, 0x00, 0x01};
public static final byte[] COMMAND_SET_LANGUAGE_ENGLISH = new byte[]{ENDPOINT_DISPLAY, 0x13, 0x00, 0x02};
public static final byte[] COMMAND_SET_LANGUAGE_SPANISH = new byte[]{ENDPOINT_DISPLAY, 0x13, 0x00, 0x03};
public static final byte[] COMMAND_SET_LANGUAGE_NEW_TEMPLATE = new byte[]{ENDPOINT_DISPLAY, 0x17, 0x00, 0, 0, 0, 0, 0};
public static final byte COMMAND_ACTIVITY_DATA_TYPE_SPORTS_SUMMARIES = 0x05;
public static final byte COMMAND_ACTIVITY_DATA_TYPE_SPORTS_DETAILS = 0x06;

View File

@ -38,13 +38,13 @@ import android.os.PowerManager;
import android.os.RemoteException;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.RemoteInput;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;
import android.support.v7.app.NotificationCompat;
import android.support.v7.graphics.Palette;
import org.slf4j.Logger;
@ -67,6 +67,8 @@ import nodomain.freeyourgadget.gadgetbridge.util.LimitedQueue;
import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import static android.support.v4.media.app.NotificationCompat.MediaStyle.getMediaSession;
public class NotificationListener extends NotificationListenerService {
private static final Logger LOG = LoggerFactory.getLogger(NotificationListener.class);
@ -203,7 +205,7 @@ public class NotificationListener extends NotificationListenerService {
String source = sbn.getPackageName().toLowerCase();
Notification notification = sbn.getNotification();
NotificationSpec notificationSpec = new NotificationSpec();
notificationSpec.id = (int) sbn.getPostTime(); //FIMXE: a truly unique id would be better
notificationSpec.id = (int) sbn.getPostTime(); //FIXME: a truly unique id would be better
// determinate Source App Name ("Label")
PackageManager pm = getPackageManager();
@ -367,7 +369,7 @@ public class NotificationListener extends NotificationListenerService {
Prefs prefs = GBApplication.getPrefs();
if (prefs.getBoolean("autoremove_notifications", false)) {
LOG.info("notification removed, will ask device to delete it");
GBApplication.deviceService().onDeleteNotification(sbn.getPackageName().hashCode() * 31 + sbn.getId());
GBApplication.deviceService().onDeleteNotification((int) sbn.getPostTime());
}
}
@ -434,7 +436,7 @@ public class NotificationListener extends NotificationListenerService {
private boolean shouldIgnoreNotification(Notification notification, String source) {
MediaSessionCompat.Token mediaSession = NotificationCompat.getMediaSession(notification);
MediaSessionCompat.Token mediaSession = getMediaSession(notification);
//try to handle media session notifications
if (mediaSession != null && handleMediaSessionNotification(mediaSession))
return true;

View File

@ -100,9 +100,10 @@ public class OmniJawsObserver extends ContentObserver {
weatherSpec.currentTemp = toKelvin(c.getFloat(3));
weatherSpec.currentHumidity = (int) c.getFloat(4);
weatherSpec.timestamp = (int) (Long.valueOf(c.getString(9)) / 1000);
} else if (i == 1) {
weatherSpec.todayMinTemp = toKelvin(c.getFloat(5));
weatherSpec.todayMaxTemp = toKelvin(c.getFloat(6));
weatherSpec.timestamp = (int) (Long.valueOf(c.getString(9)) / 1000);
} else {
WeatherSpec.Forecast gbForecast = new WeatherSpec.Forecast();

View File

@ -171,12 +171,12 @@ public class GBDeviceService implements DeviceService {
public void onSetCallState(CallSpec callSpec) {
Context context = GBApplication.getContext();
String currentPrivacyMode = GBApplication.getPrefs().getString("pref_call_privacy_mode", GBApplication.getContext().getString(R.string.p_call_privacy_mode_off));
if (context.getString(R.string.p_call_privacy_mode_name).equals(currentPrivacyMode)) {
if (currentPrivacyMode.equals(context.getString(R.string.p_call_privacy_mode_name))) {
callSpec.name = callSpec.number;
} else if (context.getString(R.string.p_call_privacy_mode_complete).equals(currentPrivacyMode)) {
} else if (currentPrivacyMode.equals(context.getString(R.string.p_call_privacy_mode_complete))) {
callSpec.number = null;
callSpec.name = null;
} else if (context.getString(R.string.pref_call_privacy_mode_number).equals(currentPrivacyMode)) {
} else if (currentPrivacyMode.equals(context.getString(R.string.p_call_privacy_mode_number))){
callSpec.name = coalesce(callSpec.name, getContactDisplayNameByNumber(callSpec.number));
if (callSpec.name != null && !callSpec.name.equals(callSpec.number)) {
callSpec.number = null;

View File

@ -49,6 +49,7 @@ public class Weather {
try {
condition.put("id", weatherSpec.currentConditionCode);
condition.put("main", weatherSpec.currentCondition);
condition.put("description", weatherSpec.currentCondition);
condition.put("icon", Weather.mapToOpenWeatherMapIcon(weatherSpec.currentConditionCode));
weather.put(condition);

View File

@ -66,6 +66,8 @@ import nodomain.freeyourgadget.gadgetbridge.service.receivers.GBMusicControlRece
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_ID;
// TODO: support option for a single reminder notification when notifications could not be delivered?
// conditions: app was running and received notifications, but device was not connected.
// maybe need to check for "unread notifications" on device for that.
@ -257,7 +259,7 @@ public abstract class AbstractDeviceSupport implements DeviceSupport {
NotificationCompat.Action action = new NotificationCompat.Action.Builder(android.R.drawable.ic_menu_share, "share", pendingShareIntent).build();
Notification notif = new NotificationCompat.Builder(context)
Notification notif = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
.setContentTitle("Screenshot taken")
.setTicker("Screenshot taken")
.setContentText(filename)

View File

@ -89,7 +89,10 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo {
crcToVersion.put(59462, "0.1.0.33");
crcToVersion.put(55277, "0.1.0.39");
crcToVersion.put(47685, "0.1.0.43");
crcToVersion.put(2839, "0.1.0.44");
crcToVersion.put(30229, "0.1.0.45");
crcToVersion.put(24302, "0.1.0.70");
crcToVersion.put(1333, "0.1.0.80");
// resources
crcToVersion.put(12586, "0.0.8.74");
@ -102,12 +105,19 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo {
crcToVersion.put(28696, "0.1.0.26-0.1.0.27");
crcToVersion.put(5650, "0.1.0.33");
crcToVersion.put(16117, "0.1.0.39-0.1.0.45");
crcToVersion.put(22506, "0.1.0.66-0.1.0.70");
crcToVersion.put(22506, "0.1.0.66-0.1.0.70");
crcToVersion.put(42264, "0.1.0.77-0.1.0.80");
// gps
crcToVersion.put(61520, "9367,8f79a91,0,0,");
crcToVersion.put(8784, "9565,dfbd8fa,0,0,");
crcToVersion.put(16716, "9565,dfbd8faf42,0");
crcToVersion.put(54154, "9567,8b05506,0,0,");
// font
crcToVersion.put(61054, "8");
crcToVersion.put(62291, "9 (Latin)");
}
public AmazfitBipFirmwareInfo(byte[] bytes) {
@ -116,7 +126,7 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo {
@Override
protected HuamiFirmwareType determineFirmwareType(byte[] bytes) {
if (ArrayUtils.startsWith(bytes, RES_HEADER)) {
if (ArrayUtils.startsWith(bytes, RES_HEADER) || ArrayUtils.startsWith(bytes, NEWRES_HEADER)) {
if (bytes.length > 500000) { // dont know how to distinguish from Cor .res
return HuamiFirmwareType.INVALID;
}
@ -138,6 +148,13 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo {
if (ArrayUtils.startsWith(bytes, WATCHFACE_HEADER)) {
return HuamiFirmwareType.WATCHFACE;
}
if (ArrayUtils.startsWith(bytes, NEWFT_HEADER)) {
if (bytes[10] == 0x01) {
return HuamiFirmwareType.FONT;
} else if (bytes[10] == 0x02) {
return HuamiFirmwareType.FONT_LATIN;
}
}
return HuamiFirmwareType.INVALID;
}

View File

@ -38,11 +38,13 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipF
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipService;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBand2Service;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.model.Weather;
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.ConditionalWriteAction;
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.AlertCategory;
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.AlertNotificationProfile;
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.NewAlert;
@ -53,8 +55,6 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.operations.F
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
import nodomain.freeyourgadget.gadgetbridge.util.Version;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBand2Service.ENDPOINT_DISPLAY_ITEMS;
public class AmazfitBipSupport extends MiBand2Support {
private static final Logger LOG = LoggerFactory.getLogger(AmazfitBipSupport.class);
@ -304,35 +304,68 @@ public class AmazfitBipSupport extends MiBand2Support {
}
private AmazfitBipSupport setLanguage(TransactionBuilder builder) {
String language = Locale.getDefault().getLanguage();
String country = Locale.getDefault().getCountry();
LOG.info("Setting watch language, phone language = " + language + " country = " + country);
byte[] command;
final byte[] command_new;
final byte[] command_old;
String localeString;
switch (GBApplication.getPrefs().getInt("amazfitbip_language", -1)) {
case 0:
command = AmazfitBipService.COMMAND_SET_LANGUAGE_SIMPLIFIED_CHINESE;
command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_SIMPLIFIED_CHINESE;
localeString = "zh_CN";
break;
case 1:
command = AmazfitBipService.COMMAND_SET_LANGUAGE_TRADITIONAL_CHINESE;
command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_TRADITIONAL_CHINESE;
localeString = "zh_TW";
break;
case 2:
command = AmazfitBipService.COMMAND_SET_LANGUAGE_ENGLISH;
command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_ENGLISH;
localeString = "en_US";
break;
case 3:
command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_SPANISH;
localeString = "es_ES";
break;
default:
if (language.equals("zh")) {
if (country.equals("TW") || country.equals("HK") || country.equals("MO")) { // Taiwan, Hong Kong, Macao
command = AmazfitBipService.COMMAND_SET_LANGUAGE_TRADITIONAL_CHINESE;
} else {
command = AmazfitBipService.COMMAND_SET_LANGUAGE_SIMPLIFIED_CHINESE;
}
} else {
command = AmazfitBipService.COMMAND_SET_LANGUAGE_ENGLISH;
switch (language) {
case "zh":
if (country.equals("TW") || country.equals("HK") || country.equals("MO")) { // Taiwan, Hong Kong, Macao
command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_TRADITIONAL_CHINESE;
localeString = "zh_TW";
} else {
command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_SIMPLIFIED_CHINESE;
localeString = "zh_CN";
}
break;
case "es":
command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_SPANISH;
localeString = "es_ES";
break;
default:
command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_ENGLISH;
localeString = "en_US";
break;
}
}
command_new = AmazfitBipService.COMMAND_SET_LANGUAGE_NEW_TEMPLATE;
System.arraycopy(localeString.getBytes(), 0, command_new, 3, localeString.getBytes().length);
builder.add(new ConditionalWriteAction(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION)) {
@Override
protected byte[] checkCondition() {
if (gbDevice.getType() == DeviceType.AMAZFITBIP && new Version(gbDevice.getFirmwareVersion()).compareTo(new Version("0.1.0.77")) >= 0) {
return command_new;
} else {
return command_old;
}
}
});
builder.write(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION), command);
return this;
}

View File

@ -32,6 +32,10 @@ public abstract class HuamiFirmwareInfo {
0x48, 0x4d, 0x52, 0x45, 0x53
};
protected static final byte[] NEWRES_HEADER = new byte[]{ // NERES resources file (*.res)
0x4e, 0x45, 0x52, 0x45, 0x53
};
protected static final byte[] WATCHFACE_HEADER = new byte[]{
0x48, 0x4d, 0x44, 0x49, 0x41, 0x4c
};
@ -40,19 +44,31 @@ public abstract class HuamiFirmwareInfo {
0x48, 0x4d, 0x5a, 0x4b
};
protected static final byte[] NEWFT_HEADER = new byte[]{ // NEZK font file (*.ft, *.ft.xx)
0x4e, 0x45, 0x5a, 0x4b
};
private HuamiFirmwareType firmwareType = HuamiFirmwareType.FIRMWARE;
public String toVersion(int crc16) {
String version = getCrcMap().get(crc16);
if (version == null) {
if (firmwareType == HuamiFirmwareType.FIRMWARE) {
version = searchFirmwareVersion(bytes);
}
else if (firmwareType == HuamiFirmwareType.RES) {
version = "RES " + Integer.toString(bytes[5]);
}
else if (firmwareType == HuamiFirmwareType.RES_NEW) {
version = "RES " + Integer.toString(bytes[14]);
switch (firmwareType) {
case FIRMWARE:
version = searchFirmwareVersion(bytes);
break;
case RES:
version = "RES " + Integer.toString(bytes[5]);
break;
case RES_COMPRESSED:
version = "RES " + Integer.toString(bytes[14]);
break;
case FONT:
version = "FONT " + Integer.toString(bytes[4]);
break;
case FONT_LATIN:
version = "FONT LATIN " + Integer.toString(bytes[4]);
break;
}
}
if (version == null) {
@ -61,6 +77,7 @@ public abstract class HuamiFirmwareInfo {
version = "(unknown)";
break;
case FONT:
case FONT_LATIN:
version = "(unknown font)";
break;
case GPS:

View File

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

View File

@ -37,7 +37,7 @@ public class AmazfitCorFirmwareInfo extends HuamiFirmwareInfo {
private static final int FW_HEADER_OFFSET_2 = 0x9340;
private static final int FW_HEADER_OFFSET_3 = 0x9288;
private static final int NEW_RES_HEADER_OFFSET = 0x9;
private static final int COMPRESSED_RES_HEADER_OFFSET = 0x9;
private static Map<Integer, String> crcToVersion = new HashMap<>();
@ -45,10 +45,12 @@ public class AmazfitCorFirmwareInfo extends HuamiFirmwareInfo {
// firmware
crcToVersion.put(39948, "1.0.5.60");
crcToVersion.put(62147, "1.0.5.78");
crcToVersion.put(54213, "1.0.6.76");
// resources
crcToVersion.put(46341, "RES 1.0.5.60");
crcToVersion.put(21770, "RES 1.0.5.78");
crcToVersion.put(64977, "RES 1.0.6.76");
}
@ -63,11 +65,13 @@ public class AmazfitCorFirmwareInfo extends HuamiFirmwareInfo {
return HuamiFirmwareType.INVALID;
}
return HuamiFirmwareType.RES;
} else if (ArrayUtils.equals(bytes, RES_HEADER, NEW_RES_HEADER_OFFSET)) {
return HuamiFirmwareType.RES_NEW;
} else if (ArrayUtils.equals(bytes, RES_HEADER, COMPRESSED_RES_HEADER_OFFSET) || ArrayUtils.equals(bytes, NEWRES_HEADER, COMPRESSED_RES_HEADER_OFFSET)) {
return HuamiFirmwareType.RES_COMPRESSED;
} else if (ArrayUtils.equals(bytes, FW_HEADER, FW_HEADER_OFFSET) || ArrayUtils.equals(bytes, FW_HEADER, FW_HEADER_OFFSET_2) || ArrayUtils.equals(bytes, FW_HEADER, FW_HEADER_OFFSET_3)) {
// TODO: this is certainly not a correct validation, but it works for now
return HuamiFirmwareType.FIRMWARE;
} else if (ArrayUtils.startsWith(bytes, WATCHFACE_HEADER)) {
return HuamiFirmwareType.WATCHFACE;
}
return HuamiFirmwareType.INVALID;
}

View File

@ -129,7 +129,7 @@ class PebbleIoThread extends GBDeviceIoThread {
WebViewSingleton.invokeWebview(new WebViewSingleton.WebViewRunnable() {
@Override
public void invoke(WebView webView) {
webView.evaluateJavascript("Pebble.evaluate('" + jsEvent + "',[" + appMessage + "]);", new ValueCallback<String>() {
webView.evaluateJavascript("if (typeof Pebble == 'object') Pebble.evaluate('" + jsEvent + "',[" + appMessage + "]);", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
//TODO: the message should be acked here instead of in PebbleIoThread

View File

@ -2238,18 +2238,23 @@ public class PebbleProtocol extends GBDeviceProtocol {
switch (command) {
case APPRUNSTATE_START:
LOG.info(ENDPOINT_NAME + ": started " + uuid);
currentRunningApp = uuid;
AppMessageHandler handler = mAppMessageHandlers.get(uuid);
if (handler != null) {
currentRunningApp = uuid;
return handler.onAppStart();
}
else {
GBDeviceEventAppManagement gbDeviceEventAppManagement = new GBDeviceEventAppManagement();
gbDeviceEventAppManagement.uuid = uuid;
gbDeviceEventAppManagement.type = GBDeviceEventAppManagement.EventType.START;
gbDeviceEventAppManagement.event = GBDeviceEventAppManagement.Event.SUCCESS;
return new GBDeviceEvent[] {gbDeviceEventAppManagement};
if (!uuid.equals(currentRunningApp)) {
currentRunningApp = uuid;
GBDeviceEventAppManagement gbDeviceEventAppManagement = new GBDeviceEventAppManagement();
gbDeviceEventAppManagement.uuid = uuid;
gbDeviceEventAppManagement.type = GBDeviceEventAppManagement.EventType.START;
gbDeviceEventAppManagement.event = GBDeviceEventAppManagement.Event.SUCCESS;
return new GBDeviceEvent[]{gbDeviceEventAppManagement};
}
}
break;
case APPRUNSTATE_STOP:
LOG.info(ENDPOINT_NAME + ": stopped " + uuid);
break;
@ -2603,13 +2608,13 @@ public class PebbleProtocol extends GBDeviceProtocol {
LOG.info((endpoint == ENDPOINT_LAUNCHER ? "got LAUNCHER PUSH from UUID : " : "got APPLICATIONMESSAGE PUSH from UUID : ") + uuid);
AppMessageHandler handler = mAppMessageHandlers.get(uuid);
if (handler != null) {
currentRunningApp = uuid;
if (handler.isEnabled()) {
if (endpoint == ENDPOINT_APPLICATIONMESSAGE) {
ArrayList<Pair<Integer, Object>> dict = decodeDict(buf);
devEvts = handler.handleMessage(dict);
}
else {
currentRunningApp = uuid;
devEvts = handler.onAppStart();
}
} else {
@ -2617,22 +2622,26 @@ public class PebbleProtocol extends GBDeviceProtocol {
}
} else {
try {
if (endpoint == ENDPOINT_APPLICATIONMESSAGE) {
devEvts = decodeDictToJSONAppMessage(uuid, buf);
}
else {
currentRunningApp = uuid;
GBDeviceEventAppManagement gbDeviceEventAppManagement = new GBDeviceEventAppManagement();
gbDeviceEventAppManagement.uuid = uuid;
gbDeviceEventAppManagement.type = GBDeviceEventAppManagement.EventType.START;
gbDeviceEventAppManagement.event = GBDeviceEventAppManagement.Event.SUCCESS;
devEvts = new GBDeviceEvent[] {gbDeviceEventAppManagement};
}
devEvts = decodeDictToJSONAppMessage(uuid, buf);
} catch (JSONException e) {
LOG.error(e.getMessage());
return null;
}
if (!uuid.equals(currentRunningApp)) {
GBDeviceEventAppManagement gbDeviceEventAppManagement = new GBDeviceEventAppManagement();
gbDeviceEventAppManagement.uuid = uuid;
gbDeviceEventAppManagement.type = GBDeviceEventAppManagement.EventType.START;
gbDeviceEventAppManagement.event = GBDeviceEventAppManagement.Event.SUCCESS;
// prepend the
GBDeviceEvent concatEvents[] = new GBDeviceEvent[(devEvts != null ? devEvts.length : 0) + 1];
concatEvents[0] = gbDeviceEventAppManagement;
if (devEvts != null) {
System.arraycopy(devEvts, 0, concatEvents, 1, devEvts.length);
}
devEvts = concatEvents;
}
}
currentRunningApp = uuid;
break;
case APPLICATIONMESSAGE_ACK:
case APPLICATIONMESSAGE_NACK:

View File

@ -23,6 +23,8 @@ import android.util.Pair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Iterator;
@ -44,6 +46,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceIoThread;
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
public class PebbleSupport extends AbstractSerialDeviceSupport {
private static final Logger LOG = LoggerFactory.getLogger(PebbleSupport.class);
@Override
public boolean connect() {
@ -113,12 +116,14 @@ public class PebbleSupport extends AbstractSerialDeviceSupport {
object = byteArray;
} else if (object instanceof Boolean) {
object = (short) (((Boolean) object) ? 1 : 0);
} else if (object instanceof Double) {
object = ((Double) object).intValue();
}
pairs.add(new Pair<>(Integer.parseInt(keyStr), object));
}
getDeviceIOThread().write(((PebbleProtocol) getDeviceProtocol()).encodeApplicationMessagePush(PebbleProtocol.ENDPOINT_APPLICATIONMESSAGE, uuid, pairs, id));
} catch (JSONException e) {
e.printStackTrace();
LOG.error("Error while parsing JSON", e);
}
}

View File

@ -31,6 +31,7 @@ import android.webkit.WebViewClient;
import net.e175.klaus.solarpositioning.DeltaT;
import net.e175.klaus.solarpositioning.SPA;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
@ -55,6 +56,7 @@ public class GBWebClient extends WebViewClient {
private String[] AllowedDomains = new String[]{
"openweathermap.org", //for weather :)
"rawgit.com", //for trekvolle
"tagesschau.de" //for internal watchapp tests
};
private static final Logger LOG = LoggerFactory.getLogger(GBWebClient.class);
@ -82,7 +84,7 @@ public class GBWebClient extends WebViewClient {
private WebResourceResponse mimicReply(Uri requestedUri) {
if (requestedUri.getHost() != null && (org.apache.commons.lang3.StringUtils.indexOfAny(requestedUri.getHost(), AllowedDomains) != -1)) {
if (requestedUri.getHost() != null && (StringUtils.indexOfAny(requestedUri.getHost(), AllowedDomains) != -1)) {
if (internetHelperBound) {
LOG.debug("WEBVIEW forwarding request to the internet helper");
Bundle bundle = new Bundle();
@ -101,8 +103,15 @@ public class GBWebClient extends WebViewClient {
}
} else {
LOG.debug("WEBVIEW request to openweathermap.org detected of type: " + requestedUri.getPath() + " params: " + requestedUri.getQuery());
return mimicOpenWeatherMapResponse(requestedUri.getPath(), requestedUri.getQueryParameter("units"));
if (StringUtils.endsWith(requestedUri.getHost(), "openweathermap.org")){
LOG.debug("WEBVIEW request to openweathermap.org detected of type: " + requestedUri.getPath() + " params: " + requestedUri.getQuery());
return mimicOpenWeatherMapResponse(requestedUri.getPath(), requestedUri.getQueryParameter("units"));
} else if (StringUtils.endsWith(requestedUri.getHost(), "rawgit.com")) {
LOG.debug("WEBVIEW request to rawgit.com detected of type: " + requestedUri.getPath() + " params: " + requestedUri.getQuery());
return mimicRawGitResponse(requestedUri.getPath());
} else {
LOG.debug("WEBVIEW request to allowed domain detected but not intercepted: " + requestedUri.toString());
}
}
} else {
LOG.debug("WEBVIEW request:" + requestedUri.toString() + " not intercepted");
@ -130,7 +139,24 @@ public class GBWebClient extends WebViewClient {
return true;
}
private static WebResourceResponse mimicOpenWeatherMapResponse(String type, String units) {
private WebResourceResponse mimicRawGitResponse(String path) {
if("/aHcVolle/TrekVolle/master/online.html".equals(path)) { //TrekVolle online check
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Map<String, String> headers = new HashMap<>();
headers.put("Access-Control-Allow-Origin", "*");
return new WebResourceResponse("text/html", "utf-8", 200, "OK",
headers,
new ByteArrayInputStream("1".toString().getBytes())
);
} else {
return new WebResourceResponse("text/html", "utf-8", new ByteArrayInputStream("1".toString().getBytes()));
}
}
return null;
}
private WebResourceResponse mimicOpenWeatherMapResponse(String type, String units) {
if (Weather.getInstance() == null) {
LOG.warn("WEBVIEW - Weather instance is null, cannot update weather");

View File

@ -16,6 +16,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.util;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContentUris;
import android.content.Context;
@ -24,18 +25,20 @@ import android.content.res.Configuration;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.ParcelUuid;
import android.os.Parcelable;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.FileProvider;
import android.support.v4.content.LocalBroadcastManager;
import android.text.TextUtils;
import java.io.File;
import java.io.IOException;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import java.net.URISyntaxException;
import java.util.Locale;
@ -54,7 +57,6 @@ public class AndroidUtils {
return null;
}
ParcelUuid[] uuids2 = new ParcelUuid[uuids.length];
//noinspection SuspiciousSystemArraycopy
System.arraycopy(uuids, 0, uuids2, 0, uuids.length);
return uuids2;
}
@ -132,17 +134,28 @@ public class AndroidUtils {
+ Integer.toHexString(Color.blue(color));
}
<<<<<<< HEAD
public static void viewFile(String path, String action, Context context) throws IOException {
Intent intent = new Intent(action);
File file = new File(path);
/**
* As seen on stackoverflow https://stackoverflow.com/a/36714242/1207186
* Try to find the file path of a document uri
* @param context the application context
* @param uri the Uri for which the path should be resolved
* @return the path corresponding to the Uri as a String
* @throws IllegalArgumentException on any problem decoding the uri to a path
*/
public static @NonNull String getFilePath(@NonNull Context context, @NonNull Uri uri) throws IllegalArgumentException {
try {
String path = internalGetFilePath(context, uri);
if (TextUtils.isEmpty(path)) {
throw new IllegalArgumentException("Unable to decode the given uri to a file path: " + uri);
}
return path;
} catch (IllegalArgumentException ex) {
throw ex;
} catch (Exception ex) {
throw new IllegalArgumentException("Unable to decode the given uri to a file path: " + uri, ex);
}
}
Uri contentUri = FileProvider.getUriForFile(context,
context.getApplicationContext().getPackageName() + ".screenshot_provider", file);
intent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setData(contentUri);
context.startActivity(intent);
=======
/**
* As seen on stackoverflow https://stackoverflow.com/a/36714242/1207186
* Try to find the file path of a document uri
@ -151,9 +164,10 @@ public class AndroidUtils {
* @return the path corresponding to the Uri as a String
* @throws URISyntaxException
*/
public static String getFilePath(Context context, Uri uri) throws URISyntaxException {
private static @Nullable String internalGetFilePath(@NonNull Context context, @NonNull Uri uri) throws URISyntaxException {
String selection = null;
String[] selectionArgs = null;
// Uri is different in versions after KITKAT (Android 4.4), we need to
if (Build.VERSION.SDK_INT >= 19 && DocumentsContract.isDocumentUri(context.getApplicationContext(), uri)) {
if ("com.android.externalstorage.documents".equals(uri.getAuthority())) {
@ -162,8 +176,13 @@ public class AndroidUtils {
return Environment.getExternalStorageDirectory() + "/" + split[1];
} else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
final String id = DocumentsContract.getDocumentId(uri);
uri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
if (!TextUtils.isEmpty(id)) {
if (id.startsWith("raw:")) {
return id.replaceFirst("raw:", "");
}
uri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
}
} else if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
@ -186,19 +205,26 @@ public class AndroidUtils {
MediaStore.Images.Media.DATA
};
Cursor cursor = null;
try {
cursor = context.getContentResolver()
.query(uri, projection, selection, selectionArgs, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
cursor = context.getContentResolver()
.query(uri, projection, selection, selectionArgs, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
>>>>>>> master
throw new IllegalArgumentException("Unable to decode the given uri to a file path: " + uri);
}
public static void viewFile(String path, String action, Context context) throws IOException {
Intent intent = new Intent(action);
File file = new File(path);
Uri contentUri = FileProvider.getUriForFile(context,
context.getApplicationContext().getPackageName() + ".screenshot_provider", file);
intent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setData(contentUri);
context.startActivity(intent);
}
}

View File

@ -19,7 +19,6 @@ package nodomain.freeyourgadget.gadgetbridge.util;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
@ -29,6 +28,7 @@ import android.os.Handler;
import android.os.Looper;
import android.support.annotation.Nullable;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.widget.Toast;
import org.slf4j.Logger;
@ -51,6 +51,9 @@ import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class GB {
public static final String NOTIFICATION_CHANNEL_ID = "gadgetbridge";
public static final int NOTIFICATION_ID = 1;
public static final int NOTIFICATION_ID_INSTALL = 2;
public static final int NOTIFICATION_ID_LOW_BATTERY = 3;
@ -84,9 +87,9 @@ public class GB {
}
Boolean connected = device.isInitialized();
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID);
builder.setContentTitle(deviceName)
.setTicker(deviceName + text)
.setTicker(deviceName + " - " + text)
.setContentText(text)
.setSmallIcon(connected ? R.drawable.ic_notification : R.drawable.ic_notification_disconnected)
.setContentIntent(getContentIntent(context))
@ -119,7 +122,7 @@ public class GB {
}
public static Notification createNotification(String text, Context context) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID);
builder.setTicker(text)
.setContentText(text)
.setSmallIcon(R.drawable.ic_notification_disconnected)
@ -150,12 +153,16 @@ public class GB {
if (notification == null) {
return;
}
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// TODO: I believe it's better do always use the NMC instead of the old call, but old code works
NotificationManagerCompat nm = NotificationManagerCompat.from(context);
// NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(id, notification);
}
private static void removeNotification(int id, Context context) {
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// TODO: I believe it's better do always use the NMC instead of the old call, but old code works
NotificationManagerCompat nm = NotificationManagerCompat.from(context);
// NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.cancel(id);
}
@ -324,7 +331,7 @@ public class GB {
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
NotificationCompat.Builder nb = new NotificationCompat.Builder(context)
NotificationCompat.Builder nb = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setContentTitle(context.getString(R.string.app_name))
.setContentText(text)
@ -365,7 +372,7 @@ public class GB {
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
NotificationCompat.Builder nb = new NotificationCompat.Builder(context)
NotificationCompat.Builder nb = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
.setContentTitle(context.getString(R.string.app_name))
.setContentText(text)
.setTicker(text)
@ -395,7 +402,7 @@ public class GB {
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
NotificationCompat.Builder nb = new NotificationCompat.Builder(context)
NotificationCompat.Builder nb = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
.setContentTitle(context.getString(R.string.notif_battery_low_title))
.setContentText(text)
.setContentIntent(pendingIntent)
@ -429,7 +436,7 @@ public class GB {
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
NotificationCompat.Builder nb = new NotificationCompat.Builder(context)
NotificationCompat.Builder nb = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
.setContentTitle(context.getString(R.string.notif_export_failed_title))
.setContentText(text)
.setContentIntent(pendingIntent)

View File

@ -19,9 +19,10 @@ package nodomain.freeyourgadget.gadgetbridge.util;
import org.apache.commons.lang3.text.WordUtils;
import java.text.Normalizer;
import java.util.HashMap;
import java.util.Map;
import java.text.Normalizer;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
public class LanguageUtils {
@ -74,6 +75,9 @@ public class LanguageUtils {
put('پ', "p"); put('چ', "ch"); put('ڜ', "ch"); put('ڤ', "v"); put('ڥ', "v");
put('ڨ', "g"); put('گ', "g"); put('ݣ', "g");
// Polish
put('Ł', "L"); put('ł', "l");
//TODO: these must be configurable. If someone wants to transliterate cyrillic it does not mean his device has no German umlauts
//all or nothing is really bad here
}

View File

@ -88,6 +88,7 @@ public class ParcelableWeather2 implements Parcelable {
try {
condition.put("id", forecastConditionCode);
condition.put("main", forecastBundle.getString("weather_condition_text"));
condition.put("description", forecastBundle.getString("weather_condition_text"));
condition.put("icon", Weather.mapToOpenWeatherMapIcon(forecastConditionCode));
weather.put(condition);

View File

@ -1,115 +1,132 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:isScrollContainer="true"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="nodomain.freeyourgadget.gadgetbridge.activities.AlarmDetails">
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_smart_wakeup"
<ScrollView
android:id="@+id/scrollView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:drawableStart="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_smart_wakeup"
android:textAppearance="?android:attr/textAppearanceSmall" />
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true">
<TimePicker
android:id="@+id/alarm_time_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp" />
<LinearLayout
android:id="@+id/dowSelector"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical">
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_monday"
android:id="@+id/alarm_cb_smart_wakeup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:drawableStart="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_mon_short"
android:text="@string/alarm_smart_wakeup"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_tuesday"
android:layout_width="wrap_content"
<TimePicker
android:id="@+id/alarm_time_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_tue_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
android:scaleX="0.7"
android:scaleY="0.7"
android:layout_marginBottom="20dp" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_wednesday"
android:layout_width="wrap_content"
<LinearLayout
android:id="@+id/dowSelector"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_wed_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
android:baselineAligned="false"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_thursday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_thu_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_monday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_mon_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_friday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_fri_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_tuesday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_tue_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_saturday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_sat_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_wednesday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_wed_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_sunday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_sun_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_thursday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_thu_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_friday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_fri_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_saturday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_sat_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
<android.support.v7.widget.AppCompatCheckedTextView
android:id="@+id/alarm_cb_sunday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center"
android:text="@string/alarm_sun_short"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>

View File

@ -48,16 +48,20 @@
<string name="title_activity_fw_app_insaller">Εγκαταστάτης εφαρμογών/FW</string>
<string name="fw_upgrade_notice">Πρόκειται να εγκαταστήσετε την έκδοση λογισμικού %s αντί για αυτή που έχετε τώρα στο Mi Band σας.</string>
<string name="fw_upgrade_notice_amazfitbip">"Πρόκειται να εγκαταστήστε το λογισμικό έκδοσης %s στο Amazfit Bip σας.
<string name="fw_upgrade_notice_amazfitbip">"Πρόκειται να εγκαταστήστε το λογισμικό έκδοσης %s στο Amazfit Bip σας.
\n
\nΠαρακαλώ να είστε σίγουροι ότι θα εγκαταστήσετε το αρχείο .gps, μετά το αρχείο .res και τέλος το αρχείο .fw. Το smartwatch θα κάνει επανεκκίνηση μετά την εγκατάσταση του .fw αρχείου.
\n
\nΣημείωση: Δεν χρειάζεται η εγκατάσταση των αρχείων .res και .gps αν αυτά είναι ακριβώς τα ίδια με αυτά που έχουν εγκατασταθεί προηγουμένως.
\nΠαρακαλώ να είστε σίγουροι ότι θα εγκαταστήσετε το αρχείο .fw, μετά το αρχείο .res και τέλος το αρχείο .gps. Το smartwatch θα κάνει επανεκκίνηση μετά την εγκατάσταση του .fw αρχείου.
\n
\n
\nΣημείωση: Δεν χρειάζεται η εγκατάσταση των αρχείων .res και .gps αν αυτά είναι ακριβώς τα ίδια με αυτά που έχουν εγκατασταθεί προηγουμένως.
\n
\n
\n
\nΠΡΟΧΩΡΗΣΤΕ ΜΕ ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ!"</string>
<string name="fw_upgrade_notice_amazfitcor">Πρόκειται να εγκαταστήσετε το λογισμικό %s για το Amazfit Cor.
\n
\nΠαρακαλώ βεβαιωθείτε ότι θα εγκαταστήσετε το αρχείο .res και μετά το αρχείο .fw. Το smartwatch θα επανεκκινήσει μετά την εγκατάσταση του .fw αρχείου.
\nΠαρακαλώ βεβαιωθείτε ότι θα εγκαταστήσετε το αρχείο .fw και μετά το αρχείο .res. Το smartwatch θα επανεκκινήσει μετά την εγκατάσταση του .fw αρχείου.
\n
\nΣημείωση: Το αρχείο .res δεν χρειάζεται εγκατάσταση αν είναι ακριβώς το ίδιο με αυτό που έχει εγκατασταθεί προηγούμενα.
\n
@ -68,7 +72,7 @@
\n
\nΔΕΝ συνίσταται η εγκατάσταση του στο Mi Band σας!</string>
<string name="title_activity_appmanager">Διαχειριστής εφαρμογών</string>
<string name="miband_firmware_suggest_whitelist">Αν ακόμη θέλετε να προχωρήσετε και μετά όλα λειτουργούν κανονικά, παρακαλούμε ενημερώστε τους δημιουργούς του Gadgetbridge σχετικά με την έκδοση: %s</string>
<string name="miband_firmware_suggest_whitelist">Αν ακόμη θέλετε να προχωρήσετε και μετά όλα λειτουργούν κανονικά, παρακαλούμε ενημερώστε τους δημιουργούς του Gadgetbridge σχετικά με την %s έκδοση</string>
<string name="title_activity_settings">Ρυθμίσεις</string>
@ -174,7 +178,7 @@
<string name="pref_title_pebble_forceuntested">Να επιτρέπονται τα μη δοκιμασμένα χαρακτηριστικά</string>
<string name="pref_summary_pebble_forceuntested">Χρήση μη δοκιμασμένων χαρακτηριστικών. ΕΝΕΡΓΟΠΟΙΗΣΤΕ ΜΟΝΟ ΑΝ ΞΕΡΕΤΕ ΤΙ ΚΑΝΕΤΕ!</string>
<string name="pref_title_pebble_forcele">Πάντα να προτιμάται το Bluetooth χαμηλής ενέργειας (BLE)</string>
<string name="pref_summary_pebble_forcele">Χρήση της δοκιμαστικής υποστήριξης του Pebble LE για όλα τα Pebble αντί της κλασικής υποστήριξης BT, απαιτεί τη σύζευξη Pebble LE μετά από σύνδεση μίας μη LE</string>
<string name="pref_summary_pebble_forcele">Χρήση της δοκιμαστικής υποστήριξης του Pebble LE για όλα τα Pebble αντί της κλασικής υποστήριξης BT. Αυτό απαιτεί τη σύζευξη μη LE πρώτα και μετά σύνδεση Pebble LE</string>
<string name="pref_title_pebble_mtu_limit">Όριο Pebble 2/LE GATT MTU</string>
<string name="pref_summary_pebble_mtu_limit">Αν το Pebble 2/Pebble LE δεν λειτουργεί αναμενόμενα, προσπαθήστε να βάλετε όριο στο MTU (από 20 έως 512)</string>
<string name="pref_title_pebble_enable_applogs">Να επιτρέπεται η καταγραφή δεδομένων</string>
@ -210,7 +214,7 @@
<string name="gadgetbridge_running">Το Gadgetbridge εκτελείται</string>
<string name="installing_binary_d_d">Γίνεται εγκατάσταση των βιβλιοθηκών %1$d/%2$d</string>
<string name="installation_failed_">Η εγκατάσταση απέτυχε</string>
<string name="installation_successful">Η εγκατάσταση έγινε επιτυχώς</string>
<string name="installation_successful">Εγκατεστημένο</string>
<string name="firmware_install_warning">ΠΡΟΣΠΑΘΕΙΤΕ ΝΑ ΕΓΚΑΤΑΣΤΗΣΕΤΕ ΛΟΓΙΣΜΙΚΟ, ΠΡΟΧΩΡΗΣΤΕ ΜΕ ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ.
\n
\n
@ -313,7 +317,7 @@
<string name="user_feedback_miband_set_alarms_ok">Τα ξυπνητήρια στάλθηκαν στη συσκευή!</string>
<string name="chart_no_data_synchronize">Χωρίς δεδομένα. Συγχρονισμός με τη συσκευή;</string>
<string name="user_feedback_miband_activity_data_transfer">"Θα γίνει μεταφορά %1$s δεδομένων ξεκινώντας από %2$s"</string>
<string name="miband_prefs_fitness_goal">Επιθυμητός αριθμός βημάτων ανά μέρα</string>
<string name="miband_prefs_fitness_goal">Στόχος βημάτων ανά μέρα</string>
<string name="dbaccess_error_executing">Σφάλμα κατά την εκτέλεση \"%1$s\"</string>
<string name="controlcenter_start_activitymonitor">Η δραστηριότητά σας (ΥΠΟ ΔΟΚΙΜΗ)</string>
<string name="cannot_connect">Δεν μπορεί να συνδεθεί: %1$s</string>
@ -327,7 +331,7 @@
\n</string>
<string name="notif_battery_low_bigtext_number_of_charges">Αριθμός φορτίσεων: %s</string>
<string name="sleepchart_your_sleep">Ο ύπνος σας</string>
<string name="weeksleepchart_sleep_a_week">Ύπνος την εβδομάδα</string>
<string name="weeksleepchart_sleep_a_week">Ύπνος ανά εβδομάδα</string>
<string name="weeksleepchart_today_sleep_description">Ύπνος σήμερα, στόχος: %1$s</string>
<string name="weekstepschart_steps_a_week">Βήματα την εβδομάδα</string>
<string name="activity_sleepchart_activity_and_sleep">Η δραστηριότητα και ο ύπνος σας</string>
@ -438,7 +442,7 @@
<string name="device_fw">Έκδοση λογισμικού: %1$s</string>
<string name="error_creating_directory_for_logfiles">Σφάλμα κατά τη δημιουργία φακέλου για τα αρχεία καταγραφής: %1$s</string>
<string name="DEVINFO_HR_VER">"HR: "</string>
<string name="updatefirmwareoperation_update_in_progress">Αναβάθμιση του λογισμικού σε εξέλιξη</string>
<string name="updatefirmwareoperation_update_in_progress">Αναβάθμιση του λογισμικού</string>
<string name="updatefirmwareoperation_firmware_not_sent">Το λογισμικό δεν απεστάλη στη συσκευή</string>
<string name="charts_legend_heartrate">Σφυγμοί</string>
<string name="live_activity_heart_rate">Σφυγμοί</string>
@ -462,11 +466,11 @@
<string name="dbmanagementactivity_error_importing_shared">Σφάλμα ρυθμίσεων εισαγωγής της βάσης δεδομένων: %1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">Διαγραφή των δεδομένων της δραστηριότητάς σας;</string>
<string name="dbmanagementactivity_really_delete_entire_db">Θέλετε πραγματικά να σβήσετε όλη τη βάση δεδομένων; Όλα τα δεδομένα της δραστηριότητάς σας και οι πληροφορίες για την συσκευή σας θα χαθούν.</string>
<string name="dbmanagementactivity_database_successfully_deleted">Τα δεδομένα διαγράφηκαν επιτυχώς.</string>
<string name="dbmanagementactivity_database_successfully_deleted">Τα δεδομένα διαγράφηκαν.</string>
<string name="dbmanagementactivity_db_deletion_failed">Η διαγραφή της βάσης δεδομένων απέτυχε.</string>
<string name="dbmanagementactivity_delete_old_activity_db">Διαγραφή της παλιάς βάσης δεδομένων;</string>
<string name="dbmanagementactivity_delete_old_activitydb_confirmation">Θέλετε πραγματικά να διαγραφεί η παλιά βάση δεδομένων; Τα δεδομένα της δραστηριότητάς σας που δεν έχουν εισαχθεί θα χαθούν.</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">Τα παλιά δεδομένα της δραστηριότητάς σας διαγράφηκαν επιτυχώς.</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">Τα παλιά δεδομένα της δραστηριότητάς σας διαγράφηκαν.</string>
<string name="dbmanagementactivity_old_activity_db_deletion_failed">Η διαγραφή της παλιάς βάσης δεδομένων απέτυχε.</string>
<string name="dbmanagementactivity_overwrite">Αντικατάσταση</string>
<string name="Cancel">Ακύρωση</string>
@ -475,7 +479,7 @@
<string name="title_activity_vibration">Δόνηση</string>
<string name="title_activity_pebble_pairing">Σύζευξη Pebble</string>
<string name="pebble_pairing_hint">Ένα παράθυρο σύζευξης θα εμφανιστεί στο κινητό σας. Αν αυτό δεν συμβεί, δείτε στη περιοχή ειδοποιήσεων και δεχθείτε την σύζευξη. Μετά δεχθείτε την σύζευξη και στο Pebble σας</string>
<string name="pebble_pairing_hint">Ένα παράθυρο σύζευξης θα εμφανιστεί στην Abdroid συσκευή σας. Αν αυτό δεν συμβεί, δείτε στη περιοχή ειδοποιήσεων και δεχθείτε την σύζευξη. Επίσης μετά δεχθείτε την σύζευξη και στο Pebble σας</string>
<string name="weather_notification_label">Βεβαιωθείτε ότι αυτό το θέμα είναι ενεργοποιημένο στην εφαρμογή του καιρού ώστε να λάβει τις πληροφορίες το Pebble.
\n
@ -543,4 +547,14 @@
<string name="devicetype_no1_f1">No.1 F1</string>
<string name="devicetype_teclast_h30">Teclast H30</string>
<string name="pref_title_weather">Καιρός</string>
<string name="pref_header_auto_export">Αυτόματη εξαγωγή ρυθμίσεων</string>
<string name="pref_title_auto_export_enabled">Η αυτόματη εξαγωγή είναι ενεργοποιημένη</string>
<string name="pref_title_auto_export_location">Διαδρομή εξαγωγής</string>
<string name="pref_title_auto_export_interval">Κάθε πότε θα γίνεται η εξαγωγή</string>
<string name="pref_summary_auto_export_interval">Εξαγωγή κάθε %d ώρες</string>
<string name="notif_export_failed_title">Η εξαγωγή της βάσης δεδομένων απέτυχε! Παρακαλώ ελέγξτε τις ρυθμίσεις σας.</string>
<string name="choose_auto_export_location">Διαλέξτε διαδρομή εξαγωγής</string>
<string name="spanish">Ισπανικά</string>
</resources>

View File

@ -46,12 +46,12 @@
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">Instalador de FW/App</string>
<string name="fw_upgrade_notice">Estás a punto de instalar el firmware %s en lugar del que está en tu MiBand.</string>
<string name="fw_multi_upgrade_notice">Estás a punto de instalar los firmwares %1$s y %2$s en lugar de los que están en tu MiBand.</string>
<string name="fw_multi_upgrade_notice">Estás a punto de instalar los firmware %1$s y %2$s en lugar de los que están en tu MiBand</string>
<string name="miband_firmware_known">Este firmware ha sido probado y se sabe que es compatible con Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Este firmware no ha sido probado y puede que no sea compatible con Gadgetbridge.
\n
\n¡NO se recomienda la instalación en tu MiBand!</string>
<string name="miband_firmware_suggest_whitelist">Si aun así quieres seguir y las cosas continúan funcionando correctamente, por favor indícales a los desarrolladores de Gadgetbridge que esta versión del firmware funciona bien: %s</string>
<string name="miband_firmware_unknown_warning">Este firmware no ha sido probado y puede que no sea compatible con Gadgetbridge.
\n
\n¡NO se recomienda la instalación en tu Mi Band!</string>
<string name="miband_firmware_suggest_whitelist">Si aun así quieres seguir y las cosas continúan funcionando correctamente, por favor indícales a los desarrolladores de Gadgetbridge que la versión %s del firmware funciona bien</string>
<!--Strings related to Settings-->
<string name="title_activity_settings">Ajustes</string>
<string name="pref_header_general">Ajustes generales</string>
@ -79,7 +79,7 @@
<string name="pref_title_notifications_generic">Soporte para notificaciones genéricas</string>
<string name="pref_title_whenscreenon">…también con pantalla encendida</string>
<string name="pref_title_notification_filter">No Molestar</string>
<string name="pref_summary_notification_filter">Dejar de enviar notificaciones no deseadas basándose en el modo No Molestar</string>
<string name="pref_summary_notification_filter">Dejar de enviar notificaciones no deseadas en el modo No Molestar</string>
<string name="pref_title_transliteration">Transcripción</string>
<string name="pref_summary_transliteration">Utilizar en caso de que tu dispositivo no soporte la fuente de tu idioma</string>
<string name="always">Siempre</string>
@ -134,7 +134,7 @@
<string name="pref_title_pebble_forceuntested">Habilitar características no probadas</string>
<string name="pref_summary_pebble_forceuntested">Habilita características que no han sido probadas. ¡HABILÍTALO SOLO SI SABES LO QUE ESTÁS HACIENDO!</string>
<string name="pref_title_pebble_forcele">Preferir siempre BLE</string>
<string name="pref_summary_pebble_forcele">Usar el soporte experimental de Pebble LE para todos los Pebble en lugar del Bluetooth clásico, lo cual requiere vincular \"Pebble LE\" si un Pebble no-LE ha sido vinculado antes</string>
<string name="pref_summary_pebble_forcele">Usar el soporte experimental de Pebble LE para todos los Pebble en lugar del Bluetooth clásico. Esto requiere vincular primero con Pebble no LE, y luego Pebble LE</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE límite de GATT MTU</string>
<string name="pref_summary_pebble_mtu_limit">Si tu Pebble 2/Pebble LE no funciona correctamente, prueba esta opción para limitar el MTU (rango válido 20512)</string>
<string name="pref_title_pebble_enable_applogs">Activar los logs de las aplicaciones del reloj</string>
@ -165,7 +165,7 @@
<string name="gadgetbridge_running">Gadgetbridge funcionando</string>
<string name="installing_binary_d_d">Instalando binario %1$d/%2$d</string>
<string name="installation_failed_">La instalación ha fallado</string>
<string name="installation_successful">Instalación correcta</string>
<string name="installation_successful">Instalado</string>
<string name="firmware_install_warning">ESTÁS INTENTANDO INSTALAR UN FIRMWARE, CONTINÚA BAJO TU RESPONSABILIDAD.\n\n\n Este firmware es para la revisión de HW: %s</string>
<string name="app_install_info">Estás a punto de instalar la siguiente app:\n\n\n%1$s Versión %2$s de %3$s\n</string>
<string name="n_a">N/A</string>
@ -245,7 +245,7 @@
<string name="user_feedback_miband_set_alarms_ok">¡Alarmas enviadas al dispositivo!</string>
<string name="chart_no_data_synchronize">Sin datos. ¿Sincronizar dispositivo?</string>
<string name="user_feedback_miband_activity_data_transfer">A punto de transferir %1$s de datos desde %2$s</string>
<string name="miband_prefs_fitness_goal">Objetivo de pasos al día</string>
<string name="miband_prefs_fitness_goal">Objetivo de pasos diarios</string>
<string name="dbaccess_error_executing">Error al ejecutar \'%1$s\'</string>
<string name="controlcenter_start_activitymonitor">Tu actividad (ALPHA)</string>
<string name="cannot_connect">No se puede conectar: %1$s</string>
@ -258,11 +258,11 @@
<string name="notif_battery_low_bigtext_last_charge_time">Última carga: %s \n</string>
<string name="notif_battery_low_bigtext_number_of_charges">Número de cargas: %s</string>
<string name="sleepchart_your_sleep">Tu sueño</string>
<string name="weeksleepchart_sleep_a_week">Sueño esta semana</string>
<string name="weeksleepchart_sleep_a_week">Sueño por semana</string>
<string name="weeksleepchart_today_sleep_description">Sueño hoy, objetivo: %1$s</string>
<string name="weekstepschart_steps_a_week">Pasos por semana</string>
<string name="activity_sleepchart_activity_and_sleep">Tu actividad y sueño</string>
<string name="updating_firmware">Actualizando firmware…</string>
<string name="updating_firmware">Instalando firmware…</string>
<string name="fwapp_install_device_not_ready">El archivo no puede ser instalado, el dispositivo no está listo.</string>
<string name="installhandler_firmware_name">%1$s: %2$s %3$s</string>
<string name="miband_fwinstaller_compatible_version">Versión compatible</string>
@ -276,7 +276,7 @@
<string name="updatefirmwareoperation_metadata_updateproblem">Hubo un problema con la transferencia de metadatos del firmware</string>
<string name="updatefirmwareoperation_update_complete">Instalación del firmware completa</string>
<string name="updatefirmwareoperation_update_complete_rebooting">Instalación del firmware completa, reiniciando dispositivo…</string>
<string name="updatefirmwareoperation_write_failed">Falló la escritura del firmware</string>
<string name="updatefirmwareoperation_write_failed">Falló la instalación del firmware</string>
<string name="chart_steps">Pasos</string>
<string name="calories">Calorías</string>
<string name="distance">Distancia</string>
@ -288,8 +288,8 @@
<string name="pref_title_dont_ack_transfer">No confirmar transferencia</string>
<string name="pref_summary_dont_ack_transfers">Si los datos no son marcados como descargados, no serán borrados de tu Mi Band. Útil si Gadgetbridge se usa conjuntamente con otras apps.</string>
<string name="pref_summary_keep_data_on_device">Mantendrá los datos de actividad en la Mi Band incluso después de la sincronización. Útil si GB se usa junto con otras apps.</string>
<string name="pref_title_low_latency_fw_update">Usa el modo de baja latencia para las actualizaciones de firmware</string>
<string name="pref_summary_low_latency_fw_update">Esto podría ayudar en dispositivos donde las actualizaciones de firmware fallan</string>
<string name="pref_title_low_latency_fw_update">Usa el modo de baja latencia para las instalaciones de firmware</string>
<string name="pref_summary_low_latency_fw_update">Esto podría ayudar en dispositivos donde las instalaciones de firmware fallan</string>
<string name="live_activity_steps_history">Historial de pasos</string>
<string name="live_activity_current_steps_per_minute">Pasos/min actuales</string>
<string name="live_activity_total_steps">Pasos totales</string>
@ -341,7 +341,7 @@
<string name="device_fw">Versión de firmware: %1$s</string>
<string name="error_creating_directory_for_logfiles">Error creando un directorio para los archivos de registro: %1$s</string>
<string name="DEVINFO_HR_VER">"RH: "</string>
<string name="updatefirmwareoperation_update_in_progress">Actualización del Firmware en progreso</string>
<string name="updatefirmwareoperation_update_in_progress">Instalando firmware</string>
<string name="updatefirmwareoperation_firmware_not_sent">Firmware no enviado</string>
<string name="charts_legend_heartrate">Ritmo cardíaco</string>
<string name="live_activity_heart_rate">Ritmo cardíaco</string>
@ -357,7 +357,7 @@
<string name="dbmanagementactivity_error_exporting_shared">Error de exportación de las preferencias: %1$s</string>
<string name="dbmanagementactivity_import_data_title">¿Importar Datos?</string>
<string name="dbmanagementactivity_overwrite_database_confirmation">¿Quiere sobreescribir la base de datos actual? Todos sus datos actuales (si los hay) se borrarán.</string>
<string name="dbmanagementactivity_import_successful">Importado con éxito.</string>
<string name="dbmanagementactivity_import_successful">Importado.</string>
<string name="dbmanagementactivity_error_importing_db">Error de importación de la base de datos: %1$s</string>
<string name="dbmanagementactivity_error_importing_shared">Error de importación de las preferencias: %1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">¿Quieres borrar los datos de actividad?</string>
@ -375,7 +375,7 @@
<string name="title_activity_vibration">Vibración</string>
<!--Strings related to Pebble Pairing Activity-->
<string name="title_activity_pebble_pairing">Emparejando con Pebble</string>
<string name="pebble_pairing_hint">En su dispositivo Android aparecerá un mensaje para emparejar. Si no aparece, mira en el cajón de notificaciones y acepta la propuesta de emparejamiento. Después acepta también en tu Pebble.</string>
<string name="pebble_pairing_hint">En su dispositivo Android aparecerá un mensaje para emparejar. Si no aparece, mira en el cajón de notificaciones y acepta la propuesta de emparejamiento. Después acepta también en tu Pebble</string>
<string name="weather_notification_label">Asegúrate de que este tema esté activado en la aplicación de notificación del tiempo para obtener la información en tu Pebble.\n\nNo se requiere configuración.\n\nPuedes activar la aplicación del tiempo del sistema desde la configuración de la app.\n\nLas watchfaces soportadas mostrarán la información del tiempo automáticamente.</string>
<string name="pref_title_setup_bt_pairing">Activar el emparejamiento Bluetooth</string>
<string name="pref_summary_setup_bt_pairing">Desactiva esto si tienes problemas de conexión</string>
@ -389,7 +389,7 @@
<string name="miband2_prefs_timeformat">Mi2: formato de hora</string>
<string name="mi2_fw_installhandler_fw53_hint">¡Debes instalar la versión %1$s antes de instalar este firmware!</string>
<string name="mi2_enable_text_notifications">Notificaciones textuales</string>
<string name="mi2_enable_text_notifications_summary">Requiere firmware &gt;= 1.0.1.28 e instalar Mili_pro.ft*</string>
<string name="mi2_enable_text_notifications_summary">Requiere firmware &gt;= 1.0.1.28 y tener Mili_pro.ft* instalado.</string>
<string name="off">Apagado</string>
<string name="mi2_dnd_off">Apagado</string>
<string name="mi2_dnd_automatic">Automático (detección de sueño)</string>
@ -398,7 +398,7 @@
<string name="discovery_bonding_failed_immediately">El enlace con %1$s ha fallado</string>
<string name="discovery_trying_to_connect_to">Intentando conectar con: %1$s</string>
<string name="discovery_enable_bluetooth">Activa el Bluetooth para encontrar dispositivos.</string>
<string name="discovery_successfully_bonded">Correctamente enlazado con %1$s</string>
<string name="discovery_successfully_bonded">Enlazado con %1$s.</string>
<string name="discovery_pair_title">Emparejar con %1$s?</string>
<string name="discovery_pair_question">Selecciona Emparejar para emparejar tus dispositivos. Si esto falla, prueba de nuevo sin emparejar.</string>
<string name="discovery_yes_pair">Emparejar</string>
@ -490,4 +490,12 @@
<string name="devicetype_exrizu_k8">Exrizu K8</string>
<string name="devicetype_no1_f1">No.1 F1</string>
<string name="devicetype_teclast_h30">Teclast H30</string>
<string name="pref_header_auto_export">Exportar automáticamente</string>
<string name="pref_title_auto_export_enabled">Exportación automática activada</string>
<string name="pref_title_auto_export_location">Ubicación de exportación</string>
<string name="pref_title_auto_export_interval">Intervalo de exportación</string>
<string name="pref_summary_auto_export_interval">Exportar cada %d hora(s)</string>
<string name="notif_export_failed_title">¡La exportación de la base de datos ha fallado! Por favor, revisa los ajustes.</string>
<string name="choose_auto_export_location">Elije la ubicación para exportación</string>
</resources>

View File

@ -0,0 +1,82 @@
<?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">Seaded</string>
<string name="action_debug">Silumine</string>
<string name="action_quit">Välju</string>
<string name="action_donate">Annetamine</string>
<string name="controlcenter_fetch_activity_data">Sünkrooni</string>
<string name="controlcenter_find_device">Leia kadunud seade</string>
<string name="controlcenter_take_screenshot">Tee ekraanipilt</string>
<string name="controlcenter_connect">Ühenda</string>
<string name="controlcenter_disconnect">Ühenda lahti</string>
<string name="controlcenter_delete_device">Kustuta seade</string>
<string name="controlcenter_delete_device_name">Kustuta %1$s</string>
<string name="controlcenter_delete_device_dialogmessage">See kustutab seadme ja kõik sellega kaasnevad andmed!</string>
<string name="controlcenter_navigation_drawer_open">Ava navigatsioonisahtel</string>
<string name="controlcenter_navigation_drawer_close">Sulge navigatsioonisahtel</string>
<string name="controlcenter_snackbar_need_longpress">Pikk puudutus selleks et lahti ühendada</string>
<string name="controlcenter_snackbar_disconnecting">Ühendan lahti</string>
<string name="controlcenter_snackbar_connecting">Ühendan</string>
<string name="controlcenter_snackbar_requested_screenshot">Teen seadme ekraanist pilti</string>
<string name="title_activity_debug">Silumine</string>
<string name="title_activity_appmanager">Rakendustehaldur</string>
<string name="appmanager_cached_watchapps_watchfaces">Rakendused vahemälus</string>
<string name="appmanager_installed_watchapps">Paigaldatud rakendused</string>
<string name="appmanager_installed_watchfaces">Paigaldatud kella stiilid</string>
<string name="appmananger_app_delete">Kustuta</string>
<string name="appmananger_app_delete_cache">Kustuta ja eemalda vahemälust</string>
<string name="appmananger_app_reinstall">Taasinstalli</string>
<string name="appmanager_app_openinstore">Otsi Pebble\'i poest</string>
<string name="appmanager_health_activate">Aktiveeri</string>
<string name="appmanager_health_deactivate">Deaktiveeri</string>
<string name="appmanager_hrm_activate">Aktiveeri HRM</string>
<string name="appmanager_hrm_deactivate">Deaktiveeri HRM</string>
<string name="appmanager_weather_activate">Aktiveeri süsteemi ilmarakendus</string>
<string name="appmanager_weather_deactivate">Deaktiveeri süsteemi ilmarakendus</string>
<string name="appmanager_weather_install_provider">Paigalda ilmateavituste rakendus</string>
<string name="app_configure">Seadista</string>
<string name="app_move_to_top">Liiguta kõige üles</string>
<string name="title_activity_appblacklist">Teavituste must nimekiri</string>
<string name="title_activity_calblacklist">Kalendrite must nimekiri</string>
<string name="title_activity_fw_app_insaller">Püsivara/rakenduse paigaldaja</string>
<string name="fw_upgrade_notice">Olete installeerimas püsivara %s selle asemel, mis praegu teie Mi Bandil on.</string>
<string name="fw_upgrade_notice_amazfitbip">Olete installimas %s püsivara enda Amazfit Bip\'ile.
\n
\nPalun kindlasti installeeriga .gps püsivara, siis .res fail ja viimasena .fw fail. Teie kell taaskäivitub pärast .fw faili paigaldust.
\n
\nNote: .res ja .gps faili ei pea installima kui tegu on samade failidega mis eelmisel uuendusel.
\n
\nJÄTKATE OMAL RIISIKOL!</string>
<string name="fw_upgrade_notice_amazfitcor">Olete paigaldamas %s püsivara enda Amazfit Cor\'ile.
\n
\nPalun veenduge, et enne paigaldate .res faili ja pärast seda .fw faili. Teie kell taaskäivitub pärast .fw faili paigaldust.
\n
\nNote: .res faili ei pea paigaldama kui tegu on sama failiga mis eelmisel uuendusel.
\n
\nTESTIMATA, VÕIB TEIE SEADME PABERIRASKUSEKS MUUTA, JÄTKATE OMAL RIISIKOL!</string>
<string name="fw_multi_upgrade_notice">Olete installimas %1$s ja %2$s püsivara selle asemel, mis praegu teie Mi Band\'il on.</string>
<string name="miband_firmware_known">See püsivara on testitud ja on teadaolevalt sobiv koos Gadgetbridge\'iga kasutamiseks.</string>
<string name="miband_firmware_unknown_warning">See püsivara on testimata ja ei pruugi olla Gadgetbridge\'iga ühilduv.
\n
\nSoovitame mitte seda teie Mi Bandile paigaldada!</string>
<string name="title_activity_settings">Seaded</string>
<string name="pref_header_general">Üldised seaded</string>
<string name="pref_title_general_autoconnectonbluetooth">Ühendu seadmega kui Bluetooth lülitatakse sisse</string>
<string name="pref_title_general_autostartonboot">Käivitu automaatselt</string>
<string name="pref_title_general_autocreonnect">Taasühendu automaatselt</string>
<string name="pref_title_audo_player">Eelistatud heli mängija</string>
<string name="pref_default">Vaikeväärtus</string>
<string name="pref_header_datetime">Kuupäev ja kellaaeg</string>
<string name="pref_title_datetime_syctimeonconnect">Sünkrooni aega</string>
<string name="pref_summary_datetime_syctimeonconnect">Sünkrooni aeg seadmega ühendumise ajal ja kui aeg või ajatsoon muutub Androidis</string>
</resources>

View File

@ -48,10 +48,10 @@
<string name="fw_upgrade_notice">Vous êtes sur le point d\'installer le micrologiciel %s à la place de celui qui est actuellement sur votre Mi Band.</string>
<string name="fw_multi_upgrade_notice">Vous êtes sur le point d\'installer les micrologiciels %1$s et %2$s à la place de ceux qui sont actuellement sur votre Mi Band.</string>
<string name="miband_firmware_known">Ce micrologiciel a été testé et est connu pour être compatible avec Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Ce micrologiciel n\'a pas été testé et peut ne pas être compatible avec Gadgetbridge.
\n
\nIl n\'est pas conseillé de le flasher sur votre Mi Band !</string>
<string name="miband_firmware_suggest_whitelist">Si vous désirez continuer et que tout fonctionne correctement par la suite, veuillez en informer les développeurs de Gadgetbridge pour demander l\'ajout de ce micrologiciel à leur liste : %s</string>
<string name="miband_firmware_unknown_warning">Ce micrologiciel n\'a pas été testé et peut ne pas être compatible avec Gadgetbridge.
\n
\nIl n\'est PAS conseillé de le flasher sur votre Mi Band !</string>
<string name="miband_firmware_suggest_whitelist">Si vous désirez continuer et que tout fonctionne correctement par la suite, veuillez en informer les développeurs de Gadgetbridge pour demander l\'ajout du micrologiciel %s à leur liste</string>
<!--Strings related to Settings-->
<string name="title_activity_settings">Paramètres</string>
<string name="pref_header_general">Paramètres généraux</string>
@ -134,7 +134,7 @@
<string name="pref_title_pebble_forceuntested">Activer les fonctionnalités non-testées</string>
<string name="pref_summary_pebble_forceuntested">Activer les fonctionnalités non-testées. ACTIVEZ UNIQUEMENT SI VOUS SAVEZ CE QUE VOUS FAITES !</string>
<string name="pref_title_pebble_forcele">Toujours préférer le BLE</string>
<string name="pref_summary_pebble_forcele">Utiliser le support expérimental du LE pour toutes les Pebble au lieu du Bluetooth classique ; cela requiert le jumelage d\'une \"Pebble LE\" après quune non-LE ait déjà été connectée</string>
<string name="pref_summary_pebble_forcele">Utiliser le support expérimental du LE pour toutes les Pebble au lieu du Bluetooth classique. Cela requiert le jumelage d\'une Pebble non LE, puis d\'une Pebble LE</string>
<string name="pref_title_pebble_mtu_limit">Limite du GATT MTU de Pebble 2/LE</string>
<string name="pref_summary_pebble_mtu_limit">Si votre Pebble 2/LE ne fonctionne pas correctement, essayez d\'activer cette option pour limiter le MTU (plage valide 20-512)</string>
<string name="pref_title_pebble_enable_applogs">Activer les logs des Watch App</string>
@ -165,7 +165,7 @@
<string name="gadgetbridge_running">Gadgetbridge est en fonctionnement</string>
<string name="installing_binary_d_d">Installation du binaire %1$d/%2$d</string>
<string name="installation_failed_">Échec de l\'installation</string>
<string name="installation_successful">Installation réalisée avec succès</string>
<string name="installation_successful">Installé</string>
<string name="firmware_install_warning">VOUS TENTEZ D\'INSTALLER UN MICROLOGICIEL, PROCÉDEZ À VOS RISQUES ET PÉRILS.\n\n\nCe micrologiciel est pour la version de matériel : %s</string>
<string name="app_install_info">Vous êtes sur le point d\'installer l\'application suivante :\n\n\n%1$s Version %2$s par %3$s\n</string>
<string name="n_a">N.D.</string>
@ -258,11 +258,11 @@
<string name="notif_battery_low_bigtext_last_charge_time">Dernière charge : %s \n</string>
<string name="notif_battery_low_bigtext_number_of_charges">Nombre de charges : %s</string>
<string name="sleepchart_your_sleep">Votre sommeil</string>
<string name="weeksleepchart_sleep_a_week">Sommeil cette semaine</string>
<string name="weeksleepchart_sleep_a_week">Sommeil de la semaine</string>
<string name="weeksleepchart_today_sleep_description">Sommeil aujourd\'hui, objectif : %1$s</string>
<string name="weekstepschart_steps_a_week">Pas de la semaine</string>
<string name="activity_sleepchart_activity_and_sleep">Votre activité et sommeil</string>
<string name="updating_firmware">Mise à jour du micrologiciel…</string>
<string name="updating_firmware">Installation du micrologiciel…</string>
<string name="fwapp_install_device_not_ready">Le fichier ne peut pas être installé, l\'appareil n\'est pas prêt.</string>
<string name="installhandler_firmware_name">%1$s: %2$s %3$s</string>
<string name="miband_fwinstaller_compatible_version">Version compatible</string>
@ -276,7 +276,7 @@
<string name="updatefirmwareoperation_metadata_updateproblem">Problème avec le transfert de métadonnées du micrologiciel</string>
<string name="updatefirmwareoperation_update_complete">Installation complète du micrologiciel</string>
<string name="updatefirmwareoperation_update_complete_rebooting">Installation complète du micrologiciel, redémarrage de l\'appareil…</string>
<string name="updatefirmwareoperation_write_failed">Échec lors de l\'écriture du micrologiciel</string>
<string name="updatefirmwareoperation_write_failed">Échec lors de l\'installation du micrologiciel</string>
<string name="chart_steps">Pas</string>
<string name="calories">Calories</string>
<string name="distance">Distance</string>
@ -288,8 +288,8 @@
<string name="pref_title_dont_ack_transfer">Ne pas confirmer le transfert de données d\'activités</string>
<string name="pref_summary_dont_ack_transfers">Les données d\'activités ne seront pas effacées du bracelet si elles ne sont pas confirmées. Utile si GB est utilisé avec d\'autres applications.</string>
<string name="pref_summary_keep_data_on_device">Les données d\'activités seront conservées sur le Mi Band après la synchronisation. Utile si GB est utilisé avec d\'autres applications.</string>
<string name="pref_title_low_latency_fw_update">Utilisez le mode basse latence pour les mises à jour du micrologiciel</string>
<string name="pref_summary_low_latency_fw_update">Cela peut aider sur les appareils où les mises à jour du micrologiciel échouent</string>
<string name="pref_title_low_latency_fw_update">Utilisez le mode basse latence pour installer un micrologiciel</string>
<string name="pref_summary_low_latency_fw_update">Cela peut aider sur les appareils où les installation de micrologiciel échouent</string>
<string name="live_activity_steps_history">Historique de pas</string>
<string name="live_activity_current_steps_per_minute">Pas/minute actuel</string>
<string name="live_activity_total_steps">Nombre total de pas</string>
@ -342,7 +342,7 @@ Temps de sommeil péféré en heures</string>
<string name="device_fw">Version du micrologiciel : %1$s</string>
<string name="error_creating_directory_for_logfiles">Erreur à la création de votre fichier log : %1$s</string>
<string name="DEVINFO_HR_VER">"Révision matérielle : "</string>
<string name="updatefirmwareoperation_update_in_progress">Le micrologiciel se met à jour</string>
<string name="updatefirmwareoperation_update_in_progress">Installation du micrologiciel</string>
<string name="updatefirmwareoperation_firmware_not_sent">Échec lors de l\'écriture du micrologiciel</string>
<string name="charts_legend_heartrate">Fréquence cardiaque</string>
<string name="live_activity_heart_rate">Fréquence cardiaque</string>
@ -361,7 +361,7 @@ NOTE : la base de données sera bien évidement plus grande !</string>
<string name="dbmanagementactivity_error_exporting_shared">Erreur d\'exportation des préférences : %1$s</string>
<string name="dbmanagementactivity_import_data_title">Importer des données ?</string>
<string name="dbmanagementactivity_overwrite_database_confirmation">Voulez-vous vraiment effacer la base de données actuelle ? Toutes vos données (si vous en avez) seront perdues.</string>
<string name="dbmanagementactivity_import_successful">Importation réussie.</string>
<string name="dbmanagementactivity_import_successful">Importé.</string>
<string name="dbmanagementactivity_error_importing_db">Erreur lors de l\'importation de la base de données : %1$s</string>
<string name="dbmanagementactivity_error_importing_shared">Erreur d\'importation des préférences : %1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">Détruire les anciennes données ?</string>
@ -370,7 +370,7 @@ NOTE : la base de données sera bien évidement plus grande !</string>
<string name="dbmanagementactivity_db_deletion_failed">Échec de la destruction de la base de données.</string>
<string name="dbmanagementactivity_delete_old_activity_db">Voulez-vous détruire les anciennes activités de la base de données ?</string>
<string name="dbmanagementactivity_delete_old_activitydb_confirmation">Voulez-vous vraiment détruire entièrement la base de données ? Toutes vos données non importées seront perdues.</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">Les anciennes données d\'activité ont été correctement effacées.</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">Les anciennes données d\'activité ont été effacées.</string>
<string name="dbmanagementactivity_old_activity_db_deletion_failed">Échec de la destruction de l\'ancienne base de données.</string>
<string name="dbmanagementactivity_overwrite">Écraser</string>
<string name="Cancel">Annuler</string>
@ -379,7 +379,7 @@ NOTE : la base de données sera bien évidement plus grande !</string>
<string name="title_activity_vibration">Vibration</string>
<!--Strings related to Pebble Pairing Activity-->
<string name="title_activity_pebble_pairing">Jumelage avec une Pebble</string>
<string name="pebble_pairing_hint">Une fenêtre de jumelage va safficher sur votre téléphone. Si cela ne se produit pas, regardez dans vos notifications et acceptez-la. Acceptez ensuite la demande de jumelage sur votre Pebble.</string>
<string name="pebble_pairing_hint">Une fenêtre de jumelage va safficher sur votre téléphone. Si cela ne se produit pas, regardez dans vos notifications et acceptez-la. Acceptez ensuite la demande de jumelage sur votre Pebble</string>
<string name="weather_notification_label">Assurez vous que ce thème soit activé dans l\'application de notification de la météo pour recevoir les informations sur votre Pebble.\n\nAucune configuration n\'est requise.\n\nVous pouvez activer l\'application météo système de votre Pebble depuis la configuration de l\'application.\n\nLes watchfaces supportées afficheront la météo automatiquement.</string>
<string name="pref_title_setup_bt_pairing">Activer le jumelage Bluetooth</string>
<string name="pref_summary_setup_bt_pairing">Désactivez ceci si vous avez des problèmes de connexion</string>
@ -402,7 +402,7 @@ NOTE : la base de données sera bien évidement plus grande !</string>
<string name="discovery_bonding_failed_immediately">Le lien avec %1$s a échoué instantanément.</string>
<string name="discovery_trying_to_connect_to">Tentative de connexion à : %1$s</string>
<string name="discovery_enable_bluetooth">Activez le Bluetooth pour trouver des dispositifs.</string>
<string name="discovery_successfully_bonded">Correctement lié à %1$s.</string>
<string name="discovery_successfully_bonded">Lié à %1$s.</string>
<string name="discovery_pair_title">Appairer avec %1$s ?</string>
<string name="discovery_pair_question">Sélectionnez Jumeler pour associer vos dispositifs. Si cela échoue, essayez à nouveau sans jumelage.</string>
<string name="discovery_yes_pair">Jumelage</string>
@ -434,7 +434,7 @@ NOTE : la base de données sera bien évidement plus grande !</string>
<string name="_pebble_watch_mute">Silencieux</string>
<string name="_pebble_watch_reply">Répondre</string>
<string name="pref_title_pebble_enable_bgjs">Activer tâche de fond JS</string>
<string name="pref_summary_pebble_enable_bgjs">Si activé, permet aux watchfaces d\'afficher la météo, les informations de batterie, etc.</string>
<string name="pref_summary_pebble_enable_bgjs">Si activé, autorise l\'affichage de la météo, niveau de batterie, etc.</string>
<string name="activity_web_view">Activité Web View</string>
@ -488,4 +488,12 @@ NOTE : la base de données sera bien évidement plus grande !</string>
<string name="devicetype_exrizu_k8">Exrizu K8</string>
<string name="devicetype_no1_f1">No.1 F1</string>
<string name="devicetype_teclast_h30">Teclast H30</string>
<string name="pref_header_auto_export">Exporter automatiquement</string>
<string name="pref_title_auto_export_enabled">Exportation automatique activée</string>
<string name="pref_title_auto_export_location">Emplacement de l\'exportation</string>
<string name="pref_title_auto_export_interval">Intervalle d\'exportation</string>
<string name="pref_summary_auto_export_interval">Exporter toutes les %d heures</string>
<string name="notif_export_failed_title">L\'exportation de la base de données a échoué ! Veuillez vérifier vos paramètres.</string>
<string name="choose_auto_export_location">Choisissez l\'emplacement d\'exportation</string>
</resources>

View File

@ -41,7 +41,7 @@
<string name="fw_multi_upgrade_notice">הקושחות המועמדות להתקנה הנן %1$s ו־%2$s במקום אלו המותקנת על ה־Mi Band שלך נכון לעכשיו.</string>
<string name="miband_firmware_known">קושחה זו נבדקה וידוע כי היא נתמכת ב־Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">קושחה זו לא נבדקה ויתכן כי אינה נתמכת ב־Gadgetbridge.\n\nלא מומלץ להתקין אותה על ה־Mi Band שלך!</string>
<string name="miband_firmware_suggest_whitelist">אם בכל זאת בחרת להמשיך והדברים ממשיכים לעבוד כרגיל, נא לספר למפתחים של Gadgetbridge להוסיף לרשימת ההיתר את גרסת הקושחה: %s</string>
<string name="miband_firmware_suggest_whitelist">אם בכל זאת בחרת להמשיך והדברים ממשיכים לעבוד כרגיל, נא לספר למפתחים של Gadgetbridge להוסיף לרשימת ההיתר את גרסת הקושחה %s</string>
<!--Strings related to Settings-->
<string name="title_activity_settings">הגדרות</string>
<string name="pref_header_general">הגדרות כלליות</string>
@ -69,7 +69,7 @@
<string name="pref_title_notifications_generic">תמיכה בדיווחים גנריים</string>
<string name="pref_title_whenscreenon">…גם כאשר המסך פעיל</string>
<string name="pref_title_notification_filter">לא להפריע</string>
<string name="pref_summary_notification_filter">חסימת שליחה של התרעות בלתי רצויות בהתבסס על המצב לא להפריע</string>
<string name="pref_summary_notification_filter">חסימת שליחה של התרעות בלתי רצויות בזמן שהמצב מכוון על לא להפריע</string>
<string name="pref_title_transliteration">תעתיק</string>
<string name="always">תמיד</string>
<string name="when_screen_off">כאשר המסך כבוי</string>
@ -118,7 +118,7 @@
<string name="pref_title_pebble_forceuntested">הפעלת תכונות שלא נבדקו</string>
<string name="pref_summary_pebble_forceuntested">הפעלת תכונות שלא נבדקו. יש להפעיל רק אם ההשלכות ברורות לך לחלוטין!!</string>
<string name="pref_title_pebble_forcele">תמיד להעדיף BLE</string>
<string name="pref_summary_pebble_forcele">שימוש בתמיכה ניסיונית ב־Pebble LE עבור כל סוגי ה־Pebble במקום ה־Bluetooth הקלסי, נדרש צימוד „Pebble LE“ לאחר שנוצר חיבור שאינו LE בעבר</string>
<string name="pref_summary_pebble_forcele">שימוש בתמיכה ניסיונית ב־Pebble LE, עבור כל סוגי ה־Pebble במקום ה־Bluetooth הקלסי. נדרש צימוד שאינו LE תחילה ולאחר מכן צימוד מסוג „Pebble LE“</string>
<string name="pref_title_pebble_mtu_limit">מגבלת ה־MTU של GATT ל־Pebble 2/LE</string>
<string name="pref_summary_pebble_mtu_limit">אם ה־Pebble 2/Pebble LE שלך אינו עובד כצפוי, יש לנסות אפשרות זאת כדי להגביל את כמות הנתונים המועברת - MTU (טווח תקני 20512)</string>
<string name="pref_title_pebble_enable_applogs">הפעלת מעקב רישום אחר יישומון השעון</string>
@ -226,22 +226,22 @@
<string name="user_feedback_miband_set_alarms_ok">ההתראות נשלחו להתקן!</string>
<string name="chart_no_data_synchronize">אין נתונים. לסנכרן מול ההתקן?</string>
<string name="user_feedback_miband_activity_data_transfer">בהכנות להעברת %1$s של נתונים החל מ־%2$s</string>
<string name="miband_prefs_fitness_goal">יעד צעדים בכל יום</string>
<string name="miband_prefs_fitness_goal">יעד צעדים יומי</string>
<string name="dbaccess_error_executing">שגיאה בהפעלת %1$s</string>
<string name="controlcenter_start_activitymonitor">הפעילות שלך (ניסיוני)</string>
<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>
<string name="notif_battery_low_bigtext_last_charge_time">טעינה אחרונה: %s \n</string>
<string name="notif_battery_low_bigtext_number_of_charges">מספר טעינות: %s</string>
<string name="sleepchart_your_sleep">השינה שלך</string>
<string name="weeksleepchart_sleep_a_week">שינה של שבוע</string>
<string name="weeksleepchart_sleep_a_week">שינה בשבוע</string>
<string name="weeksleepchart_today_sleep_description">שינה היום, יעד: %1$s</string>
<string name="weekstepschart_steps_a_week">צעדים של שבוע</string>
<string name="weekstepschart_steps_a_week">צעדים בשבוע</string>
<string name="activity_sleepchart_activity_and_sleep">הפעילות והשינה שלך</string>
<string name="updating_firmware">הקושחה מתעדכנת…</string>
<string name="fwapp_install_device_not_ready">לא ניתן להתקין את הקובץ, ההתקן לא מוכן.</string>
@ -257,7 +257,7 @@
<string name="updatefirmwareoperation_metadata_updateproblem">אירעה תקלה עם העברת נתוני העל של הקושחה</string>
<string name="updatefirmwareoperation_update_complete">התקנת הקושחה הושלמה</string>
<string name="updatefirmwareoperation_update_complete_rebooting">התקנת הקושחה הושלמה, ההתקן מופעל מחדש…</string>
<string name="updatefirmwareoperation_write_failed">כתיבת הקושחה נכשלה</string>
<string name="updatefirmwareoperation_write_failed">צריבת הקושחה נכשלה</string>
<string name="chart_steps">צעדים</string>
<string name="liveactivity_live_activity">פעילות חיה</string>
<string name="weeksteps_today_steps_description">צעדים היום, יעד: %1$s</string>
@ -323,11 +323,11 @@
<string name="dbmanagementactivity_error_importing_db">שגיאה בייבוא מסד הנתונים: %1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">למחוק את נתוני הפעילות?</string>
<string name="dbmanagementactivity_really_delete_entire_db">באמת למחוק את כל מסד הנתונים? כל נתוני הפעילות והמידע על ההתקנים שלך ילך לאיבוד.</string>
<string name="dbmanagementactivity_database_successfully_deleted">הנתונים נמחקו בהצלחה.</string>
<string name="dbmanagementactivity_database_successfully_deleted">הנתונים נמחקו.</string>
<string name="dbmanagementactivity_db_deletion_failed">מחיקת מסד הנתונים נכשלה.</string>
<string name="dbmanagementactivity_delete_old_activity_db">למחוק את מסד נתוני הפעילות המיושן?</string>
<string name="dbmanagementactivity_delete_old_activitydb_confirmation">ללמחוק את מסד נתוני הפעילות המיושן? נתוני פעילות שלא ייובאו ילכו לאיבוד.</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">נתוני פעילות ישנים נמחקו בהצלחה.</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">נתוני פעילות ישנים נמחקו.</string>
<string name="dbmanagementactivity_old_activity_db_deletion_failed">מחיקת מסד נתוני הפעילות הישן נכשל.</string>
<string name="dbmanagementactivity_overwrite">שכתוב</string>
<string name="Cancel">ביטול</string>
@ -390,8 +390,7 @@
<string name="mi2_prefs_do_not_disturb_end">מועד הסיום</string>
<string name="fw_upgrade_notice_amazfitbip">ביקשת להתקין את הקושחה %s במקום זו שכרגע מותקנת ב־Amazfit Bip שלך.
\n
\nנא לוודא את התקנת הקושחה .gps בהתחלה, לאחר מכן את קובץ ה־‎.res ולבסוף קובץ ה־‎.fw
\n
\nנא לוודא את התקנת קושחת ה־‎.fw בהתחלה, לאחר מכן את קובץ ה־‎.res ולבסוף קובץ ה־‎.gps השעון שלך יופעל מחדש לאחר התקנת קובץ ה־fw.
\n
\nלתשומת לבך: אין צורך בהתקנת קובצי ה־‎.res וה־‎.gps אם הם כבר זהים לאלו שהתקנת בעבר.
\n
@ -412,7 +411,7 @@
<string name="discovery_bonding_failed_immediately">האיגוד עם %1$s נכשל מיידית.</string>
<string name="discovery_trying_to_connect_to">מתבצע ניסיון להתחבר אל: %1$s</string>
<string name="discovery_enable_bluetooth">יש להפעיל Bluetooth כדי לגלות התקנים.</string>
<string name="discovery_successfully_bonded">האיגוד עם %1$s הצליח.</string>
<string name="discovery_successfully_bonded">התבצע איגוד עם %1$s.</string>
<string name="discovery_pair_title">ליצור צימוד עם %1$s?</string>
<string name="discovery_pair_question">יש לבחור בצימוד כדי לצמד את ההתקנים שלך. אם התהליך נכשל, יש לנסות שוב ללא צימוד.</string>
<string name="discovery_yes_pair">לצמד</string>
@ -440,12 +439,12 @@
<string name="controlcenter_connect">התחברות</string>
<string name="pref_summary_pebble_enable_bgjs">כשאפשרות זו פעילה, יתאפשר למסיכות השעון להציג מזג אוויר, סוללה וכו׳.</string>
<string name="fw_upgrade_notice_amazfitcor">פעולה זו תתקין את הקושחה %s במקום הנוכחית שעל ה־Amazfit Cor שלך.
\n
\nנא לוודא את התקנת קובץ ה־‎.res, ולאחר מכן את קובץ ה־‎.fw. השעון שלך יופעל מחדש לאחר התקנת קובץ ה־‎.fw.
\n
\nלתשומת לבך: אין צורך להתקין את קובץ ה־‎.res אם הוא זהה לקובץ שהתקנת בעבר.
\n
<string name="fw_upgrade_notice_amazfitcor">פעולה זו תתקין את הקושחה %s במקום הנוכחית שעל ה־Amazfit Cor שלך.
\n
\nנא לוודא את התקנת קובץ ה־‎.fw, ולאחר מכן את קובץ ה־‎.res. השעון שלך יופעל מחדש לאחר התקנת קובץ ה־‎.fw
\n
\nלתשומת לבך: אין צורך להתקין את קובץ ה־‎.res אם הוא זהה לקובץ שהתקנת בעבר.
\n
\nניסיוני, המשך מעבר לנקודה זו הוא על אחריותך!</string>
<string name="amazfitcor_firmware">קושחה %1$s של Amazfit Cor</string>
<string name="pref_title_charts_swipe">הפעלת הסטה לימין/שמאל בפעילות התרשימים</string>
@ -496,4 +495,6 @@
<string name="notif_export_failed_title">ייצוא מסד הנתונים נכשל! נא לבדוק את ההגדרות שלך.</string>
<string name="choose_auto_export_location">נא לבחור את מיקום הייצוא</string>
</resources>
<string name="spanish">ספרדית</string>
</resources>

View File

@ -49,26 +49,26 @@
<string name="title_activity_controlcenter">Gadgetbru</string>
<string name="controlcenter_delete_device_dialogmessage">Dette vil slette enheten og all tilknyttet data!</string>
<string name="fw_upgrade_notice_amazfitbip">Du er i ferd med å installere fastvaren %s på din Amazfit Bip.
\n
\nForsikre deg om at du installerer .gps-fastvaren, så .res-fila, og til sist .fw-fila. Armbåndsuret ditt vil starte på nytt etter at .fw-fila er installert.
\n
\nMerk: Du må ikke installere .res og .gps hvis disse er akkurat de samme som dem som allerede er installert.
\n
<string name="fw_upgrade_notice_amazfitbip">Du er i ferd med å installere %s-fastvaren på din Amazfit Bip.
\n
\nForsikre deg om at du installerer ..fw-fila, så .res-fila, og til sist gps-fila. Armbåndsuret ditt vil starte på nytt etter at .fw-fila er installert.
\n
\nMerk: Du må ikke installere .res og .gps hvis disse er akkurat de samme som dem som allerede er installert.
\n
\nFORTSETT PÅ EGEN RISIKO!</string>
<string name="fw_upgrade_notice_amazfitcor">Du er i ferd med å installere fastvaren %s på din Amazfit Cor.
\n
\nForsikre deg om at du installerer .res-fila, og så .fw-fila. Armbåndsuret ditt vil starte på nytt etter at .fw-fila er installert.
\n
\nMerk: Du må ikke installere .res og .gps hvis disse er akkurat de samme som dem som allerede er installert.
\n
<string name="fw_upgrade_notice_amazfitcor">Du er i ferd med å installere %s-fastvaren på din Amazfit Cor.
\n
\nForsikre deg om at du installerer .fw-fila, og så .res-fila. Armbåndsuret ditt vil starte på nytt etter at .fw-fila er installert.
\n
\nMerk: Du må ikke installere .res og .gps hvis disse er akkurat de samme som dem som allerede er installert.
\n
\nUTESTET, KAN HAVARERE ENHETEN DIN, FORTSETT PÅ EGEN RISIKO!</string>
<string name="fw_multi_upgrade_notice">Du er i ferd med å installere fastvarene %1$s og %2$s i steden for dem som er installert nå på ditt Mi Band.</string>
<string name="fw_multi_upgrade_notice">Du er i ferd med å installere %1$s- og %2$s-fastvarene isteden for dem som er installert nå på ditt Mi Band.</string>
<string name="miband_firmware_known">Denne fastvaren har blitt testet og er kompatibel med Gadgetbru.</string>
<string name="miband_firmware_unknown_warning">Denne fastvaren er utestet og er kanskje ikke kompatibel med Gadgetbru.
<string name="miband_firmware_unknown_warning">Denne fastvaren er utestet og er kanskje ikke kompatibel med Gadgetbru.
\n
\nDu oppfordres IKKE til å skrive den til ditt Mi Band!</string>
<string name="miband_firmware_suggest_whitelist">Hvis du fremdeles ønsker å fortsette og ting fungerer etterpå, fortell Gadgetbru-utviklerne at de skal hvitliste fastvareversjon: %s</string>
\nDu FRARÅDES fra å skrive den til ditt Mi Band!</string>
<string name="miband_firmware_suggest_whitelist">Hvis du fremdeles ønsker å fortsette og ting fungerer etterpå, fortell Gadgetbru-utviklerne at de skal hvitliste %s-fastvareversjonen</string>
<string name="title_activity_settings">Innstillinger</string>
@ -80,7 +80,7 @@
<string name="pref_default">Forvalg</string>
<string name="pref_header_datetime">Dato og tid</string>
<string name="pref_title_datetime_syctimeonconnect">Synkroniser tid</string>
<string name="pref_summary_datetime_syctimeonconnect">Synkroniser tid til enhet ved tilknobling og når tid eller tidssone endres på Android</string>
<string name="pref_summary_datetime_syctimeonconnect">Synkroniser tid til enhet ved tilkobling, og når tid eller tidssone endres på Android-enheten</string>
<string name="pref_title_theme">Drakt</string>
<string name="pref_theme_light">Lys</string>
@ -101,7 +101,7 @@
<string name="pref_title_notifications_generic">Generisk merknadsstøtte</string>
<string name="pref_title_whenscreenon">…også når skjermen er på</string>
<string name="pref_title_notification_filter">Ikke forstyrr</string>
<string name="pref_summary_notification_filter">Stopp uønskede merkander fra å bli sendt i \"Ikke forstyrr\"-modus</string>
<string name="pref_summary_notification_filter">Stopp uønskede merknader fra å bli sendt i \"Ikke forstyrr\"-modus</string>
<string name="pref_title_transliteration">Translitterasjon</string>
<string name="pref_summary_transliteration">Skru på hvis din enhet ikke har noen støtte for ditt språks skrift</string>
@ -169,7 +169,7 @@
<string name="pref_title_pebble_forceuntested">Skru på utestede funksjoner</string>
<string name="pref_summary_pebble_forceuntested">Skru på utestede funksjoner. KUN SKRU PÅ DETTE HVIS DU VET HVA DU GJØR!</string>
<string name="pref_title_pebble_forcele">Alltid foretrekk BLE</string>
<string name="pref_summary_pebble_forcele">Bruk eksperimentell Pebble LE-støtte for alle Pebble-klokker istedenfor BT classic, som krever parring av en Pebble LE etter at noe som ikke var en LE har vært tilkoblet én gang</string>
<string name="pref_summary_pebble_forcele">Bruk eksperimentell Pebble LE-støtte for alle Pebble-klokker, istedenfor BT classic, som krever parring til ikke-LE først, og så Pebble LE</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU-grense</string>
<string name="pref_summary_pebble_mtu_limit">Hvis din Pebble 2/Pebble LE ikke fungerer som forventet, prøv å sette denne grensen for å begrense MTU (gyldig rekkevidde 20-512)</string>
<string name="pref_title_pebble_enable_bgjs">Skru på bakgrunns-JS</string>
@ -299,13 +299,13 @@
<string name="user_feedback_miband_set_alarms_ok">Alarmer sendt til enhet.</string>
<string name="chart_no_data_synchronize">Ingen data. Synkroniser enhet?</string>
<string name="user_feedback_miband_activity_data_transfer">I ferd med å overføre %1$s med data fra %2$s</string>
<string name="miband_prefs_fitness_goal">Stegmål</string>
<string name="miband_prefs_fitness_goal">Daglig stegmål</string>
<string name="dbaccess_error_executing">Feil under kjøring av \"%1$s\"</string>
<string name="controlcenter_start_activitymonitor">Din aktivitet (alfa)</string>
<string name="cannot_connect">Kan ikke koble til: %1$s</string>
<string name="installer_activity_unable_to_find_handler">Kan ikke finne en behandler for installasjon av denne fila.</string>
<string name="pbw_install_handler_unable_to_install">Klarte ikke å installere gitt fil: %1$s</string>
<string name="pbw_install_handler_hw_revision_mismatch">Klarte ikke å installere angitt fastvare. Den passer ikke for maskinvareversjonen for din Pebble.</string>
<string name="pbw_install_handler_hw_revision_mismatch">Klarte ikke å installere angitt fastvare: Den passer ikke maskinvareversjonen på din Pebble.</string>
<string name="installer_activity_wait_while_determining_status">Vent mens installasjonsstatus fastsettes…</string>
<string name="notif_battery_low_title">Lite batteri på gadget!</string>
<string name="notif_battery_low_percent">%1$s batteri gjenstår: %2$s%%</string>
@ -345,7 +345,7 @@
<string name="pref_title_dont_ack_transfer">Ikke send bekreftelse på aktivitetsdataoverføring</string>
<string name="pref_summary_dont_ack_transfers">Hvis aktivitetsdataen ikke bekreftes til bandet, vil de ikke bli tømt. Nyttig hvis Gb brukes sammen med andre programmer.</string>
<string name="pref_summary_keep_data_on_device">Beholder aktivitetsdata på Mi Band-et, selv etter synkronisering. Nyttig hvis Gb brukes sammen med andre programmer.</string>
<string name="pref_title_low_latency_fw_update">Bruk lav-latens -modus for fastvareoppgraderinger</string>
<string name="pref_title_low_latency_fw_update">Bruk lav-latens-modus for fastvareoppgraderinger</string>
<string name="pref_summary_low_latency_fw_update">Dette kan hjelpe på enheter der fastvareoppgraderinger mislykkes.</string>
<string name="live_activity_steps_history">Steghistorikk</string>
@ -382,7 +382,7 @@
<string name="mi2_prefs_inactivity_warnings">Inaktivitetsadvarsler</string>
<string name="mi2_prefs_inactivity_warnings_summary">Båndet vil vibrere når du har vært inaktiv en stund</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Inaktivitetsterskel (i minutter)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Skru av inaktivitetsadvarsel for en tidsperiode</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Skru av inaktivitetsadvarsler for en tidsperiode</string>
<string name="mi2_prefs_do_not_disturb_start">Starttid</string>
<string name="mi2_prefs_do_not_disturb_end">Sluttid</string>
@ -444,7 +444,7 @@
<string name="title_activity_vibration">Vibrasjon</string>
<string name="title_activity_pebble_pairing">Pebble-parring</string>
<string name="pebble_pairing_hint">En parringslogg bør sprette opp på din Android-enhet. Hvis det ikke skjer, se i navigasjonsskuffen, og godta parringsforespørselen. Etter det godtar du parringsforespørselen på din Pebble</string>
<string name="pebble_pairing_hint">En parringslogg vil sprette opp på din Android-enhet. Hvis ikke, se i navigasjonsskuffen, og godta parringsforespørselen. Godta den også på din Pebble etterpå.</string>
<string name="pref_title_setup_bt_pairing">Skru på Blåtannsparring</string>
<string name="pref_summary_setup_bt_pairing">Skru dette av hvis du har problemer med å koble til</string>
@ -477,7 +477,7 @@
<string name="discovery_yes_pair">Parr</string>
<string name="discovery_dont_pair">Ikke parr</string>
<string name="_pebble_watch_open_on_phone">Åpne på telefonen</string>
<string name="_pebble_watch_open_on_phone">Åpne på Android-enheten</string>
<string name="_pebble_watch_mute">Forstum</string>
<string name="_pebble_watch_reply">Svar</string>
<string name="pref_title_weather">Vær</string>
@ -541,4 +541,14 @@
<string name="devicetype_exrizu_k8">Exrizu K8</string>
<string name="devicetype_no1_f1">No.1 F1</string>
<string name="devicetype_teclast_h30">Teclast H30</string>
</resources>
<string name="pref_header_auto_export">Automatisk eksport</string>
<string name="pref_title_auto_export_enabled">Automatisk eksport mislyktes</string>
<string name="pref_title_auto_export_location">Eksporteringsplassering</string>
<string name="pref_title_auto_export_interval">Eksporteringsintervall</string>
<string name="pref_summary_auto_export_interval">Eksporter hver %d time</string>
<string name="notif_export_failed_title">Eksport av database mislyktes. Sjekk innstillingene dine.</string>
<string name="choose_auto_export_location">Velg eksportplassering</string>
<string name="spanish">Spansk</string>
</resources>

View File

@ -375,4 +375,44 @@
<string name="pref_call_privacy_mode_number">Ocultar número e exibir nome</string>
<string name="pref_blacklist_calendars">Calendários na Blacklist</string>
<string name="pref_title_weather">Clima</string>
<string name="pref_title_weather_location">Localização climática (CM/LOS)</string>
<string name="pref_title_enable_calendar_sync">Sincronizar calendário</string>
<string name="pref_title_pebble_enable_bgjs">Habilitar JS em segundo plano</string>
<string name="pref_summary_pebble_enable_bgjs">Quando habilitado, permite que as Watchfaces mostrem o clima, informações da bateria, etc.</string>
<string name="pref_header_auto_export">Exportar preferências automaticamente</string>
<string name="pref_title_auto_export_enabled">Exportação automática habilitada</string>
<string name="pref_title_auto_export_location">Exportar localização</string>
<string name="pref_title_auto_export_interval">Intervalo de exportação</string>
<string name="pref_summary_auto_export_interval">Exportar a cada %d hora(s)</string>
<string name="preferences_amazfitbip_settings">Ajustes do Amazfit Bit</string>
<string name="discovery_connected_devices_hint">Permita que seu dispositivo seja detectado. Os dispositivos já pareados não serão detectados. Para o Android 6 ou superior, é necessário habilitar a localização de GPS. Desative o Privacy Guard para o Gadgetbridge, pois o telefone poderá travar ou reiniciar caso esteja ativo. Se nenhum dispositivo for encontrado após alguns minutos, tente novamente após reiniciar seu aparelho telefônico.</string>
<string name="prefs_title_heartrate_measurement_interval">Medição diária dos batimentos cardíacos</string>
<string name="interval_one_minute">A cada minuto</string>
<string name="interval_five_minutes">A cada 5 minutos</string>
<string name="interval_ten_minutes">A cada 10 minutos</string>
<string name="interval_thirty_minutes">A cada 30 minutos</string>
<string name="interval_one_hour">A cada hora</string>
<string name="stats_title">Áreas de velocidade</string>
<string name="stats_x_axis_label">Minutos totais</string>
<string name="stats_y_axis_label">Passos por minuto</string>
<string name="notif_export_failed_title">A exportação do banco de dados falhou! Por favor, verifique suas configurações.</string>
<string name="weeksleepchart_sleep_a_week">Sono por semana</string>
<string name="weeksleepchart_today_sleep_description">Sono hoje, meta: %1$s</string>
<string name="calories">Calorias</string>
<string name="distance">Distância</string>
<string name="clock">Relógio</string>
<string name="heart_rate">Ritmo cardíaco</string>
<string name="battery">Bateria</string>
<string name="mi2_prefs_button_actions">Ações do botão</string>
<string name="mi2_prefs_button_actions_summary">Especifica as ações quando pressionado o botão da Mi Band 2</string>
<string name="mi2_prefs_button_press_count">Contagem de acionamento do botão</string>
<string name="mi2_prefs_button_press_count_summary">Número de toques no botão para enviar a mensagem</string>
<string name="mi2_prefs_button_press_broadcast">Mensagem para enviar</string>
<string name="mi2_prefs_button_press_broadcast_summary">Enviar mensagem após um número definido de toques no botão</string>
</resources>

View File

@ -7,12 +7,12 @@
<string name="action_quit">Sair</string>
<string name="controlcenter_fetch_activity_data">Sincronizar</string>
<string name="controlcenter_start_sleepmonitor">Monitor de sono (ALPHA)</string>
<string name="controlcenter_find_device">Procurando dispositivo perdido...</string>
<string name="controlcenter_find_device">Procurar dispositivo perdido</string>
<string name="controlcenter_take_screenshot">Captura de ecrã</string>
<string name="controlcenter_disconnect">Desligar</string>
<string name="controlcenter_delete_device">Apagar dispositivo</string>
<string name="controlcenter_delete_device_name">Apagar %1$s</string>
<string name="controlcenter_delete_device_dialogmessage">Isto irá apagar o dispositivo e apagar os dados associados!</string>
<string name="controlcenter_delete_device_dialogmessage">Isto irá apagar o dispositivo e apagar todos os dados associados!</string>
<string name="controlcenter_navigation_drawer_open">Abrir gaveta de navegação</string>
<string name="controlcenter_navigation_drawer_close">Fechar gaveta de navegação</string>
<string name="controlcenter_snackbar_need_longpress">Pressione o cartão longamente para desligar</string>
@ -21,50 +21,50 @@
<string name="controlcenter_snackbar_requested_screenshot">Capturar o ecrã do dispositivo</string>
<string name="title_activity_debug">Depurar</string>
<!--Strings related to AppManager-->
<string name="title_activity_appmanager">Administrador de App</string>
<string name="title_activity_appmanager">Gestor de Aplicações</string>
<string name="appmanager_cached_watchapps_watchfaces">Apps em cache</string>
<string name="appmanager_installed_watchapps">Apps instalados</string>
<string name="appmanager_installed_watchfaces">Visores instalados</string>
<string name="appmanager_installed_watchapps">Aplicações instaladas</string>
<string name="appmanager_installed_watchfaces">Temas instalados</string>
<string name="appmananger_app_delete">Apagar</string>
<string name="appmananger_app_delete_cache">Apagar e remover do cache</string>
<string name="appmananger_app_reinstall">Reinstalar</string>
<string name="appmanager_app_openinstore">Buscar na loja Pebble</string>
<string name="appmanager_app_openinstore">Procurar na loja Pebble</string>
<string name="appmanager_health_activate">Ativar</string>
<string name="appmanager_health_deactivate">Desativar</string>
<string name="appmanager_hrm_activate">Ativar Mon. Ritmo Cardíaco</string>
<string name="appmanager_hrm_deactivate">Desativar Mon. Ritmo Cardíaco</string>
<string name="appmanager_weather_activate">Ativas app de clima do sistema</string>
<string name="appmanager_weather_deactivate">Desativar app de clima do sistema</string>
<string name="appmanager_weather_install_provider">Instalar notificações do app de clima</string>
<string name="appmanager_weather_activate">Ativar aplicação de tempo do sistema</string>
<string name="appmanager_weather_deactivate">Desativar aplicação de tempo do sistema</string>
<string name="appmanager_weather_install_provider">Instalar notificações da aplicação de tempo</string>
<string name="app_configure">Configurar</string>
<string name="app_move_to_top">Mover para o topo</string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">Bloqueio de notificações</string>
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">Instalador FW/App</string>
<string name="title_activity_fw_app_insaller">Instalador de FW/Aplicação</string>
<string name="fw_upgrade_notice">Está prestes a instalar o firmware %s no lugar do atual na sua Mi Band.</string>
<string name="fw_multi_upgrade_notice">Estás prestes a instalar os firmwares %1$s e %2$s em vez dos que estão atualmente na sua Mi Band.</string>
<string name="miband_firmware_known">O firmware foi testado e é compatível com o Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Este firmware não foi testado e pode não ser compatível com o Gadgetbridge.\n\nÉ preferível que NÃO o instale na sua Mi Band!</string>
<string name="miband_firmware_suggest_whitelist">Se ainda assim quiser continuar e tudo continuar a funcionar normalmente, por favor diga aos programadores do Gadgetbridge para permitir o firmware versão: %s</string>
<string name="miband_firmware_suggest_whitelist">Se ainda assim quiser continuar e tudo funcionar corretamente, por favor diga aos programadores do Gadgetbridge para permitir o firmware versão: %s</string>
<!--Strings related to Settings-->
<string name="title_activity_settings">Configurações</string>
<string name="pref_header_general">Configurações Gerais</string>
<string name="pref_title_general_autoconnectonbluetooth">Ligar ao dispositivo ao ativar o Bluetooth</string>
<string name="pref_title_general_autoconnectonbluetooth">Ligar ao dispositivo quando ativar o Bluetooth</string>
<string name="pref_title_general_autostartonboot">Iniciar automaticamente</string>
<string name="pref_title_general_autocreonnect">Religar automaticamente</string>
<string name="pref_title_audo_player">Aplicação de música preferencial</string>
<string name="pref_title_audo_player">Aplicação de música preferida</string>
<string name="pref_default">Padrão</string>
<string name="pref_header_datetime">Data e Hora</string>
<string name="pref_title_datetime_syctimeonconnect">Sincronizar hora</string>
<string name="pref_summary_datetime_syctimeonconnect">Sincronizar a hora para o dispositivo a quando da ligação e quando a hora ou fuso horário se alterarem no Android</string>
<string name="pref_summary_datetime_syctimeonconnect">Sincronizar a hora quando o dispositivo conecta e quando a hora ou fuso horário se alterarem no Android</string>
<string name="pref_title_theme">Tema</string>
<string name="pref_theme_light">Claro</string>
<string name="pref_theme_dark">Escuro</string>
<string name="pref_title_language">Idioma</string>
<string name="pref_title_minimize_priority">Ocultar notificações do Gadgetbridge</string>
<string name="pref_summary_minimize_priority_off">Exibir ícone na barra de status e nas notificações no ecrã inicial</string>
<string name="pref_summary_minimize_priority_on">Ocultar ícone na barra de status e nas notificações no ecrã inicial</string>
<string name="pref_summary_minimize_priority_off">Exibir ícone na barra de estados e nas notificações do ecrã de bloqueio</string>
<string name="pref_summary_minimize_priority_on">Ocultar ícone na barra de estados e nas notificações do ecrã de bloqueio</string>
<string name="pref_header_notifications">Notificações</string>
<string name="pref_title_notifications_repetitions">Repetições</string>
<string name="pref_title_notifications_call">Chamadas telefónicas</string>
@ -82,17 +82,17 @@
<string name="never">nunca</string>
<string name="pref_header_privacy">Privacidade</string>
<string name="pref_title_call_privacy_mode">Modo de chamada privada</string>
<string name="pref_call_privacy_mode_off">Exibir nome e número</string>
<string name="pref_call_privacy_mode_name">Ocultar nome e exibir número</string>
<string name="pref_call_privacy_mode_number">Ocular o número e exibir o nome</string>
<string name="pref_call_privacy_mode_off">Mostrar nome e número</string>
<string name="pref_call_privacy_mode_name">Ocultar nome e mostrar número</string>
<string name="pref_call_privacy_mode_number">Ocultar número e mostrar nome</string>
<string name="pref_call_privacy_mode_complete">Ocultar nome e número</string>
<string name="pref_blacklist">Aplicações ignoradas</string>
<string name="pref_blacklist">Bloquear Aplicações</string>
<string name="pref_header_cannned_messages">Histórico de mensagens</string>
<string name="pref_title_canned_replies">Respostas</string>
<string name="pref_title_canned_reply_suffix">Sufixo comum</string>
<string name="pref_title_canned_messages_dismisscall">Chamadas recusadas</string>
<string name="pref_title_canned_messages_set">Atualizar no Pebble</string>
<string name="pref_header_development">Opções do programador</string>
<string name="pref_header_development">Opções de programador</string>
<string name="pref_title_development_miaddr">Endereço do Mi Band</string>
<string name="pref_title_pebble_settings">Configurações Pebble</string>
<string name="pref_header_activitytrackers">Ativar monitores</string>
@ -146,8 +146,8 @@
<string name="test">Teste</string>
<string name="test_notification">Teste de notificação</string>
<string name="this_is_a_test_notification_from_gadgetbridge">Isto é uma notificação de teste do Gadgetbridge</string>
<string name="bluetooth_is_not_supported_">Bluetooth não suportado</string>
<string name="bluetooth_is_disabled_">Bluetooth desligado</string>
<string name="bluetooth_is_not_supported_">Bluetooth não suportado.</string>
<string name="bluetooth_is_disabled_">O Bluetooth está desligado.</string>
<string name="tap_connected_device_for_app_mananger">Toque num dispositivo ligado para Gerir Aplicações</string>
<string name="tap_connected_device_for_activity">Toque num dispositivo ligado para ver a Atividade</string>
<string name="tap_connected_device_for_vibration">Toque num dispositivo ligado para o fazer Vibrar</string>
@ -170,11 +170,11 @@
<string name="title_activity_android_pairing">Emparelhar dispositivo</string>
<string name="android_pairing_hint">Use o diálogo do sistema Android para emparelhar com o dispositivo</string>
<string name="title_activity_mi_band_pairing">Emparelhar com a sua Mi Band</string>
<string name="pairing">A emparelhar com %s...</string>
<string name="pairing">A emparelhar com %s</string>
<string name="pairing_creating_bond_with">A criar ligação com %1$s (%2$s)</string>
<string name="pairing_unable_to_pair_with">Não foi possível emparelhar com %1$s (%2$s)</string>
<string name="pairing_in_progress">Associação em progresso: %1$s (%2$s)</string>
<string name="pairing_already_bonded">Já associado com %1$s (%2$s), a ligar...</string>
<string name="pairing_already_bonded">Já associado com %1$s (%2$s), a ligar</string>
<string name="message_cannot_pair_no_mac">Nenhum endereço MAC fornecido, não é possível emparelhar.</string>
<string name="preferences_category_device_specific_settings">Configurações Específicas do Dispositivo</string>
<string name="preferences_miband_settings">Configurações Mi Band</string>
@ -183,7 +183,7 @@
<string name="other">outro</string>
<string name="left">esquerda</string>
<string name="right">direita</string>
<string name="miband_pairing_using_dummy_userdata">Sem dados de utilizador. Por enquanto serão usados dados fictícios</string>
<string name="miband_pairing_using_dummy_userdata">Sem dados de utilizador. Por enquanto serão usados dados fictícios.</string>
<string name="miband_pairing_tap_hint">Quando a sia Mi Band vibrar e piscar, dê-lhe alguns toques seguidos.</string>
<string name="appinstaller_install">Instalar</string>
<string name="discovery_connected_devices_hint">Torne o seu dispositivo visível. É improvável que os dispositivos atualmente ligados sejam apresentados. Ative a localização (i.e, GPS) no Android 6+. Desative também a Proteção de Privacidade para o Gadgetbridge, pois esta poderá bloquear e levar ao reinício do seu telefone. Se depois de alguns minutos não for encontrado qualquer dispositivo, tente outra vez após reiniciar o telefone.</string>
@ -385,4 +385,29 @@
<string name="discovery_pair_title">Emparelhar com %1$s?</string>
<string name="discovery_yes_pair">Emparelhar</string>
<string name="discovery_dont_pair">Não emparelhar</string>
</resources>
<string name="action_donate">Doar</string>
<string name="controlcenter_connect">Ligar</string>
<string name="title_activity_calblacklist">Calendários Bloqueados</string>
<string name="fw_upgrade_notice_amazfitbip">Está prestes a instalar o firmware %s na sua Amazfit Bip.
\n
\nPor favor garanta que instala o firmware .gps, o ficheiro .res e finalmente o ficheiro .fw. O seu relógio vai reiniciar depois de instalar o ficheiro .fw
\n
\nNota: Não necessita de instalar .res e .gps se os ficheiros forem os mesmos da última instalação.
\n
\nCONTINUE A SEU PRÓPRIO RISCO!</string>
<string name="fw_upgrade_notice_amazfitcor">Está prestes a instalar o firmware %s na sua Amazfit Cor.
\n
\nPor favor garanta que instala o ficheiro .res e depois o ficheiro .fw. O seu relógio vai reiniciar depois de instalar o ficheiro .fw
\n
\nNota: Não necessita de instalar .res se os ficheiro for o mesmo da última instalação.
\n
\nNÃO FOI TESTADO, PODERÁ DANIFICAR O SEU DISPOSITIVO.CONTINUE A SEU PRÓPRIO RISCO!</string>
<string name="pref_title_charts_swipe">"Ativar deslizar para esquerda/direita nos gráficos de atividade"</string>
<string name="pref_title_weather">Meteorologia</string>
<string name="pref_title_weather_location">Localização para meteorologia (CM/LOS)</string>
<string name="pref_blacklist_calendars">Bloquear Calendários</string>
</resources>

View File

@ -55,19 +55,19 @@
\n注意如果这些文件与之前安装的完全一样则不必安装.res和.gps文件。
\n
\n***继续需要您自担风险!</string>
<string name="fw_upgrade_notice_amazfitcor">您即将在您的米动手环(Amazfit Cor)上安装固件 %s。
\n
\n请确保安装.res文件然后.fw文件。 安装.fw文件后手表将重新启动。
\n
\n注意如果这些文件与之前安装的完全一样则不必安装.res。
\n
<string name="fw_upgrade_notice_amazfitcor">您即将在您的米动手环(Amazfit Cor)上安装固件 %s。
\n
\n请确保安装了.fw文件然后安装.rec文件。 安装.fw文件后手表将重新启动。
\n
\n注意如果这些文件与之前安装的完全一样则不必安装.res。
\n
\n***未经测试的固件,可能会使您的设备发生故障,由您自行承担风险!</string>
<string name="fw_multi_upgrade_notice">您即将安装固件 %1$s 和 %2$s代替当前在Mi Band上的固件。</string>
<string name="miband_firmware_known">该固件已经过测试并且已知与Gadgetbridge兼容。</string>
<string name="miband_firmware_unknown_warning">此固件未经测试可能与Gadgetbridge不兼容。
\n
\n不建议把它安装到你的Mi Band</string>
<string name="miband_firmware_suggest_whitelist">如果您仍想继续并且此固件在安装之后能够正常工作请告知Gadgetbridge开发者将固件列入白名单%s</string>
<string name="miband_firmware_suggest_whitelist">如果您仍想继续并且此固件在安装之后能够正常工作请告知Gadgetbridge开发者将固件%s列入白名单</string>
<string name="title_activity_settings">设置</string>
@ -81,7 +81,7 @@
<string name="pref_header_datetime">日期和时间</string>
<string name="pref_title_datetime_syctimeonconnect">同步时间</string>
<string name="pref_summary_datetime_syctimeonconnect">连接设备或手机时区变更时同步时间到设备</string>
<string name="pref_summary_datetime_syctimeonconnect">设备或手机时区变更时同步变更到设备</string>
<string name="pref_title_theme">主题</string>
<string name="pref_theme_light">亮色</string>
@ -240,7 +240,7 @@
<string name="miband_pairing_using_dummy_userdata">没有提供有效的用户数据, 现在使用虚拟用户数据。</string>
<string name="miband_pairing_tap_hint">当您的Mi Band振动并闪烁时请连续点击几下。</string>
<string name="appinstaller_install">安装</string>
<string name="discovery_connected_devices_hint">请设置并使您的设备可被发现。 前连接的设备可能不会被发现。 对于Android 6及更高版本您需要启用位置信息。 若禁用权限Gadgetbridge可能会崩溃并重新启动。 如果几分钟后没有找到设备,请重新启动移动设备后重试。</string>
<string name="discovery_connected_devices_hint">请设置并使您的设备可被发现。 前连接的设备可能不会被发现。 对于Android 6及更高版本您需要启用位置信息如GPS。 若禁用权限Gadgetbridge可能会崩溃并重新启动。 如果几分钟后没有找到设备,请重新启动您的移动设备后再试。</string>
<string name="discovery_note">注意:</string>
<string name="candidate_item_device_image">设备图像</string>
<string name="miband_prefs_alias">名称/别名</string>
@ -338,11 +338,11 @@
<string name="battery">电量</string>
<string name="liveactivity_live_activity">实时活动数据</string>
<string name="weeksteps_today_steps_description">今天的步数, 目标:%1$s</string>
<string name="pref_title_dont_ack_transfer">发送活动数据</string>
<string name="pref_title_dont_ack_transfer">不发送活动数据</string>
<string name="pref_summary_dont_ack_transfers">如果活动数据未传输到设备,则不会被清除。 GB与其他应用程序一起使用时很有用。</string>
<string name="pref_summary_keep_data_on_device">即使在同步之后, 也会将活动数据保留在 Mi Band上。如果 GB 与其他应用程序一起使用, 这将非常有用。</string>
<string name="pref_title_low_latency_fw_update">使用低延迟模式进行固件更新</string>
<string name="pref_summary_low_latency_fw_update">这可能对更新固件失败的设备有帮助</string>
<string name="pref_summary_low_latency_fw_update">这可能对固件失败的设备有帮助</string>
<string name="live_activity_steps_history">步数历史</string>
<string name="live_activity_current_steps_per_minute">当前每分钟步数</string>
@ -439,11 +439,11 @@
<string name="dbmanagementactivity_error_importing_shared">导入首选项时出错:%1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">删除活动数据?</string>
<string name="dbmanagementactivity_really_delete_entire_db">确定删除整个数据库?您的所有活动数据和有关设备的信息都将丢失。</string>
<string name="dbmanagementactivity_database_successfully_deleted">数据已成功删除。</string>
<string name="dbmanagementactivity_database_successfully_deleted">数据已删除。</string>
<string name="dbmanagementactivity_db_deletion_failed">数据库删除失败。</string>
<string name="dbmanagementactivity_delete_old_activity_db">删除旧的活动数据库?</string>
<string name="dbmanagementactivity_delete_old_activitydb_confirmation">是否真的删除旧的活动数据库?未导入的活动数据将丢失。</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">成功删除旧的活动数据。</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">已删除旧的活动数据。</string>
<string name="dbmanagementactivity_old_activity_db_deletion_failed">旧的活动数据库删除失败。</string>
<string name="dbmanagementactivity_overwrite">覆盖</string>
<string name="Cancel">取消</string>
@ -520,4 +520,22 @@
<string name="vibration_profile_ring">响铃</string>
<string name="mi2_prefs_button_press_broadcast">要发送的广播消息</string>
<string name="devicetype_pebble">Pebble</string>
</resources>
<string name="pref_summary_pebble_forcele">使用实验性Pebble LE以支持所有Pebble代替BT经典连接。 这首先需要以非LE配对然后以Pebble LE连接</string>
<string name="pref_summary_pebble_mtu_limit">如果您的Pebble 2 / Pebble LE无法正常工作请尝试使用此设置来限制MTU有效范围20-512</string>
<string name="pref_header_auto_export">自动导出</string>
<string name="pref_title_auto_export_enabled">自动导出已启用</string>
<string name="pref_title_auto_export_location">导出位置</string>
<string name="pref_title_auto_export_interval">导出间隔</string>
<string name="pref_summary_auto_export_interval">每%d小时导出一次</string>
<string name="tap_connected_device_for_app_mananger">点按为已连接的设备管理应用</string>
<string name="notif_export_failed_title">数据库导出失败! 请检查您的设置。</string>
<string name="miband_prefs_reserve_alarm_calendar">预警未来事件</string>
<string name="mi2_prefs_button_press_broadcast_summary">在指定按键次数后发送消息</string>
<string name="DEVINFO_HR_VER">"设备版本: "</string>
<string name="timeformat_am_pm">AM/PM</string>
<string name="devicetype_vibratissimo">Vibratissimo</string>
<string name="devicetype_hplus">HPlus</string>
<string name="choose_auto_export_location">选择导出位置</string>
</resources>

View File

@ -198,7 +198,7 @@
<string-array name="pref_call_privacy_mode_values">
<item>@string/p_call_privacy_mode_off</item>
<item>@string/p_call_privacy_mode_name</item>
<item>@string/pref_call_privacy_mode_number</item>
<item>@string/p_call_privacy_mode_number</item>
<item>@string/p_call_privacy_mode_complete</item>
</string-array>
@ -207,6 +207,7 @@
<item name="0">@string/simplified_chinese</item>
<item name="1">@string/traditional_chinese</item>
<item name="2">@string/english</item>
<item name="3">@string/spanish</item>
</string-array>
<string-array name="pref_amazfitbip_language_values">
@ -214,6 +215,7 @@
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="prefs_heartrate_measurement_interval">

View File

@ -53,8 +53,8 @@
<!-- Strings related to FwAppInstaller -->
<string name="title_activity_fw_app_insaller">FW/App installer</string>
<string name="fw_upgrade_notice">You are about to install firmware %s instead of the one currently on your Mi Band.</string>
<string name="fw_upgrade_notice_amazfitbip">You are about to install the %s firmware on your Amazfit Bip.\n\nPlease make sure to install the .gps firmware, then the .res file, and finally the .fw file. Your watch will reboot after installing the .fw file.\n\nNote: You do not have to install .res and .gps if these files are exactly the same as the ones previously installed.\n\nPROCEED AT YOUR OWN RISK!</string>
<string name="fw_upgrade_notice_amazfitcor">You are about to install the %s firmware on your Amazfit Cor.\n\nPlease make sure to install the .res file, and after that the .fw file. Your watch will reboot after installing the .fw file.\n\nNote: You do not have to install .res if it is exactly the same as the one previously installed.\n\nUNTESTED, MAY BRICK YOUR DEVICE, PROCEED AT YOUR OWN RISK!</string>
<string name="fw_upgrade_notice_amazfitbip">You are about to install the %s firmware on your Amazfit Bip.\n\nPlease make sure to install the .fw file, then the .res file, and finally the .gps file. Your watch will reboot after installing the .fw file.\n\nNote: You do not have to install .res and .gps if these files are exactly the same as the ones previously installed.\n\nPROCEED AT YOUR OWN RISK!</string>
<string name="fw_upgrade_notice_amazfitcor">You are about to install the %s firmware on your Amazfit Cor.\n\nPlease make sure to install the .fw file, and after that the .res file. Your watch will reboot after installing the .fw file.\n\nNote: You do not have to install .res if it is exactly the same as the one previously installed.\n\nUNTESTED, MAY BRICK YOUR DEVICE, PROCEED AT YOUR OWN RISK!</string>
<string name="fw_multi_upgrade_notice">You are about to install the %1$s and %2$s firmware, instead of the ones currently on your Mi Band.</string>
<string name="miband_firmware_known">This firmware has been tested and is known to be compatible with Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">"This firmware is untested and may not be compatible with Gadgetbridge.\n\nYou are DISCOURAGED from flashing it onto your Mi Band!"</string>
@ -167,7 +167,7 @@
<string name="pref_title_pebble_forceuntested">Enable untested features</string>
<string name="pref_summary_pebble_forceuntested">Enable features that are untested. ENABLE ONLY IF YOU KNOW WHAT YOU ARE DOING!</string>
<string name="pref_title_pebble_forcele">Always prefer BLE</string>
<string name="pref_summary_pebble_forcele">Use experimental Pebble LE support for all Pebbles, instead of BT classic. This requires paring to non LE first, and then "Pebble LE"</string>
<string name="pref_summary_pebble_forcele">Use experimental Pebble LE support for all Pebbles, instead of BT classic. This requires pairing to non LE first, and then Pebble LE</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU limit</string>
<string name="pref_summary_pebble_mtu_limit">If your Pebble 2/Pebble LE does not work as expected, try this setting to limit the MTU (valid range 20512)</string>
<string name="pref_title_pebble_enable_applogs">Enable watch App logging</string>
@ -406,6 +406,7 @@
<string name="simplified_chinese">Simplified Chinese</string>
<string name="traditional_chinese">Traditional Chinese</string>
<string name="english">English</string>
<string name="spanish">Spanish</string>
<string name="FetchActivityOperation_about_to_transfer_since">About to transfer data since %1$s</string>
@ -545,4 +546,5 @@
<string name="devicetype_teclast_h30">Teclast H30</string>
<string name="choose_auto_export_location">Choose export location</string>
<string name="notification_channel_name">Gadgetbridge notifications</string>
</resources>

View File

@ -35,5 +35,6 @@
<item name="p_call_privacy_mode_off" type="string">off</item>
<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>
</resources>

View File

@ -1,5 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<changelog>
<release version="0.24.5" versioncode="122">
<change>Fix crash in settings activity with export location</change>
<change>Fix notification deletion regression</change>
<change>Add 'Ł' and 'ł' to transliteration map</change>
<change>Omnijaws Weather: correctly pick todays' min and max temperature</change>
<change>Fix alarm details activity on small screen</change>
<change>Pebble: minic online check of TrekVolle when using background js</change>
</release>
<release version="0.24.4" versioncode="121">
<change>Amazfit Bip: Fix language setting on new firmwares</change>
</release>
<release version="0.24.3" versioncode="120">
<change>Charts: Try to fix another crash</change>
<change>Pebble: Fix weather for some watchfaces when using background JS</change>
<change>Amazfit Cor: Allow watchfaces to be flashed (untested)</change>
<change>Amazfit Bip: Better detection for flashable font types</change>
<change>Fix number only privacy option</change>
</release>
<release version="0.24.2" versioncode="119">
<change>Fix crash when changing the periodic database export interval</change>
<change>Amazfit Bip: Allow fonts and new res format to be flashed</change>
<change>Amazfit Cor: Allow new res format to be flashed</change>
<change>Pebble: Background js fixes</change>
</release>
<release version="0.24.1" versioncode="118">
<change>Amazfit Bip: prevent menu icons from vanishing when using firmware 0.1.0.51</change>
<change>Pebble: "find phone" feature for upcoming pebble helper app</change>
</release>
<release version="0.24.0" versioncode="117">
<change>Fix logs sometimes not containing stacktraces</change>
<change>Support periodic database export</change>

View File

@ -169,11 +169,11 @@
<PreferenceCategory
android:title="@string/pref_header_privacy">
<ListPreference
android:defaultValue="@string/p_call_privacy_mode_off"
android:key="pref_call_privacy_mode"
android:title="@string/pref_title_call_privacy_mode"
android:entries="@array/pref_call_privacy_mode"
android:entryValues="@array/pref_call_privacy_mode_values"
android:defaultValue="@string/pref_call_privacy_mode_off"
android:summary="%s" />
</PreferenceCategory>

View File

@ -0,0 +1,2 @@
* Amazfit Bip: prevent menu icons from vanishing when using firmware 0.1.0.51
* Pebble: "find phone" feature for upcoming pebble helper app

View File

@ -0,0 +1,4 @@
* Fix crash when changing the periodic database export interval
* Amazfit Bip: Allow fonts and new res format to be flashed
* Amazfit Cor: Allow new res format to be flashed
* Pebble: Background js fixes

View File

@ -0,0 +1,5 @@
* Charts: Try to fix another crash
* Pebble: Fix weather for some watchfaces when using background JS
* Amazfit Cor: Allow watchfaces to be flashed (untested)
* Amazfit Bip: Better detection for flashable font types
* Fix number only privacy option

View File

@ -0,0 +1 @@
* Amazfit Bip: Fix language setting on new firmwares

View File

@ -0,0 +1,6 @@
* Fix crash in settings activity with export location
* Fix notification deletion regression
* Add 'Ł' and 'ł' to transliteration map
* Omnijaws Weather: correctly pick todays' min and max temperature
* Fix alarm details activity on small screen
* Pebble: minic online check of TrekVolle when using background js

View File

@ -1,6 +1,6 @@
#Fri Mar 03 09:26:56 CET 2017
#Sat Jan 20 22:13:05 EET 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip