diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ae855c6f8..10050eaef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -261,6 +261,7 @@ diff --git a/app/src/main/assets/app_config/configure.html b/app/src/main/assets/app_config/configure.html index 87188f128..68edb92d0 100644 --- a/app/src/main/assets/app_config/configure.html +++ b/app/src/main/assets/app_config/configure.html @@ -1,6 +1,6 @@ - + @@ -52,14 +52,16 @@ - -
+ +

Url of the configuration:

- +
-
+

In case of "network error" after saving settings in the wathchapp, copy the "network error" URL and paste it here:


@@ -67,9 +69,11 @@ configuration
-
+

Incoming configuration data:

- +
diff --git a/app/src/main/assets/app_config/js/gadgetbridge_boilerplate.js b/app/src/main/assets/app_config/js/gadgetbridge_boilerplate.js index a40bf2d7e..7738e6f53 100644 --- a/app/src/main/assets/app_config/js/gadgetbridge_boilerplate.js +++ b/app/src/main/assets/app_config/js/gadgetbridge_boilerplate.js @@ -1,3 +1,6 @@ +//clay stores the values in the localStorage +localStorage.clear(); + function loadScript(url, callback) { // Adding the script tag to the head as suggested before var head = document.getElementsByTagName('head')[0]; @@ -29,46 +32,63 @@ function getURLVariable(variable, defaultValue) { return defaultValue || false; } +function showStep(desiredStep) { + var steps = document.getElementsByClassName("step"); + var testStep = null; + for (var i = 0; i < steps.length; i ++) { + if (steps[i].id == desiredStep) + testStep = steps[i].id; + } + if (testStep !== null) { + for (var i = 0; i < steps.length; i ++) { + steps[i].style.display = 'none'; + } + document.getElementById(desiredStep).style.display="block"; + } +} + function gbPebble() { this.configurationURL = null; this.configurationValues = null; + var self = this; this.addEventListener = function(e, f) { if(e == 'ready') { - this.ready = f; + self.ready = f; } if(e == 'showConfiguration') { - this.showConfiguration = f; + self.showConfiguration = f; } if(e == 'webviewclosed') { - this.parseconfig = f; + self.parseconfig = f; } if(e == 'appmessage') { - this.appmessage = f; + self.appmessage = f; } } this.removeEventListener = function(e, f) { if(e == 'ready') { - this.ready = null; + self.ready = null; } if(e == 'showConfiguration') { - this.showConfiguration = null; + self.showConfiguration = null; } if(e == 'webviewclosed') { - this.parseconfig = null; + self.parseconfig = null; } if(e == 'appmessage') { - this.appmessage = null; + self.appmessage = null; } } this.actuallyOpenURL = function() { - document.getElementById('step1compat').style.display="block"; - window.open(this.configurationURL.toString(), "config"); + showStep("step1compat"); + window.open(self.configurationURL.toString(), "config"); } this.actuallySendData = function() { - GBjs.sendAppMessage(this.configurationValues); + GBjs.sendAppMessage(self.configurationValues); + GBjs.closeActivity(); } //needs to be called like this because of original Pebble function name @@ -76,7 +96,7 @@ function gbPebble() { if (url.lastIndexOf("http", 0) === 0) { document.getElementById("config_url").innerHTML=url; var UUID = GBjs.getAppUUID(); - this.configurationURL = new Uri(url).addQueryParam("return_to", "gadgetbridge://"+UUID+"?config=true&json="); + self.configurationURL = new Uri(url).addQueryParam("return_to", "gadgetbridge://"+UUID+"?config=true&json="); } else { //TODO: add custom return_to location.href = url; @@ -90,7 +110,7 @@ function gbPebble() { this.sendAppMessage = function (dict, callbackAck, callbackNack){ try { - this.configurationValues = JSON.stringify(dict); + self.configurationValues = JSON.stringify(dict); document.getElementById("jsondata").innerHTML=this.configurationValues; return callbackAck; } @@ -108,6 +128,10 @@ function gbPebble() { return GBjs.getWatchToken(); } + this.getTimelineToken = function() { + return ''; + } + this.showSimpleNotificationOnPebble = function(title, body) { GBjs.gbLog("app wanted to show: " + title + " body: "+ body); } @@ -116,17 +140,14 @@ function gbPebble() { } this.parseReturnedPebbleJS = function() { - var str = document.getElementById('pastereturn').value; var needle = "pebblejs://close#"; if (str.split(needle)[1] !== undefined) { var t = new Object(); t.response = unescape(str.split(needle)[1]); - this.parseconfig(t); - document.getElementById('step1').style.display="none"; - document.getElementById('step1compat').style.display="none"; - document.getElementById('step2').style.display="block"; + self.parseconfig(t); + showStep("step2"); } else { console.error("No valid configuration found in the entered string."); } @@ -136,13 +157,11 @@ function gbPebble() { var Pebble = new gbPebble(); var jsConfigFile = GBjs.getAppConfigurationFile(); +document.addEventListener('DOMContentLoaded', function(){ if (jsConfigFile != null) { loadScript(jsConfigFile, function() { if (getURLVariable('config') == 'true') { - document.getElementById('step1').style.display="none"; - document.getElementById('step1compat').style.display="none"; - document.getElementById('step2').style.display="block"; - + showStep("step2"); var json_string = unescape(getURLVariable('json')); var t = new Object(); t.response = json_string; @@ -154,3 +173,4 @@ if (jsConfigFile != null) { } }); } +}, false); \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java index f2d302643..f756ecb5f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java @@ -28,6 +28,7 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; @@ -37,7 +38,9 @@ public class ExternalPebbleJSActivity extends GBActivity { private static final Logger LOG = LoggerFactory.getLogger(ExternalPebbleJSActivity.class); private UUID appUuid; + private Uri confUri; private GBDevice mGBDevice = null; + private WebView myWebView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -46,27 +49,15 @@ public class ExternalPebbleJSActivity extends GBActivity { Bundle extras = getIntent().getExtras(); if (extras != null) { mGBDevice = extras.getParcelable(GBDevice.EXTRA_DEVICE); + appUuid = (UUID) extras.getSerializable(DeviceService.EXTRA_APP_UUID); } else { throw new IllegalArgumentException("Must provide a device when invoking this activity"); } - String queryString = ""; - Uri uri = getIntent().getData(); - if (uri != null) { - //getting back with configuration data - try { - appUuid = UUID.fromString(uri.getHost()); - queryString = uri.getEncodedQuery(); - } catch (IllegalArgumentException e) { - Log.d("returned uri: ", uri.toString()); - } - } else { - appUuid = (UUID) getIntent().getSerializableExtra("app_uuid"); - } setContentView(R.layout.activity_external_pebble_js); - WebView myWebView = (WebView) findViewById(R.id.configureWebview); + myWebView = (WebView) findViewById(R.id.configureWebview); myWebView.clearCache(true); myWebView.setWebViewClient(new GBWebClient()); myWebView.setWebChromeClient(new GBChromeClient()); @@ -78,7 +69,32 @@ public class ExternalPebbleJSActivity extends GBActivity { JSInterface gbJSInterface = new JSInterface(); myWebView.addJavascriptInterface(gbJSInterface, "GBjs"); - myWebView.loadUrl("file:///android_asset/app_config/configure.html?" + queryString); + myWebView.loadUrl("file:///android_asset/app_config/configure.html"); + + } + + @Override + protected void onNewIntent(Intent incoming) { + super.onNewIntent(incoming); + confUri = incoming.getData(); + } + + @Override + protected void onResume() { + super.onResume(); + String queryString = ""; + + if (confUri != null) { + //getting back with configuration data + try { + appUuid = UUID.fromString(confUri.getHost()); + queryString = confUri.getEncodedQuery(); + } catch (IllegalArgumentException e) { + GB.toast("returned uri: " + confUri.toString(), Toast.LENGTH_LONG, GB.ERROR); + } + myWebView.loadUrl("file:///android_asset/app_config/configure.html?" + queryString); + } + } private JSONObject getAppConfigurationKeys() { @@ -112,8 +128,7 @@ public class ExternalPebbleJSActivity extends GBActivity { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("http://") || url.startsWith("https://")) { - Intent i = new Intent(Intent.ACTION_VIEW, - Uri.parse(url)); + Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(i); } else { url = url.replaceFirst("^pebblejs://close#", "file:///android_asset/app_config/configure.html?config=true&json="); @@ -222,6 +237,11 @@ public class ExternalPebbleJSActivity extends GBActivity { //specification says: A string that is is guaranteed to be identical for each Pebble device for the same app across different mobile devices. The token is unique to your app and cannot be used to track Pebble devices across applications. see https://developer.pebble.com/docs/js/Pebble/ return "gb" + appUuid.toString(); } + + @JavascriptInterface + public void closeActivity() { + finish(); + } } @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java index bc92624fd..fac8c7ebd 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java @@ -36,6 +36,7 @@ import nodomain.freeyourgadget.gadgetbridge.activities.ExternalPebbleJSActivity; import nodomain.freeyourgadget.gadgetbridge.adapter.GBDeviceAppAdapter; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp; +import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.PebbleProtocol; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; @@ -338,7 +339,7 @@ public abstract class AbstractAppManagerFragment extends Fragment { GBApplication.deviceService().onAppStart(selectedApp.getUUID(), true); Intent startIntent = new Intent(getContext().getApplicationContext(), ExternalPebbleJSActivity.class); - startIntent.putExtra("app_uuid", selectedApp.getUUID()); + startIntent.putExtra(DeviceService.EXTRA_APP_UUID, selectedApp.getUUID()); startIntent.putExtra(GBDevice.EXTRA_DEVICE, mGBDevice); startActivity(startIntent); return true; diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml new file mode 100644 index 000000000..75ace991a --- /dev/null +++ b/app/src/main/res/values-hu/strings.xml @@ -0,0 +1,242 @@ + + + Gadgetbridge + HR: + (ismeretlen) + Aktivitás + Mély alvás + Könnyű alvás + Nem viselt + Hibakeresés + Új eszköz csatlakoztatása + Kilépés + Beállítások + Rólad + Nem + Magasság cm-ben + Preferált alvási idő órában + Testsúly kg-ban + Születési év + Aktivitásod és alvásod + Widget hozzáadása + Pén + Hét + Szo + Okos ébresztés + Vas + Csü + Ked + Sze + mindig + Használja az Android Bluetooth párosítás ablakot eszköz párosításához. + Beállítás + A következő alkalmazást fogod telepíteni:\n\n\n%1$s Version %2$s : %3$s\n + Telepítés + Aktiválás + Deaktiválás + Törlés + Törlés és eltávolítás a gyorsítótárból + Újratelepítés + %1$s by %2$s + Ébresztő beállítva: %1$02d:%2$02d + Zzz + hitelesítés + hitelesítés szükséges + A Bluetooth ki van kapcsolva. + A Bluetooth nem támogatott. + Aktivitási adatok lekérdezése. + Eszköz kép + Nem lehet kapcsolódni: %1$s + Nem lehet csatlakozni. Rossz Bluetooth cím? + Nincs adat. Szinkronizáltál? + Lépések + Pulzus + csatlakoztatva + csatlakozás + FW: %1$s + HW: %1$s FW: %2$s + A vibrálás leállításához: Mégse. + Elveszett eszköz keresése + Szétcsatlakoztatás + Szinkronálás + Elveszett eszköz keresése... + Aktivitásod (ALFA) + Ébresztők beállítása + Alvási adatok (ALFA) + Képernyőkép készítése + Hiba a futtatáskor: \'%1$s\' + FW: %1$s + HW: %1$s + Nincs csatlakoztatva. + %1$s (%2$s) + Engedélyezd a készüléked láthatóságát. A csatlakoztatott készülékek valószínűleg nem fognak megjelenni. Ha a készüléked nem jelenik meg 2 perc elteltével, próbáld újra, majd indítsd újra a telefonod. + Megjegyzés: + Keresés kezdése + Keresés leállítása + Hiba a könyvtár létrehozáskor a naplófájlok számára: %1$s + + FIRMWARE-T PRÓBÁLSZ TELEPÍTENI, CSAK SAJÁT FELELŐSSÉGRE TEDD!.\n\n\n Ez a firmware ehhez a hardware-verzióhoz tartozik: %s + Firmware-t fogsz telepíteni: %1$s és %2$s a mostani helyett a Mi Band-edre. + Firmware-t fogsz telepíteni: %s a mostani helyett a Mi Band-edre. + A fájlt nem lehet telepíteni, a készülék nincs készen. + Csatlakozás az eszközhöz: %1$s + Ez a firmware nem kompatibilis az eszközöddel. + A Gadgetbridge fut + inicializált + inicializálás + sikertelen telepítés! + sikeres telepítés + A telepítéshez szükséges segédfájl nem található. + Kérlek várj a telepítési státusz megállapításáig... + bináris telepítés %1$d/%2$d + bal + Jelenlegi lépés/perc + Pulzus + Aktivitás kezdése + Lépésnapló + Lépés/perc napló + Összes lépés + Aktuális aktivitás + férfi + Nincs találat a mac címre, nem lehet párosítani. + Ez a firmware tesztelt és ismerten kompatibilis a Gadgetbridge-el. + Ha ennek ellenére is telepíteni szeretnéd, és a dolgok jól működnek, utána kérlek jelezd a Gadgetbridge fejlesztőinek, hogy fehérlistára tehessék a + "Ez a firmware nincs tesztelve, lehetséges, hogy nem kompatibilis a Gadgetbridge-el.\n\nNem javasoljuk, hogy feltelepítsd a Mi Band-edre!" + Kompatibilis verzió + Nem kompatibilis firmware + Nem tesztelt verzió! + Mi Band Firmware %1$s + Párosítás: %s… + Amikor vibrálni kezd a Mi Band-ed, érintsd meg párszor egymás után. + Nem helyes felhasználói adatok vannak megadva, alapértelmezett adatokat fogok használni. + Név/Alias + Eszköz időeltolása órákban (Hogy az éjszakai műszakban dolgozók alvását is érzékelje.) + Napi céllépésszám + + Pulzus szenzor használata az alvás érzékelés javításához + + Rezgés + Melyik kezeden hordod? + N/A + soha + nincs csatlakozva + Utoljára töltve: %s \n + Töltések száma: %s + %1$s fennmaradó akkumulátor töltés: %2$s%% + Alacsony akkumulátorszint + egyéb + Sikertelen telepítés: a firmware nem kompatibilis a Pebble hardver verzióddal. + Nem sikerült telepíteni a fájlt: %1$s + Pebble Firmware %1$s + %1$s (%2$s) + Helyes hardververzió + Hardververzió eltérés! + Tiltott alkalmazások + Alapértelmezett + Aktivitásmérők + Dátum és idő + Fejlesztői beállítások + Általános beállítások + Helység + Értesítések + Rezgésszám + Rezgésbeállítások + Általános értesítések + Bejővő hívás értesítés + K9 E-Mail értesítés + Pebble értesítés + SMS értesítés + Rezgés profil + Idő szinkronizálása csatlakozásnál és Android idő- vagy időzónaváltoztatásnál. + + Az adatokat a Mi Band-en fogja tárolni szinkronizálás után is. Hasznos, ha a GadgetBridge-et együtt használod más alkalmazásokkal. + Ez segíthet, ha a firmware frissítés sikertelen. + Értesítések tiltása a Ne zavarj üzemmód használatakor. + Támogatás az alkalmazásoknak, amik értesítést küldenek a Pebble-nek Intent-en keresztül. Ez beszélgetésre használható. + Ez az opció erőlteti az utolsó értesítési protokollt a firmware verziótól függően. CSAK AKKOR ENGEDÉLYEZD, HA TUDOD MIT CSINÁLSZ! + Nem tesztelt funkciók engedélyezése. CSAK AKKOR ENGEDÉLYEZD, HA TUDOD MIT CSINÁLSZ! + A napkelte és napnyugta idejének küldése a Pebble idővonalra a hely és idő alapján + Sötét + Világos + Preferált zenelejátszó + Előre megírt válaszok + Közös előtag + Idő szinkronizálás + Mi Band cím + Harmadik féltől származó Android alkalmazások hozzáférésének engedélyezése + Kapcsolódjon az eszközhöz a Bluetooth bekapcsolásakor + Újracsatlakozás automatikusan + Aktivitásadatok eszközön hagyása + + Földrajzi hely + Szélesség + Hosszúság + Használja a low-latency módot a Firmware frissítésnél + Ne zavarj mód + Telefonhívások + Általános értesítési támogatás + K9-Mail + Pebble Üzenetek + Ismétlések + SMS + Preferált Aktivitásmérők + Erőltetett értesítés protokoll + Nem tesztelt funkciók engedélyezése + Újracsatlakozási kísérletek száma + Pebble beállítások + Pebble Health szinkronizálása + Misfit szinkronizálás + Morpheuz szinkronizálás + Napkelte és napnyugta + Téma + … és amikor a kijelző be van kapcsolva + Naplófájlok írása + Eszközspecifikus beállítások + MI Band beállítások + jobb + Ettől %1$s eddig %2$s + Az alvásod + Érintsd meg az eszközt a csatlakozáshoz + Érintsd meg az eszközt az aktivitáshoz + Érintsd meg az eszközt az alkalmazáskezelőhöz + Teszt + Teszt értesítés + Ez egy tesztértesítés a Gadgetbridge-től + Ébresztés részletek + Eszköz párosítása + Értesítés tiltólista + Alkalmazás kezelő + Aktivitásod + Gadgetbridge + Hibakeresés + Eszköz fellelhetőség + FW/Alkalmazás telepítő + Párosítsd a Mi Band-ed + Ébresztések beállítása + Beállítások + Alvástörténet + ismeretlen állapot + Nem küldött Firmware + Probléma volt a Firmware metaadatainak küldésekor + A Firmware telepítés kész + A Firmware telepítés kész, az eszköz újraindítása… + Firmware frissítés folyamatban + Probléma volt a firmware küldésekor. NE INDÍTSD ÚJRA a Mi Band-ed! + Firmware írási probléma + Firmware frissítése… + Mindegyik ébresztés tiltva van + Adatok fogadása: %1$s %2$s -tól + Hiba történt az ébresztések beállításakor, kérlek próbáld újra! + Ébresztések beállítva! + Ébresztőóra + Hosszú + Közepes + Csörgés + Rövid + Szaggatott + Vízcsepp + várakozás az újracsatlakozásra + Lépések ma, cél: %1$s + Lépések a héten + amikor a kijelző ki van kapcsolva + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 8cf1b2874..830f7002d 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -24,6 +24,7 @@ Українська 한국어 日本語 + Magyar @@ -39,6 +40,7 @@ uk ko ja + hu