1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-07-03 11:33:19 +02:00

Merge branch 'master' into background-javascript

This commit is contained in:
Andreas Shimokawa 2017-08-28 00:35:28 +02:00
commit 74652397dd
63 changed files with 993 additions and 571 deletions

View File

@ -1,9 +0,0 @@
[main]
host = https://www.transifex.com
[gadgetbridge.strings]
file_filter = app/src/main/res/values-<lang>/strings.xml
source_file = app/src/main/res/values/strings.xml
source_lang = en_US
deviceType = ANDROID
minimum_perc = 50

View File

@ -1,5 +1,13 @@
### Changelog
#### Version 0.20.2
* Amazfit Bip: Various fixes regarding weather, add condition string support for FW 0.0.8.74
* Amazfit Bip: enable caller display in later firmwares
* Amazfit Bip: initial firmware update support (EXPERIMENTAL, AT YOUR OWN RISK)
* Re-enable improved speed zones tab
* Probably fix crash with certain music players
* Improve theme and add changelog icon
#### Version 0.20.1
* Amazfit Bip: Support icons and text body for notifications
* Mi Band: Fix setting smart alarms

View File

@ -147,7 +147,7 @@ Contributions are welcome, be it feedback, bugreports, documentation, translatio
on any of the open [issues](https://github.com/Freeyourgadget/Gadgetbridge/issues?q=is%3Aopen+is%3Aissue);
just leave a comment that you're working on one to avoid duplicated work.
Translations can be contributed via https://www.transifex.com/projects/p/gadgetbridge/resource/strings/ or manually.
Translations can be contributed via https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/
## Do you have further questions or feedback?

View File

@ -26,8 +26,8 @@ android {
targetSdkVersion 25
// note: always bump BOTH versionCode and versionName!
versionName "0.20.1"
versionCode 99
versionName "0.20.2"
versionCode 100
vectorDrawables.useSupportLibrary = true
}
buildTypes {
@ -68,6 +68,7 @@ dependencies {
compile 'com.android.support:cardview-v7:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:support-v4:25.3.1'
compile 'com.android.support:gridlayout-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.github.tony19:logback-android-classic:1.1.1-6'
compile 'org.slf4j:slf4j-api:1.7.7'

View File

@ -114,6 +114,26 @@
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.ft" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.ft" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.ft" />
<data android:pathPattern="/.*\\.res" />
<data android:pathPattern="/.*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\.gps" />
<data android:pathPattern="/.*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\.pbw" />
<data android:pathPattern="/.*\\..*\\.pbw" />
<data android:pathPattern="/.*\\..*\\..*\\.pbw" />
@ -187,6 +207,26 @@
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.ft" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.ft" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.ft" />
<data android:pathPattern="/.*\\.res" />
<data android:pathPattern="/.*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.res" />
<data android:pathPattern="/.*\\.gps" />
<data android:pathPattern="/.*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\..*\\.gps" />
<data android:pathPattern="/.*\\.pbw" />
<data android:pathPattern="/.*\\..*\\.pbw" />
<data android:pathPattern="/.*\\..*\\..*\\.pbw" />

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Carsten Pfeiffer
/* Copyright (C) 2016-2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Andreas Shimokawa
/* Copyright (C) 2016-2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.

View File

@ -1,5 +1,5 @@
/* Copyright (C) 2015-2017 Andreas Shimokawa, Carsten Pfeiffer, Daniele
Gobbetti
Gobbetti, Vebryn
This file is part of Gadgetbridge.
@ -21,25 +21,21 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityAmount;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityAmounts;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
class ActivityAnalysis {
private static final Logger LOG = LoggerFactory.getLogger(ActivityAnalysis.class);
// store raw steps and duration
protected HashMap<Integer, Long> stats = new HashMap<Integer, Long>();
// normalize steps
protected HashMap<Float, Float> statsQuantified = new HashMap<Float, Float>();
// store maxSpeed / resolution
protected float maxSpeedQuantifier;
// store an average of round precision
protected float roundPrecision = 0f;
// max speed determined from samples
private int maxSpeed = 0;
// number of bars on stats chart
private int resolution = 5;
ActivityAmounts calculateActivityAmounts(List<? extends ActivitySample> samples) {
ActivityAmount deepSleep = new ActivityAmount(ActivityKind.TYPE_DEEP_SLEEP);
@ -89,11 +85,11 @@ class ActivityAnalysis {
}
if (!stats.containsKey(steps)) {
//System.out.println("Adding: " + steps);
LOG.info("Adding: " + steps);
stats.put(steps, timeDifference);
} else {
long time = stats.get(steps);
//System.out.println("Updating: " + steps + " " + timeDifference + time);
LOG.info("Updating: " + steps + " " + timeDifference + time);
stats.put(steps, timeDifference + time);
}
}
@ -103,34 +99,6 @@ class ActivityAnalysis {
previousSample = sample;
}
maxSpeedQuantifier = maxSpeed / resolution;
for (Map.Entry<Integer, Long> entry : stats.entrySet()) {
// 0.1 precision
//float keyQuantified = Math.round(entry.getKey() / maxSpeedQuantifier * 10f) / 10f;
// 1 precision
float keyQuantified = entry.getKey() / maxSpeedQuantifier;
float keyQuantifiedRounded = Math.round(entry.getKey() / maxSpeedQuantifier);
float keyQuantifiedPrecision = keyQuantifiedRounded - keyQuantified;
roundPrecision = (roundPrecision + Math.abs(keyQuantifiedPrecision)) / 2;
//System.out.println("Precision: " + roundPrecision);
// no scale
//keyQuantified = entry.getKey();
// scaling to minutes
float timeMinutes = entry.getValue() / 60;
if (!statsQuantified.containsKey(keyQuantifiedRounded)) {
//System.out.println("Adding: " + keyQuantified + "/" + timeMinutes);
statsQuantified.put(keyQuantifiedRounded, timeMinutes);
} else {
float previousTime = statsQuantified.get(keyQuantifiedRounded);
//System.out.println("Updating: " + keyQuantified + "/" + (timeMinutes + previousTime));
statsQuantified.put(keyQuantifiedRounded, (timeMinutes + previousTime));
}
}
ActivityAmounts result = new ActivityAmounts();
if (deepSleep.getTotalSeconds() > 0) {
result.addAmount(deepSleep);

View File

@ -1,5 +1,5 @@
/* Copyright (C) 2015-2017 Andreas Shimokawa, Carsten Pfeiffer, Daniele
Gobbetti
Gobbetti, Vebryn
This file is part of Gadgetbridge.
@ -328,22 +328,21 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
case 3:
return new WeekStepsChartFragment();
case 4:
return new LiveActivityFragment();
return new SpeedZonesFragment();
case 5:
return new StatsChartFragment();
return new LiveActivityFragment();
}
return null;
}
@Override
public int getCount() {
// Show 4 or 5 total pages. (always hide speed zones)
// Show 5 or 6 total pages.
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(mGBDevice);
if (coordinator.supportsRealtimeData()) {
return 5;
return 6;
}
return 4;
return 5;
}
@Override
@ -358,9 +357,9 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts
case 3:
return getString(R.string.weekstepschart_steps_a_week);
case 4:
return getString(R.string.liveactivity_live_activity);
case 5:
return getString(R.string.stats_title);
case 5:
return getString(R.string.liveactivity_live_activity);
}
return super.getPageTitle(position);
}

View File

@ -24,7 +24,6 @@ import android.view.ViewGroup;
import com.github.mikephil.charting.charts.Chart;
import com.github.mikephil.charting.charts.HorizontalBarChart;
import com.github.mikephil.charting.components.LegendEntry;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
@ -43,12 +42,11 @@ import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
import static android.R.attr.x;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
public class StatsChartFragment extends AbstractChartFragment {
protected static final Logger LOG = LoggerFactory.getLogger(StatsChartFragment.class);
public class SpeedZonesFragment extends AbstractChartFragment {
protected static final Logger LOG = LoggerFactory.getLogger(SpeedZonesFragment.class);
private HorizontalBarChart mStatsChart;
@ -67,13 +65,17 @@ public class StatsChartFragment extends AbstractChartFragment {
BarData data = new BarData();
data.setValueTextColor(CHART_TEXT_COLOR);
List<BarEntry> entries = new ArrayList<>();
XAxisValueFormatter customXAxis = new XAxisValueFormatter();
for (Map.Entry<Float, Float> entry : analysis.statsQuantified.entrySet()) {
entries.add(new BarEntry(entry.getKey(), entry.getValue()));
/*float realValue = entry.getKey() * analysis.maxSpeedQuantifier;
String customLabel = Math.round(realValue * (1 - analysis.roundPrecision) * 10f) / 10f + " - " + Math.round(realValue * (1 + analysis.roundPrecision) * 10f) / 10f;*/
customXAxis.add("" + entry.getKey() * analysis.maxSpeedQuantifier);
ActivityUser user = new ActivityUser();
/*double distanceFactorCm;
if (user.getGender() == user.GENDER_MALE){
distanceFactorCm = user.getHeightCm() * user.GENDER_MALE_DISTANCE_FACTOR / 1000;
} else {
distanceFactorCm = user.getHeightCm() * user.GENDER_FEMALE_DISTANCE_FACTOR / 1000;
}*/
for (Map.Entry<Integer, Long> entry : analysis.stats.entrySet()) {
entries.add(new BarEntry(entry.getKey(), entry.getValue() / 60));
}
BarDataSet set = new BarDataSet(entries, "");
@ -83,14 +85,6 @@ public class StatsChartFragment extends AbstractChartFragment {
//data.setBarWidth(0.1f);
data.addDataSet(set);
// set X axis
customXAxis.sort();
XAxis left = mStatsChart.getXAxis();
left.setValueFormatter(customXAxis);
// display precision
//mStatsChart.getDescription().setText(Math.round(analysis.roundPrecision * 100) + "%");
return new MySpeedZonesData(data);
}
@ -127,34 +121,16 @@ public class StatsChartFragment extends AbstractChartFragment {
mStatsChart.setTouchEnabled(false);
mStatsChart.getDescription().setText("");
XAxis x = mStatsChart.getXAxis();
x.setTextColor(CHART_TEXT_COLOR);
XAxis right = mStatsChart.getXAxis(); //believe it or not, the X axis is vertical for HorizontalBarChart
right.setTextColor(CHART_TEXT_COLOR);
YAxis yr = mStatsChart.getAxisRight();
yr.setTextColor(CHART_TEXT_COLOR);
}
YAxis bottom = mStatsChart.getAxisRight();
bottom.setTextColor(CHART_TEXT_COLOR);
bottom.setGranularity(1f);
@Override
protected void setupLegend(Chart chart) {
List<LegendEntry> legendEntries = new ArrayList<>(3);
LegendEntry lightSleepEntry = new LegendEntry();
lightSleepEntry.label = akLightSleep.label;
lightSleepEntry.formColor = akLightSleep.color;
legendEntries.add(lightSleepEntry);
LegendEntry deepSleepEntry = new LegendEntry();
deepSleepEntry.label = akDeepSleep.label;
deepSleepEntry.formColor = akDeepSleep.color;
legendEntries.add(deepSleepEntry);
if (supportsHeartrate(getChartsHost().getDevice())) {
LegendEntry hrEntry = new LegendEntry();
hrEntry.label = HEARTRATE_LABEL;
hrEntry.formColor = HEARTRATE_COLOR;
legendEntries.add(hrEntry);
}
chart.getLegend().setCustom(legendEntries);
chart.getLegend().setTextColor(LEGEND_TEXT_COLOR);
YAxis top = mStatsChart.getAxisLeft();
top.setTextColor(CHART_TEXT_COLOR);
top.setGranularity(1f);
}
@Override
@ -162,6 +138,12 @@ public class StatsChartFragment extends AbstractChartFragment {
return super.getAllSamples(db, device, tsFrom, tsTo);
}
@Override
protected void setupLegend(Chart chart) {
// no legend here, it is all about the steps here
chart.getLegend().setEnabled(false);
}
@Override
protected void renderCharts() {
mStatsChart.invalidate();

View File

@ -1,42 +0,0 @@
package nodomain.freeyourgadget.gadgetbridge.activities.charts;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Created by nhu on 30/04/17.
*/
public class XAxisValueFormatter implements IAxisValueFormatter {
private List<String> mValues = new ArrayList<>();
public XAxisValueFormatter() {
super();
}
public void add(String label) {
mValues.add(label);
}
public void sort() {
//System.out.println("Sorting " + mValues);
Collections.sort(mValues);
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
String returnString = "N/A";
try {
returnString = mValues.get((int) value).toString();
//System.out.println("Asking " + value + ", returning " + returnString);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return returnString;
}
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2017 Andreas Shimokawa
/* Copyright (C) 2017 Andreas Shimokawa, João Paulo Barraca
This file is part of Gadgetbridge.
@ -52,10 +52,9 @@ public class AmazfitBipCooordinator extends MiBand2Coordinator {
return DeviceType.UNKNOWN;
}
@Override
public InstallHandler findInstallHandler(Uri uri, Context context) {
return null; // not supported yet
AmazfitBipFWInstallHandler handler = new AmazfitBipFWInstallHandler(uri, context);
return handler.isValid() ? handler : null;
}
}

View File

@ -0,0 +1,90 @@
/* Copyright (C) 2016-2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.amazfitbip;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import java.io.IOException;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.AbstractMiBandFWHelper;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip.AmazfitBipFirmwareInfo;
public class AmazfitBipFWHelper extends AbstractMiBandFWHelper {
public AmazfitBipFWHelper(Uri uri, Context context) throws IOException {
super(uri, context);
}
private AmazfitBipFirmwareInfo firmwareInfo;
@Override
public String format(int version) {
return AmazfitBipFirmwareInfo.toVersion(version);
}
@Override
public int getFirmwareVersion() {
return firmwareInfo.getFirmwareVersion();
}
@Override
public int getFirmware2Version() {
return 0;
}
@Override
public String getHumanFirmwareVersion2() {
return "";
}
@Override
protected int[] getWhitelistedFirmwareVersions() {
return AmazfitBipFirmwareInfo.getWhitelistedVersions();
}
@Override
public boolean isFirmwareGenerallyCompatibleWith(GBDevice device) {
return firmwareInfo.isGenerallyCompatibleWith(device);
}
@Override
public boolean isSingleFirmware() {
return true;
}
@NonNull
@Override
protected void determineFirmwareInfo(byte[] wholeFirmwareBytes) {
firmwareInfo = new AmazfitBipFirmwareInfo(wholeFirmwareBytes);
if (!firmwareInfo.isHeaderValid()) {
throw new IllegalArgumentException("Not a an Amazifit Bip firmware");
}
}
@Override
public void checkValid() throws IllegalArgumentException {
firmwareInfo.checkValid();
}
public AmazfitBipFirmwareInfo getFirmwareInfo() {
return firmwareInfo;
}
}

View File

@ -0,0 +1,55 @@
/* Copyright (C) 2015-2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.amazfitbip;
import android.content.Context;
import android.net.Uri;
import java.io.IOException;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.AbstractMiBandFWHelper;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.AbstractMiBandFWInstallHandler;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
class AmazfitBipFWInstallHandler extends AbstractMiBandFWInstallHandler {
AmazfitBipFWInstallHandler(Uri uri, Context context) {
super(uri, context);
}
@Override
protected GenericItem createInstallItem() {
return new GenericItem(mContext.getString(R.string.amazfitbip_firmware, helper.getHumanFirmwareVersion()));
}
@Override
protected String getFwUpgradeNotice() {
return mContext.getString(R.string.fw_upgrade_notice_amazfitbip, helper.getHumanFirmwareVersion());
}
@Override
protected AbstractMiBandFWHelper createHelper(Uri uri, Context context) throws IOException {
return new AmazfitBipFWHelper(uri, context);
}
@Override
protected boolean isSupportedDeviceType(GBDevice device) {
return device.getType() == DeviceType.AMAZFITBIP;
}
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2017 Andreas Shimokawa
/* Copyright (C) 2015-2017 Andreas Shimokawa
This file is part of Gadgetbridge.

View File

@ -157,33 +157,4 @@ public class AmazfitBipWeatherConditions {
return 0;
}
}
public static String mapToOpenWeatherMapIcon(int openWeatherMapCondition) {
//see https://openweathermap.org/weather-conditions
String condition = "02d"; //generic "variable" icon
if (openWeatherMapCondition >= 200 && openWeatherMapCondition < 300) {
condition = "11d";
} else if (openWeatherMapCondition >= 300 && openWeatherMapCondition < 500) {
condition = "09d";
} else if (openWeatherMapCondition >= 500 && openWeatherMapCondition < 510) {
condition = "10d";
} else if (openWeatherMapCondition >= 511 && openWeatherMapCondition < 600) {
condition = "09d";
} else if (openWeatherMapCondition >= 600 && openWeatherMapCondition < 700) {
condition = "13d";
} else if (openWeatherMapCondition >= 700 && openWeatherMapCondition < 800) {
condition = "50d";
} else if (openWeatherMapCondition == 800) {
condition = "01d"; //TODO: night?
} else if (openWeatherMapCondition == 801) {
condition = "02d"; //TODO: night?
} else if (openWeatherMapCondition == 802) {
condition = "03d"; //TODO: night?
} else if (openWeatherMapCondition == 803 || openWeatherMapCondition == 804) {
condition = "04d"; //TODO: night?
}
return condition;
}
}
}

View File

@ -33,8 +33,8 @@ import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
public abstract class AbstractMiBandFWInstallHandler implements InstallHandler {
private static final Logger LOG = LoggerFactory.getLogger(AbstractMiBandFWInstallHandler.class);
private final Context mContext;
private AbstractMiBandFWHelper helper;
protected final Context mContext;
protected AbstractMiBandFWHelper helper;
private String errorMessage;
public AbstractMiBandFWInstallHandler(Uri uri, Context context) {
@ -58,6 +58,13 @@ public abstract class AbstractMiBandFWInstallHandler implements InstallHandler {
protected abstract AbstractMiBandFWHelper createHelper(Uri uri, Context context) throws IOException;
protected GenericItem createInstallItem() {
return new GenericItem(mContext.getString(R.string.miband_installhandler_miband_firmware, helper.getHumanFirmwareVersion()));
}
protected String getFwUpgradeNotice() {
return mContext.getString(R.string.fw_upgrade_notice, helper.getHumanFirmwareVersion());
}
@Override
public void validateInstallation(InstallActivity installActivity, GBDevice device) {
@ -81,8 +88,8 @@ public abstract class AbstractMiBandFWInstallHandler implements InstallHandler {
return;
}
GenericItem fwItem = new GenericItem(mContext.getString(R.string.miband_installhandler_miband_firmware, helper.getHumanFirmwareVersion()));
fwItem.setIcon(R.drawable.ic_device_miband);
GenericItem fwItem = createInstallItem();
fwItem.setIcon(device.getType().getIcon());
if (!helper.isFirmwareGenerallyCompatibleWith(device)) {
fwItem.setDetails(mContext.getString(R.string.miband_fwinstaller_incompatible_version));
@ -92,7 +99,8 @@ public abstract class AbstractMiBandFWInstallHandler implements InstallHandler {
}
StringBuilder builder = new StringBuilder();
if (helper.isSingleFirmware()) {
builder.append(mContext.getString(R.string.fw_upgrade_notice, helper.getHumanFirmwareVersion()));
getFwUpgradeNotice();
builder.append(getFwUpgradeNotice());
} else {
builder.append(mContext.getString(R.string.fw_multi_upgrade_notice, helper.getHumanFirmwareVersion(), helper.getHumanFirmwareVersion2()));
}

View File

@ -1,3 +1,19 @@
/* Copyright (C) 2017 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.miband;
public enum DoNotDisturb {

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Carsten Pfeiffer
/* Copyright (C) 2016-2017 Carsten Pfeiffer, José Rebelo
This file is part of Gadgetbridge.

View File

@ -1,4 +1,5 @@
/* Copyright (C) 2016-2017 Carsten Pfeiffer, JohnnySun, Uwe Hermann
/* Copyright (C) 2016-2017 Andreas Shimokawa, Carsten Pfeiffer, JohnnySun,
José Rebelo, Uwe Hermann
This file is part of Gadgetbridge.
@ -53,7 +54,6 @@ public class MiBand2Service {
public static final int ALERT_LEVEL_MESSAGE = 1;
public static final int ALERT_LEVEL_PHONE_CALL = 2;
public static final int ALERT_LEVEL_VIBRATE_ONLY = 3;
public static final int ALERT_LEVEL_CUSTOM = 0xfa; // followed by another uin8 to select the actual icon
// set metric distance
// set 12 hour time mode
@ -171,6 +171,8 @@ public class MiBand2Service {
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};
public static final byte[] COMMAND_DISABLE_ROTATE_WRIST_TO_SWITCH_INFO = new byte[]{ENDPOINT_DISPLAY, 0x0d, 0x00, 0x00};
public static final byte[] COMMAND_ENABLE_DISPLAY_CALLER = new byte[]{ENDPOINT_DISPLAY, 0x10, 0x00, 0x00, 0x01};
public static final byte[] COMMAND_DISABLE_DISPLAY_CALLER = new byte[]{ENDPOINT_DISPLAY, 0x10, 0x00, 0x00, 0x00};
public static final byte[] DISPLAY_XXX = new byte[] {ENDPOINT_DISPLAY, 0x03, 0x0, 0x0 };
public static final byte[] DISPLAY_YYY = new byte[] {ENDPOINT_DISPLAY, 0x10, 0x0, 0x1, 0x1 };

View File

@ -1,5 +1,5 @@
/* Copyright (C) 2015-2017 Andreas Shimokawa, Carsten Pfeiffer, Christian
Fischer, Daniele Gobbetti, Szymon Tomasz Stefanek
Fischer, Daniele Gobbetti, José Rebelo, Szymon Tomasz Stefanek
This file is part of Gadgetbridge.

View File

@ -1,5 +1,5 @@
/* Copyright (C) 2015-2017 Andreas Shimokawa, Carsten Pfeiffer, Christian
Fischer, Daniele Gobbetti, Szymon Tomasz Stefanek
Fischer, Daniele Gobbetti, José Rebelo, Szymon Tomasz Stefanek
This file is part of Gadgetbridge.

View File

@ -48,6 +48,12 @@ public class MusicPlaybackReceiver extends BroadcastReceiver {
MusicStateSpec stateSpec = new MusicStateSpec(lastStateSpec);
Bundle incomingBundle = intent.getExtras();
if (incomingBundle == null) {
LOG.warn("Not processing incoming null bundle.");
return;
}
for (String key : incomingBundle.keySet()) {
Object incoming = incomingBundle.get(key);
if (incoming instanceof String && "artist".equals(key)) {

View File

@ -23,8 +23,6 @@ import android.content.Intent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.SimpleTimeZone;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.Weather;
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
@ -53,7 +51,7 @@ public class WeatherNotificationReceiver extends BroadcastReceiver {
LOG.info("weather in " + weather.location + " is " + weather.currentCondition + " (" + (weather.currentTemp - 273) + "°C)");
WeatherSpec weatherSpec = new WeatherSpec();
weatherSpec.timestamp = (int) ((weather.queryTime - SimpleTimeZone.getDefault().getOffset(weather.queryTime)) / 1000);
weatherSpec.timestamp = (int) (weather.queryTime / 1000);
weatherSpec.location = weather.location;
weatherSpec.currentTemp = weather.currentTemp;
weatherSpec.currentCondition = weather.currentCondition;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Daniele Gobbetti
/* Copyright (C) 2016-2017 Carsten Pfeiffer, Daniele Gobbetti
This file is part of Gadgetbridge.

View File

@ -1,3 +1,19 @@
/* Copyright (C) 2015-2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
/*
* Copyright (C) 2013 The Android Open Source Project
*

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Carsten Pfeiffer, Uwe Hermann
/* Copyright (C) 2016-2017 Andreas Shimokawa, Carsten Pfeiffer, Uwe Hermann
This file is part of Gadgetbridge.
@ -38,7 +38,7 @@ public enum AlertCategory {
// 251-255 defined by service specification
Any(255),
Custom(-1),
CustomAmazfitBip(-6);
CustomMiBand2(-6);
private final int id;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Carsten Pfeiffer
/* Copyright (C) 2016-2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
@ -103,7 +103,7 @@ public class AlertNotificationProfile<T extends AbstractBTLEDeviceSupport> exten
ByteArrayOutputStream stream = new ByteArrayOutputStream(100);
stream.write(BLETypeConversions.fromUint8(alert.getCategory().getId()));
stream.write(BLETypeConversions.fromUint8(alert.getNumAlerts()));
if (alert.getCategory() == AlertCategory.CustomAmazfitBip) {
if (alert.getCategory() == AlertCategory.CustomMiBand2) {
stream.write(BLETypeConversions.fromUint8(alert.getCustomIcon()));
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2017 Carsten Pfeiffer
/* Copyright (C) 2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.

View File

@ -0,0 +1,80 @@
/* Copyright (C) 2017 Andreas Shimokawa
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.FirmwareType;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.Mi2FirmwareInfo;
import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils;
public class AmazfitBipFirmwareInfo extends Mi2FirmwareInfo {
// total crap maybe
private static final byte[] GPS_HEADER = new byte[]{
(byte) 0xcb, 0x51, (byte) 0xc1, 0x30, 0x41, (byte) 0x9e, 0x5e, (byte) 0xd3,
0x51, 0x35, (byte) 0xdf, 0x66, (byte) 0xed, (byte) 0xd9, 0x5f, (byte) 0xa7
};
// guessed - at least it is the same accross current versions and different from other devices
private static final byte[] FW_HEADER = new byte[]{
0x68, 0x46, 0x70, 0x47, 0x68, 0x46, 0x70, 0x47,
0x68, 0x46, 0x70, 0x47, 0x68, 0x46, 0x70, 0x47
};
private static final int FW_HEADER_OFFSET = 0x9330;
private static final byte[] RES_HEADER = new byte[]{ // HMRES resources file (*.res)
0x48, 0x4d, 0x52, 0x45, 0x53
};
static {
// firmware
crcToVersion.put(25257, "0.0.8.74");
// resources
crcToVersion.put(12586, "RES 0.0.8.74");
// gps
crcToVersion.put(61520, "GPS 0.0.8.xx");
}
public AmazfitBipFirmwareInfo(byte[] bytes) {
super(bytes);
}
@Override
protected FirmwareType determineFirmwareType(byte[] bytes) {
if (ArrayUtils.startsWith(bytes, RES_HEADER)) {
return FirmwareType.RES;
}
if (ArrayUtils.startsWith(bytes, GPS_HEADER)) {
return FirmwareType.GPS;
}
if (ArrayUtils.equals(bytes, FW_HEADER, FW_HEADER_OFFSET)) {
// TODO: this is certainly not a correct validation, but it works for now
return FirmwareType.FIRMWARE;
}
return FirmwareType.INVALID;
}
@Override
public boolean isGenerallyCompatibleWith(GBDevice device) {
return isHeaderValid() && device.getType() == DeviceType.AMAZFITBIP;
}
}

View File

@ -16,12 +16,16 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip;
import android.net.Uri;
import android.widget.Toast;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.SimpleTimeZone;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventCallControl;
import nodomain.freeyourgadget.gadgetbridge.devices.amazfitbip.AmazfitBipIcon;
@ -35,9 +39,12 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.AlertCategory;
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.AlertNotificationProfile;
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.NewAlert;
import nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip.operations.AmazfitBipUpdateFirmwareOperation;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.NotificationStrategy;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.MiBand2Support;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
import nodomain.freeyourgadget.gadgetbridge.util.Version;
public class AmazfitBipSupport extends MiBand2Support {
@ -72,7 +79,7 @@ public class AmazfitBipSupport extends MiBand2Support {
int customIconId = AmazfitBipIcon.mapToIconId(notificationSpec.type);
AlertCategory alertCategory = AlertCategory.CustomAmazfitBip;
AlertCategory alertCategory = AlertCategory.CustomMiBand2;
// The SMS icon for AlertCategory.SMS is unique and not available as iconId
if (notificationSpec.type == NotificationType.GENERIC_SMS) {
@ -112,16 +119,41 @@ public class AmazfitBipSupport extends MiBand2Support {
evaluateGBDeviceEvent(callCmd);
}
@Override
public void onInstallApp(Uri uri) {
try {
new AmazfitBipUpdateFirmwareOperation(uri, this).perform();
} catch (IOException ex) {
GB.toast(getContext(), "Firmware cannot be installed: " + ex.getMessage(), Toast.LENGTH_LONG, GB.ERROR, ex);
}
}
@Override
public void onSendWeather(WeatherSpec weatherSpec) {
try {
TransactionBuilder builder = performInitialized("Sending weather forecast");
Version version = new Version(gbDevice.getFirmwareVersion());
boolean supportsConditionString = false;
if (version.compareTo(new Version("0.0.8.74")) >= 0) {
supportsConditionString = true;
}
final byte NR_DAYS = 2;
ByteBuffer buf = ByteBuffer.allocate(7 + 4 * NR_DAYS);
int bytesPerDay = 4;
int conditionsLength = 0;
if (supportsConditionString) {
bytesPerDay = 5;
conditionsLength = weatherSpec.currentCondition.getBytes().length;
}
int length = 7 + bytesPerDay * NR_DAYS + conditionsLength;
ByteBuffer buf = ByteBuffer.allocate(length);
buf.order(ByteOrder.LITTLE_ENDIAN);
buf.put((byte) 1);
buf.putInt(weatherSpec.timestamp);
buf.put((byte) 0);
int tz_offset_hours = SimpleTimeZone.getDefault().getOffset(weatherSpec.timestamp * 1000L) / (1000 * 60 * 60);
buf.put((byte) (tz_offset_hours * 4));
buf.put(NR_DAYS);
@ -130,13 +162,19 @@ public class AmazfitBipSupport extends MiBand2Support {
buf.put(condition);
buf.put((byte) (weatherSpec.todayMaxTemp - 273));
buf.put((byte) (weatherSpec.todayMinTemp - 273));
if (supportsConditionString) {
buf.put(weatherSpec.currentCondition.getBytes());
buf.put((byte) 0); //
}
condition = AmazfitBipWeatherConditions.mapToAmazfitBipWeatherCode(weatherSpec.tomorrowConditionCode);
buf.put(condition);
buf.put(condition);
buf.put((byte) (weatherSpec.tomorrowMaxTemp - 273));
buf.put((byte) (weatherSpec.tomorrowMinTemp - 273));
if (supportsConditionString) {
buf.put((byte) 0); // not yet in weatherspec
}
builder.write(getCharacteristic(AmazfitBipService.UUID_CHARACTERISTIC_WEATHER), buf.array());
builder.queue(getQueue());

View File

@ -0,0 +1,49 @@
/* Copyright (C) 2017 Andreas Shimokawa
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip.operations;
import android.net.Uri;
import android.widget.Toast;
import java.io.IOException;
import nodomain.freeyourgadget.gadgetbridge.devices.amazfitbip.AmazfitBipFWHelper;
import nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip.AmazfitBipSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.operations.UpdateFirmwareOperation;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
public class AmazfitBipUpdateFirmwareOperation extends UpdateFirmwareOperation {
public AmazfitBipUpdateFirmwareOperation(Uri uri, AmazfitBipSupport support) {
super(uri, support);
}
@Override
protected void doPerform() throws IOException {
AmazfitBipFWHelper mFwHelper = new AmazfitBipFWHelper(uri, getContext());
firmwareInfo = mFwHelper.getFirmwareInfo();
if (!firmwareInfo.isGenerallyCompatibleWith(getDevice())) {
throw new IOException("Firmware is not compatible with the given device: " + getDevice().getAddress());
}
if (!sendFwInfo()) {
displayMessage(getContext(), "Error sending firmware info, aborting.", Toast.LENGTH_LONG, GB.ERROR);
done();
}
//the firmware will be sent by the notification listener if the band confirms that the metadata are ok.
}
}

View File

@ -1,5 +1,5 @@
/* Copyright (C) 2016-2017 Alberto, Andreas Shimokawa, Carsten Pfeiffer,
ivanovlev, João Paulo Barraca
ivanovlev, João Paulo Barraca, Pavel Motyrev
This file is part of Gadgetbridge.

View File

@ -1,6 +1,6 @@
/* Copyright (C) 2015-2017 Andreas Shimokawa, atkyritsis, Carsten Pfeiffer,
Christian Fischer, Daniele Gobbetti, JohnnySun, Julien Pivotto, Kasha,
Sergey Trofimov, Steffen Liebergeld
Christian Fischer, Daniele Gobbetti, freezed-or-frozen, JohnnySun, Julien
Pivotto, Kasha, Sergey Trofimov, Steffen Liebergeld
This file is part of Gadgetbridge.

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2017 Carsten Pfeiffer
/* Copyright (C) 2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
@ -19,8 +19,8 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.miband2;
public enum FirmwareType {
FIRMWARE((byte) 0),
FONT((byte) 1),
UNKNOWN1((byte) 2),
UNKNOWN2((byte) 3),
RES((byte) 2),
GPS((byte) 3),
INVALID(Byte.MIN_VALUE);
private final byte value;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Carsten Pfeiffer
/* Copyright (C) 2016-2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
@ -53,7 +53,7 @@ public class Mi2FirmwareInfo {
0x4b
};
private static Map<Integer,String> crcToVersion = new HashMap<>();
protected static Map<Integer,String> crcToVersion = new HashMap<>();
static {
// firmware
crcToVersion.put(41899, "1.0.0.39");
@ -89,7 +89,7 @@ public class Mi2FirmwareInfo {
firmwareType = determineFirmwareType(bytes);
}
private FirmwareType determineFirmwareType(byte[] bytes) {
protected FirmwareType determineFirmwareType(byte[] bytes) {
if (ArrayUtils.startsWith(bytes, FT_HEADER)) {
return FirmwareType.FONT;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2017 Carsten Pfeiffer
/* Copyright (C) 2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
@ -18,7 +18,6 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.miband2;
import android.bluetooth.BluetoothGattCharacteristic;
import android.support.annotation.NonNull;
import android.util.Log;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBand2Service;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.VibrationProfile;
@ -67,11 +66,11 @@ public class Mi2TextNotificationStrategy extends Mi2NotificationStrategy {
if (simpleNotification != null) {
switch (simpleNotification.getAlertCategory()) {
case Email:
return new byte[] { BLETypeConversions.fromUint8(MiBand2Service.ALERT_LEVEL_MESSAGE), BLETypeConversions.fromUint8(numAlerts)};
return new byte[] { BLETypeConversions.fromUint8(AlertCategory.Email.getId()), BLETypeConversions.fromUint8(numAlerts)};
case InstantMessage:
return new byte[] { BLETypeConversions.fromUint8(MiBand2Service.ALERT_LEVEL_CUSTOM), BLETypeConversions.fromUint8(numAlerts), MiBand2Service.ICON_CHAT};
return new byte[] { BLETypeConversions.fromUint8(AlertCategory.CustomMiBand2.getId()), BLETypeConversions.fromUint8(numAlerts), MiBand2Service.ICON_CHAT};
case News:
return new byte[] { BLETypeConversions.fromUint8(MiBand2Service.ALERT_LEVEL_CUSTOM), BLETypeConversions.fromUint8(numAlerts), MiBand2Service.ICON_PENGUIN};
return new byte[] { BLETypeConversions.fromUint8(AlertCategory.CustomMiBand2.getId()), BLETypeConversions.fromUint8(numAlerts), MiBand2Service.ICON_PENGUIN};
}
}
return new byte[] { BLETypeConversions.fromUint8(AlertCategory.SMS.getId()), BLETypeConversions.fromUint8(numAlerts)};

View File

@ -1,6 +1,6 @@
/* Copyright (C) 2015-2017 Andreas Shimokawa, Carsten Pfeiffer, Christian
Fischer, Daniele Gobbetti, JohnnySun, Julien Pivotto, Kasha, Sergey Trofimov,
Steffen Liebergeld
Fischer, Daniele Gobbetti, JohnnySun, José Rebelo, Julien Pivotto, Kasha,
Sergey Trofimov, Steffen Liebergeld
This file is part of Gadgetbridge.
@ -1215,6 +1215,11 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
return this;
}
private MiBand2Support setDisplayCaller(TransactionBuilder builder) {
builder.write(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION), MiBand2Service.COMMAND_ENABLE_DISPLAY_CALLER);
return this;
}
private MiBand2Support setDoNotDisturb(TransactionBuilder builder) {
DoNotDisturb doNotDisturb = MiBand2Coordinator.getDoNotDisturb(getContext());
LOG.info("Setting do not disturb to " + doNotDisturb);
@ -1314,6 +1319,7 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
setDoNotDisturb(builder);
setRotateWristToSwitchInfo(builder);
setActivateDisplayOnLiftWrist(builder);
setDisplayCaller(builder);
setGoalNotification(builder);
setInactivityWarnings(builder);
setHeartrateSleepSupport(builder);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Carsten Pfeiffer
/* Copyright (C) 2016-2017 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
@ -48,11 +48,11 @@ import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class UpdateFirmwareOperation extends AbstractMiBand2Operation {
private static final Logger LOG = LoggerFactory.getLogger(UpdateFirmwareOperation.class);
private final Uri uri;
private final BluetoothGattCharacteristic fwCControlChar;
private final BluetoothGattCharacteristic fwCDataChar;
final Prefs prefs = GBApplication.getPrefs();
private Mi2FirmwareInfo firmwareInfo;
protected final Uri uri;
protected final BluetoothGattCharacteristic fwCControlChar;
protected final BluetoothGattCharacteristic fwCDataChar;
protected final Prefs prefs = GBApplication.getPrefs();
protected Mi2FirmwareInfo firmwareInfo;
public UpdateFirmwareOperation(Uri uri, MiBand2Support support) {
super(support);
@ -82,7 +82,7 @@ public class UpdateFirmwareOperation extends AbstractMiBand2Operation {
//the firmware will be sent by the notification listener if the band confirms that the metadata are ok.
}
private void done() {
protected void done() {
LOG.info("Operation done.");
operationFinished();
unsetBusy();
@ -163,7 +163,7 @@ public class UpdateFirmwareOperation extends AbstractMiBand2Operation {
done();
}
}
private void displayMessage(Context context, String message, int duration, int severity) {
protected void displayMessage(Context context, String message, int duration, int severity) {
getSupport().handleGBDeviceEvent(new GBDeviceEventDisplayMessage(message, duration, severity));
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2016-2017 Carsten Pfeiffer
/* Copyright (C) 2016-2017 Carsten Pfeiffer, Daniele Gobbetti
This file is part of Gadgetbridge.

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2017 Alberto, Carsten Pfeiffer
/* Copyright (C) 2017 Alberto, Carsten Pfeiffer, Daniele Gobbetti
This file is part of Gadgetbridge.

View File

@ -1,4 +1,5 @@
/* Copyright (C) 2017 ivanovlev, Yaron Shahrabani
/* Copyright (C) 2017 Andreas Shimokawa, ivanovlev, lazarosfs, Yaron
Shahrabani
This file is part of Gadgetbridge.

View File

@ -1,3 +1,19 @@
/* Copyright (C) 2017 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.util;
import android.content.Context;

View File

@ -28,7 +28,9 @@ public class Version implements Comparable<Version> {
public Version(String version) {
if(version == null)
throw new IllegalArgumentException("Version can not be null");
if(!version.matches("[0-9]+(\\.[0-9]+)*"))
version = version.trim();
if (!version.matches("[0-9]+(\\.[0-9]+)*"))
throw new IllegalArgumentException("Invalid version format");
this.version = version;
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/tertiarytext_dark" />
<item android:color="@color/primarytext_dark" />
</selector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z" />
</vector>

View File

@ -6,53 +6,49 @@
<ScrollView
android:id="@+id/scrollView2"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:grid="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
android:paddingTop="@dimen/activity_vertical_margin"
grid:alignmentMode="alignBounds"
grid:columnCount="2">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="fill_horizontal"
android:orientation="horizontal"
android:weightSum="2">
<Button
android:id="@+id/exportDBButton"
android:text="Export DB"
grid:layout_column="0"
grid:layout_gravity="center" />
<Button
android:id="@+id/exportDBButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
<Button
android:id="@+id/importDBButton"
android:text="Import DB"
grid:layout_gravity="center"
grid:layout_column="1" />
android:text="Export DB" />
<Button
android:id="@+id/importDBButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Import DB" />
</LinearLayout>
<TextView
android:id="@+id/db_management_intro"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/activity_db_management_import_export_explanation"
android:textAppearance="?android:attr/textAppearanceSmall" />
android:textAppearance="?android:attr/textAppearanceSmall"
grid:layout_columnSpan="2"
grid:layout_columnWeight="1" />
<TextView
android:id="@+id/activity_db_management_path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" />
android:textAppearance="?android:attr/textAppearanceMedium"
grid:layout_columnSpan="2"
grid:layout_columnWeight="1" />
<TextView
@ -62,23 +58,17 @@
android:layout_marginTop="40dp"
android:text="@string/activity_db_management_merge_old_title"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/accent" />
android:textColor="@color/accent"
grid:layout_columnSpan="2"
grid:layout_columnWeight="1" />
<LinearLayout
android:layout_width="match_parent"
<Button
android:id="@+id/deleteOldActivityDB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="fill_horizontal"
android:orientation="horizontal"
android:weightSum="2">
<Button
android:id="@+id/deleteOldActivityDB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:layout_weight="1"
android:text="Delete old DB" />
</LinearLayout>
android:layout_weight="1"
android:text="Delete old DB" />
<TextView
android:id="@+id/emptyDBText"
@ -86,7 +76,9 @@
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:text="Warning! By pushing this button you will wipe your database and start from scratch."
android:textAppearance="?android:attr/textAppearanceSmall" />
android:textAppearance="?android:attr/textAppearanceSmall"
grid:layout_columnSpan="2"
grid:layout_columnWeight="1" />
<Button
android:id="@+id/emptyDBButton"
@ -94,8 +86,8 @@
android:layout_height="wrap_content"
android:text="Empty DB" />
</android.support.v7.widget.GridLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>

View File

@ -2,10 +2,6 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="nodomain.freeyourgadget.gadgetbridge.activities.ControlCenterv2">
<ScrollView
@ -17,21 +13,23 @@
android:layout_alignParentStart="true"
android:layout_alignParentTop="true">
<GridLayout
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:grid="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alignmentMode="alignMargins"
android:columnCount="2"
android:rowCount="15">
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
grid:alignmentMode="alignMargins"
grid:columnCount="2">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:layout_row="0"
grid:layout_columnSpan="2"
grid:layout_gravity="fill_horizontal"
android:text="Message / Caller"
android:textAppearance="?android:attr/textAppearanceLarge" />
@ -39,10 +37,8 @@
android:id="@+id/editContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:layout_row="1"
grid:layout_columnSpan="2"
grid:layout_gravity="fill_horizontal"
android:ems="10"
android:inputType="textMultiLine"
android:text="Test" />
@ -51,116 +47,92 @@
android:id="@+id/sendTypeSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="fill_horizontal"
android:layout_row="2"
android:layout_columnSpan="2"
grid:layout_gravity="fill_horizontal"
grid:layout_columnSpan="2"
android:text="send as SMS" />
<Button
android:id="@+id/sendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:layout_row="3"
grid:layout_columnSpan="2"
grid:layout_gravity="fill_horizontal"
android:text="Send" />
<Button
android:id="@+id/incomingCallButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="fill_horizontal"
android:layout_row="4"
grid:layout_gravity="fill_horizontal"
android:text="incoming call" />
<Button
android:id="@+id/outgoingCallButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_gravity="fill_horizontal"
android:layout_row="4"
grid:layout_gravity="fill_horizontal"
android:text="outgoing call" />
<Button
android:id="@+id/startCallButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="fill_horizontal"
android:layout_row="5"
grid:layout_gravity="fill_horizontal"
android:text="start call" />
<Button
android:id="@+id/endCallButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_gravity="fill_horizontal"
android:layout_row="5"
grid:layout_gravity="fill_horizontal"
android:text="end call" />
<Button
android:id="@+id/setTimeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_gravity="fill_horizontal"
android:layout_row="6"
grid:layout_gravity="fill_horizontal"
android:text="set time" />
<Button
android:id="@+id/setMusicInfoButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_gravity="fill_horizontal"
android:layout_row="6"
grid:layout_gravity="fill_horizontal"
android:text="set music info" />
<Button
android:id="@+id/HearRateButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:layout_row="7"
grid:layout_columnSpan="2"
grid:layout_gravity="fill_horizontal"
android:text="Heart Rate Test" />
<Button
android:id="@+id/rebootButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:layout_row="8"
grid:layout_columnSpan="2"
grid:layout_gravity="fill_horizontal"
android:text="reboot" />
<Button
android:id="@+id/testNotificationButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:layout_row="9"
grid:layout_columnSpan="2"
grid:layout_gravity="fill_horizontal"
android:text="create test notification" />
<Button
android:id="@+id/testNewFunctionality"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:layout_row="10"
grid:layout_columnSpan="2"
grid:layout_gravity="fill_horizontal"
android:text="Test New Functionality" />
</GridLayout>
</android.support.v7.widget.GridLayout>
</ScrollView>
</RelativeLayout>

View File

@ -1,28 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:grid="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
grid:columnCount="2">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="20">
<nodomain.freeyourgadget.gadgetbridge.activities.charts.CustomBarChart
android:id="@+id/livechart_steps_per_minute_current"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"></nodomain.freeyourgadget.gadgetbridge.activities.charts.CustomBarChart>
<nodomain.freeyourgadget.gadgetbridge.activities.charts.CustomBarChart
android:id="@+id/livechart_steps_per_minute_current"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="20"></nodomain.freeyourgadget.gadgetbridge.activities.charts.CustomBarChart>
<nodomain.freeyourgadget.gadgetbridge.activities.charts.CustomBarChart
android:id="@+id/livechart_steps_total"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"></nodomain.freeyourgadget.gadgetbridge.activities.charts.CustomBarChart>
<nodomain.freeyourgadget.gadgetbridge.activities.charts.CustomBarChart
android:id="@+id/livechart_steps_total"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="20"></nodomain.freeyourgadget.gadgetbridge.activities.charts.CustomBarChart>
<!--
<!--
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/livechart_steps_total"
android:layout_width="fill_parent"
@ -37,13 +30,12 @@
android:layout_weight="20">
</com.github.mikephil.charting.charts.PieChart>
-->
</LinearLayout>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/livechart_steps_per_minute_history"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="20"></com.github.mikephil.charting.charts.LineChart>
grid:layout_columnSpan="2"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"></com.github.mikephil.charting.charts.LineChart>
</LinearLayout>
</android.support.v7.widget.GridLayout>

View File

@ -27,6 +27,7 @@
android:icon="@drawable/ic_donate" />
<item
android:id="@+id/external_changelog"
android:title="@string/changelog_full_title" />
android:title="@string/changelog_full_title"
android:icon="@drawable/ic_history_black" />
</group>
</menu>

View File

@ -7,7 +7,7 @@
<string name="action_quit">Ukončit</string>
<string name="controlcenter_fetch_activity_data">Načíst data</string>
<string name="controlcenter_start_sleepmonitor">Monitor spánku (alfa)</string>
<string name="controlcenter_find_device">Najít zařízení...</string>
<string name="controlcenter_find_device">Najít zařízení</string>
<string name="controlcenter_take_screenshot">Pořídit snímek displeje</string>
<string name="controlcenter_disconnect">Odpojit</string>
<string name="controlcenter_delete_device">Odstranit zařízení</string>
@ -40,6 +40,7 @@
<string name="app_move_to_top">Posunout nahoru</string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">Zakázané notifikace</string>
<!--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>
@ -76,9 +77,9 @@
<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 (nyní Cyrilice).</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 zapnutý displej</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>
@ -104,7 +105,7 @@
<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_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 timeline</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>
@ -138,11 +139,11 @@
<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="connecting">připojování</string>
<string name="connected">připojeno</string>
<string name="unknown_state">neznámý stav</string>
<string name="connecting">Připojování</string>
<string name="connected">Připojeno</string>
<string name="unknown_state">Neznámý stav</string>
<string name="connectionstate_hw_fw">HW: %1$s FW: %2$s</string>
<string name="connectionstate_fw">FW: %1$s</string>
<string name="connectionstate_fw">Verze FW: %1$s</string>
<string name="_unknown_">(neznámé)</string>
<string name="test">Test</string>
<string name="test_notification">Test notifikací</string>
@ -151,12 +152,12 @@
<string name="bluetooth_is_disabled_">BT je vypnutý.</string>
<string name="tap_connected_device_for_app_mananger">Dotkněte se zařízení pro App Manager</string>
<string name="tap_connected_device_for_activity">Dotkněte se zařízení pro Aktivity</string>
<string name="tap_connected_device_for_vibration">Dotkněte se zařízení pro Vibrace</string>
<string name="tap_connected_device_for_vibration">Dotkněte se zařízení pro vibrace</string>
<string name="tap_a_device_to_connect">Dotkněte se zařízení pro připojení</string>
<string name="cannot_connect_bt_address_invalid_">Nelze připojit. Je BT adresa v pořádku?</string>
<string name="gadgetbridge_running">Gadgetbridge běží</string>
<string name="installing_binary_d_d">Instaluji binární %1$d/%2$d</string>
<string name="installation_failed_">Instalace selhala!</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="app_install_info">Instalujete aplikaci:\n\n\n%1$s Verze %2$s od %3$s\n</string>
@ -171,14 +172,14 @@
<string name="title_activity_android_pairing">Párovat zařízení</string>
<string name="android_pairing_hint">Použijte párování BT Androidu pro spárování se zařízením. </string>
<string name="title_activity_mi_band_pairing">Párovat Mi Band</string>
<string name="pairing">Páruji s %s...</string>
<string name="pairing">Páruji s %s</string>
<string name="pairing_creating_bond_with">Vytvářím vazbu s %1$s (%2$s)</string>
<string name="pairing_unable_to_pair_with">Nelze spárovat s %1$s (%2$s)</string>
<string name="pairing_in_progress">Vytvářím vazbu: %1$s (%2$s)</string>
<string name="pairing_already_bonded">Vazba s %1$s (%2$s) již existuje, propojuji...</string>
<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</string>
<string name="preferences_miband_settings">Nastavení Mi Band / Bip</string>
<string name="male">muž</string>
<string name="female">žena</string>
<string name="other">jiný</string>
@ -217,7 +218,7 @@
<string name="pref_screen_notification_profile_generic_navigation">Navigace</string>
<string name="pref_screen_notification_profile_generic_social">Sociální sítě</string>
<string name="control_center_find_lost_device">Najit ztracené zařízení</string>
<string name="control_center_cancel_to_stop_vibration">Zrušit pro zastavení vibrací</string>
<string name="control_center_cancel_to_stop_vibration">Zrušit pro zastavení vibrací.</string>
<string name="title_activity_charts">Vaše aktivita</string>
<string name="title_activity_set_alarm">Nastavit buzení</string>
<string name="controlcenter_start_configure_alarms">Nastavit buzení</string>
@ -229,7 +230,7 @@
<string name="alarm_thu_short">Čt</string>
<string name="alarm_fri_short"></string>
<string name="alarm_sat_short">So</string>
<string name="alarm_smart_wakeup">chytré buzení</string>
<string name="alarm_smart_wakeup">Chytré buzení</string>
<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>
@ -241,7 +242,7 @@
<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="installer_activity_wait_while_determining_status">Vyčkejte na zjištění stavu instalace...</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>
<string name="notif_battery_low_bigtext_last_charge_time">Poslední nabití: %s \n</string>
@ -251,7 +252,7 @@
<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 firmware</string>
<string name="fwapp_install_device_not_ready">Soubor nelze nainstalovat, zařízení není připraveno.</string>
<string name="miband_installhandler_miband_firmware">Mi Band Firmware %1$s</string>
<string name="miband_fwinstaller_compatible_version">Kompatibilní verze</string>
@ -264,7 +265,7 @@
<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_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="liveactivity_live_activity">Současná aktivita</string>
@ -273,7 +274,7 @@
<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_summary_low_latency_fw_update">Může to pomoci u zařízení, kde aktualizace firmwaru selhala.</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>
<string name="live_activity_total_steps">Celkem kroků</string>
@ -293,25 +294,25 @@
<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"><![CDATA[Time & Date]]></string>
<string name="dateformat_date_time">Datum a čas</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="waiting_for_reconnect">Čekání na znovupřipojení</string>
<string name="activity_prefs_about_you">O vás</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="authentication_required">ověřování vyžadováno</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>
<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">HW: %1$s</string>
<string name="device_fw">FW: %1$s</string>
<string name="device_hw">Revize HW: %1$s</string>
<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="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="charts_legend_heartrate">Srdeční tep</string>
@ -356,4 +357,54 @@
<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="pref_call_privacy_mode_number">Skryj číslo a zobraz 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_title_enable_calendar_sync">Synchronizace kalendáře</string>
<string name="pref_summary_enable_calendar_sync">Odeslat události do časové osy</string>
<string name="stats_title">Zóny rychlosti</string>
<string name="stats_x_axis_label">Celkem minut</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="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="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_dont_pair">Nepárovat</string>
</resources>

View File

@ -5,9 +5,10 @@
<string name="action_settings">Einstellungen</string>
<string name="action_debug">Debug</string>
<string name="action_quit">Beenden</string>
<string name="action_donate">Spenden</string>
<string name="controlcenter_fetch_activity_data">Synchronisieren</string>
<string name="controlcenter_start_sleepmonitor">Schlafaufzeichnung (ALPHA)</string>
<string name="controlcenter_find_device">Suche verlegtes Gerät</string>
<string name="controlcenter_find_device">Suche verlegtes Gerät</string>
<string name="controlcenter_take_screenshot">Bildschirmfoto machen</string>
<string name="controlcenter_disconnect">Trennen</string>
<string name="controlcenter_delete_device">Gerät löschen</string>
@ -21,7 +22,7 @@
<string name="controlcenter_snackbar_requested_screenshot">Erstelle Screenshot des Gerätes</string>
<string name="title_activity_debug">Debug</string>
<!--Strings related to AppManager-->
<string name="title_activity_appmanager">App Manager</string>
<string name="title_activity_appmanager">App-Manager</string>
<string name="appmanager_cached_watchapps_watchfaces">Apps im Zwischenspeicher</string>
<string name="appmanager_installed_watchapps">Installierte Apps</string>
<string name="appmanager_installed_watchfaces">Installierte Zifferblätter</string>
@ -40,13 +41,15 @@
<string name="app_move_to_top">Nach oben</string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">Sperre für Benachrichtigungen</string>
<!--Strings related to CalBlacklist-->
<string name="title_activity_calblacklist">Blockierte Kalenderbenachrichtigungen</string>
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">FW/App Installer</string>
<string name="fw_upgrade_notice">Es soll die Firmware %s anstelle der aktuell installierten Version auf das Mi Band gespielt werden.</string>
<string name="fw_multi_upgrade_notice">Es sollen die Firmwares %1$s und %2$s anstelle der aktuell installierten Versionen auf das Mi Band gespielt werden.</string>
<string name="miband_firmware_known">Diese Firmware ist getestet worden und ist zu Gadgetbridge kompatibel.</string>
<string name="miband_firmware_unknown_warning">Diese Firmware ist nicht getestet und könnte inkompatibel mit Gadgetbridge sein.\n\nEs wird nicht empfohlen sie auf dem Mi Band zu installieren!</string>
<string name="miband_firmware_suggest_whitelist">Falls die Firmware trotzdem installiert werden soll und nachher alles korrekt funktioniert, melde bitte den Gadgetbridge Entwicklern, dass die Firmware %s funktioniert.</string>
<string name="miband_firmware_unknown_warning">Diese Firmware ist nicht getestet und könnte inkompatibel mit Gadgetbridge sein.\n\nEs wird nicht empfohlen, sie auf dem Mi Band zu installieren!</string>
<string name="miband_firmware_suggest_whitelist">Falls die Firmware trotzdem installiert werden soll und nachher alles korrekt funktioniert, melde bitte den Gadgetbridge-Entwicklern, dass die Firmware %s funktioniert</string>
<!--Strings related to Settings-->
<string name="title_activity_settings">Einstellungen</string>
<string name="pref_header_general">Allgemeine Einstellungen</string>
@ -72,21 +75,22 @@
<string name="pref_title_notifications_pebblemsg">Pebble Nachrichten</string>
<string name="pref_summary_notifications_pebblemsg">Unterstützung für Anwendungen, die Benachrichtigungen an die Pebble mit dem PebbleKit senden.</string>
<string name="pref_title_notifications_generic">Andere Benachrichtigungen</string>
<string name="pref_title_whenscreenon"> auch wenn der Bildschirm an ist</string>
<string name="pref_title_whenscreenon">…auch wenn der Bildschirm an ist</string>
<string name="pref_title_notification_filter">Bitte nicht stören</string>
<string name="pref_summary_notification_filter">Benachrichtigungen nicht senden, wenn im \"Nicht Stören\"-Modus</string>
<string name="pref_title_transliteration">Transkription</string>
<string name="pref_title_transliteration">Transliteration</string>
<string name="pref_summary_transliteration">Aktiviere dies, falls dein Gerät keine Unterstützung für den Zeichensatz deiner Sprache hat</string>
<string name="always">immer</string>
<string name="when_screen_off">wenn der Bildschirm aus ist</string>
<string name="never">niemals</string>
<string name="always">Immer</string>
<string name="when_screen_off">Wenn der Bildschirm aus ist</string>
<string name="never">Niemals</string>
<string name="pref_header_privacy">Privatsphäre</string>
<string name="pref_title_call_privacy_mode">Privatsphäre-Modus für Anrufe</string>
<string name="pref_call_privacy_mode_off">Zeige Name und Telefonnumer</string>
<string name="pref_call_privacy_mode_name">Verstecke den Namen aber zeige die Telefonnummer an</string>
<string name="pref_call_privacy_mode_number">Zeige den Namen an aber verstecke die Telefonnummer</string>
<string name="pref_call_privacy_mode_name">Verstecke den Namen, aber zeige die Telefonnummer an</string>
<string name="pref_call_privacy_mode_number">Zeige den Namen an, aber verstecke die Telefonnummer</string>
<string name="pref_call_privacy_mode_complete">Verstecke Name und Telefonnummer</string>
<string name="pref_blacklist">App-Benachrichtigungen blockieren</string>
<string name="pref_blacklist_calendars">Kalender blockieren</string>
<string name="pref_header_cannned_messages">Vorgefertigte Nachrichten</string>
<string name="pref_title_canned_replies">Antworten</string>
<string name="pref_title_canned_reply_suffix">Gemeinsame Endung</string>
@ -94,7 +98,7 @@
<string name="pref_title_canned_messages_set">Auf der Pebble aktualisieren</string>
<string name="pref_header_development">Entwickleroptionen</string>
<string name="pref_title_development_miaddr">Mi Band MAC Adresse</string>
<string name="pref_title_pebble_settings">Pebble Einstellungen</string>
<string name="pref_title_pebble_settings">Pebble-Einstellungen</string>
<string name="pref_header_activitytrackers">Aktivitätstracker</string>
<string name="pref_title_pebble_activitytracker">Bevorzugter Aktivitätstracker</string>
<string name="pref_title_pebble_sync_health">Pebble Health synchronisieren</string>
@ -102,7 +106,7 @@
<string name="pref_title_pebble_sync_morpheuz">Morpheuz synchronisieren</string>
<string name="pref_title_enable_outgoing_call">Unterstützung für ausgehende Anrufe</string>
<string name="pref_summary_enable_outgoing_call">Falls dies deaktiviert wird, vibriert die Pebble 2/LE nicht bei ausgehenden Anrufen</string>
<string name="pref_title_enable_pebblekit">Erlaube Zugriff von anderen Android Apps</string>
<string name="pref_title_enable_pebblekit">Erlaube Zugriff von anderen Android-Apps</string>
<string name="pref_summary_enable_pebblekit">Experimentelle Unterstützung für Android Apps, die PebbleKit benutzen</string>
<string name="pref_header_pebble_timeline">Pebble Timeline</string>
<string name="pref_title_sunrise_sunset">Sonnenauf- und -untergang </string>
@ -126,9 +130,9 @@
<string name="pref_title_pebble_forceprotocol">Benachrichtigungsprotokoll erzwingen</string>
<string name="pref_summary_pebble_forceprotocol">Diese Option erzwingt das neuste Benachrichtigungsprotokoll abhängig von der Firmwareversion. NUR EINSCHALTEN, WENN DU WEISST, WAS DU TUST!</string>
<string name="pref_title_pebble_forceuntested">Ungetestete Features freischalten</string>
<string name="pref_summary_pebble_forceuntested">Schaltet ungetetestete Features frei. NUR EINSCHALTEN WENN DU WEISST WAS DU TUST!</string>
<string name="pref_summary_pebble_forceuntested">Schaltet ungetetestete Features frei. NUR EINSCHALTEN, WENN DU WEISST WAS DU TUST!</string>
<string name="pref_title_pebble_forcele">BLE immer bevorzugen</string>
<string name="pref_summary_pebble_forcele">Nutze den experimentellen LE support für alle Pebbles anstelle von klassischem BT. Setzt voraus, dass die \"Pebble LE\" gekoppelt wird nachdem die nicht-LE Pebble einmal verbunden war.</string>
<string name="pref_summary_pebble_forcele">Nutze den experimentellen LE support für alle Pebbles anstelle von klassischem BT. Setzt voraus, dass die \"Pebble LE\" gekoppelt wird, nachdem die nicht-LE Pebble einmal verbunden war.</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU Limit</string>
<string name="pref_summary_pebble_mtu_limit">Wenn deine Pebble 2/Pebble LE nicht so wie erwartet funktioniert, versuche die MTU zu begrenzen (erlaubte Werte 20 bis 512)</string>
<string name="pref_title_pebble_enable_applogs">Watch App Logging einschalten</string>
@ -141,26 +145,26 @@
<string name="pref_title_screentime">Bildschirm-An-Dauer</string>
<string name="prefs_title_all_day_heart_rate">Den ganzen Tag Herzfrequenz messen</string>
<string name="preferences_hplus_settings">HPlus/Makibes Einstellungen</string>
<string name="not_connected">nicht verbunden</string>
<string name="connecting">verbinde</string>
<string name="connected">verbunden</string>
<string name="unknown_state">unbekannter Zustand</string>
<string name="not_connected">Nicht verbunden</string>
<string name="connecting">Verbinde</string>
<string name="connected">Verbunden</string>
<string name="unknown_state">Unbekannter Zustand</string>
<string name="connectionstate_hw_fw">HW: %1$s FW: %2$s</string>
<string name="connectionstate_fw">FW: %1$s</string>
<string name="_unknown_">(unknown)</string>
<string name="connectionstate_fw">Firmware-Version %1$s</string>
<string name="_unknown_">(unbekannt)</string>
<string name="test">Test</string>
<string name="test_notification">Test Benachrichtigung</string>
<string name="this_is_a_test_notification_from_gadgetbridge">Dies ist eine Test Benachrichtigung von Gadgetbridge</string>
<string name="this_is_a_test_notification_from_gadgetbridge">Dies ist eine Testbenachrichtigung von Gadgetbridge</string>
<string name="bluetooth_is_not_supported_">Bluetooth wird nicht unterstützt.</string>
<string name="bluetooth_is_disabled_">Bluetooth ist abgeschaltet.</string>
<string name="tap_connected_device_for_app_mananger">Tippe auf das verbundene Gerät, um den App Manager zu starten</string>
<string name="tap_connected_device_for_app_mananger">Tippe auf das verbundene Gerät, um den App-Manager zu starten</string>
<string name="tap_connected_device_for_activity">Tippe auf das verbundene Gerät, um die Aktivitätsdaten anzuzeigen</string>
<string name="tap_connected_device_for_vibration">Tippe auf das verbundene Gerät, um zu vibrieren</string>
<string name="tap_connected_device_for_vibration">Tippe auf das verbundene Gerät, um es vibrieren zu lassen</string>
<string name="tap_a_device_to_connect">Tippe zum Verbinden auf das gewünschte Gerät</string>
<string name="cannot_connect_bt_address_invalid_">Verbindung kann nicht aufgebaut werden. BT Adresse ungültig?</string>
<string name="cannot_connect_bt_address_invalid_">Verbindung kann nicht aufgebaut werden. Bluetooth-Adresse ungültig?</string>
<string name="gadgetbridge_running">Gadgetbridge läuft</string>
<string name="installing_binary_d_d">installiere Datei %1$d/%2$d</string>
<string name="installation_failed_">Installation fehlgeschlagen!</string>
<string name="installing_binary_d_d">Installiere Datei %1$d/%2$d</string>
<string name="installation_failed_">Installation fehlgeschlagen</string>
<string name="installation_successful">Installation erfolgreich</string>
<string name="firmware_install_warning">DU VERSUCHST EINE FIRMWARE ZU INSTALLIEREN; FAHRE AUF EIGENES RISIKO FORT.\n\n\nDiese Firmware ist für HW Revision: %s</string>
<string name="app_install_info">Du bist dabei die folgende app zu installieren:\n\n\n%1$s Version %2$s von %3$s\n</string>
@ -173,35 +177,35 @@
<string name="action_discover">Neues Gerät verbinden</string>
<string name="device_with_rssi">%1$s (%2$s)</string>
<string name="title_activity_android_pairing">Gerät koppeln</string>
<string name="android_pairing_hint">Verwende den Android Bluetooth Kopplungsdialog um Dein Gerät zu koppeln.</string>
<string name="title_activity_mi_band_pairing">Kopple Dein Mi Band</string>
<string name="android_pairing_hint">Verwende den Bluetooth-Kopplungsdialog in Android, um dein Gerät zu koppeln.</string>
<string name="title_activity_mi_band_pairing">Kopple dein Mi Band</string>
<string name="pairing">Koppeln mit %s…</string>
<string name="pairing_creating_bond_with">Bindung mit %1$s (%2$s) herstellen</string>
<string name="pairing_creating_bond_with">Verbindung mit %1$s (%2$s) herstellen</string>
<string name="pairing_unable_to_pair_with">Kann mit %1$s (%2$s) nicht koppeln</string>
<string name="pairing_in_progress">Bindung findet statt: %1$s (%2$s)</string>
<string name="pairing_already_bonded">Bereits mit %1$s (%2$s) gebunden, stelle Verbindung her......</string>
<string name="message_cannot_pair_no_mac">Keine MAC Adresse erhalten, kann nicht koppeln.</string>
<string name="pairing_in_progress">Verbindung wird hergestellt: %1$s (%2$s)</string>
<string name="pairing_already_bonded">Bereits mit %1$s (%2$s) verbunden, stelle Verbindung her…</string>
<string name="message_cannot_pair_no_mac">Keine MAC-Adresse erhalten, koppeln nicht möglich.</string>
<string name="preferences_category_device_specific_settings">Gerätespezifische Einstellungen</string>
<string name="preferences_miband_settings">Mi Band Einstellungen</string>
<string name="male">männlich</string>
<string name="female">weiblich</string>
<string name="other">anderes</string>
<string name="left">links</string>
<string name="right">rechts</string>
<string name="preferences_miband_settings">Mi Band / Bip Einstellungen</string>
<string name="male">Männlich</string>
<string name="female">Weiblich</string>
<string name="other">Anderes</string>
<string name="left">Links</string>
<string name="right">Rechts</string>
<string name="miband_pairing_using_dummy_userdata">Keine gültigen Benutzerinformationen angegeben, verwende Dummy-Daten für\'s Erste.</string>
<string name="miband_pairing_tap_hint">Wenn Dein Mi Band vibriert und blinkt, tippe ein paar Mal schnell hintereinander darauf.</string>
<string name="appinstaller_install">Installieren</string>
<string name="discovery_connected_devices_hint">Mache dein Gerät auffindbar. Derzeit verbundene Geräte werden wahrscheinlich nicht erkannt. Aktiviere die Standortbestimmung (zum Beispiel GPS) in Android 6+. Deaktiviere den Privatsphäreschutz für Gadgetbridge, da er zu Abstürzen und Neustarts deines Telefons führen kann. Wenn nach einigen Minuten kein Gerät erkannt wird, versuche es nach einem Neustart deines Telefons erneut.</string>
<string name="discovery_note">Tipp:</string>
<string name="candidate_item_device_image">Bild des Geräts</string>
<string name="candidate_item_device_image">Gerätebild</string>
<string name="miband_prefs_alias">Name/Alias</string>
<string name="pref_header_vibration_count">Anzahl der Vibrationen</string>
<string name="title_activity_sleepmonitor">Schlafmonitor</string>
<string name="title_activity_sleepmonitor">Schlafaufzeichnung</string>
<string name="pref_write_logfiles">Logdateien schreiben</string>
<string name="initializing">initialisiere</string>
<string name="initializing">Initialisiere</string>
<string name="busy_task_fetch_activity_data">Rufe Aktivitätsdaten ab</string>
<string name="sleep_activity_date_range">Von %1$s bis %2$s</string>
<string name="miband_prefs_wearside">Linker oder rechter Arm?</string>
<string name="miband_prefs_wearside">Am linken oder rechten Arm getragen?</string>
<string name="pref_screen_vibration_profile">Vibrationsprofile</string>
<string name="vibration_profile_staccato">Stakkato</string>
<string name="vibration_profile_short">Kurz</string>
@ -211,15 +215,15 @@
<string name="vibration_profile_ring">Klingel</string>
<string name="vibration_profile_alarm_clock">Wecker</string>
<string name="miband_prefs_vibration">Vibration</string>
<string name="vibration_try">Test</string>
<string name="pref_screen_notification_profile_sms">SMS Benachrichtigung</string>
<string name="vibration_try">Versuch</string>
<string name="pref_screen_notification_profile_sms">SMS-Benachrichtigung</string>
<string name="pref_header_vibration_settings">Vibrationseinstellungen</string>
<string name="pref_screen_notification_profile_generic">Sonstige Benachrichtigung</string>
<string name="pref_screen_notification_profile_email">E-Mail</string>
<string name="pref_screen_notification_profile_email">E-Mail-Benachrichtigung</string>
<string name="pref_screen_notification_profile_incoming_call">Eingehende Anrufe</string>
<string name="pref_screen_notification_profile_generic_chat">Chat</string>
<string name="pref_screen_notification_profile_generic_navigation">Navigation</string>
<string name="pref_screen_notification_profile_generic_social">Soziales Netzwerk</string>
<string name="pref_screen_notification_profile_generic_social">Soziale Netzwerke</string>
<string name="stats_x_axis_label">Minuten insgesamt</string>
<string name="stats_y_axis_label">Schritte pro Minute</string>
<string name="control_center_find_lost_device">Verlegtes Gerät suchen</string>
@ -227,7 +231,7 @@
<string name="title_activity_charts">Deine Aktivität</string>
<string name="title_activity_set_alarm">Wecker stellen</string>
<string name="controlcenter_start_configure_alarms">Wecker stellen</string>
<string name="title_activity_alarm_details">Wecker Stellen</string>
<string name="title_activity_alarm_details">Wecker stellen</string>
<string name="alarm_sun_short">So</string>
<string name="alarm_mon_short">Mo</string>
<string name="alarm_tue_short">Di</string>
@ -247,8 +251,8 @@
<string name="installer_activity_unable_to_find_handler">Kann keinen Handler für die Installation dieser Datei finden.</string>
<string name="pbw_install_handler_unable_to_install">Konnte folgende Datei nicht installieren: %1$s</string>
<string name="pbw_install_handler_hw_revision_mismatch">Kann die gegebene Firmware nicht installieren. Sie passt nicht zur Hardware-Revision der Pebble.</string>
<string name="installer_activity_wait_while_determining_status">Bitte warten, Installationsstatus wird festgestellt...</string>
<string name="notif_battery_low_title">Gadget Akkustand niedrig!</string>
<string name="installer_activity_wait_while_determining_status">Bitte warten, Installationsstatus wird festgestellt</string>
<string name="notif_battery_low_title">Gadget-Akkustand niedrig!</string>
<string name="notif_battery_low_percent">%1$s Akku übrig: %2$s%%</string>
<string name="notif_battery_low_bigtext_last_charge_time">Zuletzt aufgeladen: %s\n</string>
<string name="notif_battery_low_bigtext_number_of_charges">Anzahl Ladungen: %s</string>
@ -256,7 +260,7 @@
<string name="weeksleepchart_sleep_a_week">Schlaf pro Woche</string>
<string name="weeksleepchart_today_sleep_description">Heutiger Schlaf, Ziel: %1$s</string>
<string name="weekstepschart_steps_a_week">Schritte pro Woche</string>
<string name="activity_sleepchart_activity_and_sleep">Deine Aktivität und Schlaf</string>
<string name="activity_sleepchart_activity_and_sleep">Deine Aktivität und dein Schlaf</string>
<string name="updating_firmware">Firmware wird aktualisiert…</string>
<string name="fwapp_install_device_not_ready">Datei kann nicht installiert werden, Gerät nicht bereit.</string>
<string name="miband_installhandler_miband_firmware">Mi Band Firmware %1$s</string>
@ -283,7 +287,7 @@
<string name="pref_title_dont_ack_transfer">Transfer von Aktivitätsdaten nicht bestätigen</string>
<string name="pref_summary_dont_ack_transfers">Wenn der Transfer der Aktivitätsdaten nicht bestätigt wird, werden die Daten nicht auf dem Mi Band gelöscht. Das ist sinnvoll, wenn neben Gadgetbridge noch andere Apps auf das Mi Band zugreifen.</string>
<string name="pref_summary_keep_data_on_device">Aktivitätsdaten verbleiben auf dem Mi Band, auch nach der Synchronisierung. Hilfreich, wenn das Mi Band mit weiteren Apps verwendet wird.</string>
<string name="pref_title_low_latency_fw_update">Benutze Modus mit niedriger Latenz für FW-Updates</string>
<string name="pref_title_low_latency_fw_update">Benutze Modus mit niedriger Latenz für Firmware-Updates</string>
<string name="pref_summary_low_latency_fw_update">Dies kann bei Geräten helfen, bei denen Firmwareupdates fehlschlagen</string>
<string name="live_activity_steps_history">Verlauf Schritte</string>
<string name="live_activity_current_steps_per_minute">Akt. Schritte pro Minute</string>
@ -304,20 +308,23 @@
<string name="miband_prefs_device_time_offset_hours">Zeitausgleich in Stunden (um den Schlaf von Schichtarbeitern zu erkennen)</string>
<string name="miband2_prefs_dateformat">Mi2: Datumsformat</string>
<string name="dateformat_time">Zeit</string>
<string name="dateformat_date_time"><![CDATA[Time & Date]]></string>
<string name="dateformat_date_time">Zeit &amp; Datum</string>
<string name="mi2_prefs_goal_notification">Benachrichtigungen bei Schrittziel</string>
<string name="mi2_prefs_goal_notification_summary">Das Band wird vibrieren, wenn das tägliche Schrittziel erreicht ist.</string>
<string name="mi2_prefs_goal_notification_summary">Das Band vibriert, wenn das tägliche Schrittziel erreicht ist</string>
<string name="mi2_prefs_display_items">Angezeigte Items</string>
<string name="mi2_prefs_display_items_summary">Wähle aus, welche Items auf dem Band angezeigt werden sollen</string>
<string name="mi2_prefs_activate_display_on_lift">Display beim Anheben aktivieren</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">Drehe dein Handgelenk, um die Anzeige zu wechseln</string>
<string name="mi2_prefs_do_not_disturb">Bitte nicht stören</string>
<string name="mi2_prefs_do_not_disturb_summary">Es werden keine Benachrichtigungen während einer Aktivität empfangen</string>
<string name="mi2_prefs_inactivity_warnings">Inaktivitätswarnungen</string>
<string name="mi2_prefs_inactivity_warnings_summary">Das Band wird vibrieren, wenn du für eine Weile inaktiv warst</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Grenzwert für Inaktivität (in Minuten)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Deaktiviere Inaktivitätswarnungen zu einer bestimmten Zeit</string>
<string name="mi2_prefs_do_not_disturb_start">Startzeit</string>
<string name="mi2_prefs_do_not_disturb_end">Endzeit</string>
<string name="FetchActivityOperation_about_to_transfer_since">Werde Daten ab %1$s übertragen.</string>
<string name="waiting_for_reconnect">warte auf Verbindung</string>
<string name="FetchActivityOperation_about_to_transfer_since">Übertrage Daten ab %1$s</string>
<string name="waiting_for_reconnect">Warte auf Verbindung</string>
<string name="activity_prefs_about_you">Über Dich</string>
<string name="activity_prefs_year_birth">Geburtsjahr</string>
<string name="activity_prefs_gender">Geschlecht</string>
@ -329,14 +336,14 @@
<string name="add_widget">Widget hinzufügen</string>
<string name="activity_prefs_sleep_duration">Gewünschte Schlafdauer in Stunden</string>
<string name="appwidget_alarms_set">Ein Wecker wurde auf %1$02d:%2$02d gestellt</string>
<string name="device_hw">HW: %1$s</string>
<string name="device_fw">FW: %1$s</string>
<string name="device_hw">Hardwarerevision: %1$s</string>
<string name="device_fw">Firmware-Version: %1$s</string>
<string name="error_creating_directory_for_logfiles">Fehler beim Erstellen des Verzeichnisses für Logdateien: %1$s</string>
<string name="DEVINFO_HR_VER">HF:</string>
<string name="DEVINFO_HR_VER">"HF: "</string>
<string name="updatefirmwareoperation_update_in_progress">Firmwareupdate wird durchgeführt</string>
<string name="updatefirmwareoperation_firmware_not_sent">Firmware wurde nicht gesendet</string>
<string name="charts_legend_heartrate">Herzfrequenz</string>
<string name="live_activity_heart_rate">Herzfrequenz</string>
<string name="charts_legend_heartrate">Puls</string>
<string name="live_activity_heart_rate">Puls</string>
<string name="pref_title_pebble_health_store_raw">Rohdaten in der Datenbank speichern</string>
<string name="pref_summary_pebble_health_store_raw">Wenn eingeschaltet, werden Daten so wie sie eingehen für eine spätere analyse gespeichert. Achtung: Die Datenbank wird dadurch größer!</string>
<string name="action_db_management">Datenbankverwaltung</string>
@ -348,12 +355,12 @@
<string name="dbmanagementactivity_error_exporting_db">Fehler beim Exportieren der DB: %1$s</string>
<string name="dbmanagementactivity_error_exporting_shared">Fehler beim Exlortieren der Einstellungen: %1$s</string>
<string name="dbmanagementactivity_import_data_title">Daten importieren?</string>
<string name="dbmanagementactivity_overwrite_database_confirmation">Wirklich die aktuelle Datenbank überschreiben? Alle aktuellen Aktivitätsdaten (sofern vorhanden) gehen verloren!</string>
<string name="dbmanagementactivity_overwrite_database_confirmation">Wirklich die aktuelle Datenbank überschreiben? Alle aktuellen Aktivitätsdaten (sofern vorhanden) gehen verloren.</string>
<string name="dbmanagementactivity_import_successful">Import erfolgreich.</string>
<string name="dbmanagementactivity_error_importing_db">Fehler beim Importieren der DB: %1$s</string>
<string name="dbmanagementactivity_error_importing_shared">Fehler beim Importieren der Einstellungen: %1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">Aktivitätsdaten löschen?</string>
<string name="dbmanagementactivity_really_delete_entire_db">Wirklich die komplette Datenbank löschen? Alle Aktivitätsdaten und Informationen über Deine Geräte gehen verloren!</string>
<string name="dbmanagementactivity_really_delete_entire_db">Wirklich die komplette Datenbank löschen? Alle Aktivitätsdaten und Informationen über Deine Geräte gehen verloren.</string>
<string name="dbmanagementactivity_database_successfully_deleted">Daten erfolgreich gelöscht.</string>
<string name="dbmanagementactivity_db_deletion_failed">Löschen der Datenbank fehlgeschlagen.</string>
<string name="dbmanagementactivity_delete_old_activity_db">Alte Aktivitätsdatenbank löschen?</string>
@ -367,10 +374,10 @@
<string name="title_activity_vibration">Vibration</string>
<!--Strings related to Pebble Pairing Activity-->
<string name="title_activity_pebble_pairing">Pebble-Kopplung</string>
<string name="pebble_pairing_hint">Ein Kopplungsdialog sollte auf dem Android-Gerät aufpoppen. Falls das nicht passiert, schau in die Benachrichtigungen und akzeptiere die Kopplungsanfrage. Akzeptiere danach die Kopplungsanfrage auf Deiner Pebble.</string>
<string name="pebble_pairing_hint">Ein Kopplungsdialog sollte auf dem Android-Gerät aufpoppen. Falls das nicht passiert, schau in die Benachrichtigungen und akzeptiere die Kopplungsanfrage. Akzeptiere danach die Kopplungsanfrage auf Deiner Pebble</string>
<string name="weather_notification_label">Stelle sicher, dass dieses Skin in der Wetter-App aktiviert ist, damit du Wetterdaten auf deine Pebble erhältst. \n\nKeine Konfiguration nötig. \n\nDu kannst die System-Wetter-App deiner Pebble im App-Management aktivieren. \n\nUnterstützte Watchfaces werden die Wetterdaten automatisch anzeigen.</string>
<string name="pref_title_setup_bt_pairing">Bluetooth-Kopplung aktivieren</string>
<string name="pref_summary_setup_bt_pairing">Deaktiviere dies falls Du Probleme beim verbinden hast</string>
<string name="pref_summary_setup_bt_pairing">Deaktiviere dies, falls du Probleme beim Verbinden hast</string>
<string name="unit_metric">Metrisch</string>
<string name="unit_imperial">Imperial (US/UK)</string>
<string name="timeformat_24h">24h</string>
@ -382,16 +389,25 @@
<string name="mi2_fw_installhandler_fw53_hint">Installiere Version %1$s vor dem Installieren der Firmware!</string>
<string name="mi2_enable_text_notifications">Text Benachrichtigung</string>
<string name="mi2_enable_text_notifications_summary"><![CDATA[Firmware >= 1.0.1.28 und installiertes Mili_pro.ft* benötigt.]]></string>
<string name="off">aus</string>
<string name="off">Aus</string>
<string name="mi2_dnd_off">Aus</string>
<string name="mi2_dnd_automatic">Automatisch (Schlaferkennung)</string>
<string name="discovery_attempting_to_pair">Versuche zu koppeln mit %1$s</string>
<string name="mi2_dnd_scheduled">Geplant (Zeitintervall)</string>
<string name="discovery_attempting_to_pair">Versuche mit %1$s zu koppeln</string>
<string name="discovery_bonding_failed_immediately">Kopplung mit %1$s soeben fehlgeschlagen.</string>
<string name="discovery_trying_to_connect_to">Versuche zu verbinden mit: %1$s</string>
<string name="discovery_enable_bluetooth">Aktiviere Bluetooth um Geräte zu finden.</string>
<string name="discovery_enable_bluetooth">Aktiviere Bluetooth, um Geräte zu finden.</string>
<string name="discovery_successfully_bonded">Erfolgreich gekoppelt mit %1$s.</string>
<string name="discovery_pair_title">Koppeln mit %1$s?</string>
<string name="discovery_pair_question">Wähle Koppeln um dein Gerät zu koppeln. Falls dies fehlschlägt, versuche es erneut ohne Kopplung.</string>
<string name="discovery_pair_question">Wähle Koppeln, um dein Gerät zu verbinden. Falls dies fehlschlägt, versuche es erneut ohne Kopplung.</string>
<string name="discovery_yes_pair">Koppeln</string>
<string name="discovery_dont_pair">Nicht koppeln</string>
</resources>
<string name="stats_title">Geschwindigkeitszonen</string>
<string name="fw_upgrade_notice_amazfitbip">Es soll die Firmware %s anstelle der aktuell installierten Version auf die Amazfit Bip gespielt werden.
\n
\nBitte stelle sicher, dass Du zuerst die .gps firmware, dann die .res Datei, und zum Schluss die .fw Datei installiert. Deine Uhr wird sich nach der installation der .fw Datei neustarten.
\n
\nHinweis: Du musst die .res and .gps Dateien nicht installieren, falls diese genau die gleichen Dateien wie die sind, die Du schon mit einer vorigen .fw Datei zusammen installiert hattest.
\n
\nDIES IST EXPERIMENTELL, FAHRE AUF EIGENES RISIKO FORT</string>
</resources>

View File

@ -5,6 +5,7 @@
<string name="action_settings">Ajustes</string>
<string name="action_debug">Depuración</string>
<string name="action_quit">Salir</string>
<string name="action_donate">Hacer donación</string>
<string name="controlcenter_fetch_activity_data">Sincronizar</string>
<string name="controlcenter_start_sleepmonitor">Monitor de sueño (ALPHA)</string>
<string name="controlcenter_find_device">Encontrar dispositivo perdido...</string>
@ -40,6 +41,8 @@
<string name="app_move_to_top">Mover a la parte de arriba</string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">Lista negra de notificaciones</string>
<!--Strings related to CalBlacklist-->
<string name="title_activity_calblacklist">Calendarios en lista negra</string>
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">Instalador de FW/App</string>
<string name="fw_upgrade_notice">Estás a punto de instalar el firmware %s en lugar del que está en tu MiBand.</string>
@ -87,6 +90,7 @@
<string name="pref_call_privacy_mode_number">Ocultar el número pero mostrar el nombre</string>
<string name="pref_call_privacy_mode_complete">Ocultar nombre y número</string>
<string name="pref_blacklist">Excluir aplicaciones</string>
<string name="pref_blacklist_calendars">Poner calendarios en lista negra</string>
<string name="pref_header_cannned_messages">Mensajes predeterminados</string>
<string name="pref_title_canned_replies">Respuestas</string>
<string name="pref_title_canned_reply_suffix">Sufijo habitual</string>

View File

@ -5,6 +5,7 @@
<string name="action_settings">Paramètres</string>
<string name="action_debug">Déboguer</string>
<string name="action_quit">Quitter</string>
<string name="action_donate">Faire un don</string>
<string name="controlcenter_fetch_activity_data">Synchroniser</string>
<string name="controlcenter_start_sleepmonitor">Suivi du sommeil (ALPHA)</string>
<string name="controlcenter_find_device">Retrouver un appareil perdu...</string>
@ -40,6 +41,8 @@
<string name="app_move_to_top">Haut de page </string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">Liste noire de notifications</string>
<!--Strings related to CalBlacklist-->
<string name="title_activity_calblacklist">Calendriers sur liste noire</string>
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">Installateur d\'applications/micrologiciel</string>
<string name="fw_upgrade_notice">Vous êtes sur le point d\'installer le micrologiciel %s à la place de celui qui est actuellement sur votre Mi Band.</string>
@ -87,6 +90,7 @@
<string name="pref_call_privacy_mode_number">Masquer le numéro mais afficher le nom</string>
<string name="pref_call_privacy_mode_complete">Masquer le nom et le numéro</string>
<string name="pref_blacklist">Applications bloquées</string>
<string name="pref_blacklist_calendars">Mettre des calendriers en liste noire</string>
<string name="pref_header_cannned_messages">Modèles de messages</string>
<string name="pref_title_canned_replies">Réponses</string>
<string name="pref_title_canned_reply_suffix">Suffixe fréquent</string>

View File

@ -34,6 +34,7 @@
<string name="app_move_to_top">העברה למעלה</string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">חסימת דיווחים</string>
<!--Strings related to CalBlacklist-->
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">התקנת קושחה/יישומון</string>
<string name="fw_upgrade_notice">הקושחה המועמדת להתקנה היא %s במקום זו המותקנת על ה־Mi Band שלך נכון לעכשיו.</string>
@ -70,7 +71,6 @@
<string name="pref_title_notification_filter">לא להפריע</string>
<string name="pref_summary_notification_filter">חסימת שליחה של דיווחים בלתי רצויים בהתבסס על המצב לא להפריע.</string>
<string name="pref_title_transliteration">תעתיק</string>
<string name="pref_summary_transliteration">יש להפעיל זו אם להתקן שלך אין תמיכה בגופן השפה שלך (קירילית ועברית בלבד)</string>
<string name="always">תמיד</string>
<string name="when_screen_off">כאשר המסך כבוי</string>
<string name="never">לעולם לא</string>
@ -350,4 +350,44 @@
<string name="StringUtils_sender"> (%1$s)</string>
<string name="find_device_you_found_it">מצאת את זה!</string>
<string name="miband2_prefs_timeformat">Mi2: תבנית זמן</string>
</resources>
<string name="action_donate">תרומה</string>
<string name="controlcenter_navigation_drawer_open">פתיחת מגירת הניווט</string>
<string name="controlcenter_navigation_drawer_close">סגירת מגירת הניווט</string>
<string name="controlcenter_snackbar_need_longpress">לחיצה ארוכה על הכרטיס כדי לנתק</string>
<string name="controlcenter_snackbar_disconnecting">מתבצע ניתוק</string>
<string name="controlcenter_snackbar_connecting">מתבצעת התחברות</string>
<string name="controlcenter_snackbar_requested_screenshot">מסך ההתקן מצולם</string>
<string name="title_activity_calblacklist">יומנים חסומים</string>
<string name="pref_call_privacy_mode_number">הסתרת המספר אך הצגת השם</string>
<string name="pref_blacklist_calendars">חסימת יומנים</string>
<string name="pref_header_pebble_timeline">ציר זמן Pebble</string>
<string name="pref_title_enable_calendar_sync">סנכרון יומנים</string>
<string name="pref_summary_enable_calendar_sync">שליחת אירועים מהיומן לציר הזמן</string>
<string name="stats_title">אזורי מהירות</string>
<string name="stats_x_axis_label">סך כל הדקות</string>
<string name="stats_y_axis_label">צעדים לדקה</string>
<string name="calories">קלוריות</string>
<string name="distance">מרחק</string>
<string name="clock">שעון</string>
<string name="heart_rate">דופק</string>
<string name="battery">סוללה</string>
<string name="mi2_prefs_goal_notification">התרעת יעד</string>
<string name="mi2_prefs_goal_notification_summary">הצמיד ירטוט כאשר הגעת ליעד הצעדים היומי</string>
<string name="mi2_prefs_display_items">הצגת פריטים</string>
<string name="mi2_prefs_display_items_summary">בחירת הפריטים שיופיעו על מסך הצמיד</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">הטיית היד כדי לעבור למצב נתונים אחר</string>
<string name="mi2_prefs_do_not_disturb">לא להפריע</string>
<string name="mi2_prefs_do_not_disturb_summary">הצמיד לא יקבל התרעות בזמן הפעילות</string>
<string name="mi2_prefs_inactivity_warnings">אזהרות חוסר פעילות</string>
<string name="mi2_prefs_inactivity_warnings_summary">הצמיד ירטוט כשלא ביצעת פעילות במשך זמן מה</string>
<string name="mi2_prefs_inactivity_warnings_threshold">סף חוסר פעילות (בדקות)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">השבתת אזהרות חוסר הפעילות לפרק זמן מסוים</string>
<string name="mi2_prefs_do_not_disturb_start">מועד ההתחלה</string>
<string name="mi2_prefs_do_not_disturb_end">מועד הסיום</string>
</resources>

View File

@ -45,7 +45,9 @@
<string name="fw_upgrade_notice">Il firmware %s verrà installato al posto di quello attualmente sulla Mi Band.</string>
<string name="fw_multi_upgrade_notice">Stai per installare i firmware %1$s e %2$s al posto di quelli al momento sulla tua Mi Band.</string>
<string name="miband_firmware_known">Questo firmware è stato testato ed è compatibile con Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">Questo firmware NON è stato testato e potrebbe non essere compatibile con Gadgetbridge.\n\nInstallarlo a proprio rischio sulla Mi Band.</string>
<string name="miband_firmware_unknown_warning">Questo firmware NON è stato testato e potrebbe non essere compatibile con Gadgetbridge.
\n
\nNON è raccomandato installarlo sulla Mi Band!</string>
<string name="miband_firmware_suggest_whitelist">Se hai intenzione di procedere e tutto continua a funzionare ti invitiamo a contattare gli sviluppatori e dire loro di aggiungere il firmware: %s a quelli testati</string>
<!--Strings related to Settings-->
<string name="title_activity_settings">Impostazioni</string>
@ -74,7 +76,7 @@
<string name="pref_title_notifications_generic">Notifiche generiche</string>
<string name="pref_title_whenscreenon">… anche se lo schermo è acceso</string>
<string name="pref_title_notification_filter">Non disturbare</string>
<string name="pref_summary_notification_filter">Non inviare notifiche nei periodi configurati come \"non disturbare\"</string>
<string name="pref_summary_notification_filter">Non inviare notifiche nei periodi configurati come \"non disturbare\".</string>
<string name="pref_title_transliteration">Traslitterazione</string>
<string name="pref_summary_transliteration">Abilita questa opzione se il tuo dispositivo non supporta tutti i caratteri della tua lingua</string>
<string name="always">sempre</string>

View File

@ -5,9 +5,10 @@
<string name="action_settings">設定</string>
<string name="action_debug">デバッグ</string>
<string name="action_quit">終了</string>
<string name="action_donate">寄付する</string>
<string name="controlcenter_fetch_activity_data">同期</string>
<string name="controlcenter_start_sleepmonitor">睡眠観測(アルファ)</string>
<string name="controlcenter_find_device">デバイスをバイブさせ</string>
<string name="controlcenter_find_device">失くしたデバイスを見つけ</string>
<string name="controlcenter_take_screenshot">スクリーンショットを撮る</string>
<string name="controlcenter_disconnect">切断</string>
<string name="controlcenter_delete_device">デバイスを削除</string>
@ -40,6 +41,8 @@
<string name="app_move_to_top">先頭に移動</string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">ステータス通知ブラックリスト</string>
<!--Strings related to CalBlacklist-->
<string name="title_activity_calblacklist">ブラックリストにしたカレンダー</string>
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">ファームウェア・アプリのインストール</string>
<string name="fw_upgrade_notice">お使いのMi Bandに、現在のファームウェアの代わりに%sをインストールしようとしています。</string>
@ -87,6 +90,7 @@
<string name="pref_call_privacy_mode_number">番号は非表示、名前は表示</string>
<string name="pref_call_privacy_mode_complete">名前と番号を非表示</string>
<string name="pref_blacklist">アップのブラックリスト</string>
<string name="pref_blacklist_calendars">ブラックリストのカレンダー</string>
<string name="pref_header_cannned_messages">定型のメッセージ</string>
<string name="pref_title_canned_replies">返信</string>
<string name="pref_title_canned_reply_suffix">共通の接尾語</string>

View File

@ -34,6 +34,7 @@
<string name="app_move_to_top">Mover para o topo</string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">Blacklist de notificações</string>
<!--Strings related to CalBlacklist-->
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">Instalador FW/App</string>
<string name="fw_upgrade_notice">Você está prestes a instalar o firmware %s no lugar do atual em sua Mi Band.</string>
@ -70,7 +71,7 @@
<string name="pref_title_notification_filter">Não perturbe</string>
<string name="pref_summary_notification_filter">Parar com notificações indesejadas enquanto estiver no modo Não Perturbe.</string>
<string name="pref_title_transliteration">Representação</string>
<string name="pref_summary_transliteration">Ativar isso se o dispositivo não tiver suporte para seu idioma (Atualmente Cirílico apenas)</string>
<string name="pref_summary_transliteration">Ativar isso se o dispositivo não tiver suporte para seu idioma</string>
<string name="always">sempre</string>
<string name="when_screen_off">quando a tela estiver desligada</string>
<string name="never">nunca</string>

View File

@ -40,6 +40,7 @@
<string name="app_move_to_top">Переместить наверх</string>
<!--Strings related to AppBlacklist-->
<string name="title_activity_appblacklist">Заблокированные уведомления</string>
<!--Strings related to CalBlacklist-->
<!--Strings related to FwAppInstaller-->
<string name="title_activity_fw_app_insaller">Установщик прошивки/приложений</string>
<string name="fw_upgrade_notice">Вы собираетесь установить прошивку %s заместо текущей на вашем Mi Band.</string>
@ -76,8 +77,8 @@
<string name="pref_title_notification_filter">Не беспокоить</string>
<string name="pref_summary_notification_filter">Предотвращать отправку нежелательных уведомлений в режиме \"Не беспокоить\"</string>
<string name="pref_title_transliteration">Транслитерация</string>
<string name="pref_summary_transliteration">Включите эту функцию, если ваше устройство не имеет поддержки шрифта на вашем языке (в настоящее время только на Кириллице)</string>
<string name="always">всегда</string>
<string name="pref_summary_transliteration">Включите эту функцию, если ваше устройство не имеет поддержки шрифта на вашем языке</string>
<string name="when_screen_off">когда экран выключен</string>
<string name="never">никогда</string>
<string name="pref_header_privacy">Конфиденциальность</string>
@ -106,6 +107,8 @@
<string name="pref_summary_enable_pebblekit">Добавить экспериментальную поддержку приложений Android, использующих PebbleKit</string>
<string name="pref_title_sunrise_sunset">Восход и закат солнца</string>
<string name="pref_summary_sunrise_sunset">Показывать время восхода и захода солнца в зависимости от местоположения на временной шкале pebble</string>
<string name="pref_title_enable_calendar_sync">Синхронизация календаря</string>
<string name="pref_summary_enable_calendar_sync">Отображать события календаря на временной шкале pebble</string>
<string name="pref_title_autoremove_notifications">Автоматическое удаление отклонённых уведомлений</string>
<string name="pref_summary_autoremove_notifications">Уведомления автоматически будут удалены из Pebble, при удалении с устройства Android</string>
<string name="pref_title_pebble_privacy_mode">Режим конфиденциальности</string>

View File

@ -9,7 +9,7 @@
<string name="action_donate">Donate</string>
<string name="controlcenter_fetch_activity_data">Synchronize</string>
<string name="controlcenter_start_sleepmonitor">Sleep Monitor (ALPHA)</string>
<string name="controlcenter_find_device">Find lost Device</string>
<string name="controlcenter_find_device">Find lost Device</string>
<string name="controlcenter_take_screenshot">Take Screenshot</string>
<string name="controlcenter_disconnect">Disconnect</string>
<string name="controlcenter_delete_device">Delete Device</string>
@ -45,7 +45,7 @@
<string name="app_move_to_top">Move to top</string>
<!-- Strings related to AppBlacklist -->
<string name="title_activity_appblacklist">Notification Blacklist</string>
<string name="title_activity_appblacklist">Notification blacklist</string>
<!-- Strings related to CalBlacklist -->
<string name="title_activity_calblacklist">Blacklisted Calendars</string>
@ -53,6 +53,7 @@
<!-- Strings related to FwAppInstaller -->
<string name="title_activity_fw_app_insaller">FW/App installer</string>
<string name="fw_upgrade_notice">You are about to install firmware %s instead of the one currently on your Mi Band.</string>
<string name="fw_upgrade_notice_amazfitbip">You are about to install firmware %s instead of the one currently on your Amazfit Bip.\n\nPlease make sure to install the .gps firmware, then the .res file, and finally the .fw file. Your watch will reboot after installing the .fw file.\n\nNote: You do not have to install .res and .gps if these files are exactly the same as the ones previously installed.\n\nEXPERIMENTAL, PROCEED AT YOUR OWN RISK</string>
<string name="fw_multi_upgrade_notice">You are about to install firmwares %1$s and %2$s instead of the ones currently on your Mi Band.</string>
<string name="miband_firmware_known">This firmware has been tested and is known to be compatible with Gadgetbridge.</string>
<string name="miband_firmware_unknown_warning">"This firmware is untested and may not be compatible with Gadgetbridge.\n\nYou are NOT encouraged to flash it to your Mi Band!"</string>
@ -61,7 +62,7 @@
<!-- Strings related to Settings -->
<string name="title_activity_settings">Settings</string>
<string name="pref_header_general">General Settings</string>
<string name="pref_header_general">General settings</string>
<string name="pref_title_general_autoconnectonbluetooth">Connect to device when Bluetooth turned on</string>
<string name="pref_title_general_autostartonboot">Start automatically</string>
<string name="pref_title_general_autocreonnect">Reconnect automatically</string>
@ -87,20 +88,20 @@
<string name="pref_title_notifications_call">Phone Calls</string>
<string name="pref_title_notifications_sms">SMS</string>
<string name="pref_title_notifications_pebblemsg">Pebble Messages</string>
<string name="pref_summary_notifications_pebblemsg">Support for applications which send Notifications to the Pebble via PebbleKit.</string>
<string name="pref_summary_notifications_pebblemsg">Support for applications which send notifications to the Pebble via PebbleKit.</string>
<string name="pref_title_notifications_generic">Generic notification support</string>
<string name="pref_title_whenscreenon"> also when screen is on</string>
<string name="pref_title_whenscreenon">…also when screen is on</string>
<string name="pref_title_notification_filter">Do Not Disturb</string>
<string name="pref_summary_notification_filter">Stop unwanted Notifications from being sent based on the Do Not Disturb mode.</string>
<string name="pref_title_transliteration">Transliteration</string>
<string name="pref_summary_transliteration">Enable this if your device has no support for your language\'s font</string>
<string name="always">always</string>
<string name="when_screen_off">when screen is off</string>
<string name="never">never</string>
<string name="always">Always</string>
<string name="when_screen_off">When screen is off</string>
<string name="never">Never</string>
<string name="pref_header_privacy">Privacy</string>
<string name="pref_title_call_privacy_mode">Call Privacy Mode</string>
<string name="pref_title_call_privacy_mode">Call privacy mode</string>
<string name="pref_call_privacy_mode_off">Display name and number</string>
<string name="pref_call_privacy_mode_name">Hide name but display number</string>
<string name="pref_call_privacy_mode_number">Hide number but display name</string>
@ -110,19 +111,19 @@
<string name="pref_blacklist">Blacklist Apps</string>
<string name="pref_blacklist_calendars">Blacklist Calendars</string>
<string name="pref_header_cannned_messages">Canned Messages</string>
<string name="pref_header_cannned_messages">Canned messages</string>
<string name="pref_title_canned_replies">Replies</string>
<string name="pref_title_canned_reply_suffix">Common suffix</string>
<string name="pref_title_canned_messages_dismisscall">Call Dismissal</string>
<string name="pref_title_canned_messages_set">Update on Pebble</string>
<string name="pref_header_development">Developer Options</string>
<string name="pref_header_development">Developer options</string>
<string name="pref_title_development_miaddr">Mi Band address</string>
<string name="pref_title_pebble_settings">Pebble Settings</string>
<string name="pref_title_pebble_settings">Pebble settings</string>
<string name="pref_header_activitytrackers">Activity Trackers</string>
<string name="pref_title_pebble_activitytracker">Preferred Activitytracker</string>
<string name="pref_header_activitytrackers">Activity trackers</string>
<string name="pref_title_pebble_activitytracker">Preferred activity tracker</string>
<string name="pref_title_pebble_sync_health">Sync Pebble Health</string>
<string name="pref_title_pebble_sync_misfit">Sync Misfit</string>
<string name="pref_title_pebble_sync_morpheuz">Sync Morpheuz</string>
@ -130,16 +131,16 @@
<string name="pref_title_enable_outgoing_call">Support outgoing calls</string>
<string name="pref_summary_enable_outgoing_call">Disabling this will also stop the Pebble 2/LE to vibrate on outgoing calls</string>
<string name="pref_title_enable_pebblekit">Allow 3rd Party Android App Access</string>
<string name="pref_title_enable_pebblekit">Allow 3rd party Android App access</string>
<string name="pref_summary_enable_pebblekit">Enable experimental support for Android Apps using PebbleKit</string>
<string name="pref_header_pebble_timeline">Pebble Timeline</string>
<string name="pref_title_sunrise_sunset">Sunrise and Sunset</string>
<string name="pref_summary_sunrise_sunset">Send sunrise and sunset times based on the location to the pebble timeline</string>
<string name="pref_title_enable_calendar_sync">Sync Calendar</string>
<string name="pref_header_pebble_timeline">Pebble timeline</string>
<string name="pref_title_sunrise_sunset">Sunrise and sunset</string>
<string name="pref_summary_sunrise_sunset">Send sunrise and sunset times based on the location to the Pebble timeline</string>
<string name="pref_title_enable_calendar_sync">Sync calendar</string>
<string name="pref_summary_enable_calendar_sync">Send calendar events to the timeline</string>
<string name="pref_title_autoremove_notifications">Autoremove dismissed Notifications</string>
<string name="pref_title_autoremove_notifications">Autoremove dismissed notifications</string>
<string name="pref_summary_autoremove_notifications">Notifications are automatically removed from the Pebble when dismissed from the Android device</string>
<string name="pref_title_pebble_privacy_mode">Privacy mode</string>
@ -148,7 +149,7 @@
<string name="pref_pebble_privacy_mode_complete">Show only the notification icon</string>
<string name="pref_header_location">Location</string>
<string name="pref_title_location_aquire">Acquire Location</string>
<string name="pref_title_location_aquire">Acquire location</string>
<string name="pref_title_location_latitude">Latitude</string>
<string name="pref_title_location_longitude">Longitude</string>
<string name="pref_title_location_keep_uptodate">Keep location updated</string>
@ -165,84 +166,84 @@
<string name="pref_summary_pebble_forcele">Use experimental Pebble LE support for all Pebbles instead of BT classic, requires paring a "Pebble LE" after non LE had been connected once</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU limit</string>
<string name="pref_summary_pebble_mtu_limit">If your Pebble 2/Pebble LE does not work as expected, try this setting to limit the MTU (valid range 20512)</string>
<string name="pref_title_pebble_enable_applogs">Enable Watch App Logging</string>
<string name="pref_title_pebble_enable_applogs">Enable watch App logging</string>
<string name="pref_summary_pebble_enable_applogs">Will cause logs from watch apps to be logged by Gadgetbridge (requires reconnect)</string>
<string name="pref_title_pebble_always_ack_pebblekit">Prematurely ACK PebbleKit</string>
<string name="pref_summary_pebble_always_ack_pebblekit">Will cause messages that are sent to external 3rd party apps to be acknowledged always and immediately</string>
<string name="pref_title_pebble_reconnect_attempts">Reconnection Attempts</string>
<string name="pref_title_pebble_reconnect_attempts">Reconnection attempts</string>
//HPlus Preferences
<!-- HPlus Preferences -->
<string name="pref_title_unit_system">Units</string>
<string name="pref_title_timeformat">Time format</string>
<string name="pref_title_screentime">Screen on duration</string>
<string name="prefs_title_all_day_heart_rate">All day heart rate measurement</string>
<string name="preferences_hplus_settings">HPlus/Makibes Settings</string>
<string name="preferences_hplus_settings">HPlus/Makibes settings</string>
<string name="not_connected">not connected</string>
<string name="connecting">connecting</string>
<string name="connected">connected</string>
<string name="unknown_state">unknown state</string>
<string name="not_connected">Not connected</string>
<string name="connecting">Connecting</string>
<string name="connected">Connected</string>
<string name="unknown_state">Unknown state</string>
<string name="connectionstate_hw_fw">HW: %1$s FW: %2$s</string>
<string name="connectionstate_fw">FW: %1$s</string>
<string name="connectionstate_fw">Firmware version: %1$s</string>
<string name="_unknown_">(unknown)</string>
<string name="test">Test</string>
<string name="test_notification">Test Notification</string>
<string name="this_is_a_test_notification_from_gadgetbridge">This is a Test Notification from Gadgetbridge</string>
<string name="test_notification">Test notification</string>
<string name="this_is_a_test_notification_from_gadgetbridge">This is a test notification from Gadgetbridge</string>
<string name="bluetooth_is_not_supported_">Bluetooth is not supported.</string>
<string name="bluetooth_is_disabled_">Bluetooth is disabled.</string>
<string name="tap_connected_device_for_app_mananger">Tap connected device for App Manager</string>
<string name="tap_connected_device_for_activity">Tap connected device for Activity</string>
<string name="tap_connected_device_for_vibration">Tap connected device for Vibration</string>
<string name="tap_connected_device_for_app_mananger">Tap connected device for App manager</string>
<string name="tap_connected_device_for_activity">Tap connected device for activity</string>
<string name="tap_connected_device_for_vibration">Tap connected device for vibration</string>
<string name="tap_a_device_to_connect">Tap a device to connect</string>
<string name="cannot_connect_bt_address_invalid_">Cannot connect. BT address invalid?</string>
<string name="cannot_connect_bt_address_invalid_">Cannot connect. Bluetooth address invalid?</string>
<string name="gadgetbridge_running">Gadgetbridge running</string>
<string name="installing_binary_d_d">installing binary %1$d/%2$d</string>
<string name="installation_failed_">installation failed!</string>
<string name="installation_successful">installation successful</string>
<string name="installing_binary_d_d">Installing binary %1$d/%2$d</string>
<string name="installation_failed_">Installation failed</string>
<string name="installation_successful">Installation successful</string>
<string name="firmware_install_warning">YOU ARE TRYING TO INSTALL A FIRMWARE, PROCEED AT YOUR OWN RISK.\n\n\n This firmware is for HW Revision: %s</string>
<string name="app_install_info">You are about to install the following app:\n\n\n%1$s Version %2$s by %3$s\n</string>
<string name="n_a">N/A</string>
<string name="initialized">initialized</string>
<string name="appversion_by_creator">%1$s by %2$s</string>
<string name="title_activity_discovery">Device Discovery</string>
<string name="title_activity_discovery">Device discovery</string>
<string name="discovery_stop_scanning">Stop Scanning</string>
<string name="discovery_start_scanning">Start Discovery</string>
<string name="action_discover">Connect new Device</string>
<string name="discovery_stop_scanning">Stop scanning</string>
<string name="discovery_start_scanning">Start discovery</string>
<string name="action_discover">Connect new device</string>
<string name="device_with_rssi">%1$s (%2$s)</string>
<string name="title_activity_android_pairing">Pair Device</string>
<string name="android_pairing_hint">Use the Android Bluetooth Pairing dialog to pair the device.</string>
<string name="title_activity_android_pairing">Pair device</string>
<string name="android_pairing_hint">Use the Android Bluetooth pairing dialog to pair the device.</string>
<string name="title_activity_mi_band_pairing">Pair your Mi Band</string>
<string name="pairing">Pairing with %s…</string>
<string name="pairing_creating_bond_with">"Creating bond with %1$s (%2$s)"</string>
<string name="pairing_unable_to_pair_with">"Unable to pair with %1$s (%2$s)"</string>
<string name="pairing_in_progress">Bonding in progress: %1$s (%2$s)</string>
<string name="pairing_already_bonded">"Already bonded with %1$s (%2$s), connecting…"</string>
<string name="message_cannot_pair_no_mac">No mac address passed, cannot pair.</string>
<string name="preferences_category_device_specific_settings">Device Specific Settings</string>
<string name="preferences_miband_settings">Mi Band Settings</string>
<string name="male">male</string>
<string name="female">female</string>
<string name="other">other</string>
<string name="left">left</string>
<string name="right">right</string>
<string name="message_cannot_pair_no_mac">No MAC address passed, cannot pair.</string>
<string name="preferences_category_device_specific_settings">Device specific settings</string>
<string name="preferences_miband_settings">Mi Band / Bip settings</string>
<string name="male">Male</string>
<string name="female">Female</string>
<string name="other">Other</string>
<string name="left">Left</string>
<string name="right">Right</string>
<string name="miband_pairing_using_dummy_userdata">No valid user data given, using dummy user data for now.</string>
<string name="miband_pairing_tap_hint">When your Mi Band vibrates and blinks, tap it a few times in a row.</string>
<string name="appinstaller_install">Install</string>
<string name="discovery_connected_devices_hint">Make your device discoverable. Currently connected devices will likely not be discovered. Activate location (e.g. GPS) on Android 6+. Disable Privacy Guard for Gadgetbridge, because it may crash and reboot your phone. If no device is found after a few minutes, try again after rebooting your mobile device.</string>
<string name="discovery_note">Note:</string>
<string name="candidate_item_device_image">Device Image</string>
<string name="candidate_item_device_image">Device image</string>
<string name="miband_prefs_alias">Name/Alias</string>
<string name="pref_header_vibration_count">Vibration Count</string>
<string name="pref_header_vibration_count">Vibration count</string>
<string name="title_activity_sleepmonitor">Sleep Monitor</string>
<string name="pref_write_logfiles">Write Log Files</string>
<string name="initializing">initializing</string>
<string name="busy_task_fetch_activity_data">Fetching Activity Data</string>
<string name="title_activity_sleepmonitor">Sleep monitor</string>
<string name="pref_write_logfiles">Write log files</string>
<string name="initializing">Initializing</string>
<string name="busy_task_fetch_activity_data">Fetching activity data</string>
<string name="sleep_activity_date_range">From %1$s to %2$s</string>
<string name="miband_prefs_wearside">Wearing left or right?</string>
<string name="pref_screen_vibration_profile">Vibration Profile</string>
<string name="pref_screen_vibration_profile">Vibration profile</string>
<string name="vibration_profile_staccato">Staccato</string>
<string name="vibration_profile_short">Short</string>
@ -250,29 +251,29 @@
<string name="vibration_profile_long">Long</string>
<string name="vibration_profile_waterdrop">Waterdrop</string>
<string name="vibration_profile_ring">Ring</string>
<string name="vibration_profile_alarm_clock">Alarm Clock</string>
<string name="vibration_profile_alarm_clock">Alarm clock</string>
<string name="miband_prefs_vibration">Vibration</string>
<string name="vibration_try">Try</string>
<string name="pref_screen_notification_profile_sms">SMS Notification</string>
<string name="pref_header_vibration_settings">Vibration Settings</string>
<string name="pref_screen_notification_profile_generic">Generic Notification</string>
<string name="pref_screen_notification_profile_email">Email Notification</string>
<string name="pref_screen_notification_profile_incoming_call">Incoming Call Notification</string>
<string name="pref_screen_notification_profile_sms">SMS notification</string>
<string name="pref_header_vibration_settings">Vibration settings</string>
<string name="pref_screen_notification_profile_generic">Generic notification</string>
<string name="pref_screen_notification_profile_email">Email notification</string>
<string name="pref_screen_notification_profile_incoming_call">Incoming call notification</string>
<string name="pref_screen_notification_profile_generic_chat">Chat</string>
<string name="pref_screen_notification_profile_generic_navigation">Navigation</string>
<string name="pref_screen_notification_profile_generic_social">Social Network</string>
<string name="pref_screen_notification_profile_generic_social">Social network</string>
<string name="stats_title">Speed Zones</string>
<string name="stats_title">Speed zones</string>
<string name="stats_x_axis_label">Total minutes</string>
<string name="stats_y_axis_label">Steps per minute</string>
<string name="control_center_find_lost_device">Find lost Device</string>
<string name="control_center_find_lost_device">Find lost device</string>
<string name="control_center_cancel_to_stop_vibration">Cancel to stop vibration.</string>
<string name="title_activity_charts">Your Activity</string>
<string name="title_activity_set_alarm">Configure Alarms</string>
<string name="title_activity_charts">Your activity</string>
<string name="title_activity_set_alarm">Configure alarms</string>
<string name="controlcenter_start_configure_alarms">Configure alarms</string>
<string name="title_activity_alarm_details">Alarm Details</string>
<string name="title_activity_alarm_details">Alarm details</string>
<string name="alarm_sun_short">Sun</string>
<string name="alarm_mon_short">Mon</string>
<string name="alarm_tue_short">Tue</string>
@ -280,14 +281,14 @@
<string name="alarm_thu_short">Thu</string>
<string name="alarm_fri_short">Fri</string>
<string name="alarm_sat_short">Sat</string>
<string name="alarm_smart_wakeup">smart wakeup</string>
<string name="alarm_smart_wakeup">Smart wakeup</string>
<string name="user_feedback_miband_set_alarms_failed">There was an error setting the alarms, please try again!</string>
<string name="user_feedback_miband_set_alarms_ok">Alarms sent to device!</string>
<string name="chart_no_data_synchronize">No data. Synchronize device?</string>
<string name="user_feedback_miband_activity_data_transfer">About to transfer %1$s of data starting from %2$s</string>
<string name="miband_prefs_fitness_goal">Target steps for each day</string>
<string name="dbaccess_error_executing">Error executing \'%1$s\'</string>
<string name="controlcenter_start_activitymonitor">Your Activity (ALPHA)</string>
<string name="controlcenter_start_activitymonitor">Your activity (ALPHA)</string>
<string name="cannot_connect">Cannot connect: %1$s</string>
<string name="installer_activity_unable_to_find_handler">Unable to find a handler to install this file.</string>
<string name="pbw_install_handler_unable_to_install">Unable to install the given file: %1$s</string>
@ -297,14 +298,15 @@
<string name="notif_battery_low_percent">%1$s battery left: %2$s%%</string>
<string name="notif_battery_low_bigtext_last_charge_time">Last charge: %s \n</string>
<string name="notif_battery_low_bigtext_number_of_charges">Number of charges: %s</string>
<string name="sleepchart_your_sleep">Your Sleep</string>
<string name="sleepchart_your_sleep">Your sleep</string>
<string name="weeksleepchart_sleep_a_week">Sleep a week</string>
<string name="weeksleepchart_today_sleep_description">Sleep today, target: %1$s</string>
<string name="weekstepschart_steps_a_week">Steps a week</string>
<string name="activity_sleepchart_activity_and_sleep">Your Activity and Sleep</string>
<string name="activity_sleepchart_activity_and_sleep">Your activity and sleep</string>
<string name="updating_firmware">Updating Firmware…</string>
<string name="fwapp_install_device_not_ready">File cannot be installed, device not ready.</string>
<string name="miband_installhandler_miband_firmware">Mi Band Firmware %1$s</string>
<string name="amazfitbip_firmware">Amazfit Bip Firmware %1$s</string>
<string name="miband_fwinstaller_compatible_version">Compatible version</string>
<string name="miband_fwinstaller_untested_version">Untested version!</string>
<string name="fwappinstaller_connection_state">Connection to device: %1$s</string>
@ -321,36 +323,36 @@
<string name="calories">Calories</string>
<string name="distance">Distance</string>
<string name="clock">Clock</string>
<string name="heart_rate">Heart Rate</string>
<string name="heart_rate">Heart rate</string>
<string name="battery">Battery</string>
<string name="liveactivity_live_activity">Live Activity</string>
<string name="liveactivity_live_activity">Live activity</string>
<string name="weeksteps_today_steps_description">Steps today, target: %1$s</string>
<string name="pref_title_dont_ack_transfer">Do not ack activity data transfer</string>
<string name="pref_summary_dont_ack_transfers">If the activity data are not acked to the band, they will not be cleared. Useful if GB is used together with other apps.</string>
<string name="pref_summary_keep_data_on_device">Will keep activity data on the Mi Band even after synchronization. Useful if GB is used together with other apps.</string>
<string name="pref_title_low_latency_fw_update">Use low-latency mode for FW updates</string>
<string name="pref_title_low_latency_fw_update">Use low-latency mode for Firmware updates</string>
<string name="pref_summary_low_latency_fw_update">This might help on devices where firmware updates fail</string>
<string name="live_activity_steps_history">Steps History</string>
<string name="live_activity_steps_history">Steps history</string>
<string name="live_activity_current_steps_per_minute">Current steps/min</string>
<string name="live_activity_total_steps">Total Steps</string>
<string name="live_activity_total_steps">Total steps</string>
<string name="live_activity_steps_per_minute_history">Steps per minute history</string>
<string name="live_activity_start_your_activity">Start your activity</string>
<string name="abstract_chart_fragment_kind_activity">Activity</string>
<string name="abstract_chart_fragment_kind_light_sleep">Light Sleep</string>
<string name="abstract_chart_fragment_kind_deep_sleep">Deep Sleep</string>
<string name="abstract_chart_fragment_kind_not_worn">Not Worn</string>
<string name="abstract_chart_fragment_kind_light_sleep">Light sleep</string>
<string name="abstract_chart_fragment_kind_deep_sleep">Deep sleep</string>
<string name="abstract_chart_fragment_kind_not_worn">Not worn</string>
<string name="device_not_connected">Not connected.</string>
<string name="user_feedback_all_alarms_disabled">All alarms disabled</string>
<string name="pref_title_keep_data_on_device">Keep activity data on device</string>
<string name="miband_fwinstaller_incompatible_version">Incompatible firmware</string>
<string name="fwinstaller_firmware_not_compatible_to_device">This firmware is not compatible with the device</string>
<string name="miband_prefs_reserve_alarm_calendar">Alarms to reserve for upcoming events</string>
<string name="miband_prefs_hr_sleep_detection">Use Heartrate Sensor to improve sleep detection</string>
<string name="miband_prefs_hr_sleep_detection">Use heart rate sensor to improve sleep detection</string>
<string name="miband_prefs_device_time_offset_hours">Device time offset in hours (for detecting sleep of shift workers)</string>
<string name="miband2_prefs_dateformat">Mi2: Date Format</string>
<string name="miband2_prefs_dateformat">Mi2: Date format</string>
<string name="dateformat_time">Time</string>
<string name="dateformat_date_time"><![CDATA[Time & Date]]></string>
<string name="dateformat_date_time"><![CDATA[Time & date]]></string>
<string name="mi2_prefs_goal_notification">Goal notification</string>
<string name="mi2_prefs_goal_notification_summary">The band will vibrate when the daily steps goal is reached</string>
<string name="mi2_prefs_display_items">Display items</string>
@ -367,36 +369,36 @@
<string name="mi2_prefs_do_not_disturb_end">End time</string>
<string name="FetchActivityOperation_about_to_transfer_since">About to transfer data since %1$s</string>
<string name="waiting_for_reconnect">waiting for reconnect</string>
<string name="waiting_for_reconnect">Waiting for reconnect</string>
<string name="activity_prefs_about_you">About You</string>
<string name="activity_prefs_year_birth">Year of Birth</string>
<string name="activity_prefs_about_you">About you</string>
<string name="activity_prefs_year_birth">Year of birth</string>
<string name="activity_prefs_gender">Gender</string>
<string name="activity_prefs_height_cm">Height in cm</string>
<string name="activity_prefs_weight_kg">Weight in kg</string>
<string name="authenticating">authenticating</string>
<string name="authentication_required">authentication required</string>
<string name="authenticating">Authenticating</string>
<string name="authentication_required">Authentication required</string>
<string name="appwidget_text">Zzz</string>
<string name="add_widget">Add widget</string>
<string name="activity_prefs_sleep_duration">Preferred sleep duration in hours</string>
<string name="appwidget_alarms_set">An alarm was set for %1$02d:%2$02d</string>
<string name="device_hw">HW: %1$s</string>
<string name="device_fw">FW: %1$s</string>
<string name="device_hw">Hardware revision: %1$s</string>
<string name="device_fw">Firmware version: %1$s</string>
<string name="error_creating_directory_for_logfiles">Error creating directory for log files: %1$s</string>
<string name="DEVINFO_HR_VER">"HR: "</string>
<string name="updatefirmwareoperation_update_in_progress">Firmware update in progress</string>
<string name="updatefirmwareoperation_firmware_not_sent">Firmware not sent</string>
<string name="charts_legend_heartrate">Heart Rate</string>
<string name="live_activity_heart_rate">Heart Rate</string>
<string name="charts_legend_heartrate">Heart rate</string>
<string name="live_activity_heart_rate">Heart rate</string>
<string name="pref_title_pebble_health_store_raw">Store raw record in the database</string>
<string name="pref_summary_pebble_health_store_raw">If checked the data is stored \"as is\" and is available for later interpretation. NB: the database will be bigger in this case!</string>
<string name="action_db_management">Database Management</string>
<string name="title_activity_db_management">Database Management</string>
<string name="action_db_management">Database management</string>
<string name="title_activity_db_management">Database management</string>
<string name="activity_db_management_import_export_explanation">The database operations use the following path on your device. \nThis path is accessible to other Android applications and your computer. \nExpect to find your exported database (or place the database you want to import) there:</string>
<string name="activity_db_management_merge_old_title">Legacy Database Delete</string>
<string name="activity_db_management_merge_old_title">Legacy database delete</string>
<string name="dbmanagementactivvity_cannot_access_export_path">Cannot access export path. Please contact the developers.</string>
<string name="dbmanagementactivity_exported_to">Exported to: %1$s</string>
<string name="dbmanagementactivity_error_exporting_db">"Error exporting DB: %1$s"</string>
@ -422,8 +424,8 @@
<string name="title_activity_vibration">Vibration</string>
<!-- Strings related to Pebble Pairing Activity-->
<string name="title_activity_pebble_pairing">Pebble Pairing</string>
<string name="pebble_pairing_hint">A pairing dialog is expected to pop up on your Android device. If that does not happen, look in the notification drawer and accept the pairing request. After that accept the pairing request on your Pebble</string>
<string name="title_activity_pebble_pairing">Pebble pairing</string>
<string name="pebble_pairing_hint">A pairing dialog is expected to pop-up on your Android device. If that does not happen, look in the notification drawer and accept the pairing request. After that accept the pairing request on your Pebble</string>
<string name="weather_notification_label">Make sure that this skin is enabled in the Weather Notification app to get weather information on your Pebble.\n\nNo configuration is needed here.\n\nYou can enable the system weather app of your Pebble from the app management.\n\nSupported watchfaces will show the weather automatically.</string>
<string name="pref_title_setup_bt_pairing">Enable Bluetooth pairing</string>
@ -434,17 +436,18 @@
<string name="timeformat_24h">24H</string>
<string name="timeformat_am_pm">AM/PM</string>
<string name="pref_screen_notification_profile_alarm_clock">Alarm Clock</string>
<string name="pref_screen_notification_profile_alarm_clock">Alarm clock</string>
<string name="activity_web_view">Web View Activity</string>
<string name="StringUtils_sender"> (%1$s)</string>
<string name="find_device_you_found_it">You found it!</string>
<string name="miband2_prefs_timeformat">Mi2: Time Format</string>
<string name="miband2_prefs_timeformat">Mi2: Time format</string>
<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="off">off</string>
<string name="off">Off</string>
<string name="mi2_dnd_off">Off</string>
<string name="mi2_dnd_automatic">Automatic (sleep detection)</string>
<string name="mi2_dnd_scheduled">Scheduled (time interval)</string>

View File

@ -9,6 +9,9 @@
<item name="colorPrimaryDark">@color/primarydark_light</item>
<item name="colorAccent">@color/accent</item>
<item name="android:buttonStyle">@style/Widget.AppCompat.Button.Colored</item>
<item name="buttonStyle">@style/Widget.AppCompat.Button.Colored</item>
<item name="chart_deep_sleep">@color/chart_deep_sleep_light</item>
<item name="chart_light_sleep">@color/chart_light_sleep_light</item>
<item name="chart_activity">@color/chart_activity_light</item>
@ -30,12 +33,19 @@
<item name="colorPrimaryDark">@color/primarydark_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:buttonStyle">@style/ButtonDark</item>
<item name="buttonStyle">@style/ButtonDark</item>
<item name="chart_deep_sleep">@color/chart_deep_sleep_dark</item>
<item name="chart_light_sleep">@color/chart_light_sleep_dark</item>
<item name="chart_activity">@color/chart_activity_dark</item>
<item name="chart_not_worn">@color/chart_not_worn_dark</item>
</style>
<style name="ButtonDark" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@color/btn_dark</item>
</style>
<style name="GadgetbridgeThemeDark.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

View File

@ -1,5 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<changelog>
<release version="0.20.2" versioncode="100">
<change>Amazfit Bip: Various fixes regarding weather, add condition string support for FW 0.0.8.74</change>
<change>Amazfit Bip: enable caller display in later firmwares</change>
<change>Amazfit Bip: initial firmware update support (EXPERIMENTAL, AT YOUR OWN RISK)</change>
<change>Re-enable improved speed zones tab</change>
<change>Probably fix crash with certain music players</change>
<change>Improve theme and add changelog icon</change>
</release>
<release version="0.20.1" versioncode="99">
<change>Amazfit Bip: Support icons and text body for notifications</change>
<change>Mi Band: Fix setting smart alarms</change>

View File

@ -0,0 +1,6 @@
* Amazfit Bip: Various fixes regarding weather, add condition string support for FW 0.0.8.74
* Amazfit Bip: enable caller display in later firmwares
* Amazfit Bip: initial firmware update support (EXPERIMENTAL, AT YOUR OWN RISK)
* Re-enable improved speed zones tab
* Probably fix crash with certain music players
* Improve theme and add changelog icon