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

Merge branch 'master' into bip-wip

This commit is contained in:
Andreas Shimokawa 2018-03-27 11:09:59 +02:00
commit 66bb0bd81b
34 changed files with 1256 additions and 320 deletions

View File

@ -1,5 +1,11 @@
### Changelog
#### Version 0.25.1
* Amazfit Cor: Try to send weather location instead of AQI
* Amazfit Bip: Support setting start end end time for background light when lifting the arm
* Pebble: various fixes and improvemnets for background javascript
* Explicity ask for RECEIVE_SMS permission to fix problems with Android 8
#### Version 0.25.0
* Inital suport for Xwatch
* Move the connected device to top in control center

View File

@ -1,14 +1,13 @@
apply plugin: "com.android.application"
apply plugin: "findbugs"
apply plugin: "pmd"
apply plugin: 'com.android.application'
apply plugin: 'findbugs'
apply plugin: 'pmd'
def ABORT_ON_CHECK_FAILURE=false
def ABORT_ON_CHECK_FAILURE = false
tasks.withType(Test) {
systemProperty 'MiFirmwareDir', System.getProperty('MiFirmwareDir', null)
systemProperty 'logback.configurationFile', System.getProperty('user.dir', null) + '/app/src/main/assets/logback.xml'
systemProperty 'GB_LOGFILES_DIR', java.nio.file.Files.createTempDirectory('gblog').toString();
systemProperty "MiFirmwareDir", System.getProperty("MiFirmwareDir", null)
systemProperty "logback.configurationFile", System.getProperty("user.dir", null) + "/app/src/main/assets/logback.xml"
systemProperty "GB_LOGFILES_DIR", java.nio.file.Files.createTempDirectory("gblog").toString()
}
android {
@ -18,111 +17,114 @@ android {
targetCompatibility JavaVersion.VERSION_1_7
}
compileSdkVersion 27
buildToolsVersion '27.0.3'
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "nodomain.freeyourgadget.gadgetbridge"
minSdkVersion 19
targetSdkVersion 27
// note: always bump BOTH versionCode and versionName!
versionName "0.25.0"
versionCode 124
// Note: always bump BOTH versionCode and versionName!
versionName "0.25.1"
versionCode 125
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
lintOptions {
abortOnError ABORT_ON_CHECK_FAILURE
lintConfig file("${project.rootDir}/config/lint/lint.xml")
// if true, generate an HTML report (with issue explanations, sourcecode, etc)
// If true, generate an HTML report (with issue explanations, sourcecode, etc)
htmlReport true
// optional path to report (default will be lint-results.html in the builddir)
// Optional path to report (default will be lint-results.html in the builddir)
htmlOutput file("$project.buildDir/reports/lint/lint.html")
}
testOptions {
unitTests.returnDefaultValues = true
unitTests {
returnDefaultValues = true
includeAndroidResources = true
}
}
}
pmd {
toolVersion = '5.5.5'
toolVersion = "5.5.5"
}
dependencies {
// testCompile 'ch.qos.logback:logback-classic:1.1.3'
// testCompile 'ch.qos.logback:logback-core:1.1.3'
testCompile 'junit:junit:4.12'
testCompile "org.mockito:mockito-core:1.10.19"
testCompile "org.robolectric:robolectric:3.5.1"
// testImplementation "ch.qos.logback:logback-classic:1.1.3"
// testImplementation "ch.qos.logback:logback-core:1.1.3"
testImplementation "junit:junit:4.12"
testImplementation "org.mockito:mockito-core:1.10.19"
testImplementation "org.robolectric:robolectric:3.6.1"
compile fileTree(dir: 'libs', include: ['*.jar'])
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'
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.android.support:appcompat-v7:27.0.2"
implementation "com.android.support:cardview-v7:27.0.2"
implementation "com.android.support:recyclerview-v7:27.0.2"
implementation "com.android.support:support-v4:27.0.2"
implementation "com.android.support:gridlayout-v7:27.0.2"
implementation "com.android.support:design:27.0.2"
implementation "com.android.support:palette-v7:27.0.2"
implementation("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: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'
implementation "org.slf4j:slf4j-api:1.7.12"
implementation "com.github.Freeyourgadget:MPAndroidChart:5e5bd6c1d3e95c515d4853647ae554e48ee1d593"
implementation "com.github.pfichtner:durationformatter:0.1.1"
implementation "de.cketti.library.changelog:ckchangelog:1.2.2"
implementation "net.e175.klaus:solarpositioning:0.0.9"
// use pristine greendao instead of our custom version, since our custom jitpack-packaged
// version contains way too much and our custom patches are in the generator only.
compile 'org.greenrobot:greendao:2.2.1'
compile 'org.apache.commons:commons-lang3:3.5'
compile 'org.cyanogenmod:platform.sdk:6.0'
implementation "org.greenrobot:greendao:2.2.1"
implementation "org.apache.commons:commons-lang3:3.5"
implementation "org.cyanogenmod:platform.sdk:6.0"
// compile project(":DaoCore")
// implementation project(":DaoCore")
}
preBuild.dependsOn(":GBDaoGenerator:genSources")
gradle.beforeProject {
preBuild.dependsOn(":GBDaoGenerator:genSources")
}
check.dependsOn 'findbugs', 'pmd', 'lint'
check.dependsOn "findbugs", "pmd", "lint"
task pmd(type: Pmd) {
ruleSetFiles = files("${project.rootDir}/config/pmd/pmd-ruleset.xml")
ignoreFailures = !ABORT_ON_CHECK_FAILURE
ruleSets = [
'java-android',
'java-basic',
'java-braces',
'java-clone',
'java-codesize',
'java-controversial',
'java-coupling',
'java-design',
'java-empty',
'java-finalizers',
'java-imports',
'java-junit',
'java-optimizations',
'java-strictexception',
'java-strings',
'java-sunsecure',
'java-typeresolution',
'java-unnecessary',
'java-unusedcode'
"java-android",
"java-basic",
"java-braces",
"java-clone",
"java-codesize",
"java-controversial",
"java-coupling",
"java-design",
"java-empty",
"java-finalizers",
"java-imports",
"java-junit",
"java-optimizations",
"java-strictexception",
"java-strings",
"java-sunsecure",
"java-typeresolution",
"java-unnecessary",
"java-unusedcode"
]
source 'src'
include '**/*.java'
exclude '**/gen/**'
source "src"
include "**/*.java"
exclude "**/gen/**"
reports {
xml.enabled = false
@ -142,7 +144,7 @@ task findbugs(type: FindBugs) {
reportLevel = "medium"
excludeFilter = new File("${project.rootDir}/config/findbugs/findbugs-filter.xml")
classes = files("${project.rootDir}/app/build/intermediates/classes")
source = fileTree('src/main/java/')
source = fileTree("src/main/java/")
classpath = files()
reports {
xml.enabled = false

View File

@ -24,7 +24,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.DaoMaster;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
/**
* Provides lowlevel access to the database.
* Provides low-level access to the database.
*/
public class LockHandler implements DBHandler {

View File

@ -309,6 +309,8 @@ public class ControlCenterv2 extends AppCompatActivity
wantedPermissions.add(Manifest.permission.READ_PHONE_STATE);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.PROCESS_OUTGOING_CALLS) == PackageManager.PERMISSION_DENIED)
wantedPermissions.add(Manifest.permission.PROCESS_OUTGOING_CALLS);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) == PackageManager.PERMISSION_DENIED)
wantedPermissions.add(Manifest.permission.RECEIVE_SMS);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) == PackageManager.PERMISSION_DENIED)
wantedPermissions.add(Manifest.permission.READ_SMS);
if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_DENIED)

View File

