1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2025-02-25 00:39:01 +01:00

Merge branch 'master' into background-javascript

This commit is contained in:
Daniele Gobbetti 2017-08-18 12:15:01 +02:00
commit d00b5a5d5d
44 changed files with 823 additions and 193 deletions

View File

@ -1,4 +1,16 @@
### Changelog
#### Version 0.20.0 (next)
* Inital Amazfit Bip support (WIP)
* Various theming fixes
* Add workaround for blacklist not properly persisting
* Handle resetting language to default properly
* Pebble: Pass booleans from Javascript Appmessage correctly
* Pebble: Make local configuration pages work on most recent webview implementation
* Pebble: Allow to blacklist calendars
* Add greek transliteration support
* Various visual improvements to charts
#### Version 0.19.4
* Replace or relicense CC-NC licensed icons to satisfy F-Droid
* Mi Band 2: Make infos to display on the Band configurable

View File

@ -26,8 +26,8 @@ android {
targetSdkVersion 25
// note: always bump BOTH versionCode and versionName!
versionName "0.19.4"
versionCode 97
versionName "0.20.0"
versionCode 98
vectorDrawables.useSupportLibrary = true
}
buildTypes {

View File

@ -63,6 +63,10 @@
android:name=".activities.AppBlacklistActivity"
android:label="@string/title_activity_appblacklist"
android:parentActivityName=".activities.SettingsActivity" />
<activity
android:name=".activities.CalBlacklistActivity"
android:label="@string/title_activity_calblacklist"
android:parentActivityName=".activities.SettingsActivity" />
<activity
android:name=".activities.FwAppInstallerActivity"
android:label="@string/title_activity_fw_app_insaller"

View File

@ -9,6 +9,18 @@
<script type="text/javascript">
</script>
<style>
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
iframe {
display: block;
width: 100%;
height: 100%;
border: none;
}
body {
-webkit-user-select: none;
-moz-user-select: none;

View File

@ -75,6 +75,13 @@ function showStep(desiredStep) {
}
}
function hideSteps() {
var steps = document.getElementsByClassName("step");
for (var i = 0; i < steps.length; i ++) {
steps[i].style.display = 'none';
}
}
function gbPebble() {
this.configurationURL = null;
this.configurationValues = null;
@ -159,7 +166,18 @@ function gbPebble() {
self.configurationURL = new Uri(url).addQueryParam("return_to", "gadgetbridge://"+UUID+"?config=true&json=");
} else {
//TODO: add custom return_to
location.href = url;
var iframe = document.getElementsByTagName('iframe')[0];
var oldbody = document.getElementsByTagName("body")[0];
if (iframe === undefined && oldbody !== undefined) {
iframe = document.createElement("iframe");
oldbody.parentNode.replaceChild(iframe,oldbody);
} else {
hideSteps();
document.documentElement.appendChild(iframe);
}
iframe.src = url;
}
}

View File

@ -169,7 +169,8 @@ public class GBApplication extends Application {
createWebViewActivity();
deviceService = createDeviceService();
loadBlackList();
loadAppsBlackList();
loadCalendarsBlackList();
if (isRunningMarshmallowOrLater()) {
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
@ -353,56 +354,107 @@ public class GBApplication extends Application {
return NotificationManager.INTERRUPTION_FILTER_ALL;
}
private static HashSet<String> blacklist = null;
private static HashSet<String> apps_blacklist = null;
public static boolean isBlacklisted(String packageName) {
if (blacklist == null) {
GB.log("isBlacklisted: blacklisti is null!", GB.INFO, null);
public static boolean appIsBlacklisted(String packageName) {
if (apps_blacklist == null) {
GB.log("appIsBlacklisted: apps_blacklist is null!", GB.INFO, null);
}
return blacklist != null && blacklist.contains(packageName);
return apps_blacklist != null && apps_blacklist.contains(packageName);
}
public static void setBlackList(Set<String> packageNames) {
public static void setAppsBlackList(Set<String> packageNames) {
if (packageNames == null) {
GB.log("Set null blacklist", GB.INFO, null);
blacklist = new HashSet<>();
GB.log("Set null apps_blacklist", GB.INFO, null);
apps_blacklist = new HashSet<>();
} else {
blacklist = new HashSet<>(packageNames);
apps_blacklist = new HashSet<>(packageNames);
}
GB.log("New blacklist has " + blacklist.size() + " entries", GB.INFO, null);
saveBlackList();
GB.log("New apps_blacklist has " + apps_blacklist.size() + " entries", GB.INFO, null);
saveAppsBlackList();
}
private static void loadBlackList() {
GB.log("Loading blacklist", GB.INFO, null);
blacklist = (HashSet<String>) sharedPrefs.getStringSet(GBPrefs.PACKAGE_BLACKLIST, null);
if (blacklist == null) {
blacklist = new HashSet<>();
private static void loadAppsBlackList() {
GB.log("Loading apps_blacklist", GB.INFO, null);
apps_blacklist = (HashSet<String>) sharedPrefs.getStringSet(GBPrefs.PACKAGE_BLACKLIST, null);
if (apps_blacklist == null) {
apps_blacklist = new HashSet<>();
}
GB.log("Loaded blacklist has " + blacklist.size() + " entries", GB.INFO, null);
GB.log("Loaded apps_blacklist has " + apps_blacklist.size() + " entries", GB.INFO, null);
}
private static void saveBlackList() {
GB.log("Saving blacklist with " + blacklist.size() + " entries", GB.INFO, null);
private static void saveAppsBlackList() {
GB.log("Saving apps_blacklist with " + apps_blacklist.size() + " entries", GB.INFO, null);
SharedPreferences.Editor editor = sharedPrefs.edit();
if (blacklist.isEmpty()) {
if (apps_blacklist.isEmpty()) {
editor.putStringSet(GBPrefs.PACKAGE_BLACKLIST, null);
} else {
Prefs.putStringSet(editor, GBPrefs.PACKAGE_BLACKLIST, blacklist);
Prefs.putStringSet(editor, GBPrefs.PACKAGE_BLACKLIST, apps_blacklist);
}
editor.apply();
}
public static void addToBlacklist(String packageName) {
if (blacklist.add(packageName)) {
saveBlackList();
public static void addAppToBlacklist(String packageName) {
if (apps_blacklist.add(packageName)) {
saveAppsBlackList();
}
}
public static synchronized void removeFromBlacklist(String packageName) {
GB.log("Removing from blacklist: " + packageName, GB.INFO, null);
blacklist.remove(packageName);
saveBlackList();
public static synchronized void removeFromAppsBlacklist(String packageName) {
GB.log("Removing from apps_blacklist: " + packageName, GB.INFO, null);
apps_blacklist.remove(packageName);
saveAppsBlackList();
}
private static HashSet<String> calendars_blacklist = null;
public static boolean calendarIsBlacklisted(String calendarDisplayName) {
if (calendars_blacklist == null) {
GB.log("calendarIsBlacklisted: calendars_blacklist is null!", GB.INFO, null);
}
return calendars_blacklist != null && calendars_blacklist.contains(calendarDisplayName);
}
public static void setCalendarsBlackList(Set<String> calendarNames) {
if (calendarNames == null) {
GB.log("Set null apps_blacklist", GB.INFO, null);
calendars_blacklist = new HashSet<>();
} else {
calendars_blacklist = new HashSet<>(calendarNames);
}
GB.log("New calendars_blacklist has " + calendars_blacklist.size() + " entries", GB.INFO, null);
saveCalendarsBlackList();
}
public static void addCalendarToBlacklist(String calendarDisplayName) {
if (calendars_blacklist.add(calendarDisplayName)) {
saveCalendarsBlackList();
}
}
public static void removeFromCalendarBlacklist(String calendarDisplayName) {
calendars_blacklist.remove(calendarDisplayName);
saveCalendarsBlackList();
}
private static void loadCalendarsBlackList() {
GB.log("Loading calendars_blacklist", GB.INFO, null);
calendars_blacklist = (HashSet<String>) sharedPrefs.getStringSet(GBPrefs.CALENDAR_BLACKLIST, null);
if (calendars_blacklist == null) {
calendars_blacklist = new HashSet<>();
}
GB.log("Loaded calendars_blacklist has " + calendars_blacklist.size() + " entries", GB.INFO, null);
}
private static void saveCalendarsBlackList() {
GB.log("Saving calendars_blacklist with " + calendars_blacklist.size() + " entries", GB.INFO, null);
SharedPreferences.Editor editor = sharedPrefs.edit();
if (calendars_blacklist.isEmpty()) {
editor.putStringSet(GBPrefs.CALENDAR_BLACKLIST, null);
} else {
Prefs.putStringSet(editor, GBPrefs.CALENDAR_BLACKLIST, calendars_blacklist);
}
editor.apply();
}
/**

View File

@ -0,0 +1,152 @@
/* Copyright (C) 2017 Daniele Gobbetti
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.activities;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CalendarContract;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NavUtils;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
public class CalBlacklistActivity extends GBActivity {
private final String[] EVENT_PROJECTION = new String[]{
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
CalendarContract.Calendars.CALENDAR_COLOR
};
private ArrayList<Calendar> calendarsArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calblacklist);
ListView calListView = (ListView) findViewById(R.id.calListView);
final Uri uri = CalendarContract.Calendars.CONTENT_URI;
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
GB.toast(this, "Calendar permission not granted. Nothing to do.", Toast.LENGTH_SHORT, GB.WARN);
return;
}
try (Cursor cur = getContentResolver().query(uri, EVENT_PROJECTION, null, null, null)) {
calendarsArrayList = new ArrayList<>();
while (cur != null && cur.moveToNext()) {
calendarsArrayList.add(new Calendar(cur.getString(0), cur.getInt(1)));
}
}
ArrayAdapter<Calendar> calAdapter = new CalendarListAdapter(this, calendarsArrayList);
calListView.setAdapter(calAdapter);
calListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
Calendar item = calendarsArrayList.get(i);
CheckBox selected = (CheckBox) view.findViewById(R.id.item_checkbox);
toggleEntry(view);
if (selected.isChecked()) {
GBApplication.addCalendarToBlacklist(item.displayName);
} else {
GBApplication.removeFromCalendarBlacklist(item.displayName);
}
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
private void toggleEntry(View view) {
TextView name = (TextView) view.findViewById(R.id.calendar_name);
CheckBox checked = (CheckBox) view.findViewById(R.id.item_checkbox);
name.setPaintFlags(name.getPaintFlags() ^ Paint.STRIKE_THRU_TEXT_FLAG);
checked.toggle();
}
class Calendar {
private final String displayName;
private final int color;
public Calendar(String displayName, int color) {
this.displayName = displayName;
this.color = color;
}
}
private class CalendarListAdapter extends ArrayAdapter<Calendar> {
CalendarListAdapter(@NonNull Context context, @NonNull List<Calendar> calendars) {
super(context, 0, calendars);
}
@NonNull
@Override
public View getView(int position, @Nullable View view, @NonNull ViewGroup parent) {
Calendar item = getItem(position);
if (view == null) {
LayoutInflater inflater = (LayoutInflater) super.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_cal_blacklist, parent, false);
}
View color = view.findViewById(R.id.calendar_color);
TextView name = (TextView) view.findViewById(R.id.calendar_name);
CheckBox checked = (CheckBox) view.findViewById(R.id.item_checkbox);
if (GBApplication.calendarIsBlacklisted(item.displayName) && !checked.isChecked()) {
toggleEntry(view);
}
color.setBackgroundColor(item.color);
name.setText(item.displayName);
return view;
}
}
}

View File

@ -61,6 +61,8 @@ import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import static de.cketti.library.changelog.ChangeLog.DEFAULT_CSS;
//TODO: extend GBActivity, but it requires actionbar that is not available
public class ControlCenterv2 extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@ -195,7 +197,7 @@ public class ControlCenterv2 extends AppCompatActivity
checkAndRequestPermissions();
}
ChangeLog cl = new ChangeLog(this);
ChangeLog cl = createChangeLog();
if (cl.isFirstRun()) {
cl.getLogDialog().show();
}
@ -249,7 +251,7 @@ public class ControlCenterv2 extends AppCompatActivity
GBApplication.quit();
return true;
case R.id.external_changelog:
ChangeLog cl = new ChangeLog(this);
ChangeLog cl = createChangeLog();
cl.getFullLogDialog().show();
return true;
}
@ -257,6 +259,14 @@ public class ControlCenterv2 extends AppCompatActivity
return true;
}
private ChangeLog createChangeLog() {
String css = ChangeLog.DEFAULT_CSS;
css += "body { "
+ "color: " + AndroidUtils.getTextColorHex(getBaseContext()) + "; "
+ "background-color: " + AndroidUtils.getBackgroundColorHex(getBaseContext()) + ";" +
"}";
return new ChangeLog(this, css);
}
private void launchDiscoveryActivity() {
startActivity(new Intent(this, DiscoveryActivity.class));
}

View File

@ -97,6 +97,15 @@ public class SettingsActivity extends AbstractSettingsActivity {
}
});
pref = findPreference("pref_key_blacklist_calendars");
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
Intent enableIntent = new Intent(SettingsActivity.this, CalBlacklistActivity.class);
startActivity(enableIntent);
return true;
}
});
pref = findPreference("pebble_emu_addr");
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override

View File

@ -62,7 +62,7 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
if (name == null) {
name = ai.packageName;
}
if (GBApplication.isBlacklisted(ai.packageName)) {
if (GBApplication.appIsBlacklisted(ai.packageName)) {
// sort blacklisted first by prefixing with a '!'
name = "!" + name;
}
@ -94,7 +94,7 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
holder.deviceAppNameLabel.setText(mNameMap.get(appInfo));
holder.deviceImageView.setImageDrawable(appInfo.loadIcon(mPm));
holder.checkbox.setChecked(GBApplication.isBlacklisted(appInfo.packageName));
holder.checkbox.setChecked(GBApplication.appIsBlacklisted(appInfo.packageName));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
@ -102,9 +102,9 @@ public class AppBlacklistAdapter extends RecyclerView.Adapter<AppBlacklistAdapte
CheckBox checkBox = ((CheckBox) v.findViewById(R.id.item_checkbox));
checkBox.toggle();
if (checkBox.isChecked()) {
GBApplication.addToBlacklist(appInfo.packageName);
GBApplication.addAppToBlacklist(appInfo.packageName);
} else {
GBApplication.removeFromBlacklist(appInfo.packageName);
GBApplication.removeFromAppsBlacklist(appInfo.packageName);
}
}
});

View File

@ -0,0 +1,61 @@
/* 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.devices.amazfitbip;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBand2Coordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class AmazfitBipCooordinator extends MiBand2Coordinator {
private static final Logger LOG = LoggerFactory.getLogger(AmazfitBipCooordinator.class);
@Override
public DeviceType getDeviceType() {
return DeviceType.AMAZFITBIP;
}
@NonNull
@Override
public DeviceType getSupportedType(GBDeviceCandidate candidate) {
try {
BluetoothDevice device = candidate.getDevice();
String name = device.getName();
if (name != null && name.equalsIgnoreCase("Amazfit Bip Watch")) {
return DeviceType.AMAZFITBIP;
}
} catch (Exception ex) {
LOG.error("unable to check device support", ex);
}
return DeviceType.UNKNOWN;
}
@Override
public InstallHandler findInstallHandler(Uri uri, Context context) {
return null; // not supported yet
}
}

View File

@ -34,7 +34,6 @@ import java.util.List;
import de.greenrobot.dao.query.QueryBuilder;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.GBException;
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
import nodomain.freeyourgadget.gadgetbridge.entities.CalendarSyncState;

View File

@ -103,7 +103,7 @@ public class NotificationListener extends NotificationListenerService {
} else {
// ACTION_MUTE
LOG.info("going to mute " + sbn.getPackageName());
GBApplication.addToBlacklist(sbn.getPackageName());
GBApplication.addAppToBlacklist(sbn.getPackageName());
}
}
}
@ -414,7 +414,7 @@ public class NotificationListener extends NotificationListenerService {
}
}
if (GBApplication.isBlacklisted(source)) {
if (GBApplication.appIsBlacklisted(source)) {
LOG.info("Ignoring notification, application is blacklisted");
return true;
}

View File

@ -23,7 +23,6 @@ import android.database.Cursor;
import android.net.Uri;
import android.provider.CalendarContract.Instances;
import android.text.format.Time;
import android.util.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -34,6 +33,8 @@ import java.util.GregorianCalendar;
import java.util.List;
import java.util.Objects;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
public class CalendarEvents {
private static final Logger LOG = LoggerFactory.getLogger(CalendarEvents.class);
@ -102,7 +103,11 @@ public class CalendarEvents {
evtCursor.getString(7),
!evtCursor.getString(8).equals("0")
);
calendarEventList.add(calEvent);
if (!GBApplication.calendarIsBlacklisted(calEvent.getCalName())) {
calendarEventList.add(calEvent);
} else {
LOG.debug("calendar " + calEvent.getCalName() + " skipped because it's blacklisted");
}
}
return true;
}

View File

@ -28,15 +28,16 @@ import nodomain.freeyourgadget.gadgetbridge.R;
* and may not be changed.
*/
public enum DeviceType {
UNKNOWN(-1, R.drawable.ic_launcher, R.drawable.ic_device_default_disabled),
UNKNOWN(-1, R.drawable.ic_device_default, R.drawable.ic_device_default_disabled),
PEBBLE(1, R.drawable.ic_device_pebble, R.drawable.ic_device_pebble_disabled),
MIBAND(10, R.drawable.ic_device_miband, R.drawable.ic_device_miband_disabled),
MIBAND2(11, R.drawable.ic_device_miband, R.drawable.ic_device_miband_disabled),
AMAZFITBIP(12, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled),
VIBRATISSIMO(20, R.drawable.ic_device_lovetoy, R.drawable.ic_device_lovetoy_disabled),
LIVEVIEW(30, R.drawable.ic_launcher, R.drawable.ic_device_default_disabled),
LIVEVIEW(30, R.drawable.ic_device_default, R.drawable.ic_device_default_disabled),
HPLUS(40, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled),
MAKIBESF68(41, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled),
TEST(1000, R.drawable.ic_launcher, R.drawable.ic_device_default_disabled);
TEST(1000, R.drawable.ic_device_default, R.drawable.ic_device_default_disabled);
private final int key;
@DrawableRes

View File

@ -30,6 +30,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.service.devices.liveview.LiveviewSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.MiBand2Support;
import nodomain.freeyourgadget.gadgetbridge.service.devices.amazfitbip.AmazfitBipSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.MiBandSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.PebbleSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.vibratissimo.VibratissimoSupport;
@ -109,6 +110,9 @@ public class DeviceSupportFactory {
case MIBAND2:
deviceSupport = new ServiceDeviceSupport(new MiBand2Support(), EnumSet.of(ServiceDeviceSupport.Flags.THROTTLING, ServiceDeviceSupport.Flags.BUSY_CHECKING));
break;
case AMAZFITBIP:
deviceSupport = new ServiceDeviceSupport(new AmazfitBipSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING));
break;
case VIBRATISSIMO:
deviceSupport = new ServiceDeviceSupport(new VibratissimoSupport(), EnumSet.of(ServiceDeviceSupport.Flags.THROTTLING, ServiceDeviceSupport.Flags.BUSY_CHECKING));
break;

View File

@ -0,0 +1,54 @@
/* 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.deviceevents.GBDeviceEventCallControl;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.NotificationStrategy;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.MiBand2Support;
public class AmazfitBipSupport extends MiBand2Support {
@Override
public NotificationStrategy getNotificationStrategy() {
return new AmazfitBipTextNotificationStrategy(this);
}
@Override
public void onFindDevice(boolean start) {
CallSpec callSpec = new CallSpec();
callSpec.command = start ? CallSpec.CALL_INCOMING : CallSpec.CALL_END;
callSpec.name = "Gadgetbridge";
onSetCallState(callSpec);
}
@Override
public void handleButtonPressed(byte[] value) {
if (value == null || value.length != 1) {
return;
}
GBDeviceEventCallControl callCmd = new GBDeviceEventCallControl();
if (value[0] == 0x07) {
callCmd.event = GBDeviceEventCallControl.Event.REJECT;
} else if (value[0] == 0x09) {
callCmd.event = GBDeviceEventCallControl.Event.ACCEPT;
} else {
return;
}
evaluateGBDeviceEvent(callCmd);
}
}

View File

@ -0,0 +1,46 @@
/* 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.devices.miband.VibrationProfile;
import nodomain.freeyourgadget.gadgetbridge.service.btle.BtLEAction;
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.AlertCategory;
import nodomain.freeyourgadget.gadgetbridge.service.devices.common.SimpleNotification;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.Mi2TextNotificationStrategy;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.MiBand2Support;
import nodomain.freeyourgadget.gadgetbridge.util.StringUtils;
class AmazfitBipTextNotificationStrategy extends Mi2TextNotificationStrategy {
AmazfitBipTextNotificationStrategy(MiBand2Support support) {
super(support);
}
@Override
protected void sendCustomNotification(VibrationProfile vibrationProfile, SimpleNotification simpleNotification, BtLEAction extraAction, TransactionBuilder builder) {
if (simpleNotification != null && simpleNotification.getAlertCategory() == AlertCategory.IncomingCall) {
// incoming calls are notified solely via NewAlert including caller ID
sendAlert(simpleNotification, builder);
return;
}
if (simpleNotification != null && !StringUtils.isEmpty(simpleNotification.getMessage())) {
sendAlert(simpleNotification, builder);
}
}
}

View File

@ -301,7 +301,7 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
return this;
}
private NotificationStrategy getNotificationStrategy() {
public NotificationStrategy getNotificationStrategy() {
String firmwareVersion = getDevice().getFirmwareVersion();
if (firmwareVersion != null) {
Version ver = new Version(firmwareVersion);
@ -808,7 +808,7 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport {
return false;
}
private void handleButtonPressed(byte[] value) {
public void handleButtonPressed(byte[] value) {
LOG.info("Button pressed");
logMessageContent(value);
}

View File

@ -164,7 +164,7 @@ class PebbleIoThread extends GBDeviceIoThread {
}
}
} catch (IOException e) {
e.printStackTrace();
LOG.warn("error while connecting: " + e.getMessage(), e);
gbDevice.setState(originalState);
gbDevice.sendDeviceUpdateIntent(getContext());

View File

@ -39,6 +39,7 @@ public class GBCallControlReceiver extends BroadcastReceiver {
GBDeviceEventCallControl.Event callCmd = GBDeviceEventCallControl.Event.values()[intent.getIntExtra("event", 0)];
switch (callCmd) {
case END:
case REJECT:
case START:
try {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
@ -46,7 +47,7 @@ public class GBCallControlReceiver extends BroadcastReceiver {
Method method = clazz.getDeclaredMethod("getITelephony");
method.setAccessible(true);
ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);
if (callCmd == GBDeviceEventCallControl.Event.END) {
if (callCmd == GBDeviceEventCallControl.Event.END || callCmd == GBDeviceEventCallControl.Event.REJECT) {
telephonyService.endCall();
} else {
telephonyService.answerRingingCall();

View File

@ -20,12 +20,16 @@ import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Color;
import android.os.ParcelUuid;
import android.os.Parcelable;
import android.support.v4.content.LocalBroadcastManager;
import java.util.Locale;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
public class AndroidUtils {
public static ParcelUuid[] toParcelUUids(Parcelable[] uuids) {
if (uuids == null) {
@ -74,4 +78,39 @@ public class AndroidUtils {
activity.getBaseContext().getResources().updateConfiguration(config, activity.getBaseContext().getResources().getDisplayMetrics());
activity.recreate();
}
/**
* Returns the theme dependent text color as a css-style hex string.
* @param context the context to access the colour
*/
public static String getTextColorHex(Context context) {
int color;
if (GBApplication.isDarkThemeEnabled()) {
color = context.getResources().getColor(R.color.primarytext_dark);
} else {
color = context.getResources().getColor(R.color.primarytext_light);
}
return colorToHex(color);
}
/**
* Returns the theme dependent background color as a css-style hex string.
* @param context the context to access the colour
*/
public static String getBackgroundColorHex(Context context) {
int color;
if (GBApplication.isDarkThemeEnabled()) {
color = context.getResources().getColor(R.color.cardview_dark_background);
} else {
color = context.getResources().getColor(R.color.cardview_light_background);
}
return colorToHex(color);
}
private static String colorToHex(int color) {
return "#"
+ Integer.toHexString(Color.red(color))
+ Integer.toHexString(Color.green(color))
+ Integer.toHexString(Color.blue(color));
}
}

View File

@ -39,6 +39,7 @@ import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.UnknownDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.amazfitbip.AmazfitBipCooordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.hplus.MakibesF68Coordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.liveview.LiveviewCoordinator;
@ -184,6 +185,7 @@ public class DeviceHelper {
private List<DeviceCoordinator> createCoordinators() {
List<DeviceCoordinator> result = new ArrayList<>();
result.add(new AmazfitBipCooordinator()); // Note: AmazfitBip must come before MiBand2 because detection is hacky, atm
result.add(new MiBand2Coordinator()); // Note: MiBand2 must come before MiBand because detection is hacky, atm
result.add(new MiBandCoordinator());
result.add(new PebbleCoordinator());

View File

@ -21,6 +21,7 @@ import java.util.Date;
public class GBPrefs {
public static final String PACKAGE_BLACKLIST = "package_blacklist";
public static final String CALENDAR_BLACKLIST = "calendar_blacklist";
public static final String AUTO_RECONNECT = "general_autocreconnect";
private static final String AUTO_START = "general_autostartonboot";
private static final boolean AUTO_START_DEFAULT = true;

View File

@ -17,6 +17,12 @@
package nodomain.freeyourgadget.gadgetbridge.util;
import android.content.SharedPreferences;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
@ -27,12 +33,6 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.content.SharedPreferences;
import android.util.Xml;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
public class ImportExportSharedPreferences {
@ -125,12 +125,19 @@ public class ImportExportSharedPreferences {
editor.putString(key, text);
} else if (HASHSET.equals(name)) {
if (key.equals(GBPrefs.PACKAGE_BLACKLIST)) {
Set<String> blacklist = new HashSet<>();
Set<String> apps_blacklist = new HashSet<>();
text=text.replace("[","").replace("]","");
for (int z=0;z<text.split(",").length;z++){
blacklist.add(text.split(",")[z].trim());
apps_blacklist.add(text.split(",")[z].trim());
}
GBApplication.setBlackList(blacklist);
GBApplication.setAppsBlackList(apps_blacklist);
} else if (key.equals(GBPrefs.CALENDAR_BLACKLIST)) { //TODO: untested
Set<String> calendars_blacklist = new HashSet<>();
text = text.replace("[", "").replace("]", "");
for (int z = 0; z < text.split(",").length; z++) {
calendars_blacklist.add(text.split(",")[z].trim());
}
GBApplication.setCalendarsBlackList(calendars_blacklist);
}
} else if (!PREFERENCES.equals(name)) {
throw new Exception("Unkown type " + name);

View File

@ -28,7 +28,12 @@ public class LanguageUtils {
private static Map<Character, String> transliterateMap = new HashMap<Character, String>(){
{
//extended ASCII characters
put('æ', "ae"); put('œ', "oe"); put('ß', "B"); put('ª', "a"); put('º', "o"); put('«',"\""); put('»',"\"");
put('æ', "ae"); put('œ', "oe"); put('ª', "a"); put('º', "o"); put('«',"\""); put('»',"\"");
//german characters
put('ä',"ae"); put('ö',"oe"); put('ü',"ue");
put('Ä',"Ae"); put('Ö',"Oe"); put('Ü',"Üe");
put('ß',"ss"); put('ẞ',"SS");
//russian chars
put('а', "a"); put('б', "b"); put('в', "v"); put('г', "g"); put('д', "d"); put('е', "e"); put('ё', "jo"); put('ж', "zh");
@ -42,6 +47,7 @@ public class LanguageUtils {
put('ט', "t"); put('י', "y"); put('כ', "c"); put('ל', "l"); put('מ', "m"); put('נ', "n"); put('ס', "s"); put('ע', "'");
put('פ', "p"); put('צ', "ts"); put('ק', "k"); put('ר', "r"); put('ש', "sh"); put('ת', "th"); put('ף', "f"); put('ץ', "ts");
put('ך', "ch");put('ם', "m");put('ן', "n");
// greek chars
put('α',"a");put('ά',"a");put('β',"v");put('γ',"g");put('δ',"d");put('ε',"e");put('έ',"e");put('ζ',"z");put('η',"i");
put('ή',"i");put('θ',"th");put('ι',"i");put('ί',"i");put('ϊ',"i");put('ΐ',"i");put('κ',"k");put('λ',"l");put('μ',"m");
@ -51,7 +57,9 @@ public class LanguageUtils {
put('Ή',"I");put('Θ',"TH");put('Ι',"I");put('Ί',"I");put('Ϊ',"I");put('Κ',"K");put('Λ',"L");put('Μ',"M");put('Ν',"N");
put('Ξ',"KS");put('Ο',"O");put('Ό',"O");put('Π',"P");put('Ρ',"R");put('Σ',"S");put('Τ',"T");put('Υ',"Y");put('Ύ',"Y");
put('Ϋ',"Y");put('Φ',"F");put('Χ',"CH");put('Ψ',"PS");put('Ω',"O");put('Ώ',"O");
//continue for other languages...
//TODO: these must be configurabe. If someone wants to transliterate cyrillic it does not mean his device has no German umlauts
//all or nothing is really bad here
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -4,6 +4,7 @@
<item android:maxLevel="101" android:drawable="@drawable/ic_device_pebble_disabled" />
<item android:maxLevel="110" android:drawable="@drawable/ic_device_miband_disabled" />
<item android:maxLevel="111" android:drawable="@drawable/ic_device_miband_disabled" />
<item android:maxLevel="112" android:drawable="@drawable/ic_device_hplus_disabled" />
<item android:maxLevel="120" android:drawable="@drawable/ic_device_lovetoy_disabled" />
<item android:maxLevel="130" android:drawable="@drawable/ic_device_default_disabled" />
<item android:maxLevel="140" android:drawable="@drawable/ic_device_hplus_disabled" />
@ -13,6 +14,7 @@
<item android:maxLevel="201" android:drawable="@drawable/ic_device_pebble" />
<item android:maxLevel="210" android:drawable="@drawable/ic_device_miband" />
<item android:maxLevel="211" android:drawable="@drawable/ic_device_miband" />
<item android:maxLevel="212" android:drawable="@drawable/ic_device_hplus" />
<item android:maxLevel="220" android:drawable="@drawable/ic_device_lovetoy" />
<item android:maxLevel="230" android:drawable="@drawable/ic_launcher" />
<item android:maxLevel="240" android:drawable="@drawable/ic_device_hplus" />

View File

@ -0,0 +1,14 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="nodomain.freeyourgadget.gadgetbridge.activities.CalBlacklistActivity">
<ListView
android:id="@+id/calListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:divider="@null" />
</RelativeLayout>

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/activatedBackgroundIndicator"
android:minHeight="60dp">
<CheckBox
android:id="@+id/item_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:clickable="false"
android:focusable="false" />
<View
android:id="@+id/calendar_color"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerVertical="true"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_toEndOf="@+id/item_checkbox"
android:paddingBottom="8dp"
android:paddingTop="8dp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/calendar_color"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:id="@+id/calendar_name"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollHorizontally="false"
android:maxLines="1"
android:text="Item Name" />
</LinearLayout>
</RelativeLayout>

View File

@ -29,8 +29,8 @@
<string name="appmananger_app_delete_cache">Löschen und aus dem Zwischenspeicher entfernen</string>
<string name="appmananger_app_reinstall">Erneut installieren</string>
<string name="appmanager_app_openinstore">Im Pebble Appstore suchen</string>
<string name="appmanager_health_activate">aktivieren</string>
<string name="appmanager_health_deactivate">deaktivieren</string>
<string name="appmanager_health_activate">Aktivieren</string>
<string name="appmanager_health_deactivate">Deaktivieren</string>
<string name="appmanager_hrm_activate">HRM aktivieren</string>
<string name="appmanager_hrm_deactivate">HRM deaktivieren</string>
<string name="appmanager_weather_activate">Wetter-App des Systems aktivieren</string>
@ -58,7 +58,7 @@
<string name="pref_header_datetime">Datum und Zeit</string>
<string name="pref_title_datetime_syctimeonconnect">Uhrzeit synchronisieren</string>
<string name="pref_summary_datetime_syctimeonconnect">Synchronisiere die Uhrzeit mit dem Gerät bei Verbindungsaufbau und wenn die Zeit oder Zeitzone auf dem Android Gerät geändert wird</string>
<string name="pref_title_theme">Theme</string>
<string name="pref_title_theme">Thema</string>
<string name="pref_theme_light">Hell</string>
<string name="pref_theme_dark">Dunkel</string>
<string name="pref_title_language">Sprache</string>
@ -76,7 +76,7 @@
<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_summary_transliteration">Aktiviere dies, falls dein Gerät keine Unterstützung für den Zeichensatz deiner Sprache hat (momentan nur Kyrillisch)</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>
@ -220,6 +220,8 @@
<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="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>
<string name="control_center_cancel_to_stop_vibration">Abbrechen, um die Vibration zu stoppen.</string>
<string name="title_activity_charts">Deine Aktivität</string>
@ -273,6 +275,9 @@
<string name="chart_steps">Schritte</string>
<string name="calories">Kalorien</string>
<string name="distance">Distanz</string>
<string name="clock">Uhrzeit</string>
<string name="heart_rate">Puls</string>
<string name="battery">Batterie</string>
<string name="liveactivity_live_activity">Live Aktivität</string>
<string name="weeksteps_today_steps_description">Schritte heute, Ziel: %1$s</string>
<string name="pref_title_dont_ack_transfer">Transfer von Aktivitätsdaten nicht bestätigen</string>
@ -300,7 +305,17 @@
<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="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_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_do_not_disturb">Bitte nicht stören</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_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="activity_prefs_about_you">Über Dich</string>
@ -366,7 +381,10 @@
<string name="miband2_prefs_timeformat">Mi2: Uhrzeit-Format</string>
<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="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="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>

View File

@ -76,7 +76,7 @@
<string name="pref_title_notification_filter">No Molestar</string>
<string name="pref_summary_notification_filter">Dejar de enviar notificaciones no deseadas basándose en el modo No Molestar</string>
<string name="pref_title_transliteration">Transcripción</string>
<string name="pref_summary_transliteration">Utilizar en caso de que tu dispositivo no soporte la fuente de tu idioma (de momento solo el Cirílico)</string>
<string name="pref_summary_transliteration">Utilizar en caso de que tu dispositivo no soporte la fuente de tu idioma</string>
<string name="always">siempre</string>
<string name="when_screen_off">cuando la pantalla está apagada</string>
<string name="never">nunca</string>
@ -276,6 +276,9 @@
<string name="chart_steps">Pasos</string>
<string name="calories">Calorías</string>
<string name="distance">Distancia</string>
<string name="clock">Reloj</string>
<string name="heart_rate">Ritmo cardíaco</string>
<string name="battery">Batería</string>
<string name="liveactivity_live_activity">Actividad</string>
<string name="weeksteps_today_steps_description">Pasos hoy, objetivo: %1$s</string>
<string name="pref_title_dont_ack_transfer">No confirmar transferencia</string>
@ -303,7 +306,20 @@
<string name="miband2_prefs_dateformat">Mi2: Formato de fecha</string>
<string name="dateformat_time">Tiempo</string>
<string name="dateformat_date_time"><![CDATA[Fecha y hora]]></string>
<string name="mi2_prefs_goal_notification">Notificación de objetivo</string>
<string name="mi2_prefs_goal_notification_summary">La pulsera vibrará cuando llegues al objetivo diario de pasos</string>
<string name="mi2_prefs_display_items">Elementos que mostrar</string>
<string name="mi2_prefs_display_items_summary">Selecciona los elementos que mostrar en la pulsera</string>
<string name="mi2_prefs_activate_display_on_lift">Activar pantalla al levantar</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">Gira la muñeca para cambiar la información</string>
<string name="mi2_prefs_do_not_disturb">No Molestar</string>
<string name="mi2_prefs_do_not_disturb_summary">La pulsera no recibirá notificaciones</string>
<string name="mi2_prefs_inactivity_warnings">Alerta de inactividad</string>
<string name="mi2_prefs_inactivity_warnings_summary">La pulsera vibrará cuando hayas estado inactivo por un tiempo</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Umbral de inactividad (en minutos)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Desactivar las alarmas de inactividad por un intervalo de tiempo</string>
<string name="mi2_prefs_do_not_disturb_start">Hora de inicio</string>
<string name="mi2_prefs_do_not_disturb_end">Hora de fin</string>
<string name="FetchActivityOperation_about_to_transfer_since">A punto de transferir datos desde %1$s</string>
<string name="waiting_for_reconnect">esperando reconexión</string>
<string name="activity_prefs_about_you">Sobre ti</string>
@ -371,6 +387,9 @@
<string name="mi2_enable_text_notifications">Notificaciones textuales</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="mi2_dnd_off">Off</string>
<string name="mi2_dnd_automatic">Automático (detección de sueño)</string>
<string name="mi2_dnd_scheduled">Programado (intervalo de tiempo)</string>
<string name="discovery_attempting_to_pair">Intento de emparejamiento con %1$s</string>
<string name="discovery_bonding_failed_immediately">El enlace con %1$s falló instantáneamente</string>
<string name="discovery_trying_to_connect_to">Intentando conectar con: %1$s</string>

View File

@ -76,7 +76,7 @@
<string name="pref_title_notification_filter">Ne Pas Déranger</string>
<string name="pref_summary_notification_filter">Arrêter lenvoi des notifications non-désirées en mode Ne Pas Déranger.</string>
<string name="pref_title_transliteration">Transcription</string>
<string name="pref_summary_transliteration">À utiliser si l\'appareil ne supporte pas la police de caractères (pour l\'instant seulement le Cyrillique)</string>
<string name="pref_summary_transliteration">Activez ceci si votre appareil ne supporte pas la police de caractères</string>
<string name="always">toujours</string>
<string name="when_screen_off">quand l\'écran est éteint</string>
<string name="never">jamais</string>
@ -276,6 +276,9 @@
<string name="chart_steps">Pas</string>
<string name="calories">Calories</string>
<string name="distance">Distance</string>
<string name="clock">Horloge</string>
<string name="heart_rate">Fréquence cardiaque</string>
<string name="battery">Batterie</string>
<string name="liveactivity_live_activity">Activité en direct</string>
<string name="weeksteps_today_steps_description">Nombre de pas aujourd\'hui, objectif: %1$s</string>
<string name="pref_title_dont_ack_transfer">Ne pas confirmer le transfert de données d\'activités</string>
@ -303,7 +306,20 @@
<string name="miband2_prefs_dateformat">Mi2 : Format de la date</string>
<string name="dateformat_time">Heure</string>
<string name="dateformat_date_time"><![CDATA[Date et heure]]></string>
<string name="mi2_prefs_goal_notification">Notification d\'objectif</string>
<string name="mi2_prefs_goal_notification_summary">Le bracelet vibrera lorsque l\'objectif de pas quotidien sera atteint</string>
<string name="mi2_prefs_display_items">Éléments à afficher</string>
<string name="mi2_prefs_display_items_summary">Choisissez les éléments à afficher sur le bracelet</string>
<string name="mi2_prefs_activate_display_on_lift">Allumer l\'écran lors d\'un mouvement</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">Tournez votre poignet pour changer d\'élément</string>
<string name="mi2_prefs_do_not_disturb">Ne Pas Déranger</string>
<string name="mi2_prefs_do_not_disturb_summary">Le bracelet ne recevra pas de notifications si activé</string>
<string name="mi2_prefs_inactivity_warnings">Alertes d\'inactivité</string>
<string name="mi2_prefs_inactivity_warnings_summary">Le bracelet vibrera si vous n\'êtes pas actif pendant un moment</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Seuil d\'inactivité (en minutes)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Désactiver les alertes d\'inactivité pendant un intervalle de temps</string>
<string name="mi2_prefs_do_not_disturb_start">Heure de début</string>
<string name="mi2_prefs_do_not_disturb_end">Heure de fin</string>
<string name="FetchActivityOperation_about_to_transfer_since">Sur le point de transférer des données depuis %1$s</string>
<string name="waiting_for_reconnect">en attente de reconnexion</string>
<string name="activity_prefs_about_you">À propos de vous</string>
@ -373,6 +389,9 @@ NOTE: la base de données sera bien évidement plus grande !</string>
<string name="mi2_enable_text_notifications">Notifications textuelles</string>
<string name="mi2_enable_text_notifications_summary"><![CDATA[Requis: micrologiciel version 1.0.1.28 ou plus, fichier Mili_pro.ft* installé.]]></string>
<string name="off">off</string>
<string name="mi2_dnd_off">Off</string>
<string name="mi2_dnd_automatic">Automatique (détection de sommeil)</string>
<string name="mi2_dnd_scheduled">Programmé (intervalle de temps)</string>
<string name="discovery_attempting_to_pair">Tentative d\'appairage avec %1$s</string>
<string name="discovery_bonding_failed_immediately">Le lien avec %1$s a échoué instantanément</string>
<string name="discovery_trying_to_connect_to">Tentative de connexion à: %1$s</string>

View File

@ -13,6 +13,12 @@
<string name="controlcenter_delete_device">Eszköz törlése</string>
<string name="controlcenter_delete_device_name">%1$s törlése</string>
<string name="controlcenter_delete_device_dialogmessage">Az eszköz és az összes hozzátartozó adat törlésre kerül!</string>
<string name="controlcenter_navigation_drawer_open">Navigáció megnyitása</string>
<string name="controlcenter_navigation_drawer_close">Navigáció bezárása</string>
<string name="controlcenter_snackbar_need_longpress">Nyomd hosszan a szétkapcsoláshoz</string>
<string name="controlcenter_snackbar_disconnecting">Szétkapcsolódás</string>
<string name="controlcenter_snackbar_connecting">Kapcsolódás</string>
<string name="controlcenter_snackbar_requested_screenshot">Képernyőkép készítése az eszközről</string>
<string name="title_activity_debug">Hibakeresés</string>
<!--Strings related to AppManager-->
<string name="title_activity_appmanager">Alkalmazáskezelő</string>
@ -27,6 +33,9 @@
<string name="appmanager_health_deactivate">Deaktiválás</string>
<string name="appmanager_hrm_activate">Pulzusmérő aktiválása</string>
<string name="appmanager_hrm_deactivate">Pulzusmérő deaktiválása</string>
<string name="appmanager_weather_activate">Rendszer időjárás alkalmazás aktiválása</string>
<string name="appmanager_weather_deactivate">Rendszer időjárás alkalmazás deaktiválása</string>
<string name="appmanager_weather_install_provider">Időjárás értesítő alkalmazás telepítése</string>
<string name="app_configure">Beállítás</string>
<string name="app_move_to_top">A tetejére mozgatás</string>
<!--Strings related to AppBlacklist-->
@ -42,6 +51,7 @@
<string name="title_activity_settings">Beállítások</string>
<string name="pref_header_general">Általános beállítások</string>
<string name="pref_title_general_autoconnectonbluetooth">Kapcsolódjon az eszközhöz a Bluetooth bekapcsolásakor</string>
<string name="pref_title_general_autostartonboot">Automatikus indulás</string>
<string name="pref_title_general_autocreonnect">Újracsatlakozás automatikusan</string>
<string name="pref_title_audo_player">Preferált zenelejátszó</string>
<string name="pref_default">Alapértelmezett</string>
@ -52,6 +62,9 @@
<string name="pref_theme_light">Világos</string>
<string name="pref_theme_dark">Sötét</string>
<string name="pref_title_language">Nyelv</string>
<string name="pref_title_minimize_priority">Gadgetbridge értesítések elrejtése</string>
<string name="pref_summary_minimize_priority_off">Az ikon és az értesítés mutatása a záróképernyőn</string>
<string name="pref_summary_minimize_priority_on">Az ikon és az értesítés elrejtése a záróképernyőn</string>
<string name="pref_header_notifications">Értesítések</string>
<string name="pref_title_notifications_repetitions">Ismétlések</string>
<string name="pref_title_notifications_call">Telefonhívások</string>
@ -62,9 +75,17 @@
<string name="pref_title_whenscreenon">… és amikor a kijelző be van kapcsolva</string>
<string name="pref_title_notification_filter">Ne zavarj mód</string>
<string name="pref_summary_notification_filter">Értesítések tiltása a Ne zavarj üzemmód használatakor.</string>
<string name="pref_title_transliteration">Transzliteráció</string>
<string name="pref_summary_transliteration">Engedélyezd ezt, ha a nyelvedet nem támogatja a betűtípus</string>
<string name="always">mindig</string>
<string name="when_screen_off">amikor a kijelző ki van kapcsolva</string>
<string name="never">soha</string>
<string name="pref_header_privacy">Adatvédelem</string>
<string name="pref_title_call_privacy_mode">Hívás Adatvédelmi Mód</string>
<string name="pref_call_privacy_mode_off">Név és szám mutatása</string>
<string name="pref_call_privacy_mode_name">Név rejtése, de a szám mutatása</string>
<string name="pref_call_privacy_mode_number">Szám rejtése, de a név mutatása</string>
<string name="pref_call_privacy_mode_complete">Név és szám rejtése</string>
<string name="pref_blacklist">Tiltott alkalmazások</string>
<string name="pref_header_cannned_messages">Előre beállított üzenetek</string>
<string name="pref_title_canned_replies">Előre megírt válaszok</string>
@ -79,10 +100,21 @@
<string name="pref_title_pebble_sync_health">Pebble Health szinkronizálása</string>
<string name="pref_title_pebble_sync_misfit">Misfit szinkronizálás</string>
<string name="pref_title_pebble_sync_morpheuz">Morpheuz szinkronizálás</string>
<string name="pref_title_enable_outgoing_call">Kimenő hívások támogatása</string>
<string name="pref_summary_enable_outgoing_call">Ennek a letiltásával a kimenő hívás rezgését is letiltja a Pebble 2/LE eszközön</string>
<string name="pref_title_enable_pebblekit">Harmadik féltől származó Android alkalmazások hozzáférésének engedélyezése</string>
<string name="pref_summary_enable_pebblekit">Kísérleti támogatás engedélyezése az Android alkalmazások számára a PebbleKit használatára</string>
<string name="pref_header_pebble_timeline">Pebble Idővonal</string>
<string name="pref_title_sunrise_sunset">Napkelte és napnyugta</string>
<string name="pref_summary_sunrise_sunset">A napkelte és napnyugta idejének küldése a Pebble idővonalra a hely és idő alapján</string>
<string name="pref_title_enable_calendar_sync">Naptár szinkronizálása</string>
<string name="pref_summary_enable_calendar_sync">Naptárbejegyzések küldése az idővonalra</string>
<string name="pref_title_autoremove_notifications">Automatikusan törölje az eltávolított értesítéseket</string>
<string name="pref_summary_autoremove_notifications">Az értesítések automatikus eltávolítsa, ha az Androidos eszközön eltávolítottad</string>
<string name="pref_title_pebble_privacy_mode">Adatvédelmi mód</string>
<string name="pref_pebble_privacy_mode_off">Normál értesítések</string>
<string name="pref_pebble_privacy_mode_content">Az értesítés eltolása képernyőn</string>
<string name="pref_pebble_privacy_mode_complete">Csak az értesítési ikon mutatása</string>
<string name="pref_header_location">Pozició</string>
<string name="pref_title_location_aquire">Pozició meghatározása</string>
<string name="pref_title_location_latitude">Szélesség</string>
@ -97,9 +129,18 @@
<string name="pref_summary_pebble_forceuntested">Nem tesztelt funkciók engedélyezése. CSAK AKKOR ENGEDÉLYEZD, HA TUDOD MIT CSINÁLSZ!</string>
<string name="pref_title_pebble_forcele">Mindig preferálja a BLE-t</string>
<string name="pref_summary_pebble_forcele">A kísérleti LE támogatás használata minden Pebble-hez a klasszikus BT helyett, párosítani kell hozzá egy \"Pebble LE\"-t, miután a nem-LE-t párosítva lett egyszer.</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU limit</string>
<string name="pref_summary_pebble_mtu_limit">Ha a Pebble 2/Pebble LE nem működik elvártan, próbáld beállítani az MTU limitet (az érvényes tartomány: 20-512)</string>
<string name="pref_title_pebble_enable_applogs">Óraalkalmazás-naplózás engedélyezése</string>
<string name="pref_summary_pebble_enable_applogs">Az óra-alkalmazások naplóit a Gadgetbridge is naplózni fogja (újracsatlakozást igényel)</string>
<string name="pref_title_pebble_always_ack_pebblekit">Korai ACK PebbleKit</string>
<string name="pref_summary_pebble_always_ack_pebblekit">Minden esetben azonnal felismeri az üzeneteket, amelyeket külső harmadik alkalmazásoknak küldenek.</string>
<string name="pref_title_pebble_reconnect_attempts">Újracsatlakozási kísérletek száma</string>
<string name="pref_title_unit_system">Egységek</string>
<string name="pref_title_timeformat">Időformátum</string>
<string name="pref_title_screentime">Kijelző bekapcsolvatartásának ideje</string>
<string name="prefs_title_all_day_heart_rate">Egésznapos pulzusmérés</string>
<string name="preferences_hplus_settings">HPlus/Makibes Beállítások</string>
<string name="not_connected">nincs csatlakozva</string>
<string name="connecting">csatlakozás</string>
<string name="connected">csatlakoztatva</string>
@ -150,6 +191,7 @@
<string name="miband_pairing_using_dummy_userdata">Nem helyes felhasználói adatok vannak megadva, alapértelmezett adatokat fogok használni.</string>
<string name="miband_pairing_tap_hint">Amikor vibrálni kezd a Mi Band-ed, érintsd meg párszor egymás után.</string>
<string name="appinstaller_install">Telepítés</string>
<string name="discovery_connected_devices_hint">Tedd láthatóvá a készüléked. A jelenleg csatlakoztatott készülékek nem fognak láthatóként megjelenni. Aktiváld a helymeghatározást (Pl: GPS) az Android 6 készülékeden. Kapcsold ki a Privacy Guard-ban a Gadgetbridge-et (Ha van Privacy Guard beállításod), különben az alkalmazás kifagyhat, illetve újraindíthatja a készükéked. Ha nem található az eszköz pár percen bellül, próbáld újraindítani a telefonod.</string>
<string name="discovery_note">Megjegyzés:</string>
<string name="candidate_item_device_image">Eszköz kép</string>
<string name="miband_prefs_alias">Név/Alias</string>
@ -178,6 +220,9 @@
<string name="pref_screen_notification_profile_generic_chat">Csevegés</string>
<string name="pref_screen_notification_profile_generic_navigation">Navigáció</string>
<string name="pref_screen_notification_profile_generic_social">Közösségi háló</string>
<string name="stats_title">Sebesség Zónák</string>
<string name="stats_x_axis_label">Összes perc</string>
<string name="stats_y_axis_label">Percenkénti lépések</string>
<string name="control_center_find_lost_device">Elveszett eszköz keresése</string>
<string name="control_center_cancel_to_stop_vibration">A vibrálás leállításához: Mégse.</string>
<string name="title_activity_charts">Aktivitásod</string>
@ -209,6 +254,8 @@
<string name="notif_battery_low_bigtext_last_charge_time">Utoljára töltve: %s \n</string>
<string name="notif_battery_low_bigtext_number_of_charges">Töltések száma: %s</string>
<string name="sleepchart_your_sleep">Az alvásod</string>
<string name="weeksleepchart_sleep_a_week">Heti alvás</string>
<string name="weeksleepchart_today_sleep_description">Mai alvás, cél: %1$s</string>
<string name="weekstepschart_steps_a_week">Lépések a héten</string>
<string name="activity_sleepchart_activity_and_sleep">Aktivitásod és alvásod</string>
<string name="updating_firmware">Firmware frissítése…</string>
@ -227,6 +274,11 @@
<string name="updatefirmwareoperation_update_complete_rebooting">A Firmware telepítés kész, az eszköz újraindítása…</string>
<string name="updatefirmwareoperation_write_failed">Firmware írási probléma</string>
<string name="chart_steps">Lépések</string>
<string name="calories">Kalória</string>
<string name="distance">Távolság</string>
<string name="clock">Óra</string>
<string name="heart_rate">Pulzus</string>
<string name="battery">Akkumulátor</string>
<string name="liveactivity_live_activity">Aktuális aktivitás</string>
<string name="weeksteps_today_steps_description">Lépések ma, cél: %1$s</string>
<string name="pref_title_dont_ack_transfer">Ne erősítse meg az aktivitásadatok átvitelét</string>
@ -254,7 +306,20 @@
<string name="miband2_prefs_dateformat">Mi2: dátumformátum</string>
<string name="dateformat_time">Idő</string>
<string name="dateformat_date_time"><![CDATA[Time & Date]]></string>
<string name="mi2_prefs_goal_notification">Cél értesítés</string>
<string name="mi2_prefs_goal_notification_summary">A karkötő vibrálni fog amikor elérted a napi lépés célod</string>
<string name="mi2_prefs_display_items">Megjelenítendő elemek</string>
<string name="mi2_prefs_display_items_summary">Válaszd ki milyen elemek jelenjenek meg a karkötő kijelzőjén</string>
<string name="mi2_prefs_activate_display_on_lift">Kijelző aktiválása felemeléskor</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">Forgasd el a karkötőt információ váltáshoz</string>
<string name="mi2_prefs_do_not_disturb">Ne zavarj mód</string>
<string name="mi2_prefs_do_not_disturb_summary">A karkötő nem fog értesítéseket jelezni amíg ez aktív</string>
<string name="mi2_prefs_inactivity_warnings">Inaktivitás figyelmeztetés</string>
<string name="mi2_prefs_inactivity_warnings_summary">A karkötő rezegni fog amikor inaktív vagy már egy ideje</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Inaktivitás határ (percben)</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Inaktivitás figyelmeztetések tiltása adott időre</string>
<string name="mi2_prefs_do_not_disturb_start">Kezdete</string>
<string name="mi2_prefs_do_not_disturb_end">Vége</string>
<string name="FetchActivityOperation_about_to_transfer_since">Adatok átvitele %1$s óta</string>
<string name="waiting_for_reconnect">várakozás az újracsatlakozásra</string>
<string name="activity_prefs_about_you">Rólad</string>
@ -281,13 +346,16 @@
<string name="action_db_management">Adatbáziskezelés</string>
<string name="title_activity_db_management">Adatbáziskezelés</string>
<string name="activity_db_management_import_export_explanation">Az adatbázisművelet ezt a helyet fogja használni. Ez a hely elérhető másik Android-alkalmazások és a számítógép számára. Itt keresd az exportált adatbázist is, illetve ide rakd az importálni kívánt adatbázist is.</string>
<string name="activity_db_management_merge_old_title">Hagyaték adatbázis törlése</string>
<string name="dbmanagementactivvity_cannot_access_export_path">Nem elérhető az elérési út. Kérlek vedd fel a kapcsolatot a fejlesztőkkel.</string>
<string name="dbmanagementactivity_exported_to">%1$s exportálva</string>
<string name="dbmanagementactivity_error_exporting_db">Hiba az exportálás során: %1$s</string>
<string name="dbmanagementactivity_error_exporting_shared">Hiba a beállítások exportálása során: %1$s</string>
<string name="dbmanagementactivity_import_data_title">Adatok importálása?</string>
<string name="dbmanagementactivity_overwrite_database_confirmation">Biztosan felül akarod írni a jelenlegi adatbázist? Az összes jelenlegi aktivitás adatod (ha van) elfog veszni.</string>
<string name="dbmanagementactivity_import_successful">Sikeres importálás.</string>
<string name="dbmanagementactivity_error_importing_db">Hiba az importálás során: %1$s</string>
<string name="dbmanagementactivity_error_importing_shared">Hiba a beállítások importálása során: %1$s</string>
<string name="dbmanagementactivity_delete_activity_data_title">Törlöd az aktivitásadatokat?</string>
<string name="dbmanagementactivity_really_delete_entire_db">Tényleg törölni akarod az egész adatbázist? Minden aktivitásadatod és rólad tárolt információ elfog veszni.</string>
<string name="dbmanagementactivity_database_successfully_deleted">Az adatok sikeresen törölve lettek.</string>
@ -304,127 +372,31 @@
<!--Strings related to Pebble Pairing Activity-->
<string name="title_activity_pebble_pairing">Pebble párosítása</string>
<string name="pebble_pairing_hint">Egy párosítási párbeszédablaknak kéne megjelennie az Android eszközödön. Ha nem látod, nézd meg az értesítési sávban és fogadd el a párosítási kérelmet. Utána fogadd ela kérelmet a Pebble-n.</string>
<string name="StringUtils_sender">" (%1$s)"</string>
<string name="activity_db_management_merge_old_title">Hagyaték adatbázis törlése</string>
<string name="appmanager_weather_activate">Rendszer időjárás alkalmazás aktiválása</string>
<string name="appmanager_weather_deactivate">Rendszer időjárás alkalmazás deaktiválása</string>
<string name="appmanager_weather_install_provider">Időjárás értesítő alkalmazás telepítése</string>
<string name="battery">Akkumulátor</string>
<string name="battery_full">Akkumulátor feltöltve</string>
<string name="battery_low">Akkumulátor töltöttség alacsony</string>
<string name="battery_medium">Akkumulátor töltöttség közepes</string>
<string name="battery_not_charging">Akkumulátor nem töltődik</string>
<string name="clock">Óra</string>
<string name="calories">Kalória</string>
<string name="controlcenter_navigation_drawer_close">Navigáció bezárása</string>
<string name="controlcenter_navigation_drawer_open">Navigáció megnyitása</string>
<string name="controlcenter_snackbar_connecting">Kapcsolódás</string>
<string name="controlcenter_snackbar_disconnecting">Szétkapcsolódás</string>
<string name="controlcenter_snackbar_need_longpress">Nyomd hosszan a szétkapcsoláshoz</string>
<string name="controlcenter_snackbar_requested_screenshot">Képernyőkép készítése az eszközről</string>
<string name="dbmanagementactivity_error_importing_shared">Hiba a beállítások importálása során: %1$s</string>
<string name="dbmanagementactivity_error_exporting_shared">Hiba a beállítások exportálása során: %1$s</string>
<string name="discovery_attempting_to_pair">Csatlakozási kísérlet az eszközhöz: %1$s</string>
<string name="discovery_bonding_failed_immediately">A csatlakozás azonnal megszkadt: %1$s</string>
<string name="off">ki</string>
<string name="p_waterdrop">vízcsepp</string>
<string name="p_unit_metric">metrikus</string>
<string name="discovery_connected_devices_hint">Tedd láthatóvá a készüléked. A jelenleg csatlakoztatott készülékek nem fognak láthatóként megjelenni. Aktiváld a helymeghatározást (Pl: GPS) az Android 6 készülékeden. Kapcsold ki a Privacy Guard-ban a Gadgetbridge-et (Ha van Privacy Guard beállításod), különben az alkalmazás kifagyhat, illetve újraindíthatja a készükéked. Ha nem található az eszköz pár percen bellül, próbáld újraindítani a telefonod.</string>
<string name="discovery_dont_pair">Nem párosított</string>
<string name="discovery_enable_bluetooth">Engedélyezd a Bluetooth-ot az eszközök felderítéséhez.</string>
<string name="discovery_pair_question">Válaszd ki a Párosítást az eszköz párosításához. Ha ez nem sikerül, próbáld meg újra párosítás nélkül.</string>
<string name="discovery_pair_title">Párosítsam a(z) %1$s?</string>
<string name="discovery_successfully_bonded">Sikeres párosítás: %1$s.</string>
<string name="discovery_trying_to_connect_to">Csatlakozási kísérlet: %1$s</string>
<string name="discovery_yes_pair">Párosítás</string>
<string name="distance">Távolság</string>
<string name="find_device_you_found_it">Megtaláltad!</string>
<string name="heart_rate">Pulzus</string>
<string name="mi2_dnd_automatic">Automatikus (alvás érzékelés)</string>
<string name="mi2_dnd_off">Ki</string>
<string name="mi2_dnd_scheduled">Időzített (intervallumú)</string>
<string name="mi2_enable_text_notifications">Szöveges értesítés</string>
<string name="mi2_enable_text_notifications_summary"><![CDATA[Needs firmware >= 1.0.1.28 és Mili_pro.ft* telepítve.]]></string>
<string name="mi2_fw_installhandler_fw53_hint">Ezt a verziót kell telepítened %1$s firmware telepítés előtt!</string>
<string name="mi2_prefs_display_items">Kijelző elemek</string>
<string name="mi2_prefs_display_items_summary">Válaszd ki a band-en megjelenő elemeket</string>
<string name="mi2_prefs_do_not_disturb">Ne zavarj</string>
<string name="mi2_prefs_do_not_disturb_end">Végidő</string>
<string name="mi2_prefs_do_not_disturb_start">Kezdő idő</string>
<string name="mi2_prefs_do_not_disturb_summary">A band nem fog értesítéseket kapni, amíg aktiv</string>
<string name="mi2_prefs_goal_notification">Cél értesítés</string>
<string name="mi2_prefs_goal_notification_summary">A band rezegni fog, amikor elérted a napi lépés célod</string>
<string name="mi2_prefs_inactivity_warnings">Inaktivitás figyelmeztetés</string>
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Inaktivitás figyelmezetetések tiltása ennyi időre</string>
<string name="mi2_prefs_inactivity_warnings_summary">A band rezegni fog, amikor egy ideje már inaktív vagy</string>
<string name="mi2_prefs_inactivity_warnings_threshold">Inaktivitási határérték (percben)</string>
<string name="mi2_prefs_rotate_wrist_to_switch_info">Forgasd a csuklód az információ váltáshoz</string>
<string name="miband2_prefs_timeformat">Mi2: Időformátum</string>
<string name="p_alarm_clock"></string>
<string name="p_automatic">automatikus</string>
<string name="p_battery">akkumulátor</string>
<string name="p_call_privacy_mode_complete">kész</string>
<string name="p_call_privacy_mode_name">név</string>
<string name="p_call_privacy_mode_off">ki</string>
<string name="p_calories">kalória</string>
<string name="p_clock">óra</string>
<string name="p_distance">távolság</string>
<string name="p_long">hosszú</string>
<string name="p_medium">közepes</string>
<string name="p_off">ki</string>
<string name="p_pebble_privacy_mode_complete">kész</string>
<string name="p_pebble_privacy_mode_content">tartalom</string>
<string name="p_pebble_privacy_mode_off">ki</string>
<string name="p_ring"></string>
<string name="p_scheduled">időzített</string>
<string name="p_short">rövid</string>
<string name="p_steps">lépések</string>
<string name="p_timeformat_24h">24ó</string>
<string name="p_timeformat_am_pm">am/pm</string>
<string name="p_unit_imperial">imperial</string>
<string name="pref_call_privacy_mode_complete">Név és szám rejtése</string>
<string name="pref_call_privacy_mode_name">Név rejtése, de a szám mutatása</string>
<string name="pref_call_privacy_mode_number">Szám rejtése, de a név mutatása</string>
<string name="pref_call_privacy_mode_off">Név és szám mutatása</string>
<string name="pref_header_pebble_timeline">Pebble Idővonal</string>
<string name="pref_header_privacy">Adatvédelem</string>
<string name="pref_pebble_privacy_mode_complete">Csak az értesítési ikon mutatása</string>
<string name="pref_pebble_privacy_mode_content">Az értesítés eltolása képernyőn</string>
<string name="pref_pebble_privacy_mode_off">Normál értesítések</string>
<string name="pref_screen_notification_profile_alarm_clock">Ébresztőóra</string>
<string name="pref_summary_autoremove_notifications">Az értesítések automatikus eltávolítsa, ha az Androidos eszközön eltávolítottad</string>
<string name="pref_summary_enable_calendar_sync">Naptárbejegyzések küldése az idővonalra</string>
<string name="pref_summary_enable_outgoing_call">Ennek a letiltásával a kimenő hívás rezgését is letiltja a Pebble 2/LE eszközön</string>
<string name="pref_summary_minimize_priority_off">Az ikon és az értesítés mutatása a záróképernyőn</string>
<string name="pref_summary_minimize_priority_on">Az ikon és az értesítés elrejtése a záróképernyőn</string>
<string name="pref_summary_pebble_always_ack_pebblekit">Minden esetben azonnal felismeri az üzeneteket, amelyeket külső harmadik alkalmazásoknak küldenek.</string>
<string name="pref_summary_pebble_mtu_limit">Ha a Pebble 2/Pebble LE nem működik elvártan, próbáld beállítani az MTU limitet (az érvényes tartomány: 20-512)</string>
<string name="pref_summary_setup_bt_pairing">Kapcsold ki ezt, ha gondod van a csatlakozással</string>
<string name="pref_summary_transliteration">Engedélyezd ezt, ha az eszközöd nem támogatja a nyelvedhez tartozó betűtípust (Jelenleg ez csak a Ciril)</string>
<string name="pref_title_autoremove_notifications">Automatikusan törölje az eltávolított értesítéseket</string>
<string name="pref_title_call_privacy_mode">Hívás Adatvédelmi Mód</string>
<string name="pref_title_enable_calendar_sync">Naptár szinkronizálása</string>
<string name="pref_title_enable_outgoing_call">Kimenő hívások támogatása</string>
<string name="pref_title_general_autostartonboot">Automatikus indulás</string>
<string name="pref_title_minimize_priority">Gadgetbridge értesítések elrejtése</string>
<string name="pref_title_pebble_always_ack_pebblekit">Korai ACK PebbleKit</string>
<string name="pref_title_pebble_mtu_limit">Pebble 2/LE GATT MTU limit</string>
<string name="pref_title_pebble_privacy_mode">Adatvédelmi mód</string>
<string name="weather_notification_label">Bizonyosodj meg róla, hogy a skin támogatja-e az Időjárás értesítések megjelenítését. Nincs szükség konfigurációra. A Pebble app management-ben tudod engedélyezni a rendszer időjárás alkalmazását. Azok a skinek amik támogatják az időjárás értesítésket, automatikusan megfogják jeleníteni azt.</string>
<string name="pref_title_setup_bt_pairing">Bluetooth párosítás engedélyezése</string>
<string name="pref_title_timeformat">Időformátum</string>
<string name="pref_title_transliteration">Transzliteráció</string>
<string name="pref_title_unit_system">Egységek</string>
<string name="preferences_hplus_settings">HPlus/Makibes Beállítások</string>
<string name="prefs_title_all_day_heart_rate">Egésznapos pulzusmérés</string>
<string name="stats_title">Sebesség Zónák</string>
<string name="stats_x_axis_label">Összes perc</string>
<string name="stats_y_axis_label">Percenkénti lépések</string>
<string name="pref_summary_setup_bt_pairing">Kapcsold ki ezt, ha gondod van a csatlakozással</string>
<string name="unit_metric">Metrikus</string>
<string name="unit_imperial">Imperiál</string>
<string name="timeformat_24h">24H</string>
<string name="timeformat_am_pm">AM/PM</string>
<string name="unit_imperial">Imperiál</string>
<string name="unit_metric">Metrikus</string>
<string name="weeksleepchart_sleep_a_week">Heti alvás</string>
<string name="weeksleepchart_today_sleep_description">Mai alvás, cél: %1$s</string>
<string name="weather_notification_label">Bizonyosodj meg róla, hogy a skin támogatja-e az Időjárás értesítések megjelenítését. Nincs szükség konfigurációra. A Pebble app management-ben tudod engedélyezni a rendszer időjárás alkalmazását. Azok a skinek amik támogatják az időjárás értesítésket, automatikusan megfogják jeleníteni azt.</string>
<string name="pref_title_screentime">Kijelző bekapcsolvatartásának ideje</string>
<string name="pref_screen_notification_profile_alarm_clock">Ébresztőóra</string>
<string name="StringUtils_sender"> (%1$s)</string>
<string name="find_device_you_found_it">Megtaláltad!</string>
<string name="miband2_prefs_timeformat">Mi2: Időformátum</string>
<string name="mi2_fw_installhandler_fw53_hint">Ezt a verziót kell telepítened %1$s firmware telepítés előtt!</string>
<string name="mi2_enable_text_notifications">Szöveges értesítés</string>
<string name="mi2_enable_text_notifications_summary"><![CDATA[Needs firmware >= 1.0.1.28 és Mili_pro.ft* telepítve.]]></string>
<string name="off">ki</string>
<string name="mi2_dnd_off">Ki</string>
<string name="mi2_dnd_automatic">Automatikus (alvás érzékelés)</string>
<string name="mi2_dnd_scheduled">Időzített (idő intervallum)</string>
<string name="discovery_attempting_to_pair">Csatlakozási kísérlet az eszközhöz: %1$s</string>
<string name="discovery_bonding_failed_immediately">A csatlakozás azonnal megszkadt: %1$s</string>
<string name="discovery_trying_to_connect_to">Csatlakozási kísérlet: %1$s</string>
<string name="discovery_enable_bluetooth">Engedélyezd a Bluetooth-ot az eszközök felderítéséhez.</string>
<string name="discovery_successfully_bonded">Sikeres párosítás: %1$s.</string>
<string name="discovery_pair_title">Párosítsam a(z) %1$s?</string>
<string name="discovery_pair_question">Válaszd ki a Párosítást az eszköz párosításához. Ha ez nem sikerül, próbáld meg újra párosítás nélkül.</string>
<string name="discovery_yes_pair">Párosítás</string>
<string name="discovery_dont_pair">Nem párosított</string>
</resources>

View File

@ -76,7 +76,7 @@
<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="pref_summary_transliteration">お使いのデバイスがあなたの言語のフォントをサポートしていない場合、これを有効にしてください</string>
<string name="always">いつも</string>
<string name="when_screen_off">スクリーンがオフのとき</string>
<string name="never">なし</string>
@ -276,6 +276,9 @@
<string name="chart_steps">歩数</string>
<string name="calories">カロリー</string>
<string name="distance">距離</string>
<string name="clock">時計</string>
<string name="heart_rate">心拍数</string>
<string name="battery">バッテリー</string>
<string name="liveactivity_live_activity">生活活動</string>
<string name="weeksteps_today_steps_description">今日の歩数、目標: %1$s</string>
<string name="pref_title_dont_ack_transfer">活動データ転送に応答しない</string>
@ -303,7 +306,20 @@
<string name="miband2_prefs_dateformat">Mi2: 日付形式</string>
<string name="dateformat_time">時間</string>
<string name="dateformat_date_time"><![CDATA[時間 & 日付]]></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_activate_display_on_lift">持ち上げ時に表示を有効にする</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>
<string name="FetchActivityOperation_about_to_transfer_since">%1$s からのデータを転送します</string>
<string name="waiting_for_reconnect">再接続の待機中</string>
<string name="activity_prefs_about_you">あなたについて</string>
@ -371,6 +387,9 @@
<string name="mi2_enable_text_notifications">テキスト通知</string>
<string name="mi2_enable_text_notifications_summary"><![CDATA[ファームウェア >= 1.0.1.28 と Mili_pro.ft* をインストールしていることが必要です。]]></string>
<string name="off">オフ</string>
<string name="mi2_dnd_off">オフ</string>
<string name="mi2_dnd_automatic">自動 (睡眠検出)</string>
<string name="mi2_dnd_scheduled">スケジュール (期間)</string>
<string name="discovery_attempting_to_pair">%1$s とペアを試みています</string>
<string name="discovery_bonding_failed_immediately">%1$s との接続がすぐに失敗しました。</string>
<string name="discovery_trying_to_connect_to">接続の試行中: %1$s</string>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary_light" type="color">#ff5000</color>
<color name="primarydark_light" type="color">#f0f03000</color>
<color name="primary_light" type="color">#ff3d00</color>
<color name="primarydark_light" type="color">#dd2c00</color>
<color name="primary_dark" type="color">#f03000</color>
<color name="primarydark_dark" type="color">#f0f03000</color>
<color name="primary_dark" type="color">#ff3d00</color>
<color name="primarydark_dark" type="color">#dd2c00</color>
<color name="accent" type="color">#0091ea</color>

View File

@ -46,6 +46,9 @@
<!-- Strings related to AppBlacklist -->
<string name="title_activity_appblacklist">Notification Blacklist</string>
<!-- Strings related to CalBlacklist -->
<string name="title_activity_calblacklist">Blacklisted Calendars</string>
<!-- 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>
@ -89,7 +92,7 @@
<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 (Currently Cyrillic only)</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>
@ -104,6 +107,7 @@
<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_title_canned_replies">Replies</string>

View File

@ -1,5 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<changelog>
<release
version="0.20.0"
versioncode="98">
<change>Inital Amazfit Bip support (WIP)</change>
<change>Various theming fixes</change>
<change>Add workaround for blacklist not properly persisting</change>
<change>Handle resetting language to default properly</change>
<change>Pebble: Pass booleans from Javascript Appmessage correctly</change>
<change>Pebble: Make local configuration pages work on most recent webview implementation</change>
<change>Pebble: Allow to blacklist calendars</change>
<change>Add greek transliteration support</change>
<change>Various visual improvements to charts</change>
</release>
<release version="0.19.4" versioncode="97">
<change>Replace or relicense CC-NC licensed icons to satisfy F-Droid</change>
<change>Mi Band 2: Make infos to display on the Band configurable</change>

View File

@ -208,6 +208,9 @@
android:key="enable_calendar_sync"
android:summary="@string/pref_summary_enable_calendar_sync"
android:title="@string/pref_title_enable_calendar_sync" />
<Preference
android:key="pref_key_blacklist_calendars"
android:title="@string/pref_blacklist_calendars" />
<CheckBoxPreference
android:key="send_sunrise_sunset"
android:summary="@string/pref_summary_sunrise_sunset"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 709 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB