mirror of
https://github.com/adolfintel/OpenPods.git
synced 2026-09-15 07:16:10 -04:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
271203324e | ||
|
|
9a86e8f2e9 | ||
|
|
bb9479eabd | ||
|
|
85f25ce813 | ||
|
|
fac057cf1c | ||
|
|
23546b4ed2 | ||
|
|
9450983100 | ||
|
|
4ee083e0f5 | ||
|
|
273e916532 | ||
|
|
4c3a12f2bc | ||
|
|
feda23c352 | ||
|
|
cb3d83d309 | ||
|
|
c271d47f34 | ||
|
|
ffd9bdcf89 | ||
|
|
54c3d08039 | ||
|
|
66e1b8cc81 | ||
|
|
0d0a539800 | ||
|
|
0d87d7d184 | ||
|
|
219bf8f25a | ||
|
|
0042eea5c4 |
@@ -6,8 +6,8 @@ android {
|
|||||||
applicationId "com.dosse.airpods"
|
applicationId "com.dosse.airpods"
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 23
|
targetSdkVersion 23
|
||||||
versionCode 10
|
versionCode 13
|
||||||
versionName '0.10'
|
versionName '1.3'
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* This is the class that does most of the work. It has 3 functions:
|
* This is the class that does most of the work. It has 3 functions:
|
||||||
* - Detect when AirPods are detected
|
* - Detect when AirPods are detected
|
||||||
* - Receive beacons from AirPods and decode them (easier said than done thanks do google's autism)
|
* - Receive beacons from AirPods and decode them (easier said than done thanks to google's autism)
|
||||||
* - Display the notification with the status
|
* - Display the notification with the status
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -47,6 +47,8 @@ public class PodsService extends Service {
|
|||||||
private static BluetoothLeScanner btScanner;
|
private static BluetoothLeScanner btScanner;
|
||||||
private static int leftStatus=15, rightStatus=15, caseStatus=15;
|
private static int leftStatus=15, rightStatus=15, caseStatus=15;
|
||||||
private static boolean chargeL=false, chargeR=false, chargeCase=false;
|
private static boolean chargeL=false, chargeR=false, chargeCase=false;
|
||||||
|
private static final String MODEL_AIRPODS_NORMAL="airpods12", MODEL_AIRPODS_PRO="airpodspro";
|
||||||
|
private static String model=MODEL_AIRPODS_NORMAL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The following method (startAirPodsScanner) creates a bluetoth LE scanner.
|
* The following method (startAirPodsScanner) creates a bluetoth LE scanner.
|
||||||
@@ -70,6 +72,7 @@ public class PodsService extends Service {
|
|||||||
* - The 12th and 13th characters in the string represent the charge of the left and right pods. Under unknown circumstances, they are right and left instead (see isFlipped). Values between 0 and 10 are battery 0-100%; Value 15 means it's disconnected
|
* - The 12th and 13th characters in the string represent the charge of the left and right pods. Under unknown circumstances, they are right and left instead (see isFlipped). Values between 0 and 10 are battery 0-100%; Value 15 means it's disconnected
|
||||||
* - The 15th character in the string represents the charge of the case. Values between 0 and 10 are battery 0-100%; Value 15 means it's disconnected
|
* - The 15th character in the string represents the charge of the case. Values between 0 and 10 are battery 0-100%; Value 15 means it's disconnected
|
||||||
* - The 14th character in the string represents the "in charge" status. Bit 0 (LSB) is the left pod; Bit 1 is the right pod; Bit 2 is the case. Bit 3 might be case open/closed but I'm not sure and it's not used
|
* - The 14th character in the string represents the "in charge" status. Bit 0 (LSB) is the left pod; Bit 1 is the right pod; Bit 2 is the case. Bit 3 might be case open/closed but I'm not sure and it's not used
|
||||||
|
* - The 7th character in the string represents the AirPods model (E=AirPods pro)
|
||||||
*
|
*
|
||||||
* After decoding a beacon, the status is written to leftStatus, rightStatus, caseStatus, chargeL, chargeR, chargeCase so that the NotificationThread can use the information
|
* After decoding a beacon, the status is written to leftStatus, rightStatus, caseStatus, chargeL, chargeR, chargeCase so that the NotificationThread can use the information
|
||||||
*
|
*
|
||||||
@@ -151,6 +154,7 @@ public class PodsService extends Service {
|
|||||||
chargeL = (chargeStatus & 0b00000001) != 0;
|
chargeL = (chargeStatus & 0b00000001) != 0;
|
||||||
chargeR = (chargeStatus & 0b00000010) != 0;
|
chargeR = (chargeStatus & 0b00000010) != 0;
|
||||||
chargeCase = (chargeStatus & 0b00000100) != 0;
|
chargeCase = (chargeStatus & 0b00000100) != 0;
|
||||||
|
if(a.charAt(7)=='E') model = MODEL_AIRPODS_PRO; else model = MODEL_AIRPODS_NORMAL; //detect if these are AirPods pro or regular ones
|
||||||
lastSeenConnected = System.currentTimeMillis();
|
lastSeenConnected = System.currentTimeMillis();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
if(ENABLE_LOGGING) Log.d(TAG, "" + t);
|
if(ENABLE_LOGGING) Log.d(TAG, "" + t);
|
||||||
@@ -276,10 +280,22 @@ public class PodsService extends Service {
|
|||||||
mBuilder.setCustomBigContentView(locationDisabledBig);
|
mBuilder.setCustomBigContentView(locationDisabledBig);
|
||||||
}
|
}
|
||||||
if(notificationShowing){
|
if(notificationShowing){
|
||||||
if(ENABLE_LOGGING) Log.d(TAG,"Left: "+leftStatus+(chargeL?"+":"")+" "+"Right: "+rightStatus+(chargeR?"+":"")+" "+"Case: "+caseStatus+(chargeCase?"+":""));
|
if(ENABLE_LOGGING) Log.d(TAG,"Left: "+leftStatus+(chargeL?"+":"")+" "+"Right: "+rightStatus+(chargeR?"+":"")+" "+"Case: "+caseStatus+(chargeCase?"+":"")+" "+"Model: "+model);
|
||||||
|
if(model.equals(MODEL_AIRPODS_NORMAL)){
|
||||||
notificationBig.setImageViewResource(R.id.leftPodImg, leftStatus <= 10 ? R.drawable.left_pod : R.drawable.left_pod_disconnected);
|
notificationBig.setImageViewResource(R.id.leftPodImg, leftStatus <= 10 ? R.drawable.left_pod : R.drawable.left_pod_disconnected);
|
||||||
notificationBig.setImageViewResource(R.id.rightPodImg, rightStatus <= 10 ? R.drawable.right_pod : R.drawable.right_pod_disconnected);
|
notificationBig.setImageViewResource(R.id.rightPodImg, rightStatus <= 10 ? R.drawable.right_pod : R.drawable.right_pod_disconnected);
|
||||||
notificationBig.setImageViewResource(R.id.podCaseImg, caseStatus <= 10 ? R.drawable.pod_case : R.drawable.pod_case_disconnected);
|
notificationBig.setImageViewResource(R.id.podCaseImg, caseStatus <= 10 ? R.drawable.pod_case : R.drawable.pod_case_disconnected);
|
||||||
|
notificationSmall.setImageViewResource(R.id.leftPodImg, leftStatus <= 10 ? R.drawable.left_pod : R.drawable.left_pod_disconnected);
|
||||||
|
notificationSmall.setImageViewResource(R.id.rightPodImg, rightStatus <= 10 ? R.drawable.right_pod : R.drawable.right_pod_disconnected);
|
||||||
|
notificationSmall.setImageViewResource(R.id.podCaseImg, caseStatus <= 10 ? R.drawable.pod_case : R.drawable.pod_case_disconnected);
|
||||||
|
}else if(model.equals(MODEL_AIRPODS_PRO)){
|
||||||
|
notificationBig.setImageViewResource(R.id.leftPodImg, leftStatus <= 10 ? R.drawable.left_podpro : R.drawable.left_podpro_disconnected);
|
||||||
|
notificationBig.setImageViewResource(R.id.rightPodImg, rightStatus <= 10 ? R.drawable.right_podpro : R.drawable.right_podpro_disconnected);
|
||||||
|
notificationBig.setImageViewResource(R.id.podCaseImg, caseStatus <= 10 ? R.drawable.podpro_case : R.drawable.podpro_case_disconnected);
|
||||||
|
notificationSmall.setImageViewResource(R.id.leftPodImg, leftStatus <= 10 ? R.drawable.left_podpro : R.drawable.left_podpro_disconnected);
|
||||||
|
notificationSmall.setImageViewResource(R.id.rightPodImg, rightStatus <= 10 ? R.drawable.right_podpro : R.drawable.right_podpro_disconnected);
|
||||||
|
notificationSmall.setImageViewResource(R.id.podCaseImg, caseStatus <= 10 ? R.drawable.podpro_case : R.drawable.podpro_case_disconnected);
|
||||||
|
}
|
||||||
if(System.currentTimeMillis()-lastSeenConnected<TIMEOUT_CONNECTED) {
|
if(System.currentTimeMillis()-lastSeenConnected<TIMEOUT_CONNECTED) {
|
||||||
notificationBig.setViewVisibility(R.id.leftPodText, View.VISIBLE);
|
notificationBig.setViewVisibility(R.id.leftPodText, View.VISIBLE);
|
||||||
notificationBig.setViewVisibility(R.id.rightPodText, View.VISIBLE);
|
notificationBig.setViewVisibility(R.id.rightPodText, View.VISIBLE);
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -4,6 +4,7 @@
|
|||||||
android:layout_height="120dp"
|
android:layout_height="120dp"
|
||||||
android:padding="12dp"
|
android:padding="12dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
android:background="@color/white"
|
||||||
>
|
>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@@ -11,6 +12,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/locationDisabledText"
|
android:text="@string/locationDisabledText"
|
||||||
|
android:textColor="@color/black"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
android:layout_height="70dp"
|
android:layout_height="70dp"
|
||||||
android:padding="12dp"
|
android:padding="12dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
android:background="@color/white"
|
||||||
>
|
>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@@ -11,6 +12,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@string/locationDisabledText"
|
android:text="@string/locationDisabledText"
|
||||||
|
android:textColor="@color/black"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|||||||
@@ -17,11 +17,12 @@
|
|||||||
>
|
>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="30dp"
|
android:layout_width="40dp"
|
||||||
android:layout_height="90dp"
|
android:layout_height="90dp"
|
||||||
android:src="@drawable/left_pod"
|
android:src="@drawable/left_pod"
|
||||||
android:id="@+id/leftPodImg"
|
android:id="@+id/leftPodImg"
|
||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginBottom="6dp"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@@ -55,10 +56,12 @@
|
|||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/rightPodImg"
|
android:id="@+id/rightPodImg"
|
||||||
android:layout_width="30dp"
|
android:layout_width="40dp"
|
||||||
android:layout_height="90dp"
|
android:layout_height="90dp"
|
||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
android:src="@drawable/right_pod" />
|
android:src="@drawable/right_pod"
|
||||||
|
android:layout_marginBottom="6dp"
|
||||||
|
/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -91,10 +94,12 @@
|
|||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/podCaseImg"
|
android:id="@+id/podCaseImg"
|
||||||
android:layout_width="60dp"
|
android:layout_width="80dp"
|
||||||
android:layout_height="90dp"
|
android:layout_height="90dp"
|
||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
android:src="@drawable/pod_case" />
|
android:src="@drawable/pod_case"
|
||||||
|
android:layout_marginBottom="6dp"
|
||||||
|
/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
>
|
>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="15dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="30dp"
|
android:layout_height="30dp"
|
||||||
android:src="@drawable/left_pod"
|
android:src="@drawable/left_pod"
|
||||||
android:id="@+id/leftPodImg"
|
android:id="@+id/leftPodImg"
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
>
|
>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="15dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="30dp"
|
android:layout_height="30dp"
|
||||||
android:src="@drawable/right_pod"
|
android:src="@drawable/right_pod"
|
||||||
android:id="@+id/rightPodImg"
|
android:id="@+id/rightPodImg"
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
>
|
>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="20dp"
|
android:layout_width="25dp"
|
||||||
android:layout_height="30dp"
|
android:layout_height="30dp"
|
||||||
android:src="@drawable/pod_case"
|
android:src="@drawable/pod_case"
|
||||||
android:id="@+id/podCaseImg"
|
android:id="@+id/podCaseImg"
|
||||||
|
|||||||
@@ -5,20 +5,20 @@
|
|||||||
<string name="introAllow">Erlauben</string>
|
<string name="introAllow">Erlauben</string>
|
||||||
<string name="main1">Die App zeigt eine Benachrichtigung wenn deine AirPods verbunden sind</string>
|
<string name="main1">Die App zeigt eine Benachrichtigung wenn deine AirPods verbunden sind</string>
|
||||||
<string name="main2">Du kannst die App jetzt verstecken wenn du möchtest</string>
|
<string name="main2">Du kannst die App jetzt verstecken wenn du möchtest</string>
|
||||||
<string name="settings">Settings</string>
|
<string name="settings">Einstellungen</string>
|
||||||
|
|
||||||
<string name="noBtText">Es sieht so aus als hätte dieses Gerät kein Bluetooth LE</string>
|
<string name="noBtText">Es sieht so aus als hätte dieses Gerät kein Bluetooth LE</string>
|
||||||
<string name="locationDisabledText">Du musst Standortinformationen aktivieren, damit OpenPods den Status deiner AirPods auslesen kann</string>
|
<string name="locationDisabledText">Du musst Standortinformationen aktivieren, damit OpenPods den Status deiner AirPods auslesen kann</string>
|
||||||
<string name="supportedDevices">Unterstützte Geräte:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen</string>
|
<string name="supportedDevices">Unterstützte Geräte:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen\n• Apple AirPods Pro</string>
|
||||||
|
|
||||||
<string name="hide">App verstecken</string>
|
<string name="hide">App verstecken</string>
|
||||||
<string name="hideClicked">Das Icon wird bald verschwinden</string>
|
<string name="hideClicked">Das Icon wird bald verschwinden</string>
|
||||||
<string name="batterySaver">Battery saver (Not recommended)</string>
|
<string name="batterySaver">Stromsparmodus (nicht empfohlen)</string>
|
||||||
<string name="batterySaver_desc">Enable this if Bluetooth uses a lot of battery</string>
|
<string name="batterySaver_desc">Aktiviere diesen Modus wenn Bluetooth zu viel Batterieleistung erfordert</string>
|
||||||
<string name="about">About</string>
|
<string name="about">Über</string>
|
||||||
|
|
||||||
<string name="about1">Developed by Federico Dossena</string>
|
<string name="about1">Entwickelt von Federico Dossena</string>
|
||||||
<string name="website">Website</string>
|
<string name="website">Webseite</string>
|
||||||
<string name="github">Github</string>
|
<string name="github">Github</string>
|
||||||
<string name="donate">Donate</string>
|
<string name="donate">Spenden</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,23 +1,23 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="intro1">Esta aplicación te permite ver el estado de tus AirPods en cualquier dispositivo Android</string>
|
<string name="intro1">Esta aplicación te permite ver el estado de tus AirPods en cualquier dispositivo Android.</string>
|
||||||
<string name="intro2">Para operar, necesitamos permiso para usar Bluetooth LE (Localización) y permiso para ejecutarnos en el fondo</string>
|
<string name="intro2">Para operar necesitamos permiso para usar Bluetooth LE (Localización) y permiso para ejecutar la app en segundo plano.</string>
|
||||||
<string name="introAllow">Permitir</string>
|
<string name="introAllow">Permitir</string>
|
||||||
<string name="main1">Esta aplicación mostrará una notificación cuando tus AirPods estén conectados</string>
|
<string name="main1">Esta aplicación mostrará una notificación cuando tus AirPods estén conectados.</string>
|
||||||
<string name="main2">Puedes ocultar la app si gustas</string>
|
<string name="main2">Puedes ocultar la app si lo prefieres.</string>
|
||||||
<string name="settings">Settings</string>
|
<string name="settings">Ajustes</string>
|
||||||
|
|
||||||
<string name="noBtText">Parece que este dispositivo no tiene Bluetooth LE</string>
|
<string name="noBtText">Parece que éste dispositivo no tiene Bluetooth LE.</string>
|
||||||
<string name="locationDisabledText">Necesitas encender Localización para permitir que OpenPods lea el estado</string>
|
<string name="locationDisabledText">Necesitas activar la Localización para permitir que OpenPods lea el estado.</string>
|
||||||
<string name="supportedDevices">Dispositivos compatibles:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen</string>
|
<string name="supportedDevices">Dispositivos compatibles:\n• Apple AirPods 1ª generación\n• Apple AirPods 2ª generación\n• Apple AirPods Pro</string>
|
||||||
|
|
||||||
<string name="hide">Ocultar app</string>
|
<string name="hide">Ocultar app</string>
|
||||||
<string name="hideClicked">El ícono desaparecerá pronto</string>
|
<string name="hideClicked">El icono desaparecerá pronto</string>
|
||||||
<string name="batterySaver">Battery saver (Not recommended)</string>
|
<string name="batterySaver">Ahorro de energía (no recomendado)</string>
|
||||||
<string name="batterySaver_desc">Enable this if Bluetooth uses a lot of battery</string>
|
<string name="batterySaver_desc">Activa ésta opción si el Bluetooth consume mucha batería.</string>
|
||||||
<string name="about">About</string>
|
<string name="about">Acerca de</string>
|
||||||
|
|
||||||
<string name="about1">Developed by Federico Dossena</string>
|
<string name="about1">Desarrollado por Federico Dossena</string>
|
||||||
<string name="website">Website</string>
|
<string name="website">Página web</string>
|
||||||
<string name="github">Github</string>
|
<string name="github">Github</string>
|
||||||
<string name="donate">Donate</string>
|
<string name="donate">Donar</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<string name="noBtText">Questo dispositivo non supporta Bluetooth LE</string>
|
<string name="noBtText">Questo dispositivo non supporta Bluetooth LE</string>
|
||||||
<string name="locationDisabledText">Attiva la posizione per permttere a OpenPods di leggere lo stato</string>
|
<string name="locationDisabledText">Attiva la posizione per permttere a OpenPods di leggere lo stato</string>
|
||||||
<string name="supportedDevices">Dispositivi supportati:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen</string>
|
<string name="supportedDevices">Dispositivi supportati:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen\n• Apple AirPods Pro</string>
|
||||||
|
|
||||||
<string name="hide">Nascondi app</string>
|
<string name="hide">Nascondi app</string>
|
||||||
<string name="hideClicked">L\'icona sarà rimossa presto</string>
|
<string name="hideClicked">L\'icona sarà rimossa presto</string>
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<resources>
|
||||||
|
<string name="intro1">Это приложение позволяет Вам проверить статус ваших AirPods на любом Android-устройстве</string>
|
||||||
|
<string name="intro2">Для работы нам нужно Bluetooth LE(местоположение) и разрешение на запуск в фоновом режиме</string>
|
||||||
|
<string name="introAllow">Разрешить</string>
|
||||||
|
<string name="main1">Приложение покажет уведомление, когда будет установлено соединение с AirPods</string>
|
||||||
|
<string name="main2">Вы можете скрыть это приложение, если хотите</string>
|
||||||
|
<string name="settings">Настройки</string>
|
||||||
|
|
||||||
|
<string name="noBtText">Похоже, что Bluetooth LE не поддерживается на Вашем устройстве</string>
|
||||||
|
<string name="locationDisabledText">Вам нужно включить местоположение, чтобы разрешить OpenPods читать статус</string>
|
||||||
|
<string name="supportedDevices">Поддерживаемые устройства:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen\n• Apple AirPods Pro</string>
|
||||||
|
|
||||||
|
<string name="hide">Скрыть приложение</string>
|
||||||
|
<string name="hideClicked">Иконка скоро исчезнет</string>
|
||||||
|
<string name="batterySaver">Режим энергосбережения (Не рекомендуется)</string>
|
||||||
|
<string name="batterySaver_desc">Включите, если Bluetooth использует слишком много ресурсов</string>
|
||||||
|
<string name="about">О приложении</string>
|
||||||
|
|
||||||
|
<string name="about1">Разработано Federico Dossena</string>
|
||||||
|
<string name="website">Сайт</string>
|
||||||
|
<string name="github">Github</string>
|
||||||
|
<string name="donate">Поддержать</string>
|
||||||
|
|
||||||
|
</resources>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name" translatable="false">OpenPods</string>
|
||||||
|
<string name="intro1">Цей додаток дозволяє Вам перевірити статус ваших AirPods на будь-якому Android-пристрої</string>
|
||||||
|
<string name="intro2">Для роботи ми використовуємо Bluetooth LE (місцезнаходження) та дозвіл на роботу додатку в фоновому режимі</string>
|
||||||
|
<string name="introAllow">Дозволити</string>
|
||||||
|
<string name="main1">Цей додаток покаже сповіщення, коли Ваші AirPods будуть підключені</string>
|
||||||
|
<string name="main2">Ви можете сховати цей додаток, якщо бажаєте</string>
|
||||||
|
<string name="settings">Налаштування</string>
|
||||||
|
|
||||||
|
<string name="noBtText">Схоже, що цей пристрій не підтримує Bluetooth LE</string>
|
||||||
|
<string name="locationDisabledText">Вам потрібно ввімкнути місцезнаходження, для того, щоб дозволити OpenPods читати статус</string>
|
||||||
|
<string name="supportedDevices">Supported devices:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen\n• Apple AirPods Pro</string>
|
||||||
|
|
||||||
|
<string name="hide">Сховати додаток</string>
|
||||||
|
<string name="hideClicked">Іконка скоро зникне</string>
|
||||||
|
<string name="batterySaver">Режим збереження енергії (Не рекомендовано)</string>
|
||||||
|
<string name="batterySaver_desc">Увімкніть, якщо Bluetooth використовує багато ресурсів</string>
|
||||||
|
<string name="about">Про програму</string>
|
||||||
|
|
||||||
|
<string name="about1">Розроблено Federico Dossena</string>
|
||||||
|
<string name="website">Сайт</string>
|
||||||
|
<string name="github">Github</string>
|
||||||
|
<string name="donate">Підтримати</string>
|
||||||
|
|
||||||
|
</resources>
|
||||||
@@ -9,16 +9,16 @@
|
|||||||
|
|
||||||
<string name="noBtText">看起来您的设备并不支持蓝牙</string>
|
<string name="noBtText">看起来您的设备并不支持蓝牙</string>
|
||||||
<string name="locationDisabledText">您需要开启定位来让 OpenPods 读取状态</string>
|
<string name="locationDisabledText">您需要开启定位来让 OpenPods 读取状态</string>
|
||||||
<string name="supportedDevices">支持的设备:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen</string>
|
<string name="supportedDevices">支持的设备:\n• Apple AirPods 一代\n• Apple AirPods 二代\n• Apple AirPods Pro</string>
|
||||||
|
|
||||||
<string name="hide">隐藏</string>
|
<string name="hide">隐藏</string>
|
||||||
<string name="hideClicked">桌面图标很快就会隐藏掉</string>
|
<string name="hideClicked">桌面图标很快就会被隐藏掉</string>
|
||||||
<string name="batterySaver">Battery saver (Not recommended)</string>
|
<string name="batterySaver">省电模式 (不推荐)</string>
|
||||||
<string name="batterySaver_desc">Enable this if Bluetooth uses a lot of battery</string>
|
<string name="batterySaver_desc">可在蓝牙消耗过多电量时开启</string>
|
||||||
<string name="about">About</string>
|
<string name="about">关于</string>
|
||||||
|
|
||||||
<string name="about1">Developed by Federico Dossena</string>
|
<string name="about1">由 Federico Dossena 开发</string>
|
||||||
<string name="website">Website</string>
|
<string name="website">网站</string>
|
||||||
<string name="github">Github</string>
|
<string name="github">Github</string>
|
||||||
<string name="donate">Donate</string>
|
<string name="donate">捐赠</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<string name="noBtText">It looks like this device doesn\'t have Bluetooth LE</string>
|
<string name="noBtText">It looks like this device doesn\'t have Bluetooth LE</string>
|
||||||
<string name="locationDisabledText">You need to turn on Location to allow OpenPods to read the status</string>
|
<string name="locationDisabledText">You need to turn on Location to allow OpenPods to read the status</string>
|
||||||
<string name="supportedDevices">Supported devices:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen</string>
|
<string name="supportedDevices">Supported devices:\n• Apple AirPods 1st gen\n• Apple AirPods 2nd gen\n• Apple AirPods Pro</string>
|
||||||
|
|
||||||
<string name="hide">Hide app</string>
|
<string name="hide">Hide app</string>
|
||||||
<string name="hideClicked">The icon will disappear soon</string>
|
<string name="hideClicked">The icon will disappear soon</string>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ buildscript {
|
|||||||
|
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.5.0'
|
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ The Free and Open Source app for monitoring your AirPods on Android
|
|||||||
## Supported devices
|
## Supported devices
|
||||||
* Apple AirPods 1st gen
|
* Apple AirPods 1st gen
|
||||||
* Apple AirPods 2nd gen
|
* Apple AirPods 2nd gen
|
||||||
|
* Apple AirPods Pro
|
||||||
|
|
||||||
## DO NOT REUPLOAD TO GOOGLE PLAY
|
## DO NOT REUPLOAD TO GOOGLE PLAY
|
||||||
**This app violates Google Play policies and is designed to break if you try to fix that unless you really know what you're doing.** You have been warned. I do NOT want this app to be on Google Play.
|
**This app violates Google Play policies and is designed to break if you try to fix that unless you really know what you're doing.** You have been warned. I do NOT want this app to be on Google Play.
|
||||||
|
|||||||
Reference in New Issue
Block a user