@ -34,19 +34,26 @@ import android.widget.Toast;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.GBChromeClient;
import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.GBWebClient;
import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.JSInterface;
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_CONNECT;
public class ExternalPebbleJSActivity extends AbstractGBActivity {
private static final Logger LOG = LoggerFactory.getLogger(ExternalPebbleJSActivity.class);
@ -64,24 +71,69 @@ public class ExternalPebbleJSActivity extends AbstractGBActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
boolean showConfig = false;
UUID currentUUID = null;
GBDevice currentDevice = null;
if (extras == null) {
throw new IllegalArgumentException("Must provide device and uuid in extras when invoking this activity");
}
confUri = getIntent().getData();
if(confUri.getScheme().equals("gadgetbridge")) {
try {
currentUUID = UUID.fromString(confUri.getHost());
} catch (IllegalArgumentException e) {
LOG.error("UUID in incoming configuration is not a valid UUID: " +confUri.toString());
}
if (extras.getBoolean(START_BG_WEBVIEW, false)) {
startBackgroundWebViewAndFinish();
return;
}
//first check if we are still connected to a pebble
DeviceManager deviceManager = ((GBApplication) getApplication()).getDeviceManager();
List<GBDevice> deviceList = deviceManager.getDevices();
for (GBDevice device : deviceList) {
if (device.getState() == GBDevice.State.INITIALIZED) {
if (device.getType().equals(DeviceType.PEBBLE)) {
currentDevice = device;
break;
} else {
LOG.error("attempting to load pebble configuration but a different device type is connected!!!");
finish();
return;
}
}
}
if (currentDevice == null) {
//then try to reconnect to last connected device
String btDeviceAddress = GBApplication.getPrefs().getPreferences().getString("last_device_address", null);
if (btDeviceAddress != null) {
GBDevice candidate = DeviceHelper.getInstance().findAvailableDevice(btDeviceAddress, this);
if(!candidate.isConnected() && candidate.getType() == DeviceType.PEBBLE){
Intent intent = new Intent(this, DeviceCommunicationService.class)
.setAction(ACTION_CONNECT)
.putExtra(GBDevice.EXTRA_DEVICE, currentDevice);
this.startService(intent);
currentDevice = candidate;
}
}
}
GBDevice currentDevice = extras.getParcelable(GBDevice.EXTRA_DEVICE);
UUID currentUUID = (UUID) extras.getSerializable(DeviceService.EXTRA_APP_UUID);
showConfig = true; //we are getting incoming configuration data
}
} else {
currentDevice = extras.getParcelable(GBDevice.EXTRA_DEVICE);
currentUUID = (UUID) extras.getSerializable(DeviceService.EXTRA_APP_UUID);
if (extras.getBoolean(START_BG_WEBVIEW, false)) {
startBackgroundWebViewAndFinish();
return;
}
showConfig = extras.getBoolean(SHOW_CONFIG, false);
}
if (GBApplication.getGBPrefs().isBackgroundJsEnabled()) {
if (extras.getBoolean(SHOW_CONFIG, false)) {
if (showConfig) {
Objects.requireNonNull(currentDevice, "Must provide a device when invoking this activity");
Objects.requireNonNull(currentUUID, "Must provide a uuid when invoking this activity");
WebViewSingleton.runJavascriptInterface(currentDevice, currentUUID);
WebViewSingleton.getInstance().runJavascriptInterface(this, currentDevice, currentUUID);
}
// FIXME: is this really supposed to be outside the check for SHOW_CONFIG?
@ -104,7 +156,7 @@ public class ExternalPebbleJSActivity extends AbstractGBActivity {
private void setupBGWebView() {
setContentView(R.layout.activity_external_pebble_js);
myWebView = WebViewSingleton.getWebView(this);
myWebView = WebViewSingleton.getInstance().getWebView(this);
if (myWebView.getParent() != null) {
((ViewGroup) myWebView.getParent()).removeView(myWebView);
}
@ -161,6 +213,7 @@ public class ExternalPebbleJSActivity extends AbstractGBActivity {
} catch (IllegalArgumentException e) {
GB.toast("returned uri: " + confUri.toString(), Toast.LENGTH_LONG, GB.ERROR);
}
myWebView.stopLoading();
myWebView.loadUrl("file:///android_asset/app_config/configure.html?" + queryString);
}
}

View File

@ -0,0 +1,23 @@
/* Copyright (C) 2017-2018 José Rebelo
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.huami;
public enum ActivateDisplayOnLift {
ON,
OFF,
SCHEDULED
}

View File

@ -52,7 +52,6 @@ import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.Device;
import nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySampleDao;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public abstract class HuamiCoordinator extends AbstractDeviceCoordinator {
@ -133,9 +132,30 @@ public abstract class HuamiCoordinator extends AbstractDeviceCoordinator {
return DateTimeDisplay.DATE_TIME;
}
public static boolean getActivateDisplayOnLiftWrist() {
public static ActivateDisplayOnLift getActivateDisplayOnLiftWrist(Context context) {
Prefs prefs = GBApplication.getPrefs();
return prefs.getBoolean(MiBandConst.PREF_MI2_ACTIVATE_DISPLAY_ON_LIFT, true);
String liftOff = context.getString(R.string.p_off);
String liftOn = context.getString(R.string.p_on);
String liftScheduled = context.getString(R.string.p_scheduled);
String pref = prefs.getString(MiBandConst.PREF_ACTIVATE_DISPLAY_ON_LIFT, liftOff);
if (liftOn.equals(pref)) {
return ActivateDisplayOnLift.ON;
} else if (liftScheduled.equals(pref)) {
return ActivateDisplayOnLift.SCHEDULED;
}
return ActivateDisplayOnLift.OFF;
}
public static Date getDisplayOnLiftStart() {
return getTimePreference( MiBandConst.PREF_DISPLAY_ON_LIFT_START, "00:00");
}
public static Date getDisplayOnLiftEnd() {
return getTimePreference( MiBandConst.PREF_DISPLAY_ON_LIFT_END, "00:00");
}
public static Set<String> getDisplayItems() {

View File

@ -136,6 +136,7 @@ public class MiBand2Service {
public static final byte[] DATEFORMAT_TIME_24_HOURS = new byte[] {ENDPOINT_DISPLAY, 0x02, 0x0, 0x1 };
public static final byte[] COMMAND_ENABLE_DISPLAY_ON_LIFT_WRIST = new byte[]{ENDPOINT_DISPLAY, 0x05, 0x00, 0x01};
public static final byte[] COMMAND_DISABLE_DISPLAY_ON_LIFT_WRIST = new byte[]{ENDPOINT_DISPLAY, 0x05, 0x00, 0x00};
public static final byte[] COMMAND_SCHEDULE_DISPLAY_ON_LIFT_WRIST = new byte[]{ENDPOINT_DISPLAY, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
public static final byte[] COMMAND_ENABLE_GOAL_NOTIFICATION = new byte[]{ENDPOINT_DISPLAY, 0x06, 0x00, 0x01};
public static final byte[] COMMAND_DISABLE_GOAL_NOTIFICATION = new byte[]{ENDPOINT_DISPLAY, 0x06, 0x00, 0x00};
public static final byte[] COMMAND_ENABLE_ROTATE_WRIST_TO_SWITCH_INFO = new byte[]{ENDPOINT_DISPLAY, 0x0d, 0x00, 0x01};

View File

@ -49,7 +49,9 @@ public final class MiBandConst {
public static final String PREF_MI2_DISPLAY_ITEM_CALORIES = "calories";
public static final String PREF_MI2_DISPLAY_ITEM_HEART_RATE = "heart_rate";
public static final String PREF_MI2_DISPLAY_ITEM_BATTERY = "battery";
public static final String PREF_MI2_ACTIVATE_DISPLAY_ON_LIFT = "mi2_activate_display_on_lift_wrist";
public static final String PREF_ACTIVATE_DISPLAY_ON_LIFT = "activate_display_on_lift_wrist";
public static final String PREF_DISPLAY_ON_LIFT_START = "display_on_lift_start";
public static final String PREF_DISPLAY_ON_LIFT_END = "display_on_lift_end";
public static final String PREF_MI2_ROTATE_WRIST_TO_SWITCH_INFO = "mi2_rotate_wrist_to_switch_info";
public static final String PREF_MI2_ENABLE_TEXT_NOTIFICATIONS = "mi2_enable_text_notifications";
public static final String PREF_MI2_DO_NOT_DISTURB = "mi2_do_not_disturb";

View File

@ -38,7 +38,9 @@ import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.ORIGIN_ALARM_CLOCK;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.ORIGIN_INCOMING_CALL;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_ACTIVATE_DISPLAY_ON_LIFT;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_ACTIVATE_DISPLAY_ON_LIFT;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DISPLAY_ON_LIFT_END;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_DISPLAY_ON_LIFT_START;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DATEFORMAT;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DISPLAY_ITEMS;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB;
@ -135,14 +137,14 @@ public class MiBandPreferencesActivity extends AbstractSettingsActivity {
}
});
final Preference activateDisplayOnLift = findPreference(PREF_MI2_ACTIVATE_DISPLAY_ON_LIFT);
final Preference activateDisplayOnLift = findPreference(PREF_ACTIVATE_DISPLAY_ON_LIFT);
activateDisplayOnLift.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
invokeLater(new Runnable() {
@Override
public void run() {
GBApplication.deviceService().onSendConfiguration(PREF_MI2_ACTIVATE_DISPLAY_ON_LIFT);
GBApplication.deviceService().onSendConfiguration(PREF_ACTIVATE_DISPLAY_ON_LIFT);
}
});
return true;
@ -313,6 +315,60 @@ public class MiBandPreferencesActivity extends AbstractSettingsActivity {
}
});
String displayOnLiftState = prefs.getString(MiBandConst.PREF_ACTIVATE_DISPLAY_ON_LIFT, PREF_MI2_DO_NOT_DISTURB_OFF);
boolean displayOnLiftScheduled = displayOnLiftState.equals(PREF_MI2_DO_NOT_DISTURB_SCHEDULED);
final Preference displayOnLiftStart = findPreference(PREF_DISPLAY_ON_LIFT_START);
displayOnLiftStart.setEnabled(displayOnLiftScheduled);
displayOnLiftStart.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
invokeLater(new Runnable() {
@Override
public void run() {
GBApplication.deviceService().onSendConfiguration(PREF_DISPLAY_ON_LIFT_START);
}
});
return true;
}
});
final Preference displayOnLiftEnd = findPreference(PREF_DISPLAY_ON_LIFT_END);
displayOnLiftEnd.setEnabled(displayOnLiftScheduled);
displayOnLiftEnd.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
invokeLater(new Runnable() {
@Override
public void run() {
GBApplication.deviceService().onSendConfiguration(PREF_DISPLAY_ON_LIFT_END);
}
});
return true;
}
});
final Preference displayOnLift = findPreference(PREF_ACTIVATE_DISPLAY_ON_LIFT);
displayOnLift.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
final boolean scheduled = PREF_MI2_DO_NOT_DISTURB_SCHEDULED.equals(newVal.toString());
displayOnLiftStart.setEnabled(scheduled);
displayOnLiftEnd.setEnabled(scheduled);
invokeLater(new Runnable() {
@Override
public void run() {
GBApplication.deviceService().onSendConfiguration(PREF_ACTIVATE_DISPLAY_ON_LIFT);
}
});
return true;
}
});
final Preference fitnessGoal = findPreference(ActivityUser.PREF_USER_STEPS_GOAL);
fitnessGoal.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override

View File

@ -1,6 +1,6 @@
/* Copyright (C) 2015-2018 Andreas Shimokawa, Carsten Pfeiffer, Daniele
Gobbetti, Frank Slezak, Hasan Ammar, Julien Pivotto, Kevin Richter, Normano64,
Steffen Liebergeld, TaaviE, Zhong Jianxin
Steffen Liebergeld, Taavi Eomäe, Zhong Jianxin
This file is part of Gadgetbridge.

View File

@ -326,7 +326,7 @@ public class GBDevice implements Parcelable {
public void setRssi(short rssi) {
if (rssi < 0) {
LOG.warn("illegal rssi value " + rssi + ", setting to RSSI_UNKNOWN");
LOG.warn("Illegal RSSI value " + rssi + ", setting to RSSI_UNKNOWN");
mRssi = RSSI_UNKNOWN;
} else {
mRssi = rssi;
@ -450,7 +450,7 @@ public class GBDevice implements Parcelable {
result.add(new GenericItem(DEVINFO_FW_VER, mFirmwareVersion));
}
if (mFirmwareVersion2 != null) {
// FIXME: thats ugly
// FIXME: This is ugly
if (mDeviceType == DeviceType.AMAZFITBIP) {
result.add(new GenericItem(DEVINFO_GPS_VER, mFirmwareVersion2));
} else {

View File

@ -227,13 +227,13 @@ public abstract class AbstractDeviceSupport implements DeviceSupport {
private void handleGBDeviceEvent(GBDeviceEventSleepMonitorResult sleepMonitorResult) {
Context context = getContext();
LOG.info("Got event for SLEEP_MONIOR_RES");
Intent sleepMontiorIntent = new Intent(ChartsHost.REFRESH);
sleepMontiorIntent.putExtra("smartalarm_from", sleepMonitorResult.smartalarm_from);
sleepMontiorIntent.putExtra("smartalarm_to", sleepMonitorResult.smartalarm_to);
sleepMontiorIntent.putExtra("recording_base_timestamp", sleepMonitorResult.recording_base_timestamp);
sleepMontiorIntent.putExtra("alarm_gone_off", sleepMonitorResult.alarm_gone_off);
Intent sleepMonitorIntent = new Intent(ChartsHost.REFRESH);
sleepMonitorIntent.putExtra("smartalarm_from", sleepMonitorResult.smartalarm_from);
sleepMonitorIntent.putExtra("smartalarm_to", sleepMonitorResult.smartalarm_to);
sleepMonitorIntent.putExtra("recording_base_timestamp", sleepMonitorResult.recording_base_timestamp);
sleepMonitorIntent.putExtra("alarm_gone_off", sleepMonitorResult.alarm_gone_off);
LocalBroadcastManager.getInstance(context).sendBroadcast(sleepMontiorIntent);
LocalBroadcastManager.getInstance(context).sendBroadcast(sleepMonitorIntent);
}
private void handleGBDeviceEvent(GBDeviceEventScreenshot screenshot) {
@ -300,10 +300,10 @@ public abstract class AbstractDeviceSupport implements DeviceSupport {
deviceEvent.phoneNumber = (String) GBApplication.getIDSenderLookup().lookup(deviceEvent.handle);
}
if (deviceEvent.phoneNumber != null) {
LOG.info("got notfication reply for SMS from " + deviceEvent.phoneNumber + " : " + deviceEvent.reply);
LOG.info("Got notification reply for SMS from " + deviceEvent.phoneNumber + " : " + deviceEvent.reply);
SmsManager.getDefault().sendTextMessage(deviceEvent.phoneNumber, null, deviceEvent.reply, null, null);
} else {
LOG.info("got notfication reply for notification id " + deviceEvent.handle + " : " + deviceEvent.reply);
LOG.info("Got notification reply for notification id " + deviceEvent.handle + " : " + deviceEvent.reply);
action = NotificationListener.ACTION_REPLY;
}
break;

View File

@ -37,6 +37,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiWeatherConditions
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipFWHelper;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipService;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBand2Service;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
@ -181,28 +182,30 @@ public class AmazfitBipSupport extends MiBand2Support {
LOG.error("Error sending current weather", ex);
}
try {
TransactionBuilder builder;
builder = performInitialized("Sending air quality index");
int length = 8;
String aqiString = "(n/a)";
if (supportsConditionString) {
length += aqiString.getBytes().length + 1;
if (gbDevice.getType() == DeviceType.AMAZFITBIP) {
try {
TransactionBuilder builder;
builder = performInitialized("Sending air quality index");
int length = 8;
String aqiString = "(n/a)";
if (supportsConditionString) {
length += aqiString.getBytes().length + 1;
}
ByteBuffer buf = ByteBuffer.allocate(length);
buf.order(ByteOrder.LITTLE_ENDIAN);
buf.put((byte) 4);
buf.putInt(weatherSpec.timestamp);
buf.put((byte) (tz_offset_hours * 4));
buf.putShort((short) 0);
if (supportsConditionString) {
buf.put(aqiString.getBytes());
buf.put((byte) 0);
}
builder.write(getCharacteristic(AmazfitBipService.UUID_CHARACTERISTIC_WEATHER), buf.array());
builder.queue(getQueue());
} catch (IOException ex) {
LOG.error("Error sending air quality");
}
ByteBuffer buf = ByteBuffer.allocate(length);
buf.order(ByteOrder.LITTLE_ENDIAN);
buf.put((byte) 4);
buf.putInt(weatherSpec.timestamp);
buf.put((byte) (tz_offset_hours * 4));
buf.putShort((short) 0);
if (supportsConditionString) {
buf.put(aqiString.getBytes());
buf.put((byte) 0);
}
builder.write(getCharacteristic(AmazfitBipService.UUID_CHARACTERISTIC_WEATHER), buf.array());
builder.queue(getQueue());
} catch (IOException ex) {
LOG.error("Error sending air quality");
}
try {
@ -258,6 +261,25 @@ public class AmazfitBipSupport extends MiBand2Support {
} catch (Exception ex) {
LOG.error("Error sending weather forecast", ex);
}
if (gbDevice.getType() == DeviceType.AMAZFITCOR) {
try {
TransactionBuilder builder;
builder = performInitialized("Sending forecast location");
int length = 2 + weatherSpec.location.getBytes().length;
ByteBuffer buf = ByteBuffer.allocate(length);
buf.order(ByteOrder.LITTLE_ENDIAN);
buf.put((byte) 8);
buf.put(weatherSpec.location.getBytes());
buf.put((byte) 0);
builder.write(getCharacteristic(AmazfitBipService.UUID_CHARACTERISTIC_WEATHER), buf.array());
builder.queue(getQueue());
} catch (Exception ex) {
LOG.error("Error sending current forecast location", ex);
}
}
}
@Override

View File

@ -57,6 +57,7 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventCallContro
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventFindPhone;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInfo;
import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.ActivateDisplayOnLift;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper;
import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipService;
@ -1342,7 +1343,9 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
case MiBandConst.PREF_MI2_GOAL_NOTIFICATION:
setGoalNotification(builder);
break;
case MiBandConst.PREF_MI2_ACTIVATE_DISPLAY_ON_LIFT:
case MiBandConst.PREF_ACTIVATE_DISPLAY_ON_LIFT:
case MiBandConst.PREF_DISPLAY_ON_LIFT_START:
case MiBandConst.PREF_DISPLAY_ON_LIFT_END:
setActivateDisplayOnLiftWrist(builder);
break;
case MiBandConst.PREF_MI2_DISPLAY_ITEMS:
@ -1429,12 +1432,32 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
}
private MiBand2Support setActivateDisplayOnLiftWrist(TransactionBuilder builder) {
boolean enable = HuamiCoordinator.getActivateDisplayOnLiftWrist();
LOG.info("Setting activate display on lift wrist to " + enable);
if (enable) {
builder.write(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand2Service.COMMAND_ENABLE_DISPLAY_ON_LIFT_WRIST);
} else {
builder.write(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand2Service.COMMAND_DISABLE_DISPLAY_ON_LIFT_WRIST);
ActivateDisplayOnLift displayOnLift = HuamiCoordinator.getActivateDisplayOnLiftWrist(getContext());
LOG.info("Setting activate display on lift wrist to " + displayOnLift);
switch (displayOnLift) {
case ON:
builder.write(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand2Service.COMMAND_ENABLE_DISPLAY_ON_LIFT_WRIST);
break;
case OFF:
builder.write(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand2Service.COMMAND_DISABLE_DISPLAY_ON_LIFT_WRIST);
break;
case SCHEDULED:
byte[] cmd = MiBand2Service.COMMAND_SCHEDULE_DISPLAY_ON_LIFT_WRIST.clone();
Calendar calendar = GregorianCalendar.getInstance();
Date start = HuamiCoordinator.getDisplayOnLiftStart();
calendar.setTime(start);
cmd[4] = (byte) calendar.get(Calendar.HOUR_OF_DAY);
cmd[5] = (byte) calendar.get(Calendar.MINUTE);
Date end = HuamiCoordinator.getDisplayOnLiftEnd();
calendar.setTime(end);
cmd[6] = (byte) calendar.get(Calendar.HOUR_OF_DAY);
cmd[7] = (byte) calendar.get(Calendar.MINUTE);
builder.write(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION), cmd);
}
return this;
}

View File

@ -110,7 +110,7 @@ class PebbleIoThread extends GBDeviceIoThread {
public static void sendAppMessage(GBDeviceEventAppMessage message) {
final String jsEvent;
try {
WebViewSingleton.checkAppRunning(message.appUUID);
WebViewSingleton.getInstance().checkAppRunning(message.appUUID);
} catch (IllegalStateException ex) {
LOG.warn("Unable to send app message: " + message, ex);
return;
@ -126,7 +126,7 @@ class PebbleIoThread extends GBDeviceIoThread {
final String appMessage = PebbleUtils.parseIncomingAppMessage(message.message, message.appUUID, message.id);
LOG.debug("to WEBVIEW: event: " + jsEvent + " message: " + appMessage);
WebViewSingleton.invokeWebview(new WebViewSingleton.WebViewRunnable() {
WebViewSingleton.getInstance().invokeWebview(new WebViewSingleton.WebViewRunnable() {
@Override
public void invoke(WebView webView) {
webView.evaluateJavascript("if (typeof Pebble == 'object') Pebble.evaluate('" + jsEvent + "',[" + appMessage + "]);", new ValueCallback<String>() {
@ -424,7 +424,7 @@ class PebbleIoThread extends GBDeviceIoThread {
}
if (GBApplication.getGBPrefs().isBackgroundJsEnabled()) {
WebViewSingleton.disposeWebView();
WebViewSingleton.getInstance().disposeWebView();
}
gbDevice.sendDeviceUpdateIntent(getContext());
@ -553,9 +553,9 @@ class PebbleIoThread extends GBDeviceIoThread {
LOG.info("got GBDeviceEventAppManagement START event for uuid: " + appMgmt.uuid);
if (GBApplication.getGBPrefs().isBackgroundJsEnabled()) {
if (mPebbleProtocol.hasAppMessageHandler(appMgmt.uuid)) {
WebViewSingleton.stopJavascriptInterface();
WebViewSingleton.getInstance().stopJavascriptInterface();
} else {
WebViewSingleton.runJavascriptInterface(gbDevice, appMgmt.uuid);
WebViewSingleton.getInstance().runJavascriptInterface(gbDevice, appMgmt.uuid);
}
}
break;

View File

@ -41,16 +41,10 @@ import java.io.ByteArrayInputStream;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.Weather;
import static nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton.internetHelper;
import static nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton.internetHelperBound;
import static nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton.internetHelperListener;
import static nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton.internetResponse;
import static nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton.latch;
import nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton;
public class GBWebClient extends WebViewClient {
@ -85,19 +79,14 @@ public class GBWebClient extends WebViewClient {
private WebResourceResponse mimicReply(Uri requestedUri) {
if (requestedUri.getHost() != null && (StringUtils.indexOfAny(requestedUri.getHost(), AllowedDomains) != -1)) {
if (GBApplication.getGBPrefs().isBackgroundJsEnabled() && internetHelperBound) {
if (GBApplication.getGBPrefs().isBackgroundJsEnabled() && WebViewSingleton.getInstance().internetHelperBound) {
LOG.debug("WEBVIEW forwarding request to the internet helper");
Bundle bundle = new Bundle();
bundle.putString("URL", requestedUri.toString());
Message webRequest = Message.obtain();
webRequest.replyTo = internetHelperListener;
webRequest.setData(bundle);
try {
latch = new CountDownLatch(1); //the messenger should run on a single thread, hence we don't need to be worried about concurrency. This approach however is certainly not ideal.
internetHelper.send(webRequest);
latch.await();
return internetResponse;
return WebViewSingleton.getInstance().send(webRequest);
} catch (RemoteException | InterruptedException e) {
LOG.warn("Error downloading data from " + requestedUri, e);
}

View File

@ -1,5 +1,5 @@
/* Copyright (C) 2015-2018 Andreas Shimokawa, Carsten Pfeiffer, Daniele
Gobbetti, Felix Konstantin Maurer, TaaviE, Uwe Hermann, Yar
Gobbetti, Felix Konstantin Maurer, Taavi Eomäe, Uwe Hermann, Yar
This file is part of Gadgetbridge.

View File

@ -135,16 +135,19 @@ public class PebbleUtils {
JSONObject knownKeys = PebbleUtils.getAppConfigurationKeys(uuid);
SparseArray<String> appKeysMap = new SparseArray<>();
String inKey, outKey;
// TODO: The fact that knownKeys is null for the passed UUID means that the
// watchapp was installed by some other app, hence we cannot communicate with it.
// The user could be warned somehow.
if (knownKeys == null || msg == null) {
msg = "[]";
}
String inKey, outKey;
//knownKeys contains "name"->"index", we need to reverse that
for (Iterator<String> key = knownKeys.keys(); key.hasNext(); ) {
inKey = key.next();
appKeysMap.put(knownKeys.optInt(inKey), inKey);
} else {
//knownKeys contains "name"->"index", we need to reverse that
for (Iterator<String> key = knownKeys.keys(); key.hasNext(); ) {
inKey = key.next();
appKeysMap.put(knownKeys.optInt(inKey), inKey);
}
}
try {

View File

@ -23,6 +23,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.MutableContextWrapper;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@ -30,6 +31,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.support.annotation.NonNull;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
@ -53,32 +55,33 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.JSInt
public class WebViewSingleton {
private static final Logger LOG = LoggerFactory.getLogger(WebViewSingleton.class);
private static WebViewSingleton instance = new WebViewSingleton();
private WebView instance = null;
private WebView webView = null;
private MutableContextWrapper contextWrapper;
private Looper mainLooper;
private static WebViewSingleton webViewSingleton = new WebViewSingleton();
private static UUID currentRunningUUID;
public static Messenger internetHelper = null;
public static boolean internetHelperBound;
public static CountDownLatch latch;
public static WebResourceResponse internetResponse;
public final static Messenger internetHelperListener = new Messenger(new IncomingHandler());
private UUID currentRunningUUID;
private Messenger internetHelper = null;
public boolean internetHelperBound;
private boolean internetHelperInstalled;
private CountDownLatch latch;
private WebResourceResponse internetResponse;
private Messenger internetHelperListener;
private WebViewSingleton() {
}
public static synchronized void ensureCreated(Activity context) {
if (webViewSingleton.instance == null) {
webViewSingleton.contextWrapper = new MutableContextWrapper(context);
webViewSingleton.mainLooper = context.getMainLooper();
webViewSingleton.instance = new WebView(webViewSingleton.contextWrapper);
if (instance.webView == null) {
instance.contextWrapper = new MutableContextWrapper(context);
instance.mainLooper = context.getMainLooper();
instance.webView = new WebView(instance.contextWrapper);
WebView.setWebContentsDebuggingEnabled(true);
webViewSingleton.instance.setWillNotDraw(true);
webViewSingleton.instance.clearCache(true);
webViewSingleton.instance.setWebViewClient(new GBWebClient());
webViewSingleton.instance.setWebChromeClient(new GBChromeClient());
WebSettings webSettings = webViewSingleton.instance.getSettings();
instance.webView.setWillNotDraw(true);
instance.webView.clearCache(true);
instance.webView.setWebViewClient(new GBWebClient());
instance.webView.setWebChromeClient(new GBChromeClient());
WebSettings webSettings = instance.webView.getSettings();
webSettings.setJavaScriptEnabled(true);
//needed to access the DOM
webSettings.setDomStorageEnabled(true);
@ -88,7 +91,7 @@ public class WebViewSingleton {
}
//Internet helper outgoing connection
private static ServiceConnection internetHelperConnection = new ServiceConnection() {
private ServiceConnection internetHelperConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
LOG.info("internet helper service bound");
internetHelperBound = true;
@ -102,8 +105,20 @@ public class WebViewSingleton {
}
};
public static WebViewSingleton getInstance() {
return instance;
}
public WebResourceResponse send(Message webRequest) throws RemoteException, InterruptedException {
webRequest.replyTo = internetHelperListener;
latch = new CountDownLatch(1); //the messenger should run on a single thread, hence we don't need to be worried about concurrency. This approach however is certainly not ideal.
internetHelper.send(webRequest);
latch.await();
return internetResponse;
}
//Internet helper inbound (responses) handler
private static class IncomingHandler extends Handler {
private class IncomingHandler extends Handler {
private String getCharsetFromHeaders(String contentType) {
if (contentType != null && contentType.toLowerCase().trim().contains("charset=")) {
@ -135,9 +150,9 @@ public class WebViewSingleton {
}
@NonNull
public static WebView getWebView(Context context) {
webViewSingleton.contextWrapper.setBaseContext(context);
return webViewSingleton.instance;
public WebView getWebView(Context context) {
contextWrapper.setBaseContext(context);
return webView;
}
/**
@ -145,16 +160,21 @@ public class WebViewSingleton {
* @param uuid the uuid of the application expected to be running
* @throws IllegalStateException when the webview is not active or the app is not running
*/
public static void checkAppRunning(@NonNull UUID uuid) {
if (webViewSingleton.instance == null) {
throw new IllegalStateException("webViewSingleton.instance is null!");
public void checkAppRunning(@NonNull UUID uuid) {
if (webView == null) {
throw new IllegalStateException("instance.webView is null!");
}
if (!uuid.equals(currentRunningUUID)) {
throw new IllegalStateException("Expected app " + uuid + " is not running, but " + currentRunningUUID + " is.");
}
}
public static void runJavascriptInterface(@NonNull GBDevice device, @NonNull UUID uuid) {
public void runJavascriptInterface(@NonNull Activity context, @NonNull GBDevice device, @NonNull UUID uuid) {
ensureCreated(context);
runJavascriptInterface(device, uuid);
}
public void runJavascriptInterface(@NonNull GBDevice device, @NonNull UUID uuid) {
if (uuid.equals(currentRunningUUID)) {
LOG.debug("WEBVIEW uuid not changed keeping the old context");
} else {
@ -170,16 +190,26 @@ public class WebViewSingleton {
webView.loadUrl("file:///android_asset/app_config/configure.html?rand=" + Math.random() * 500);
}
});
if (!internetHelperBound) {
Intent intent = new Intent();
intent.setComponent(new ComponentName("nodomain.freeyourgadget.internethelper", "nodomain.freeyourgadget.internethelper.MyService"));
webViewSingleton.contextWrapper.getApplicationContext().bindService(intent, internetHelperConnection, Context.BIND_AUTO_CREATE);
if (!internetHelperBound && !internetHelperInstalled) {
String internetHelperPkg = "nodomain.freeyourgadget.internethelper";
String internetHelperCls = internetHelperPkg + ".MyService";
try {
contextWrapper.getPackageManager().getApplicationInfo(internetHelperPkg, 0);
Intent intent = new Intent();
intent.setComponent(new ComponentName(internetHelperPkg, internetHelperCls));
contextWrapper.getApplicationContext().bindService(intent, internetHelperConnection, Context.BIND_AUTO_CREATE);
internetHelperListener = new Messenger(new IncomingHandler());
internetHelperInstalled = true;
}
catch (PackageManager.NameNotFoundException e) {
internetHelperInstalled = false;
LOG.info("WEBVIEW: Internet helper not installed, only mimicked HTTP requests will work.");
}
}
}
}
public static void stopJavascriptInterface() {
public void stopJavascriptInterface() {
invokeWebview(new WebViewRunnable() {
@Override
public void invoke(WebView webView) {
@ -189,10 +219,10 @@ public class WebViewSingleton {
});
}
public static void disposeWebView() {
public void disposeWebView() {
if (internetHelperBound) {
LOG.debug("WEBVIEW: will unbind the internet helper");
webViewSingleton.contextWrapper.getApplicationContext().unbindService(internetHelperConnection);
contextWrapper.getApplicationContext().unbindService(internetHelperConnection);
internetHelperBound = false;
}
currentRunningUUID = null;
@ -207,34 +237,34 @@ public class WebViewSingleton {
webView.loadUrl("about:blank");
// webView.freeMemory();
webView.pauseTimers();
// instance.destroy();
// instance = null;
// webView.destroy();
// webView = null;
// contextWrapper = null;
// jsInterface = null;
}
});
}
public static void invokeWebview(final WebViewRunnable runnable) {
if (webViewSingleton.instance == null || webViewSingleton.mainLooper == null) {
public void invokeWebview(final WebViewRunnable runnable) {
if (webView == null || mainLooper == null) {
LOG.warn("Webview already disposed, ignoring runnable");
return;
}
new Handler(webViewSingleton.mainLooper).post(new Runnable() {
new Handler(mainLooper).post(new Runnable() {
@Override
public void run() {
if (webViewSingleton.instance == null) {
if (webView == null) {
LOG.warn("Webview already disposed, cannot invoke runnable");
return;
}
runnable.invoke(webViewSingleton.instance);
runnable.invoke(webView);
}
});
}
public interface WebViewRunnable {
/**
* Called in the main thread with a non-null webView instance
* Called in the main thread with a non-null webView webView
* @param webView the webview, never null
*/
void invoke(WebView webView);

View File

@ -27,8 +27,8 @@
<string name="appmanager_installed_watchfaces">Instalované ciferníky</string>
<string name="appmananger_app_delete">Odstranit</string>
<string name="appmananger_app_delete_cache">Odstranit z cache</string>
<string name="appmananger_app_reinstall">Naintalovat znovu</string>
<string name="appmanager_app_openinstore">Hledat v Pebble Appstore</string>
<string name="appmananger_app_reinstall">Nainstalovat znovu</string>
<string name="appmanager_app_openinstore">Hledat v Pebble appstore</string>
<string name="appmanager_health_activate">Aktivovat</string>
<string name="appmanager_health_deactivate">Deaktivovat</string>
<string name="appmanager_hrm_activate">Zapnout měření pulzu</string>
@ -43,11 +43,13 @@
<!--Strings related to CalBlacklist-->
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">Instalátor FW/App</string>
<string name="fw_upgrade_notice">Instaluje firmware %s do Mi Band místo stávajícího.</string>
<string name="fw_multi_upgrade_notice">Instaluje firmwary %1$s a %2$s do Mi Band místo stávajícího.</string>
<string name="miband_firmware_known">Tento firmware byl testován a je kompatibilní s Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Tento firmware nebyl testován a nemusí být kompatibilní s Gadgetbridge.\n\nNedoporučujeme jej nahrávat do Mi Band!</string>
<string name="miband_firmware_suggest_whitelist">Pokud budete prokračovat a vše bude fungovat běžně i potom, upozorněte vývojáře Gadgetbridge, aby označili tento firmware: %s jako vyzkoušený</string>
<string name="fw_upgrade_notice">Instaluje firmvér %s do Mi Band místo stávajícího.</string>
<string name="fw_multi_upgrade_notice">Instaluje firmvér %1$s a %2$s do Mi Band místo stávajícího.</string>
<string name="miband_firmware_known">Tento firmvér byl testován a je kompatibilní s Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Tento firmvér nebyl testován a nemusí být kompatibilní s Gadgetbridge.
\n
\nNedoporučujeme jej nahrávat do Mi Band!</string>
<string name="miband_firmware_suggest_whitelist">Pokud budete prokračovat a vše bude fungovat běžně i potom, upozorněte vývojáře Gadgetbridge, aby označili tento firmvér: %s jako vyzkoušený</string>
<!--Strings related to Settings-->
<string name="title_activity_settings">Nastavení</string>
<string name="pref_header_general">Základní nastavení</string>
@ -70,23 +72,23 @@
<string name="pref_title_notifications_repetitions">Opakování</string>
<string name="pref_title_notifications_call">Volání</string>
<string name="pref_title_notifications_sms">SMS</string>
<string name="pref_title_notifications_pebblemsg">Zpráva Pebble</string>
<string name="pref_summary_notifications_pebblemsg">Podpora pro aplikace, které posílají notifikace do Pebble via PebbleKit.</string>
<string name="pref_title_notifications_generic">Obecná podpora notifikací</string>
<string name="pref_title_whenscreenon">... také pokud je displej zapnutý</string>
<string name="pref_title_notifications_pebblemsg">Zprávy Pebble</string>
<string name="pref_summary_notifications_pebblemsg">Podpora pro aplikace, které posílají notifikace do Pebble přes PebbleKit.</string>
<string name="pref_title_notifications_generic">Přístup k notifikacím</string>
<string name="pref_title_whenscreenon">Upozornění i při zapnuté obrazovce</string>
<string name="pref_title_notification_filter">Nerušit</string>
<string name="pref_summary_notification_filter">Neposílat nechtěné notifikace podle režimu Nerušit.</string>
<string name="pref_title_transliteration">Přepsání</string>
<string name="pref_summary_transliteration">Toto zapněte, pokud vaše zařízení nepodporuje písma pro vás jazyk.</string>
<string name="always">vždy</string>
<string name="when_screen_off">pokud je vypnutý displej</string>
<string name="never">nikdy</string>
<string name="pref_summary_notification_filter">Neposílat nechtěné notifikace v režimu Nerušit</string>
<string name="pref_title_transliteration">Přepsání diakritiky</string>
<string name="pref_summary_transliteration">Toto zapněte, pokud vaše zařízení nepodporuje písma pro vás jazyk</string>
<string name="always">Vždy</string>
<string name="when_screen_off">Pokud je vypnutý displej</string>
<string name="never">Nikdy</string>
<string name="pref_header_privacy">Soukromí</string>
<string name="pref_title_call_privacy_mode">Režim soukromého volání</string>
<string name="pref_call_privacy_mode_off">Zobrazit jméno a číslo</string>
<string name="pref_call_privacy_mode_name">Skrýt jméno, ale zobrazit číslo</string>
<string name="pref_call_privacy_mode_complete">Skrýt jméno i číslo</string>
<string name="pref_blacklist">Zakázané aplikace</string>
<string name="pref_blacklist">Zakázané aplikace (bez notifikací)</string>
<string name="pref_header_cannned_messages">Potlačené zprávy</string>
<string name="pref_title_canned_replies">Odpovědi</string>
<string name="pref_title_canned_reply_suffix">Běžná přípona</string>
@ -102,10 +104,10 @@
<string name="pref_title_pebble_sync_morpheuz">Synchronizovat Morpheuz</string>
<string name="pref_title_enable_outgoing_call">Podpora odchozích volání</string>
<string name="pref_summary_enable_outgoing_call">Vypnutím také přestane Pebble 2/LE vibrovat při odchozích voláních</string>
<string name="pref_title_enable_pebblekit">Povolit přístup aplikacím 3. stran z Androidu</string>
<string name="pref_summary_enable_pebblekit">Povolot experimentální podporu pro aplikace Androidu přes PebbleKit</string>
<string name="pref_title_enable_pebblekit">Povolit přístup třetích stran k aplikaci Android</string>
<string name="pref_summary_enable_pebblekit">Povolit experimentální podporu pro aplikace Androidu přes PebbleKit</string>
<string name="pref_title_sunrise_sunset">Východ a západ slunce</string>
<string name="pref_summary_sunrise_sunset">Zasílat časy východu a západu slunce podle umístění do Pebble timeline</string>
<string name="pref_summary_sunrise_sunset">Zasílat časy východu a západu slunce podle umístění do Pebble časové osi</string>
<string name="pref_title_autoremove_notifications">Odstraňovat skryté notifikace automaticky</string>
<string name="pref_summary_autoremove_notifications">Notifikace budou z Pebble odstraněny automaticky, pokud byly skryty na zařízení s Androidem</string>
<string name="pref_title_pebble_privacy_mode">Soukromý režim</string>
@ -121,24 +123,24 @@
<string name="toast_enable_networklocationprovider">Povolte zjištění polohy v síti</string>
<string name="toast_aqurired_networklocation">poloha zjištěna</string>
<string name="pref_title_pebble_forceprotocol">Vnutit protokol notifikací</string>
<string name="pref_summary_pebble_forceprotocol">Tato volba vnutí použití posledního protokolu notifikací podle verze firmware. POVOLTE, JEN POKUD VÍTE, CO DĚLÁTE!</string>
<string name="pref_summary_pebble_forceprotocol">Tato volba vnutí použití posledního protokolu notifikací podle verze firmvéru. POVOLTE, JEN POKUD VÍTE, CO DĚLÁTE!</string>
<string name="pref_title_pebble_forceuntested">Povolit netestované funkce</string>
<string name="pref_summary_pebble_forceuntested">Povolí funkce, které nebyl testovány. POVOLTE, JEN POKUD VÍTE, CO DĚLÁTE!</string>
<string name="pref_title_pebble_forcele">Vždy preferovat BLE</string>
<string name="pref_summary_pebble_forcele">Použít experimentální podporu Pebble LE pro všechny Pebble místo BT classic, vyžaduje spárování \"Pebble LE\" po připojení bez LE</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU limit</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU ohraničení</string>
<string name="pref_summary_pebble_mtu_limit">Pokud vaše Pebble 2/Pebble LE nepracuje jak má, zkuste toto nastavení pro omezení MTU (povolený rozsah 20-512)</string>
<string name="pref_title_pebble_enable_applogs">Zapnout logování Watch App</string>
<string name="pref_summary_pebble_enable_applogs">Logy od watch app budou logovány v Gadgetbridge (vyžaduje znovupřipojení)</string>
<string name="pref_title_pebble_always_ack_pebblekit">Předčasné potvrzení (ACK) pro PebbleKit</string>
<string name="pref_summary_pebble_always_ack_pebblekit">Způsobí, že zprávy zaslané externím aplikacím 3. stran budou potvrzeny vždy a okamžitě.</string>
<string name="pref_summary_pebble_always_ack_pebblekit">Způsobí, že zprávy zaslané externím aplikacím 3. stran budou potvrzeny vždy a okamžitě</string>
<string name="pref_title_pebble_reconnect_attempts">Pokusů o znovupřipojení</string>
<string name="pref_title_unit_system">Jednotky</string>
<string name="pref_title_timeformat">Formát času</string>
<string name="pref_title_screentime">Doba zapnutí displeje</string>
<string name="prefs_title_all_day_heart_rate">Celodenní měření tepu</string>
<string name="preferences_hplus_settings">Nastavení HPlus/Makibes</string>
<string name="not_connected">nepřipojeno</string>
<string name="not_connected">Nepřipojeno</string>
<string name="connecting">Připojování</string>
<string name="connected">Připojeno</string>
<string name="unknown_state">Neznámý stav</string>
@ -159,9 +161,12 @@
<string name="installing_binary_d_d">Instaluji binární %1$d/%2$d</string>
<string name="installation_failed_">Instalace selhala</string>
<string name="installation_successful">Instalace úspěšná</string>
<string name="firmware_install_warning">CHCETE INSTALOVAT FIRMWARE, POKRAČUJTE NA SVÉ RIZIKO. \n\n\n Tento firmware je pro revizi HW: %s</string>
<string name="firmware_install_warning">CHCETE INSTALOVAT FIRMVÉR, POKRAČUJTE NA SVÉ RIZIKO.
\n
\n
\nTento firmvér je pro revizi HW: %s</string>
<string name="app_install_info">Instalujete aplikaci:\n\n\n%1$s Verze %2$s od %3$s\n</string>
<string name="n_a">nedostupné</string>
<string name="n_a">Nedostupné</string>
<string name="initialized">Spuštěno</string>
<string name="appversion_by_creator">%1$s od %2$s</string>
<string name="title_activity_discovery">Hledání zařízení</string>
@ -179,12 +184,12 @@
<string name="pairing_already_bonded">Vazba s %1$s (%2$s) již existuje, propojuji…</string>
<string name="message_cannot_pair_no_mac">Adresa MAC nepřišla, nemohu párovat.</string>
<string name="preferences_category_device_specific_settings">Nastavení zařízení</string>
<string name="preferences_miband_settings">Nastavení Mi Band / Bip</string>
<string name="male">m</string>
<string name="female">žena</string>
<string name="other">jiný</string>
<string name="left">vlevo</string>
<string name="right">vpravo</string>
<string name="preferences_miband_settings">Nastavení Mi Band / Amazfit</string>
<string name="male">M</string>
<string name="female">Žena</string>
<string name="other">Jiný</string>
<string name="left">Vlevo</string>
<string name="right">Vpravo</string>
<string name="miband_pairing_using_dummy_userdata">Data uživatele nejsou platná, nyní používám vzorová.</string>
<string name="miband_pairing_tap_hint">Když Mi Band zavibruje a blikne, dotkněte se jej několikrát po sobě.</string>
<string name="appinstaller_install">Instalovat</string>
@ -195,9 +200,9 @@
<string name="pref_header_vibration_count">Počet vibrací</string>
<string name="title_activity_sleepmonitor">Sledování spánku</string>
<string name="pref_write_logfiles">Zapsat logy</string>
<string name="initializing">spouštím</string>
<string name="initializing">Spouštím</string>
<string name="busy_task_fetch_activity_data">Stahuji data o aktivitě</string>
<string name="sleep_activity_date_range">Z %1$s do %2$s</string>
<string name="sleep_activity_date_range">Od %1$s do %2$s</string>
<string name="miband_prefs_wearside">Nosíte vlevo nebo vpravo?</string>
<string name="pref_screen_vibration_profile">Profil vibrací</string>
<string name="vibration_profile_staccato">Staccato</string>
@ -234,14 +239,14 @@
<string name="user_feedback_miband_set_alarms_failed">Nepodařilo se nastavit budík, zkuste to znovu!</string>
<string name="user_feedback_miband_set_alarms_ok">Budík zaslán do zařízení!</string>
<string name="chart_no_data_synchronize">Chybí data, provést stažení?</string>
<string name="user_feedback_miband_activity_data_transfer">Stahnout data %1$s od %2$s</string>
<string name="user_feedback_miband_activity_data_transfer">Stahnout data %1$s z %2$s</string>
<string name="miband_prefs_fitness_goal">Cílový počet kroků na den</string>
<string name="dbaccess_error_executing">Chyba spouštění \'%1$s\'</string>
<string name="controlcenter_start_activitymonitor">Vaše aktivita (zkušební)</string>
<string name="cannot_connect">Nelze se připojit k: %1$s</string>
<string name="installer_activity_unable_to_find_handler">Nemohu najít program k instalaci tohoto souboru.</string>
<string name="pbw_install_handler_unable_to_install">Nelze nainstalovat vybraný soubor: %1$s</string>
<string name="pbw_install_handler_hw_revision_mismatch">Nelze nainstalovat vybraný firmware: neshoduje s HW revizí vašeho Pebble.</string>
<string name="pbw_install_handler_hw_revision_mismatch">Nelze nainstalovat vybraný firmvér: neshoduje se s HW revizi vašeho Pebble.</string>
<string name="installer_activity_wait_while_determining_status">Vyčkejte na zjištění stavu instalace…</string>
<string name="notif_battery_low_title">Nízká úroveň nabití baterie v zařízení!</string>
<string name="notif_battery_low_percent">%1$s zbývá v baterii: %2$s%%</string>
@ -252,28 +257,28 @@
<string name="weeksleepchart_today_sleep_description">Spánek dnes, cíl: %1$s</string>
<string name="weekstepschart_steps_a_week">Kroky za týden</string>
<string name="activity_sleepchart_activity_and_sleep">Vaše aktivita a spánek</string>
<string name="updating_firmware">Nahrávám firmware</string>
<string name="updating_firmware">Nahrávám firmvér</string>
<string name="fwapp_install_device_not_ready">Soubor nelze nainstalovat, zařízení není připraveno.</string>
<string name="installhandler_firmware_name">%1$s: %2$s %3$s</string>
<string name="miband_fwinstaller_compatible_version">Kompatibilní verze</string>
<string name="miband_fwinstaller_untested_version">Netestovaná verze!</string>
<string name="fwappinstaller_connection_state">Připojení k zařízení: %1$s</string>
<string name="pbw_installhandler_pebble_firmware">Pebble Firmware %1$s</string>
<string name="pbw_installhandler_pebble_firmware">Pebble Firmvér %1$s</string>
<string name="pbwinstallhandler_correct_hw_revision">Správná revize HW</string>
<string name="pbwinstallhandler_incorrect_hw_revision">Revize HW není správná!</string>
<string name="pbwinstallhandler_app_item">%1$s (%2$s)</string>
<string name="updatefirmwareoperation_updateproblem_do_not_reboot">Při přenosu firmwaru nastaly potíže. Nerestartujte svůj Mi Band!</string>
<string name="updatefirmwareoperation_metadata_updateproblem">Problém při přenosu matadat firmware</string>
<string name="updatefirmwareoperation_update_complete">Instalace firmware je kompletní</string>
<string name="updatefirmwareoperation_update_complete_rebooting">Instalace firmware je kompletní, restartuji zařízení…</string>
<string name="updatefirmwareoperation_write_failed">Zápis firmware selhal</string>
<string name="chart_steps">Kroky</string>
<string name="updatefirmwareoperation_metadata_updateproblem">Problém při přenosu matadat firmvéru</string>
<string name="updatefirmwareoperation_update_complete">Instalace firmvéru je kompletní</string>
<string name="updatefirmwareoperation_update_complete_rebooting">Instalace firmvéru je kompletní, restartuji zařízení…</string>
<string name="updatefirmwareoperation_write_failed">Zápis firmvéru selhal</string>
<string name="chart_steps">Kroků</string>
<string name="liveactivity_live_activity">Současná aktivita</string>
<string name="weeksteps_today_steps_description">Kroky dnes, cíl: %1$s</string>
<string name="weeksteps_today_steps_description">Kroků dnes, cíl: %1$s</string>
<string name="pref_title_dont_ack_transfer">Nepotvrzovat přenos dat o aktivitě</string>
<string name="pref_summary_dont_ack_transfers">Pokud není přenos dat potvrzen náramku, potom nebudou smazána. Užitečné pokud je GB používán dohromady s jinou aplikací.</string>
<string name="pref_summary_keep_data_on_device">Zachová data o aktivitě v Mi Band i po synchronizaci. Užitečné pokud je GB používán dohromady s jinou aplikací.</string>
<string name="pref_title_low_latency_fw_update">Použít režim z nízkým zpožděním pro aktualizace firmwaru.</string>
<string name="pref_title_low_latency_fw_update">Použít režim z nízkým zpožděním pro aktualizace firmwaru</string>
<string name="pref_summary_low_latency_fw_update">Může to pomoci u zařízení, kde aktualizace firmwaru selhala</string>
<string name="live_activity_steps_history">Historie kroků</string>
<string name="live_activity_current_steps_per_minute">Aktuálně kroků/min</string>
@ -287,23 +292,23 @@
<string name="device_not_connected">Nepřipojeno.</string>
<string name="user_feedback_all_alarms_disabled">Všechny budíky vypnuty</string>
<string name="pref_title_keep_data_on_device">Zachovat data o aktivitě v zařízení</string>
<string name="miband_fwinstaller_incompatible_version">Nekompatibilní firmware</string>
<string name="fwinstaller_firmware_not_compatible_to_device">Tento firmware není kompatibilní s tímto zařízením</string>
<string name="miband_fwinstaller_incompatible_version">Nekompatibilní firmvér</string>
<string name="fwinstaller_firmware_not_compatible_to_device">Tento firmvér není kompatibilní s tímto zařízením</string>
<string name="miband_prefs_reserve_alarm_calendar">Budíky pro nadcházející události</string>
<string name="miband_prefs_hr_sleep_detection">Použít sledování tepu pro zlepšení detekce spánku</string>
<string name="miband_prefs_device_time_offset_hours">Časový posun zařízení v hodinách (pro zjišťování spánku směnařů)</string>
<string name="miband2_prefs_dateformat">Mi2: formát data</string>
<string name="dateformat_time">Čas</string>
<string name="dateformat_date_time">Datum a čas</string>
<string name="dateformat_date_time">Čas a dátum</string>
<string name="mi2_prefs_activate_display_on_lift">Zapnout displej při zvednutí</string>
<string name="FetchActivityOperation_about_to_transfer_since">Přenáším data od %1$s</string>
<string name="waiting_for_reconnect">Čekání na znovupřipojení</string>
<string name="activity_prefs_about_you">O vás</string>
<string name="activity_prefs_about_you">Vaše údaje</string>
<string name="activity_prefs_year_birth">Rok narození</string>
<string name="activity_prefs_gender">Pohlaví</string>
<string name="activity_prefs_height_cm">Výška v cm</string>
<string name="activity_prefs_weight_kg">Váha v kg</string>
<string name="authenticating">ověřování</string>
<string name="authenticating">Ověřování</string>
<string name="authentication_required">Ověřování vyžadováno</string>
<string name="appwidget_text">Spí...</string>
<string name="add_widget">Přidat widget</string>
@ -313,8 +318,8 @@
<string name="device_fw">Verze FW: %1$s</string>
<string name="error_creating_directory_for_logfiles">Chyba při vytváření adresáře pro logy: %1$s</string>
<string name="DEVINFO_HR_VER">"Tep: "</string>
<string name="updatefirmwareoperation_update_in_progress">Probíhá aktualizace firmware</string>
<string name="updatefirmwareoperation_firmware_not_sent">Firmware neodeslán</string>
<string name="updatefirmwareoperation_update_in_progress">Aktualizace firmvéru</string>
<string name="updatefirmwareoperation_firmware_not_sent">Firmvér nebyl odeslán</string>
<string name="charts_legend_heartrate">Srdeční tep</string>
<string name="live_activity_heart_rate">Srdeční tep</string>
<string name="pref_title_pebble_health_store_raw">Uložit hrubý záznam do databáze</string>
@ -328,11 +333,11 @@
<string name="dbmanagementactivity_error_exporting_db">Chyba při exportu DB: %1$s</string>
<string name="dbmanagementactivity_import_data_title">Importovat data?</string>
<string name="dbmanagementactivity_overwrite_database_confirmation">Opravdu chcete přepsat aktuální databázi? Všechna uložená data o aktivitě se ztratí.</string>
<string name="dbmanagementactivity_import_successful">Import byl úspěšný.</string>
<string name="dbmanagementactivity_import_successful">Importováno.</string>
<string name="dbmanagementactivity_error_importing_db">Chyba při importu DB: %1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">Smazat data o aktivitách?</string>
<string name="dbmanagementactivity_really_delete_entire_db">Opravdu chcete smazat celou databázi? Všechna data o aktivitách a informace o zařízeních se ztratí.</string>
<string name="dbmanagementactivity_database_successfully_deleted">Data úspěšně smazána.</string>
<string name="dbmanagementactivity_database_successfully_deleted">Data smazána.</string>
<string name="dbmanagementactivity_db_deletion_failed">Mazání dat se nezdařilo.</string>
<string name="dbmanagementactivity_delete_old_activity_db">Smazat původní databázi?</string>
<string name="dbmanagementactivity_delete_old_activitydb_confirmation">Opravdu chcete smazat původní databázi? Data o aktivitách, která nebyla importována budou ztracena.</string>
@ -345,7 +350,7 @@
<string name="title_activity_vibration">Vibrace</string>
<!--Strings related to Pebble Pairing Activity-->
<string name="title_activity_pebble_pairing">Párování Pebble</string>
<string name="pebble_pairing_hint">Dialog párování by se měl objevit na vašem zařízení s Androidem. Pokud se to nestane, zkontrolujte panel notifikací a potvrďte párování. Potom potvrďte párování na Pebble.</string>
<string name="pebble_pairing_hint">Dialog párování by se měl objevit na vašem zařízení s Androidem. Pokud se to nestane, zkontrolujte panel notifikací a potvrďte párování. Potom potvrďte párování na Pebble</string>
<string name="weather_notification_label">Ujistěte se, že tento skin je povolen v aplikaci pro oznámení počasí pro získávání informací v Pebble.\n\nNení třeba nic nastavovat.\n\nAplikaci pro počasí Pebble je možné povolit ve správě aplikací.\n\nPodporované ciferníky ukáží počasí automaticky.</string>
<string name="pref_title_setup_bt_pairing">Zapnout párování BT</string>
<string name="pref_summary_setup_bt_pairing">Toto vypněte v případě problémů s připojením</string>
@ -357,77 +362,146 @@
<string name="StringUtils_sender">(%1$s)</string>
<string name="find_device_you_found_it">Nalezeno!</string>
<string name="miband2_prefs_timeformat">Formát času Mi2</string>
<string name="action_donate">Přispět</string>
<string name="title_activity_calblacklist">Zakázané kalendáře</string>
<string name="action_donate">Podpořit</string>
<string name="title_activity_calblacklist">Zakázané notifikace Kalendáře</string>
<string name="pref_call_privacy_mode_number">Skryj číslo a zobraz jméno</string>
<string name="pref_call_privacy_mode_number">Skrýť číslo, ale zobrazit jméno</string>
<string name="pref_blacklist_calendars">Zakázané kalendáře</string>
<string name="pref_header_pebble_timeline">Časová osa Pebble</string>
<string name="pref_header_pebble_timeline">Časová os Pebble</string>
<string name="pref_title_enable_calendar_sync">Synchronizace kalendáře</string>
<string name="pref_summary_enable_calendar_sync">Odeslat události do časové osy</string>
<string name="pref_summary_enable_calendar_sync">Odesílat události kalendáře na časovou osu</string>
<string name="stats_title">Zóny rychlosti</string>
<string name="stats_x_axis_label">Celkem minut</string>
<string name="stats_x_axis_label">Minut celkovo</string>
<string name="stats_y_axis_label">Kroků za minutu</string>
<string name="calories">Kalorií</string>
<string name="distance">Vzdálenost</string>
<string name="clock">Hodiny</string>
<string name="heart_rate">Srdeční tep</string>
<string name="battery">Baterie</string>
<string name="mi2_prefs_goal_notification">Oznámení splnění cíle</string>
<string name="mi2_prefs_goal_notification_summary">Náramek bude vibrovat při splnění denního cíle kroků</string>
<string name="mi2_prefs_display_items">Zobrazit položky</string>
<string name="mi2_prefs_display_items_summary">Vybrat zobrazované položky na displeji náramku</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">Otáčením zápěstí změnit stav</string>
<string name="clock">Měření času</string>
<string name="heart_rate">Tep srdca</string>
<string name="battery">Batéria</string>
<string name="mi2_prefs_goal_notification">Upozornění na cíl</string>
<string name="mi2_prefs_goal_notification_summary">Náramek zavibruje při dosažení cíle denního počtu kroků</string>
<string name="mi2_prefs_display_items">Zobrazení položek</string>
<string name="mi2_prefs_display_items_summary">Vyberte položky zobrazené na obrazovce náramku</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">Otočením zápěstí přepnout typ informace</string>
<string name="mi2_prefs_do_not_disturb">Nerušit</string>
<string name="mi2_prefs_do_not_disturb_summary">Při zapnutí nebude náramek přijímat notifikace</string>
<string name="mi2_prefs_inactivity_warnings">Varování při neaktivitě</string>
<string name="mi2_prefs_inactivity_warnings_summary">Náramek bude vibrovat pokud budete určitou dobu neaktivní</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Doba neaktivity (v minutách)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Vypnout varování na neaktivitu v určené době</string>
<string name="mi2_prefs_do_not_disturb_start">Začátek</string>
<string name="mi2_prefs_do_not_disturb_end">Konec</string>
<string name="dbmanagementactivity_error_exporting_shared">Chyba při exportu nastavení: %1$s</string>
<string name="dbmanagementactivity_error_importing_shared">Chyba při importu nastavení: %1$s</string>
<string name="mi2_fw_installhandler_fw53_hint">Je třeba instalovat verzi %1$s před instalací FW!</string>
<string name="mi2_enable_text_notifications">Textové notifikace</string>
<string name="mi2_enable_text_notifications_summary">Je nutné mít FW &gt;= 1.0.1.28 a nainstalováno Mili_pro.ft*.</string>
<string name="off">Vypnuto</string>
<string name="mi2_dnd_off">Vypnuto</string>
<string name="mi2_dnd_automatic">Automaticky (podle spánku)</string>
<string name="mi2_dnd_scheduled">Časováno (časový úsek)</string>
<string name="discovery_attempting_to_pair">Zouším párovat s %1$s</string>
<string name="discovery_bonding_failed_immediately">Spojení s %1$s selhalo ihned.</string>
<string name="discovery_trying_to_connect_to">Zkouším spojení s: %1$s</string>
<string name="discovery_enable_bluetooth">Zapnout BT pro hledání zařízení.</string>
<string name="discovery_successfully_bonded">Spojeno úspěšně s %1$s.</string>
<string name="mi2_prefs_do_not_disturb_summary">Náramek nebude přijímat upozornění, pokud je aktivní režim Nerušit</string>
<string name="mi2_prefs_inactivity_warnings">Upozornění na nečinnost</string>
<string name="mi2_prefs_inactivity_warnings_summary">Náramek zavibruje, když budete zadaný čas bez pohybu</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Limit času bez pohybu (v minutách)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Vypnutí upozornění na nečinnost během zadaného časového intervalu</string>
<string name="mi2_prefs_do_not_disturb_start">Od</string>
<string name="mi2_prefs_do_not_disturb_end">Do</string>
<string name="dbmanagementactivity_error_exporting_shared">Chyba při exportu preferencí: %1$s</string>
<string name="dbmanagementactivity_error_importing_shared">Chyba při importu preferencí: %1$s</string>
<string name="mi2_fw_installhandler_fw53_hint">Před instalací tohoto firmwaru musíte nainstalovat verzi %1$s!</string>
<string name="mi2_enable_text_notifications">Textové upozornění</string>
<string name="mi2_enable_text_notifications_summary">Vyžaduje aby byl nainstalován font &gt;= 1.0.1.28 and Mili_pro.ft*.</string>
<string name="off">Vyp.</string>
<string name="mi2_dnd_off">Vyp.</string>
<string name="mi2_dnd_automatic">Automaticky (detekce spánku)</string>
<string name="mi2_dnd_scheduled">Naplánovano (časový interval)</string>
<string name="discovery_attempting_to_pair">Pokus o spárování %1$s</string>
<string name="discovery_bonding_failed_immediately">Spojení s %1$s ihned selhalo.</string>
<string name="discovery_trying_to_connect_to">Pokouším sa spojit s: %1$s</string>
<string name="discovery_enable_bluetooth">Chcete-li najít zařízení, povolte funkci Bluetooth.</string>
<string name="discovery_successfully_bonded">Spojeno s %1$s.</string>
<string name="discovery_pair_title">Párovat s %1$s?</string>
<string name="discovery_pair_question">Vyberte Párování pro spárování s vaším zaříením. Pokud to selže, tak to zkuste bez párování.</string>
<string name="discovery_yes_pair">Párování</string>
<string name="discovery_pair_question">Chcete-li spárovat svá zařízení, klepněte na Párovat. Pokud to selže, zkuste to znovu bez párování.</string>
<string name="discovery_yes_pair">Párovat</string>
<string name="discovery_dont_pair">Nepárovat</string>
<string name="mi2_prefs_button_actions">Akce tlačítka</string>
<string name="mi2_prefs_button_actions_summary">Definujte akce při stisku tlačítka na Mi Band 2</string>
<string name="mi2_prefs_button_press_count">Počet stisků tlačítka</string>
<string name="mi2_prefs_button_press_count_summary">Definujte počet stisknutí tlačítka k vyslání broadcast zprávy</string>
<string name="mi2_prefs_button_press_broadcast">Zpráva k vyslání (broadcast)</string>
<string name="mi2_prefs_button_press_broadcast_summary">Zpráva k vyslání do systému pokud počtu stisknutí tlačítka (viz výše)</string>
<string name="mi2_prefs_button_action">Povolit akci tlačítka</string>
<string name="mi2_prefs_button_action_summary">Povolit akci tlačítka na definovaný počet stisknutí</string>
<string name="mi2_prefs_button_action_vibrate">Povolit vibrace náramku</string>
<string name="mi2_prefs_button_action_vibrate_summary">Povolit vibrace náramku při vyslání broadcast zprávy</string>
<string name="mi2_prefs_button_press_count_max_delay">Maximální prodleva mezi stisky</string>
<string name="mi2_prefs_button_press_count_max_delay_summary">Maximální prodleva mezi stisky tlačítka v milisekundách</string>
<string name="mi2_prefs_button_press_count_match_delay">Prodleva před akcí</string>
<string name="mi2_prefs_button_press_count_match_delay_summary">Prodleva před akcí tlačítka. Umožňuje více průchodů (v extra button_id u Intent) nebo 0 pro okamžitou akci</string>
<string name="fw_upgrade_notice_amazfitbip">Chystáte se nainstalovat firmware %s namísto toho, který je aktuálně na vašem Amazfit Bipu.
<string name="mi2_prefs_button_actions_summary">Nastavení akcí po stisknutí tlačítka Mi Band 2</string>
<string name="mi2_prefs_button_press_count">Počet stisknutí tlačítka</string>
<string name="mi2_prefs_button_press_count_summary">Počet stisknutí tlačítka na spuštění vysílání zpráv</string>
<string name="mi2_prefs_button_press_broadcast">Vysílání zpráv</string>
<string name="mi2_prefs_button_press_broadcast_summary">Vysílání zprávy po definovaném počtu stisknutí tlačítka</string>
<string name="mi2_prefs_button_action">Zapnout akci tlačítka</string>
<string name="mi2_prefs_button_action_summary">Zapnout akci na zadaný počet stisknutí tlačítka</string>
<string name="mi2_prefs_button_action_vibrate">Zapnout vibrování náramku</string>
<string name="mi2_prefs_button_action_vibrate_summary">Zapnout vibrace náramku při stisknutí tlačítka</string>
<string name="mi2_prefs_button_press_count_max_delay">Maximální zpoždění mezi stisky</string>
<string name="mi2_prefs_button_press_count_max_delay_summary">Maximální zpoždění mezi stisknutím tlačítka v milisekundách</string>
<string name="mi2_prefs_button_press_count_match_delay">Zpoždění po provedení akce tlačítka</string>
<string name="mi2_prefs_button_press_count_match_delay_summary">Zpoždění po provedení akce tlačítka (číslo je v button_id) nebo 0 pro okamžitě</string>
<string name="fw_upgrade_notice_amazfitbip">Chystáte se nainstalovat firmvér %s na vašem Amazfit Bip.
\n
\nUjistěte se, že jste nainstalovali firmware .gps, pak soubor .res a nakonec soubor .fw. Hodiny se po instalaci souboru .fw restartují.
\nProsím nezapomeňte nainstalovat soubor .fw, potom soubor .res a nakonec soubor .gps. Vaše hodinky se po instalaci souboru .fw restartují.
\n
\nPoznámka: Nemusíte instalovat soubory .res a .gps, pokud jsou tyto soubory přesně stejné jako ty, které byly dříve nainstalovány.
\nPoznámka: Nemusíte instalovat .res a .gps, pokud jsou tyto soubory přesně stejné jako ty, které byly nainstalovány dříve.
\n
\nEXPERIMENTÁLNÍ PROCES, DĚLÁTE NA VAŠE VLASTNÍ RIZIKO</string>
\nDĚLÁTE TO NA VLASTNÍ NEBEZPEČÍ!</string>
<string name="amazfitbip_firmware">"Firmware Amazfit Bipu %1$s"</string>
<string name="controlcenter_connect">Připojit</string>
</resources>
<string name="fw_upgrade_notice_amazfitcor">Chystáte se nainstalovat firmvér %s do vašeho Amazfit Cor.
\n
\nProsím, ujistěte se, že jste nainstalovali soubor .fw a potom soubor .res. Vaše hodinky se po instalaci souboru .fw restartují.
\n
\nPoznámka: Nemusíte instalovat soubor .res, pokud je stejný jako nainstalován dříve.
\n
\n NETESTOVÁNO, MŮŽE UMRTVIT VAŠE ZAŘÍZENÍ, DĚLÁTE TO NA VLASTNÍ NEBEZPEČÍ!</string>
<string name="pref_title_charts_swipe">Zapnout možnost potažení vlevo/vpravo v grafech aktivit</string>
<string name="pref_title_weather">Počasí</string>
<string name="pref_title_weather_location">Poloha pro počasí (CM/LOS)</string>
<string name="pref_title_pebble_enable_bgjs">Zapnout JS na pozadí</string>
<string name="pref_summary_pebble_enable_bgjs">Pokud je zapnuto, umožňuje hodinám zobrazovat počasí, údaje o baterii atd.</string>
<string name="pref_header_auto_export">Automatický export</string>
<string name="pref_title_auto_export_enabled">Zapnutý/Vypnutý</string>
<string name="pref_title_auto_export_location">Složka pro uložení</string>
<string name="pref_title_auto_export_interval">Časový interval</string>
<string name="pref_summary_auto_export_interval">Exportovat každou %d hodinu</string>
<string name="preferences_amazfitbip_settings">Nastavení Amazfit Bip</string>
<string name="prefs_title_heartrate_measurement_interval">Celodenní měření tepu</string>
<string name="interval_one_minute">Jednou za minutu</string>
<string name="interval_five_minutes">Každých 5 minut</string>
<string name="interval_ten_minutes">Každých 10 minut</string>
<string name="interval_thirty_minutes">Každých 30 minut</string>
<string name="interval_one_hour">Jednou za hodinu</string>
<string name="notif_export_failed_title">Export databáze selhal! Zkontrolujte svá nastavení.</string>
<string name="automatic">Automaticky</string>
<string name="simplified_chinese">Zjednodušená Čínština</string>
<string name="traditional_chinese">Tradiční Čísština</string>
<string name="english">Angličtina</string>
<string name="spanish">Španělština</string>
<string name="activity_web_view">Aktivity Webový pohled</string>
<string name="_pebble_watch_open_on_phone">Otevřít na telefonu</string>
<string name="_pebble_watch_mute">Ztlumit</string>
<string name="_pebble_watch_reply">Znova</string>
<string name="kind_firmware">Firmvér</string>
<string name="kind_invalid">Neplatná data</string>
<string name="kind_font">Písmo</string>
<string name="kind_gps">GPS Firmvér</string>
<string name="kind_gps_almanac">Almanach GPS</string>
<string name="kind_gps_cep">Korekce chyb GPS</string>
<string name="kind_resources">Zdroje</string>
<string name="kind_watchface">Ciferník</string>
<string name="devicetype_unknown">Neznámé zařízení</string>
<string name="devicetype_test">Testovací zařízení</string>
<string name="devicetype_pebble">Pebble</string>
<string name="devicetype_miband">Mi Band</string>
<string name="devicetype_miband2">Mi Band 2</string>
<string name="devicetype_amazfit_bip">Amazfit Bip</string>
<string name="devicetype_amazfit_cor">Amazfit Cor</string>
<string name="devicetype_vibratissimo">Vibratissimo</string>
<string name="devicetype_liveview">LiveView</string>
<string name="devicetype_hplus">HPlus</string>
<string name="devicetype_makibes_f68">Makibes F68</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="devicetype_xwatch">XWatch</string>
<string name="choose_auto_export_location">Vyberte umístění exportu</string>
<string name="notification_channel_name">Gadgetbridge notifikace</string>
</resources>

View File

@ -33,11 +33,11 @@
<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_health_deactivate">Inaktiveeri</string>
<string name="appmanager_hrm_activate">Aktiveeri HRM</string>
<string name="appmanager_hrm_deactivate">Deaktiveeri HRM</string>
<string name="appmanager_hrm_deactivate">Inaktiveeri 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_deactivate">Inaktiveeri 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>
@ -113,4 +113,28 @@
<string name="pref_blacklist">Rakenduste must nimekiri</string>
<string name="pref_blacklist_calendars">Kalendrite must nimekiri</string>
<string name="pref_summary_minimize_priority_off">Olekuriba ikooni ja lukustusekraani märguandeid kuvatakse</string>
<string name="pref_summary_minimize_priority_on">Olekuriba ikoon ja lukustuserkaani märguanded on peidetud</string>
<string name="pref_summary_notifications_pebblemsg">Tugi rakendustele, mis saadavad PebbleKit kaudu märguandeid Pebblele.</string>
<string name="pref_title_whenscreenon">...ka sisse lülitatud ekraaniga</string>
<string name="pref_summary_notification_filter">Peata soovimatute märguannete saatmine \"Ära sega\" režiimis</string>
<string name="pref_summary_transliteration">Luba see, kui su seadmel puudub su keele fondi tugi</string>
<string name="pref_title_call_privacy_mode">Kõne privaatrežiim</string>
<string name="pref_call_privacy_mode_name">Peida nimi, kuva ainult number</string>
<string name="pref_header_cannned_messages">Talletatud sõnumid</string>
<string name="pref_title_canned_replies">Vastused</string>
<string name="pref_title_canned_reply_suffix">Ühine järelliide</string>
<string name="pref_header_development">Arendajate seaded</string>
<string name="pref_title_development_miaddr">Mi Band\'i aadress</string>
<string name="pref_title_canned_messages_set">Uuenda Pebble\'l</string>
<string name="pref_title_pebble_settings">Pebble\'i seaded</string>
<string name="pref_header_activitytrackers">Aktiivsusmonitorid</string>
<string name="pref_title_pebble_activitytracker">Eelistatud aktiivsusmonitor</string>
<string name="pref_title_pebble_sync_health">Sünkrooni Pebble\'i terviseandmeid</string>
<string name="pref_title_pebble_sync_misfit">Sünkrooni Misfit\'i</string>
</resources>

View File

@ -306,7 +306,7 @@
<string name="miband_prefs_reserve_alarm_calendar">Sveglie da riservare per i prossimi eventi del calendario</string>
<string name="miband_prefs_hr_sleep_detection">Utilizza il sensore del battito cardiaco per migliorare il riconoscimento del sonno</string>
<string name="miband_prefs_device_time_offset_hours">Sfasamento dell\'orario per il device (per consentire il rilevamento del sonno per chi lavora a turni)</string>
<string name="miband2_prefs_dateformat">Mi2: formato della data</string>
<string name="miband2_prefs_dateformat">Mi Band 2: Formato Data</string>
<string name="dateformat_time">Ora</string>
<string name="dateformat_date_time">Ora e data</string>
<string name="mi2_prefs_goal_notification">Notifica raggiungimento obbiettivi</string>
@ -500,4 +500,5 @@
<string name="notification_channel_name">Notifiche Gadgetbridge</string>
<string name="devicetype_xwatch">XWatch</string>
<string name="on">Acceso</string>
</resources>

View File

@ -28,7 +28,7 @@
<string name="appmananger_app_delete">Удалить</string>
<string name="appmananger_app_delete_cache">Удалить и очистить кеш</string>
<string name="appmananger_app_reinstall">Переустановка</string>
<string name="appmanager_app_openinstore">Искать в Pebble Appstore</string>
<string name="appmanager_app_openinstore">Искать в магазине Pebble</string>
<string name="appmanager_health_activate">Активировать</string>
<string name="appmanager_health_deactivate">Деактивировать</string>
<string name="appmanager_hrm_activate">Включить монитор сердечного ритма</string>
@ -466,4 +466,5 @@
<string name="interval_thirty_minutes">раз в полчаса</string>
<string name="interval_one_hour">раз в час</string>
<string name="pref_title_weather">Погода</string>
</resources>

View File

@ -0,0 +1,555 @@
<?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">Nastavenia</string>
<string name="action_debug">Ladenie</string>
<string name="action_quit">Ukončiť</string>
<string name="action_donate">Podporiť</string>
<string name="controlcenter_fetch_activity_data">Načítať dáta</string>
<string name="controlcenter_find_device">Nájsť zariadenie</string>
<string name="controlcenter_take_screenshot">Urobiť snímku obrazovky</string>
<string name="controlcenter_disconnect">Odpojiť</string>
<string name="controlcenter_delete_device">Odstrániť zariadenie</string>
<string name="controlcenter_delete_device_name">Odstrániť %1$s</string>
<string name="controlcenter_delete_device_dialogmessage">Odstráni zariadenie a vymaže všetky dáta!</string>
<string name="controlcenter_navigation_drawer_open">Otvoriť navigačnú lištu</string>
<string name="controlcenter_navigation_drawer_close">Zavrieť navigačnú lištu</string>
<string name="controlcenter_snackbar_need_longpress">Podržte kartu dlhšie pre odpojenie</string>
<string name="controlcenter_snackbar_disconnecting">Odpájanie</string>
<string name="controlcenter_snackbar_connecting">Pripájanie</string>
<string name="controlcenter_snackbar_requested_screenshot">Vytvorenie snímky obrazovky zariadenia</string>
<string name="title_activity_debug">Ladenie</string>
<string name="title_activity_appmanager">Manažér aplikácií</string>
<string name="appmanager_cached_watchapps_watchfaces">Aplikácie v cache</string>
<string name="appmanager_installed_watchapps">Nainštalované aplikácie</string>
<string name="appmanager_installed_watchfaces">Nainštalované ciferníky</string>
<string name="appmananger_app_delete">Odstrániť</string>
<string name="appmananger_app_delete_cache">Odstrániť z cache</string>
<string name="appmananger_app_reinstall">Nainštalovať znovu</string>
<string name="appmanager_app_openinstore">Hľadať v Pebble Appstore</string>
<string name="appmanager_health_activate">Aktivovať</string>
<string name="appmanager_health_deactivate">Deaktivovať</string>
<string name="appmanager_hrm_activate">Zapnúť meranie tepu</string>
<string name="appmanager_hrm_deactivate">Vypnúť meranie tepu</string>
<string name="appmanager_weather_activate">Aktivovať systémovú aplikáciu pre počasie</string>
<string name="appmanager_weather_deactivate">Deaktivovať systémovú aplikáciu pre počasie</string>
<string name="appmanager_weather_install_provider">Nainštalovať aplikáciu pre upozornenia na počasie</string>
<string name="app_configure">Nastaviť</string>
<string name="app_move_to_top">Posunúť hore</string>
<string name="title_activity_appblacklist">Zakázané upozornenia</string>
<string name="title_activity_calblacklist">Zakázané upozornenia Kalendára</string>
<string name="title_activity_fw_app_insaller">Inštalátor FW/Apl</string>
<string name="fw_upgrade_notice">Nainštaluje firmware %s do Mi Band namiesto existujúceho.</string>
<string name="fw_upgrade_notice_amazfitbip">Chystáte sa nainštalovať firmvér %s na vašom Amazfit Bip.
\n
\nProsím nezabudnite nainštalovať súbor .fw, potom súbor .res a nakoniec súbor .gps. Vaše hodinky sa po nainštalovaní súboru .fw reštartujú.
\n
\nPoznámka: Nemusíte inštalovať .res a .gps, ak sú tieto súbory presne rovnaké ako tie, ktoré boli nainštalované skôr.
\n
\nROBÍTE TO NA VLASTNÉ RIZIKO!</string>
<string name="fw_upgrade_notice_amazfitcor">Chystáte sa nainštalovať firmvér %s do vášho Amazfit Cor.
\n
\nProsím, uistite sa, že ste nainštalovali súbor .fw a potom súbor .res. Vaše hodinky sa po inštalácii súboru .fw reštartujú.
\n
\nPoznámka: Nemusíte inštalovať súbor .res, ak je rovnaký ako nainštalovaný predtým.
\n
\nNETESTOVANÉ, MÔŽE UMŔTVIŤ VAŠE ZARIADENIE, ROBÍTE TO NA VLASTNÉ RIZIKO!</string>
<string name="fw_multi_upgrade_notice">Nainštaluje firmvér %1$s a %2$s do Mi Band miesto existujúceho.</string>
<string name="miband_firmware_known">Tento firmware bol testovaný a je kompatibilný s Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Tento firmware nebol testovaný a nemusí byť kompatibilný s Gadgetbridge.
\n
\nNedoporučujeme ho nahrávať do Mi Band!</string>
<string name="miband_firmware_suggest_whitelist">Ak budete pokračovať a všetko bude dobre fungovať aj potom, upozornite vývojárov Gadgetbridge, aby označili tento firmvér: %s ako vyskúšaný</string>
<string name="title_activity_settings">Nastavenia</string>
<string name="pref_header_general">Základné nastavenia</string>
<string name="pref_title_general_autoconnectonbluetooth">Pripojiť zariadenie ak je BT zapnutý</string>
<string name="pref_title_general_autostartonboot">Spúšťať automaticky</string>
<string name="pref_title_general_autocreonnect">Automatické opätovné pripojenie</string>
<string name="pref_title_audo_player">Preferovaný prehrávač zvukov</string>
<string name="pref_default">Predvolené</string>
<string name="pref_title_charts_swipe">Zapnúť možnosť potiahnutia vľavo/vpravo v grafoch aktivít</string>
<string name="pref_header_datetime">Dátum a čas</string>
<string name="pref_title_datetime_syctimeonconnect">Nastaviť čas</string>
<string name="pref_summary_datetime_syctimeonconnect">Nastaviť čas počas pripojenia a pri zmene času v Androide</string>
<string name="pref_title_theme">Téma aplikácie</string>
<string name="pref_theme_light">Svetlá</string>
<string name="pref_theme_dark">Tmavá</string>
<string name="pref_title_language">Jazyk</string>
<string name="pref_title_minimize_priority">Skryť upozornenia Gadgetbridge</string>
<string name="pref_summary_minimize_priority_off">V stavovom riadku na obrazovke uzamknutia bude zobrazená ikona a upozornenie</string>
<string name="pref_summary_minimize_priority_on">V stavovom riadku na obrazovke uzamknutia nebude zobrazená ikona a upozornenie</string>
<string name="pref_header_notifications">Upozornenia</string>
<string name="pref_title_notifications_repetitions">Opakovanie</string>
<string name="pref_title_notifications_call">Hovory</string>
<string name="pref_title_notifications_sms">SMS</string>
<string name="pref_title_notifications_pebblemsg">Správy Pebble</string>
<string name="pref_summary_notifications_pebblemsg">Podpora pre aplikácie, ktoré posielajú upozornenia do Pebble cez PebbleKit.</string>
<string name="pref_title_notifications_generic">Prístup k upozorneniam</string>
<string name="pref_title_whenscreenon">Upozornenia aj pri zapnutej obrazovke</string>
<string name="pref_title_notification_filter">Nerušiť</string>
<string name="pref_summary_notification_filter">Neposielať nechcené upozornenia v režime Nerušiť</string>
<string name="pref_title_transliteration">Náhrada diakritiky</string>
<string name="pref_summary_transliteration">Toto zapnite, ak vaše zariadenie nepodporuje písma (znaky s diakritikou) pre vás jazyk</string>
<string name="always">Vždy</string>
<string name="when_screen_off">Pri vypnutej obrazovke</string>
<string name="never">Nikdy</string>
<string name="pref_header_privacy">Súkromie</string>
<string name="pref_title_call_privacy_mode">Ochrana súkromia pri hovore</string>
<string name="pref_call_privacy_mode_off">Zobraziť meno a číslo</string>
<string name="pref_call_privacy_mode_name">Skryť meno, ale zobraziť číslo</string>
<string name="pref_call_privacy_mode_number">Skryť číslo, ale zobraziť meno</string>
<string name="pref_call_privacy_mode_complete">Skryť meno aj číslo</string>
<string name="pref_title_weather">Počasie</string>
<string name="pref_title_weather_location">Poloha pre počasie (CM/LOS)</string>
<string name="pref_blacklist">Zakázané aplikácie (bez upozornení)</string>
<string name="pref_blacklist_calendars">Zakázané kalendáre</string>
<string name="pref_header_cannned_messages">Potlačené správy</string>
<string name="pref_title_canned_replies">Odpovede</string>
<string name="pref_title_canned_reply_suffix">Bežná prípona</string>
<string name="pref_title_canned_messages_dismisscall">Zamietnuté hovory</string>
<string name="pref_title_canned_messages_set">Aktualizovať na Pebble</string>
<string name="pref_header_development">Vývojárske nastavenia</string>
<string name="pref_title_development_miaddr">Adresa Mi Band</string>
<string name="pref_title_pebble_settings">Nastavenia Pebble</string>
<string name="pref_header_activitytrackers">Sledovače aktivity</string>
<string name="pref_title_pebble_activitytracker">Preferovaný sledovač aktivity</string>
<string name="pref_title_pebble_sync_health">Synchronizovať Pebble Health</string>
<string name="pref_title_pebble_sync_misfit">Synchronizovať Misfit</string>
<string name="pref_title_pebble_sync_morpheuz">Synchronizovať Morpheuz</string>
<string name="pref_title_enable_outgoing_call">Podpora odchádzjúcich hovorov</string>
<string name="pref_summary_enable_outgoing_call">Vypnutím tiež prestanú u Pebble 2/LE vibrácie u odchádzajúcich hovorov</string>
<string name="pref_title_enable_pebblekit">Povoliť prístup tretích strán k aplikácii Android</string>
<string name="pref_summary_enable_pebblekit">Povoliť experimentálnu podporu pre aplikácie Androidu cez PebbleKit</string>
<string name="pref_header_pebble_timeline">Časová os Pebble</string>
<string name="pref_title_sunrise_sunset">Východ a západ slnka</string>
<string name="pref_summary_sunrise_sunset">Posielať časy východu a západu slnka podľa umiestnenia do Pebble časovej osi</string>
<string name="pref_title_enable_calendar_sync">Synchronizácia kalendára</string>
<string name="pref_summary_enable_calendar_sync">Odosielať udalosti kalendára na časovú os</string>
<string name="pref_title_autoremove_notifications">Automaticky odstraňovať skryté upozornenia</string>
<string name="pref_summary_autoremove_notifications">Upozornenia budú z Pebble odstránené automaticky, ak boli skryté na zariadení s Androidom</string>
<string name="pref_title_pebble_privacy_mode">Režim súkromia</string>
<string name="pref_pebble_privacy_mode_off">Bežné upozornenia</string>
<string name="pref_pebble_privacy_mode_content">Posunúť text upozornenia mimo obrazovku</string>
<string name="pref_pebble_privacy_mode_complete">Zobraziť iba ikonu notifikácia</string>
<string name="pref_header_location">Poloha</string>
<string name="pref_title_location_aquire">Zistiť polohu</string>
<string name="pref_title_location_latitude">Z. šírka</string>
<string name="pref_title_location_longitude">Z. dĺžka</string>
<string name="pref_title_location_keep_uptodate">Aktualizovať polohu</string>
<string name="pref_summary_location_keep_uptodate">Pri spustení zistiť aktuálnu polohu, uloženú polohu použiť ako záložnú</string>
<string name="toast_enable_networklocationprovider">Povoľte zisťovanie polohy podľa siete</string>
<string name="toast_aqurired_networklocation">Poloha zistená</string>
<string name="pref_title_pebble_forceprotocol">Vynútiť protokol upozornení</string>
<string name="pref_summary_pebble_forceprotocol">Táto voľba vynúti použitie najnovšieho protokolu upozornení podľa verzie firmware. ZAPNITE IBA AK VIETE, ČO ROBÍTE!</string>
<string name="pref_title_pebble_forceuntested">Povoliť netestované funkcie</string>
<string name="pref_summary_pebble_forceuntested">Povolí funkcie, ktoré neboli testované. ZAPNITE IBA AK VIETE, ČO ROBÍTE!</string>
<string name="pref_title_pebble_forcele">Vždy preferovať BLE</string>
<string name="pref_summary_pebble_forcele">"Použiť experimentálnu podporu Pebble LE pre všetky Pebble zariadenia namiesto klasického BT. Vyžaduje spárovanie Pebble LE \" po pripojení bez LE"</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU ohraničenie</string>
<string name="pref_summary_pebble_mtu_limit">Ak vaše Pebble 2/Pebble LE nepracuje správne, skúste toto nastavenie pre omezenie MTU (povolený rozsah 20-512)</string>
<string name="pref_title_pebble_enable_applogs">Zapnúť logovanie Watch App</string>
<string name="pref_summary_pebble_enable_applogs">Spôsobí, že logy z aplikácií v hodinkách budú zaznamenávané aplikáciou Gadgetbridge (vyžaduje opätovné pripojenie)</string>
<string name="pref_title_pebble_always_ack_pebblekit">Predčasné potvrdenie (ACK) pre PebbleKit</string>
<string name="pref_summary_pebble_always_ack_pebblekit">Spôsobí, že správy odosielané externým aplikáciám tretích strán budú vždy a okamžite potvrdené</string>
<string name="pref_title_pebble_enable_bgjs">Zapnúť JS na pozadí</string>
<string name="pref_summary_pebble_enable_bgjs">Ak je zapnuté, umožňuje hodinám zobrazovať počasie, údaje o batérii atď.</string>
<string name="pref_title_pebble_reconnect_attempts">Pokusov o znovupripojenie</string>
<string name="pref_title_unit_system">Merné jednotky</string>
<string name="pref_title_timeformat">Formát času</string>
<string name="pref_title_screentime">Čas zapnutia obrazovky</string>
<string name="prefs_title_all_day_heart_rate">Celodenné meranie tepu</string>
<string name="preferences_hplus_settings">Nastavenia HPlus/Makibes</string>
<string name="pref_header_auto_export">Automatický export</string>
<string name="pref_title_auto_export_enabled">Zapnutý/Vypnutý</string>
<string name="pref_title_auto_export_location">Priečinok pre uloženie</string>
<string name="pref_title_auto_export_interval">Časový interval</string>
<string name="pref_summary_auto_export_interval">Exportovať každú %d hodinu</string>
<string name="not_connected">Nepripojené</string>
<string name="connecting">Pripájanie</string>
<string name="connected">Pripojené</string>
<string name="unknown_state">Neznámy stav</string>
<string name="_unknown_">(neznáme)</string>
<string name="test">Test</string>
<string name="test_notification">Test upozornení</string>
<string name="this_is_a_test_notification_from_gadgetbridge">Toto je upozornenie z Gadgetbridge</string>
<string name="bluetooth_is_not_supported_">BT nie je podporovaný.</string>
<string name="bluetooth_is_disabled_">BT je vypnutý.</string>
<string name="tap_connected_device_for_app_mananger">Dotknite sa pripojeného zariadenia pre zobrazenie správcu aplikácií</string>
<string name="tap_connected_device_for_activity">Dotknite sa pripojeného zariadenia pre zobrazenie aktivít</string>
<string name="tap_connected_device_for_vibration">Dotknite sa pripojeného zariadenia pre vibrácie</string>
<string name="tap_a_device_to_connect">Dotknite sa pripojeného zariadenia pre pripojenie</string>
<string name="cannot_connect_bt_address_invalid_">Nie je možné pripojiť. Je BT adresa v poriadku?</string>
<string name="gadgetbridge_running">Gadgetbridge je spustený</string>
<string name="installing_binary_d_d">Instalujem binárny súbor %1$d/%2$d</string>
<string name="installation_failed_">Inštalácia zlyhala</string>
<string name="installation_successful">Inštalácia bola úspešná</string>
<string name="firmware_install_warning">CHCETE INŠTALOVAŤ FIRMWARE, POKRAČUJTE NA VLASTNÉ RIZIKO.
\n
\n
\nTento firmware je pre revíziu HW: %s</string>
<string name="app_install_info">Inštalujete aplikáciu:
\n
\n
\n%1$s Verzia %2$s od %3$s
\n</string>
<string name="n_a">Nedostupné</string>
<string name="initialized">Spustené</string>
<string name="appversion_by_creator">%1$s od %2$s</string>
<string name="title_activity_discovery">Vyhľadávanie zariadenia</string>
<string name="discovery_stop_scanning">Zastaviť hľadanie</string>
<string name="discovery_start_scanning">Spustiť hľadanie</string>
<string name="action_discover">Pripojiť nové zariadenia</string>
<string name="device_with_rssi">%1$s (%2$s)</string>
<string name="title_activity_android_pairing">Párovať zariadenie</string>
<string name="android_pairing_hint">Použite párovanie BT Androidu pre spárovanie so zariadením.</string>
<string name="title_activity_mi_band_pairing">Párovať Mi Band</string>
<string name="pairing">Párujem s %s…</string>
<string name="pairing_creating_bond_with">Vytváram väzbu s %1$s (%2$s)</string>
<string name="pairing_unable_to_pair_with">Nie je možné spárovať s %1$s (%2$s)</string>
<string name="pairing_in_progress">Vytváram väzbu: %1$s (%2$s)</string>
<string name="pairing_already_bonded">Väzba s %1$s (%2$s) už existuje, prepájam…</string>
<string name="message_cannot_pair_no_mac">Adresa MAC neprišla, nemôžem spárovať.</string>
<string name="preferences_category_device_specific_settings">Nastavenia zariadenia</string>
<string name="preferences_miband_settings">Nastavenia Mi Band / Amazfit</string>
<string name="preferences_amazfitbip_settings">Nastavenia Amazfit Bip</string>
<string name="male">Muž</string>
<string name="female">Žena</string>
<string name="other">Iné</string>
<string name="left">Ľavej</string>
<string name="right">Pravej</string>
<string name="miband_pairing_using_dummy_userdata">Užívateľské dáta nie sú platné, teraz používam predvolené.</string>
<string name="miband_pairing_tap_hint">Keď Mi Band zavibruje a blikne, dotknite sa ho niekoľkokrát po sebe.</string>
<string name="appinstaller_install">Nainštalovať</string>
<string name="discovery_connected_devices_hint">Nastavte svoje zariadenie pre vyhľadanie. Už pripojené zariadenia nebudú vyhľadané. Zapnite lokalizáciu (GPS) na mobiloch s Androidom 6 a vyšším. Vypnite stráženie súkromia pre Gadgetbridge, pretože môže spôsobiť nestabilitu mobilu. Ak nie je zariadenie vyhľadané v priebehu niekoľkých minút, skúste to znovu po reštarte mobilu.</string>
<string name="discovery_note">Poznámka:</string>
<string name="candidate_item_device_image">Obraz zariadenia</string>
<string name="miband_prefs_alias">Názov/přezdívka</string>
<string name="pref_header_vibration_count">Počet vibrácií</string>
<string name="title_activity_sleepmonitor">Sledovanie spánku</string>
<string name="pref_write_logfiles">Zapísať logy</string>
<string name="initializing">Spúšťanie</string>
<string name="busy_task_fetch_activity_data">Načítavanie údajov o aktivite</string>
<string name="sleep_activity_date_range">Od %1$s do %2$s</string>
<string name="miband_prefs_wearside">Na ktorej ruke nosíte?</string>
<string name="pref_screen_vibration_profile">Profil vibrácií</string>
<string name="vibration_profile_staccato">Staccato</string>
<string name="vibration_profile_short">Krátké</string>
<string name="vibration_profile_medium">Stredné</string>
<string name="vibration_profile_long">Dlhé</string>
<string name="vibration_profile_waterdrop">Kvapka</string>
<string name="vibration_profile_ring">Zvonenie</string>
<string name="vibration_profile_alarm_clock">Budík</string>
<string name="miband_prefs_vibration">Vibrácie</string>
<string name="vibration_try">Vyskúšať</string>
<string name="pref_screen_notification_profile_sms">Upozornenia na SMS</string>
<string name="pref_header_vibration_settings">Nastavenia vibrácií</string>
<string name="pref_screen_notification_profile_generic">Bežné upozornenia</string>
<string name="pref_screen_notification_profile_email">Upozornenia na emaily</string>
<string name="pref_screen_notification_profile_incoming_call">Upozornenia na hovory</string>
<string name="pref_screen_notification_profile_generic_chat">Rozhovory (chat)</string>
<string name="pref_screen_notification_profile_generic_navigation">Navigácia</string>
<string name="pref_screen_notification_profile_generic_social">Sociálne siete</string>
<string name="prefs_title_heartrate_measurement_interval">Celodenné meranie tepu</string>
<string name="interval_one_minute">Raz za minútu</string>
<string name="interval_five_minutes">Každých 5 minút</string>
<string name="interval_ten_minutes">Každých 10 minút</string>
<string name="interval_thirty_minutes">Každých 30 minút</string>
<string name="interval_one_hour">Raz za hodinu</string>
<string name="stats_title">Zóny rýchlosti</string>
<string name="stats_x_axis_label">Minút celkovo</string>
<string name="stats_y_axis_label">Krokov za minútu</string>
<string name="control_center_find_lost_device">Nájsť stratené zariadenie</string>
<string name="control_center_cancel_to_stop_vibration">Zrušit pro zastavení vibrací.</string>
<string name="title_activity_charts">Vaše aktivity</string>
<string name="title_activity_set_alarm">Nastaviť budíky</string>
<string name="controlcenter_start_configure_alarms">Nastavenie budíkov</string>
<string name="title_activity_alarm_details">Detaily budenia</string>
<string name="alarm_sun_short">Ne</string>
<string name="alarm_mon_short">Po</string>
<string name="alarm_tue_short">Ut</string>
<string name="alarm_wed_short">St</string>
<string name="alarm_thu_short">Št</string>
<string name="alarm_fri_short">Pi</string>
<string name="alarm_sat_short">So</string>
<string name="alarm_smart_wakeup">Inteligentné buzdenie</string>
<string name="user_feedback_miband_set_alarms_failed">Nepodarilo sa nastaviť budík, skúste to znova!</string>
<string name="user_feedback_miband_set_alarms_ok">Budík bol odoslaný do zariadenia!</string>
<string name="chart_no_data_synchronize">Chýbajú dáta, mám ich stiahnuť?</string>
<string name="user_feedback_miband_activity_data_transfer">Stiahnuť dáta %1$s z %2$s</string>
<string name="miband_prefs_fitness_goal">Cieľový počet krokov za deň</string>
<string name="dbaccess_error_executing">Chyba spustenia \'%1$s\'</string>
<string name="controlcenter_start_activitymonitor">Vaša aktivita (pokusná)</string>
<string name="cannot_connect">Nedá sa pripojiť k: %1$s</string>
<string name="installer_activity_unable_to_find_handler">Nemôžem nájsť program na inštaláciu tohto súboru.</string>
<string name="pbw_install_handler_unable_to_install">Nepodarilo sa nainštalovať súbor: %1$s</string>
<string name="pbw_install_handler_hw_revision_mismatch">Nemožno nainštalovať vybraný firmware: nezhoduje sa HW revíziou vášho Pebble.</string>
<string name="installer_activity_wait_while_determining_status">Vyčkajte na zistenie stavu inštalácie…</string>
<string name="notif_battery_low_title">Nízka úroveň nabitia batérie v zariadení!</string>
<string name="notif_battery_low_percent">%1$s zostáva v batérii: %2$s%%</string>
<string name="notif_battery_low_bigtext_last_charge_time">Posledné nabitie: %s
\n</string>
<string name="notif_battery_low_bigtext_number_of_charges">Počet nabití: %s</string>
<string name="notif_export_failed_title">Export databázy zlyhal! Skontrolujte svoje nastavenia.</string>
<string name="sleepchart_your_sleep">Váš spánok</string>
<string name="weeksleepchart_sleep_a_week">Spánok za týždeň</string>
<string name="weeksleepchart_today_sleep_description">Spánok dnes, cieľ: %1$s</string>
<string name="weekstepschart_steps_a_week">Kroky za týždeň</string>
<string name="activity_sleepchart_activity_and_sleep">Vaša aktivita a spánok</string>
<string name="updating_firmware">Nahrávam firmvér…</string>
<string name="fwapp_install_device_not_ready">Súbor sa nedá nainštalovať, zariadenie nie je pripravené.</string>
<string name="installhandler_firmware_name">%1$s: %2$s %3$s</string>
<string name="miband_fwinstaller_compatible_version">Kompatibilná verzia</string>
<string name="miband_fwinstaller_untested_version">Netestovaná verzia!</string>
<string name="fwappinstaller_connection_state">Připojené k zariadeniu: %1$s</string>
<string name="pbw_installhandler_pebble_firmware">Pebble firmvér %1$s</string>
<string name="pbwinstallhandler_correct_hw_revision">Správná HW revízia</string>
<string name="pbwinstallhandler_incorrect_hw_revision">Revízía HW nie je správna!</string>
<string name="pbwinstallhandler_app_item">%1$s (%2$s)</string>
<string name="updatefirmwareoperation_updateproblem_do_not_reboot">Pri prenose firmvéru nastali ťažkosti. Nereštartujte svoj Mi Band!</string>
<string name="updatefirmwareoperation_metadata_updateproblem">Problém pri prenose metadát firmvéru</string>
<string name="updatefirmwareoperation_update_complete">Inštalácia firmvéru je kompletná</string>
<string name="updatefirmwareoperation_update_complete_rebooting">Inštalácia firmvéru je kompletná, reštartujem zariadenie…</string>
<string name="updatefirmwareoperation_write_failed">Zápis firmvéru zlyhal</string>
<string name="chart_steps">Krokov</string>
<string name="calories">Kalórií</string>
<string name="distance">Vzdialenosť</string>
<string name="clock">Meranie času</string>
<string name="heart_rate">Tep srdca</string>
<string name="battery">Batéria</string>
<string name="liveactivity_live_activity">Súčasná aktivita</string>
<string name="weeksteps_today_steps_description">Krokov dnes, cieľ: %1$s</string>
<string name="pref_title_dont_ack_transfer">Nepotvrdzovať prenos dát o aktivite</string>
<string name="pref_summary_dont_ack_transfers">Pokiaľ nie je prenos dát potvrdený náramkom, potom nebudú vymazané. To je užitečné, pokiaľ je GB používaný dohromady s inou aplikáciou.</string>
<string name="pref_summary_keep_data_on_device">Zachová dáta o aktivite v Mi Band aj po synchronizácii. To je užitečné, ak je GB používaný dohromady s inou aplikáciou.</string>
<string name="pref_title_low_latency_fw_update">Použiť režim z nízkym oneskorením pri aktualizácii firmvéru</string>
<string name="pref_summary_low_latency_fw_update">Môže to pomôcť u zariadenia, kde aktualizácia firmvéru zlyhala</string>
<string name="live_activity_steps_history">História krokov</string>
<string name="live_activity_current_steps_per_minute">Dnes krokov/min</string>
<string name="live_activity_total_steps">Celkom krokov</string>
<string name="live_activity_steps_per_minute_history">História krokov za minútu</string>
<string name="live_activity_start_your_activity">Začať aktivitu</string>
<string name="abstract_chart_fragment_kind_activity">Aktivita</string>
<string name="abstract_chart_fragment_kind_light_sleep">Ľahký spánok</string>
<string name="abstract_chart_fragment_kind_deep_sleep">Hlboký spánok</string>
<string name="abstract_chart_fragment_kind_not_worn">Nenosené</string>
<string name="device_not_connected">Nepripojené.</string>
<string name="user_feedback_all_alarms_disabled">Všetky alarmy vypnuté</string>
<string name="pref_title_keep_data_on_device">Zachovať dáta o aktivite v zariadení</string>
<string name="miband_fwinstaller_incompatible_version">Nekompatibilný firmvér</string>
<string name="fwinstaller_firmware_not_compatible_to_device">Tento firmware nie je kompatibilný s týmto zariadením</string>
<string name="miband_prefs_reserve_alarm_calendar">Alarmy pre nadchádzajúce udalosti</string>
<string name="miband_prefs_hr_sleep_detection">Použiť sledovanie tepu pre zlepšenie detekcie spánku</string>
<string name="miband_prefs_device_time_offset_hours">Časový posun zariadenia v hodinách (pre zisťovanie spánku v pracujúcich na smeny)</string>
<string name="miband2_prefs_dateformat">Mi2: formát datumu</string>
<string name="dateformat_time">Čas</string>
<string name="dateformat_date_time">Čas a dátum</string>
<string name="mi2_prefs_button_actions">Akcie tlačidla</string>
<string name="mi2_prefs_button_actions_summary">Nastavenie akcií po stlačení tlačidla Mi Band 2</string>
<string name="mi2_prefs_button_press_count">Počet stlačení tlačidla</string>
<string name="mi2_prefs_button_press_count_summary">Počet stlačení tlačidla na spustenie vysielania správ</string>
<string name="mi2_prefs_button_press_broadcast">Vysielanie správ</string>
<string name="mi2_prefs_button_press_broadcast_summary">Vysielanie správy po definovanom počte stlačenia tlačidla</string>
<string name="mi2_prefs_button_action">Zapnúť akciu tlačidla</string>
<string name="mi2_prefs_button_action_summary">Zapnúť akciu na zadaný počet stlačenia tlačidla</string>
<string name="mi2_prefs_button_action_vibrate">Zapnúť vibrovanie náramku</string>
<string name="mi2_prefs_button_action_vibrate_summary">Zapnúť vibrácie náramku pri stlačení tlačidla</string>
<string name="mi2_prefs_button_press_count_max_delay">Maximálne oneskorenie medzi stlačeniami</string>
<string name="mi2_prefs_button_press_count_max_delay_summary">Maximálne oneskorenie medzi stlačením tlačidla v milisekundách</string>
<string name="mi2_prefs_button_press_count_match_delay">Oneskorenie po vykonaní akcie tlačidla</string>
<string name="mi2_prefs_button_press_count_match_delay_summary">Oneskorenie po vykonaní akcie tlačidla (číslo je v button_id) alebo 0 pre okamžite</string>
<string name="mi2_prefs_goal_notification">Upozornenie na cieľ</string>
<string name="mi2_prefs_goal_notification_summary">Náramok zavibruje pri dosiahnutí cieľa denného počtu krokov</string>
<string name="mi2_prefs_display_items">Zobrazenie položiek</string>
<string name="mi2_prefs_display_items_summary">Vyberte položky zobrazené na obrazovke náramku</string>
<string name="mi2_prefs_activate_display_on_lift">Zapnúť obrazovku pri zdvihnutí</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">Otočením zápästia prepnúť typ informácie</string>
<string name="mi2_prefs_do_not_disturb">Nerušiť</string>
<string name="mi2_prefs_do_not_disturb_summary">Náramok nebude prijímať upozornenia, pokiaľ je aktívny režim Nerušiť</string>
<string name="mi2_prefs_inactivity_warnings">Upozornenia na nečinnosť</string>
<string name="mi2_prefs_inactivity_warnings_summary">Náramok zavibruje, keď budete zadaný čas bez pohybu</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Limit času bez pohybu (v minútach)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Vypnutie upozornení na nečinnosť počas zadaného časového intervalu</string>
<string name="mi2_prefs_do_not_disturb_start">Od</string>
<string name="mi2_prefs_do_not_disturb_end">Do</string>
<string name="automatic">Automaticky</string>
<string name="simplified_chinese">Zjednodušená Čínština</string>
<string name="traditional_chinese">Tradičná Čísština</string>
<string name="english">Angličtina</string>
<string name="spanish">Španielčina</string>
<string name="FetchActivityOperation_about_to_transfer_since">Prenášam dáta od %1$s</string>
<string name="waiting_for_reconnect">Čakanie na opätovné pripojenie</string>
<string name="activity_prefs_about_you">Vaše údaje</string>
<string name="activity_prefs_year_birth">Rok narodenia</string>
<string name="activity_prefs_gender">Pohlavie</string>
<string name="activity_prefs_height_cm">Výška v cm</string>
<string name="activity_prefs_weight_kg">Váha v kg</string>
<string name="authenticating">Overovanie</string>
<string name="authentication_required">Vyžiadané overenie</string>
<string name="appwidget_text">Spí...</string>
<string name="add_widget">Pridať miniaplikáciu</string>
<string name="activity_prefs_sleep_duration">Preferovaná doba spánku v hodinách</string>
<string name="appwidget_alarms_set">Budík nastavený na %1$02d:%2$02d</string>
<string name="device_hw">Revízia HW: %1$s</string>
<string name="device_fw">Verzia FW: %1$s</string>
<string name="error_creating_directory_for_logfiles">Chyba pri vytváraní adresára pre logy: %1$s</string>
<string name="DEVINFO_HR_VER">"Tep: "</string>
<string name="updatefirmwareoperation_update_in_progress">Prebieha aktualizácia firmvéru</string>
<string name="updatefirmwareoperation_firmware_not_sent">Firmvér nebol odoslaný</string>
<string name="charts_legend_heartrate">Tep srdca</string>
<string name="live_activity_heart_rate">Tep srdca</string>
<string name="pref_title_pebble_health_store_raw">Uložiť hrubý záznam do databázy</string>
<string name="pref_summary_pebble_health_store_raw">Ak je zaškrtnuté, tak sú dáta uložené v pôvodnej podobe pre neskoršie vyhodnotenie. Databáza bude v tom prípade väčšia!</string>
<string name="action_db_management">Správa databázy</string>
<string name="title_activity_db_management">Správa databázy</string>
<string name="activity_db_management_import_export_explanation">Pre operácie s databázou sa použije nasledujúca cesta v zariadení.
\nTáto cesta je dostupná aj pre ostatné aplikácie Androidu a aj váš počítač.
\nExportovanú databázu (alebo miesto pre importovanú databázu) nájdete tu:</string>
<string name="activity_db_management_merge_old_title">Vymazať pôvodnú databázu</string>
<string name="dbmanagementactivvity_cannot_access_export_path">Nemožno pristúpiť na zadanú cestu. Kontaktujte vývojárov.</string>
<string name="dbmanagementactivity_exported_to">Exportované do: %1$s</string>
<string name="dbmanagementactivity_error_exporting_db">Chyba pri exporte DB: %1$s</string>
<string name="dbmanagementactivity_error_exporting_shared">Chyba pri exporte preferencií: %1$s</string>
<string name="dbmanagementactivity_import_data_title">Importovať dáta?</string>
<string name="dbmanagementactivity_overwrite_database_confirmation">Naozaj chcete prepísať aktuálnu databázu? Všetky uložené dáta o aktivite sa stratia.</string>
<string name="dbmanagementactivity_import_successful">Import bol úspešný.</string>
<string name="dbmanagementactivity_error_importing_db">Chyba pri importe DB: %1$s</string>
<string name="dbmanagementactivity_error_importing_shared">Chyba pri importe preferencií: %1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">Vymazať dáta o aktivitách?</string>
<string name="dbmanagementactivity_really_delete_entire_db">Naozaj chcete vymazať celú databázu? Všetky dáta o aktivitách a informácie o zariadeniach sa stratia.</string>
<string name="dbmanagementactivity_database_successfully_deleted">Dáta boli úspešne vymazané.</string>
<string name="dbmanagementactivity_db_deletion_failed">Mazanie dát zlyhalo.</string>
<string name="dbmanagementactivity_delete_old_activity_db">Vymazať pôvodnú databázu?</string>
<string name="dbmanagementactivity_delete_old_activitydb_confirmation">Naozaj chcete vyzmazať pôvodnú databázu? Dáta o aktivitách, ktorá neboli importované sa stratia.</string>
<string name="dbmanagementactivity_old_activity_db_successfully_deleted">Pôvodná databáza bola vymazaná.</string>
<string name="dbmanagementactivity_old_activity_db_deletion_failed">Mazanie pôvodnej databázy zlyhalo.</string>
<string name="dbmanagementactivity_overwrite">Pprepísať</string>
<string name="Cancel">Zrušiť</string>
<string name="Delete">Odstrániť</string>
<string name="title_activity_vibration">Vibrácie</string>
<string name="title_activity_pebble_pairing">Párovánie Pebble</string>
<string name="pebble_pairing_hint">Dialóg párovania by sa mal objaviť na vašom zariadení s Androidom. Ak sa tak nestane, skontrolujte panel upozornení a potvrďte párovanie. Potom potvrďte párovanie na Pebble</string>
<string name="weather_notification_label">Uistite sa, že tento skin je povolený v aplikácii pre upozornenia stavu počasia pre získavanie informácií z vášho Pebble.
\n
\nNie je potrebné nič nastavovať.
\n
\nAplikáciu pre počasie Pebble je možné povoliť v správe aplikácií.
\n
\nPodporované ciferníky ukážu počasie automaticky.</string>
<string name="pref_title_setup_bt_pairing">Zapnúť BT párovanie</string>
<string name="pref_summary_setup_bt_pairing">Toto vypnite v prípade problémov s pripojením</string>
<string name="unit_metric">Metrické</string>
<string name="unit_imperial">Imperiálne</string>
<string name="timeformat_24h">24h</string>
<string name="timeformat_am_pm">dop./odp.</string>
<string name="pref_screen_notification_profile_alarm_clock">Budík</string>
<string name="activity_web_view">Aktivity Webový pohľad</string>
<string name="StringUtils_sender">(%1$s)</string>
<string name="find_device_you_found_it">Nájdené!</string>
<string name="miband2_prefs_timeformat">Formát času Mi2</string>
<string name="mi2_fw_installhandler_fw53_hint">Pred inštaláciou tohto firmvéru musíte nainštalovať verziu %1$s!</string>
<string name="mi2_enable_text_notifications">Textové upozornenia</string>
<string name="mi2_enable_text_notifications_summary">Vyžaduje nainštalovaný súbor fontu &gt;= 1.0.1.28 and Mili_pro.ft*.</string>
<string name="off">Vyp.</string>
<string name="mi2_dnd_off">Vyp.</string>
<string name="mi2_dnd_automatic">Automaticky (detekcia spánku)</string>
<string name="mi2_dnd_scheduled">Naplánované (časový interval)</string>
<string name="discovery_attempting_to_pair">Pokus o spárovanie s %1$s</string>
<string name="discovery_bonding_failed_immediately">Spojenie s %1$s okamžite zlyhalo.</string>
<string name="discovery_trying_to_connect_to">Pokušam sa spojiť s: %1$s</string>
<string name="discovery_enable_bluetooth">Ak chcete nájsť zariadenia, povoľte funkciu Bluetooth.</string>
<string name="discovery_successfully_bonded">Spojené s %1$s.</string>
<string name="discovery_pair_title">Párovať s %1$s?</string>
<string name="discovery_pair_question">Ak chcete spárovať svoje zariadenia, kliknite na Párovať. Ak to zlyhá, skúste to znovu bez párovania.</string>
<string name="discovery_yes_pair">Párovať</string>
<string name="discovery_dont_pair">Nepárovať</string>
<string name="_pebble_watch_open_on_phone">Otvoriť na telefóne</string>
<string name="_pebble_watch_mute">Stlmiť</string>
<string name="_pebble_watch_reply">Znovu</string>
<string name="kind_firmware">Firmvér</string>
<string name="kind_invalid">Neplatné dáta</string>
<string name="kind_font">Písmo</string>
<string name="kind_gps">GPS Firmvér</string>
<string name="kind_gps_almanac">Almanach GPS</string>
<string name="kind_gps_cep">Korekcia chýb GPS</string>
<string name="kind_resources">Zdroje</string>
<string name="kind_watchface">Ciferník</string>
<string name="devicetype_unknown">Neznáme zariadenie</string>
<string name="devicetype_test">Testovacie zariadenie</string>
<string name="devicetype_pebble">Pebble</string>
<string name="devicetype_miband">Mi Band</string>
<string name="devicetype_miband2">Mi Band 2</string>
<string name="devicetype_amazfit_bip">Amazfit Bip</string>
<string name="devicetype_amazfit_cor">Amazfit Cor</string>
<string name="devicetype_vibratissimo">Vibratissimo</string>
<string name="devicetype_liveview">LiveView</string>
<string name="devicetype_hplus">HPlus</string>
<string name="devicetype_makibes_f68">Makibes F68</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="devicetype_xwatch">XWatch</string>
<string name="choose_auto_export_location">Vyberte umiestnenie exportu</string>
<string name="notification_channel_name">Gadgetbridge upozornenia</string>
<string name="controlcenter_connect">Pripojiť</string>
</resources>

View File

@ -532,7 +532,7 @@
<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="DEVINFO_HR_VER">"心率 "</string>
<string name="timeformat_am_pm">AM/PM</string>
<string name="devicetype_vibratissimo">Vibratissimo</string>

View File

@ -13,6 +13,7 @@
<string-array name="pref_language_options">
<item name="default">System Default</item>
<item name="cz">Čeština</item>
<item name="de">Deutsch</item>
<item name="en">English</item>
<item name="es">Español</item>
@ -25,10 +26,12 @@
<item name="ko">한국어</item>
<item name="ja">日本語</item>
<item name="hu">Magyar</item>
<item name="sk">Slovenčina</item>
</string-array>
<string-array name="pref_language_values">
<item>default</item>
<item>cz</item>
<item>de</item>
<item>en</item>
<item>es</item>
@ -41,6 +44,7 @@
<item>ko</item>
<item>ja</item>
<item>hu</item>
<item>sk</item>
</string-array>
<string-array name="notification_mode">
@ -146,6 +150,17 @@
<item>@string/p_scheduled</item>
</string-array>
<string-array name="activate_display_on_lift">
<item>@string/off</item>
<item>@string/on</item>
<item>@string/mi2_dnd_scheduled</item>
</string-array>
<string-array name="activate_display_on_lift_values">
<item>@string/p_off</item>
<item>@string/p_on</item>
<item>@string/p_scheduled</item>
</string-array>
<string-array name="pref_mi2_display_items">
<item>@string/chart_steps</item>
<item>@string/distance</item>
@ -235,5 +250,4 @@
<item>1800</item>
<item>3600</item>
</string-array>
</resources>
</resources>

View File

@ -488,6 +488,7 @@
<string name="mi2_fw_installhandler_fw53_hint">You need to install version %1$s before installing this firmware!</string>
<string name="mi2_enable_text_notifications">Text notifications</string>
<string name="mi2_enable_text_notifications_summary"><![CDATA[Needs firmware >= 1.0.1.28 and Mili_pro.ft* installed.]]></string>
<string name="on">On</string>
<string name="off">Off</string>
<string name="mi2_dnd_off">Off</string>
<string name="mi2_dnd_automatic">Automatic (sleep detection)</string>

View File

@ -20,6 +20,7 @@
<item name="p_battery" type="string">battery</item>
<item name="p_off" type="string">off</item>
<item name="p_on" type="string">on</item>
<item name="p_automatic" type="string">automatic</item>
<item name="p_scheduled" type="string">scheduled</item>

View File

@ -1,5 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<changelog>
<release version="0.25.1" versioncode="125">
<change>Amazfit Cor: Try to send weather location instead of AQI</change>
<change>Amazfit Bip: Support setting start end end time for background light when lifting the arm</change>
<change>Pebble: various fixes and improvemnets for background javascript</change>
<change>Explicity ask for RECEIVE_SMS permission to fix problems with Android 8</change>
</release>
<release version="0.25.0" versioncode="124">
<change>Inital suport for Xwatch</change>
<change>Move the connected device to top in control center</change>

View File

@ -122,14 +122,37 @@
android:summary="@string/mi2_prefs_display_items_summary"
android:title="@string/mi2_prefs_display_items"/>
<CheckBoxPreference
android:defaultValue="true"
android:key="mi2_activate_display_on_lift_wrist"
android:title="@string/mi2_prefs_activate_display_on_lift" />
<PreferenceScreen
android:persistent="false"
android:title="@string/mi2_prefs_activate_display_on_lift">
<!-- workaround for missing toolbar -->
<PreferenceCategory android:title="@string/mi2_prefs_activate_display_on_lift" />
<ListPreference
android:defaultValue="@string/p_off"
android:entries="@array/activate_display_on_lift"
android:entryValues="@array/activate_display_on_lift_values"
android:key="activate_display_on_lift_wrist"
android:summary="%s"
android:title="@string/mi2_prefs_activate_display_on_lift" />
<nodomain.freeyourgadget.gadgetbridge.util.TimePreference
android:defaultValue="00:00"
android:dependency="activate_display_on_lift_wrist"
android:key="display_on_lift_start"
android:title="@string/mi2_prefs_do_not_disturb_start" />
<nodomain.freeyourgadget.gadgetbridge.util.TimePreference
android:defaultValue="00:00"
android:dependency="activate_display_on_lift_wrist"
android:key="display_on_lift_end"
android:title="@string/mi2_prefs_do_not_disturb_end" />
</PreferenceScreen>
<CheckBoxPreference
android:defaultValue="false"
android:dependency="mi2_activate_display_on_lift_wrist"
android:dependency="activate_display_on_lift_wrist"
android:key="mi2_rotate_wrist_to_switch_info"
android:title="@string/mi2_prefs_rotate_wrist_to_switch_info" />

View File

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

View File

@ -0,0 +1,4 @@
* Amazfit Cor: Try to send weather location instead of AQI
* Amazfit Bip: Support setting start end end time for background light when lifting the arm
* Pebble: various fixes and improvemnets for background javascript
* Explicity ask for RECEIVE_SMS permission to fix problems with Android 8

View File

@ -17,4 +17,4 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryErro
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.enableAapt2=false
android.enableAapt2=true