mirror of
https://github.com/adolfintel/OpenPods.git
synced 2026-09-14 23:06:11 -04:00
Overhauled setup, updated api30+ workaround.
This commit is contained in:
Generated
+1
@@ -3,6 +3,7 @@
|
||||
<component name="RunConfigurationProducerService">
|
||||
<option name="ignoredProducers">
|
||||
<set>
|
||||
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
|
||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
|
||||
|
||||
@@ -52,11 +52,6 @@
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name=".API30Activity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<receiver
|
||||
android:name=".Starter"
|
||||
android:enabled="true"
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
package com.dosse.airpods;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
public class API30Activity extends AppCompatActivity {
|
||||
|
||||
private Timer timer;
|
||||
|
||||
@Override
|
||||
protected void onCreate (Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_api30);
|
||||
|
||||
// Allow button clicked, ask for permissions
|
||||
findViewById(R.id.allowBtn).setOnClickListener(view -> {
|
||||
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||
intent.setData(Uri.parse("package:" + getPackageName()));
|
||||
startActivity(intent);
|
||||
});
|
||||
|
||||
|
||||
// Wait for permissions to be granted.
|
||||
// When they are granted, go to MainActivity.
|
||||
timer = new Timer();
|
||||
timer.scheduleAtFixedRate(new TimerTask() {
|
||||
@Override
|
||||
public void run () {
|
||||
if (ContextCompat.checkSelfPermission(API30Activity.this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
||||
timer.cancel();
|
||||
startActivity(new Intent(API30Activity.this, MainActivity.class));
|
||||
finish();
|
||||
}
|
||||
}
|
||||
}, 0, 100);
|
||||
|
||||
}
|
||||
|
||||
// Activity destroyed (or screen rotated). destroy the timer too
|
||||
@Override
|
||||
protected void onDestroy () {
|
||||
super.onDestroy();
|
||||
if (timer != null)
|
||||
timer.cancel();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,45 +4,32 @@ import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Locale;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
public class IntroActivity extends AppCompatActivity {
|
||||
|
||||
private Timer timer;
|
||||
private TextView msg;
|
||||
private Button btn;
|
||||
|
||||
@SuppressLint("BatteryLife")
|
||||
@Override
|
||||
protected void onCreate (Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_intro);
|
||||
|
||||
// Allow button clicked, ask for permissions
|
||||
findViewById(R.id.allowBtn).setOnClickListener(view -> {
|
||||
requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 1); // Location (for BLE)
|
||||
// Run in background
|
||||
try {
|
||||
if (!Objects.requireNonNull(getSystemService(PowerManager.class)).isIgnoringBatteryOptimizations(getPackageName())) {
|
||||
Intent intent = new Intent();
|
||||
getSystemService(Context.POWER_SERVICE);
|
||||
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
||||
intent.setData(Uri.parse("package:" + getPackageName()));
|
||||
startActivity(intent);
|
||||
}
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
});
|
||||
msg = findViewById(R.id.permsMsg);
|
||||
btn = findViewById(R.id.permsBtn);
|
||||
|
||||
// Wait for permissions to be granted.
|
||||
// When they are granted, go to MainActivity.
|
||||
@@ -50,23 +37,11 @@ public class IntroActivity extends AppCompatActivity {
|
||||
timer.scheduleAtFixedRate(new TimerTask() {
|
||||
@Override
|
||||
public void run () {
|
||||
boolean ok = true;
|
||||
initScreen();
|
||||
|
||||
try {
|
||||
if (!Objects.requireNonNull(getSystemService(PowerManager.class)).isIgnoringBatteryOptimizations(getPackageName()))
|
||||
ok = false;
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
|
||||
if (ContextCompat.checkSelfPermission(IntroActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED)
|
||||
ok = false;
|
||||
|
||||
if (ok) {
|
||||
if (PermissionUtils.checkAllPermissions(IntroActivity.this)) {
|
||||
timer.cancel();
|
||||
if (Build.VERSION.SDK_INT >= 30)
|
||||
startActivity(new Intent(IntroActivity.this, API30Activity.class));
|
||||
else
|
||||
startActivity(new Intent(IntroActivity.this, MainActivity.class));
|
||||
startActivity(new Intent(IntroActivity.this, MainActivity.class));
|
||||
finish();
|
||||
}
|
||||
}
|
||||
@@ -82,4 +57,44 @@ public class IntroActivity extends AppCompatActivity {
|
||||
timer.cancel();
|
||||
}
|
||||
|
||||
private int getPermissionState () {
|
||||
if (!PermissionUtils.getBatteryOptimizationsPermission(this))
|
||||
return 1;
|
||||
else if (!PermissionUtils.getFineLocationPermission(this))
|
||||
return 2;
|
||||
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) if (!PermissionUtils.getBackgroundLocationPermission(this))
|
||||
return 3;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@SuppressLint("BatteryLife")
|
||||
private void initScreen () {
|
||||
int step = getPermissionState();
|
||||
int numOfSteps = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) ? 3 : 2;
|
||||
|
||||
switch (step) {
|
||||
case 1:
|
||||
msg.setText(String.format(Locale.getDefault(), "Step %d/%d: %s", step, numOfSteps, getString(R.string.intro_bat_perm)));
|
||||
btn.setOnClickListener(view -> {
|
||||
Intent intent = new Intent();
|
||||
getSystemService(Context.POWER_SERVICE);
|
||||
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
||||
intent.setData(Uri.parse("package:" + getPackageName()));
|
||||
startActivity(intent);
|
||||
});
|
||||
break;
|
||||
case 2:
|
||||
msg.setText(String.format(Locale.getDefault(), "Step %d/%d: %s", step, numOfSteps, getString(R.string.intro_loc1_perm)));
|
||||
btn.setOnClickListener(view -> requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 101)); // Location (for BLE)
|
||||
break;
|
||||
case 3:
|
||||
msg.setText(String.format(Locale.getDefault(), "Step %d/%d: %s", step, numOfSteps, getString(R.string.intro_loc2_perm)));
|
||||
btn.setOnClickListener(view -> {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) requestPermissions(new String[] {Manifest.permission.ACCESS_BACKGROUND_LOCATION}, 102);
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,22 +1,18 @@
|
||||
package com.dosse.airpods;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.PowerManager;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -35,22 +31,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if all permissions have been granted
|
||||
boolean ok = true;
|
||||
|
||||
try {
|
||||
if (!Objects.requireNonNull(getSystemService(PowerManager.class)).isIgnoringBatteryOptimizations(getPackageName()))
|
||||
ok = false;
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
|
||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED)
|
||||
ok = false;
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 30) if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_DENIED)
|
||||
ok = false;
|
||||
|
||||
if (ok) {
|
||||
if (PermissionUtils.checkAllPermissions(this)) {
|
||||
Starter.startPodsService(getApplicationContext());
|
||||
//Warn MIUI users that their rom has known issues
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.dosse.airpods;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.PowerManager;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class PermissionUtils {
|
||||
|
||||
public static boolean getBatteryOptimizationsPermission (Context context) {
|
||||
try {
|
||||
return Objects.requireNonNull(context.getSystemService(PowerManager.class)).isIgnoringBatteryOptimizations(context.getPackageName());
|
||||
} catch (Throwable ignored) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean getFineLocationPermission (Context context) {
|
||||
return ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.Q)
|
||||
public static boolean getBackgroundLocationPermission (Context context) {
|
||||
return ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
public static boolean checkAllPermissions (Context context) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
|
||||
return getBatteryOptimizationsPermission(context) && getFineLocationPermission(context) && getBackgroundLocationPermission(context);
|
||||
else
|
||||
return getBatteryOptimizationsPermission(context) && getFineLocationPermission(context);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.dosse.airpods;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
@@ -418,7 +419,7 @@ public class PodsService extends Service {
|
||||
public void onCreate () {
|
||||
super.onCreate();
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 30)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
|
||||
startForeground(101, createNotification());
|
||||
|
||||
IntentFilter intentFilter = new IntentFilter();
|
||||
@@ -587,18 +588,28 @@ public class PodsService extends Service {
|
||||
}
|
||||
|
||||
// Only for API30+
|
||||
// Strings are hardcodded for now because I'm too lazy
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
private Notification createNotification () {
|
||||
final String notChannelID = "FOREGROUND_ID";
|
||||
|
||||
NotificationManager notManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
NotificationChannel notChannel = new NotificationChannel("API30", "Background Notification", NotificationManager.IMPORTANCE_MIN);
|
||||
NotificationChannel notChannel = new NotificationChannel(notChannelID, "Background Notification", NotificationManager.IMPORTANCE_MIN);
|
||||
|
||||
notManager.createNotificationChannel(notChannel);
|
||||
|
||||
Notification.Builder builder = new Notification.Builder(this, "API30")
|
||||
Intent notIntent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName())
|
||||
.putExtra(Settings.EXTRA_CHANNEL_ID, notChannelID);
|
||||
|
||||
PendingIntent notPendingIntent = PendingIntent.getActivity(this, 1110, notIntent,0);
|
||||
|
||||
Notification.Builder builder = new Notification.Builder(this, notChannelID)
|
||||
.setSmallIcon(R.drawable.pod_case)
|
||||
.setContentText("Running in the background");
|
||||
.setContentTitle("Running in the background")
|
||||
.setContentText("Click to open notification Settings")
|
||||
.setContentIntent(notPendingIntent)
|
||||
.setOngoing(true);
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout 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">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/padding_default">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/introImg1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="144dp"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:src="@drawable/icon"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/intro1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/intro1"
|
||||
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/intro2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/intro3" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/allowBtn"
|
||||
style="@style/Widget.AppCompat.Button.Colored"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:backgroundTint="@color/colorAccent"
|
||||
android:text="@string/settings" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
android:padding="@dimen/padding_default">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/introImg1"
|
||||
android:id="@+id/introImg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="144dp"
|
||||
android:layout_marginBottom="24dp"
|
||||
@@ -21,29 +21,36 @@
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/intro1"
|
||||
android:id="@+id/introTitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/intro1"
|
||||
android:text="@string/intro_title"
|
||||
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/intro2"
|
||||
android:id="@+id/introMsg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:layout_marginBottom="6dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/intro2" />
|
||||
android:text="@string/intro_message" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/permsMsg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:gravity="center" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/allowBtn"
|
||||
android:id="@+id/permsBtn"
|
||||
style="@style/Widget.AppCompat.Button.Colored"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:backgroundTint="@color/colorAccent"
|
||||
android:text="@string/introAllow" />
|
||||
android:text="@string/intro_allow" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="intro1">Diese App erlaubt es dir, den Status deiner AirPods auf einem beliebigen Android-Gerät zu überprüfen</string>
|
||||
<string name="intro2">Für den Dienst benötigen wir die Berechtigung zur Verwendung von Bluetooth LE (Standort) und die Berechtigung zum Betrieb im Hintergrund</string>
|
||||
<string name="introAllow">Erlauben</string>
|
||||
<string name="intro_title">Diese App erlaubt es dir, den Status deiner AirPods auf einem beliebigen Android-Gerät zu überprüfen</string>
|
||||
<string name="intro_message">Für den Dienst benötigen wir die Berechtigung zur Verwendung von Bluetooth LE (Standort) und die Berechtigung zum Betrieb im Hintergrund</string>
|
||||
<string name="intro_allow">Erlauben</string>
|
||||
|
||||
<string name="main_description">Die App zeigt eine Benachrichtigung, wenn deine AirPods verbunden sind</string>
|
||||
<string name="hide_message">Du kannst die App jetzt verstecken, wenn du möchtest</string>
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="miui_warning">MIUI detected</string>
|
||||
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue">Continue</string>
|
||||
|
||||
<string name="miui_warning">MIUI erkannt</string>
|
||||
<string name="miui_warning_continue">Fortsetzen</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>
|
||||
@@ -27,6 +28,5 @@
|
||||
|
||||
<string name="about_dev">Entwickelt von Federico Dossena und Itai Levin</string>
|
||||
<string name="website">Webseite</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="donate">Spenden</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<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 ejecutar la app en segundo plano.</string>
|
||||
<string name="introAllow">Permitir</string>
|
||||
<string name="intro_title">Esta aplicación te permite ver el estado de tus AirPods en cualquier dispositivo Android.</string>
|
||||
<string name="intro_message">Para operar necesitamos permiso para usar Bluetooth LE (Localización) y permiso para ejecutar la app en segundo plano.</string>
|
||||
<string name="intro_allow">Permitir</string>
|
||||
|
||||
<string name="main_description">Esta aplicación mostrará una notificación cuando tus AirPods estén conectados.</string>
|
||||
<string name="hide_message">Puedes ocultar la app si lo prefieres.</string>
|
||||
<string name="settings">Ajustes</string>
|
||||
<string name="miui_warning">MIUI detected</string>
|
||||
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue">Continue</string>
|
||||
|
||||
<string name="miui_warning">MIUI detectado</string>
|
||||
<string name="miui_warning_continue">Continuar</string>
|
||||
|
||||
<string name="noBtText">Parece que éste dispositivo no tiene Bluetooth LE.</string>
|
||||
<string name="locationDisabledText">Necesitas activar la Localización para permitir que OpenPods lea el estado.</string>
|
||||
@@ -24,6 +25,5 @@
|
||||
|
||||
<string name="about_dev">Desarrollado por Federico Dossena y Itai Levin</string>
|
||||
<string name="website">Página web</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="donate">Donar</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="intro1">Cette application vous permet de voir l\'état de vos AirPods sur n\'importe quel appareil Android.</string>
|
||||
<string name="intro2">Pour opérer, nous avons besoin de votre permission pour utiliser Bluetooth LE (Localisation) et permission pour exécuter l\'application en arrière-plan.</string>
|
||||
<string name="introAllow">Permettre</string>
|
||||
<string name="intro_title">Cette application vous permet de voir l\'état de vos AirPods sur n\'importe quel appareil Android.</string>
|
||||
<string name="intro_message">Pour opérer, nous avons besoin de votre permission pour utiliser Bluetooth LE (Localisation) et permission pour exécuter l\'application en arrière-plan.</string>
|
||||
<string name="intro_allow">Permettre</string>
|
||||
|
||||
<string name="main_description">Cette application affichera une notification lorsque vos AirPods seront connectés.</string>
|
||||
<string name="hide_message">Vous pouvez masquer cette application si vous voulez.</string>
|
||||
<string name="settings">Réglages</string>
|
||||
<string name="miui_warning">MIUI detected</string>
|
||||
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue">Continue</string>
|
||||
|
||||
<string name="miui_warning">MIUI détecté</string>
|
||||
<string name="miui_warning_continue">Continuer</string>
|
||||
|
||||
<string name="noBtText">Il semble que cet appareil ne dispose pas de Bluetooth LE.</string>
|
||||
<string name="locationDisabledText">Vous devez activer la localisation pour permettre aux OpenPod de lire l\'état de vos AirPods.</string>
|
||||
@@ -24,6 +25,5 @@
|
||||
|
||||
<string name="about_dev">Développé par Federico Dossena et Itai Levin</string>
|
||||
<string name="website">Site web</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="donate">Faire un don</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="intro1">Questa app consente di monitorare lo stato delle tue AirPods su Android</string>
|
||||
<string name="intro2">Per funzionare, abbiamo bisogno dei permessi per Bluetooth LE (Posizione) e di esecuzione in background</string>
|
||||
<string name="introAllow">Consenti</string>
|
||||
<string name="intro_title">Questa app consente di monitorare lo stato delle tue AirPods su Android</string>
|
||||
<string name="intro_message">Per funzionare, abbiamo bisogno dei permessi per Bluetooth LE (Posizione) e di esecuzione in background</string>
|
||||
<string name="intro_allow">Consenti</string>
|
||||
|
||||
<string name="main_description">L\'app mostrerà una notifica quando le tue AirPods sono connesse</string>
|
||||
<string name="hide_message">Puoi nascondere l\'app se vuoi</string>
|
||||
<string name="settings">Impostazioni</string>
|
||||
|
||||
<string name="miui_warning">MIUI rilevata</string>
|
||||
<string name="miui_warning_desc">La ROM di questo dispositivo ha dei problemi di compatibilità noti. Puoi continuare ma OpenPods potrebbe non funzionare correttamente.</string>
|
||||
<string name="miui_warning_continue">Continua</string>
|
||||
@@ -24,6 +26,5 @@
|
||||
|
||||
<string name="about_dev">Sviluppata da Federico Dossena e Itai Levin</string>
|
||||
<string name="website">Sito web</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="donate">Donazioni</string>
|
||||
</resources>
|
||||
@@ -1,11 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="intro1">אפליקציה זו מאפשרת לך לבדוק את המצב של האיירפודס שלך מכל מכשיר אנדרואיד</string>
|
||||
<string name="intro2">כדי שאפליקציה זו תוכל לתפקד, הינך נדרש לאפשר גישה ל-Bluetooth LE (מיקום) ולריצה ברקע</string>
|
||||
<string name="introAllow">אפשר</string>
|
||||
<string name="intro_title">אפליקציה זו מאפשרת לך לבדוק את המצב של האיירפודס שלך מכל מכשיר אנדרואיד</string>
|
||||
<string name="intro_message">כדי שאפליקציה זו תוכל לתפקד, הינך נדרש לאפשר גישה ל-Bluetooth LE (מיקום) ולריצה ברקע</string>
|
||||
<string name="intro_allow">אפשר</string>
|
||||
|
||||
<string name="main_description">האפליקציה תשלח התראה כאשר האיירפודס מחוברות</string>
|
||||
<string name="hide_message">אתה יכול להסתיר אפליקציה זו</string>
|
||||
<string name="settings">הגדרות</string>
|
||||
|
||||
<string name="miui_warning">MIUI נמצא</string>
|
||||
<string name="miui_warning_desc">למערכת ההפעלה על מכשיר זה יש בעיות תאימות ידועות עם האפליקציה. אתה יכול להמשיך להשתמש ב-OpenPods אך לא בטוח שדברים יעבדו כמו שצריך.</string>
|
||||
<string name="miui_warning_continue">המשך</string>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="app_name" translatable="false">OpenPods</string>
|
||||
<resources>
|
||||
<string name="intro_title">이 앱을 통해 Android 기기에서 에어팟의 상태를 확인할 수 있습니다.</string>
|
||||
<string name="intro_message">작동하려면 Bluetooth LE(위치)를 사용할 수 있는 권한과 백그라운드에서 실행할 수 있는 권한이 필요합니다.</string>
|
||||
<string name="intro_allow">허용</string>
|
||||
|
||||
<string name="intro1">이 앱을 통해 Android 기기에서 에어팟의 상태를 확인할 수 있습니다.</string>
|
||||
<string name="intro2">작동하려면 Bluetooth LE(위치)를 사용할 수 있는 권한과 백그라운드에서 실행할 수 있는 권한이 필요합니다.</string>
|
||||
<string name="introAllow">허용</string>
|
||||
<string name="main_description">앱에 에어팟이 연결되면 알림이 표시됩니다.</string>
|
||||
<string name="hide_message">이 앱을 숨길 수 있습니다.</string>
|
||||
<string name="settings">설정</string>
|
||||
|
||||
<string name="miui_warning">MIUI 발견됨</string>
|
||||
<string name="miui_warning_desc">이 장치에서 실행 중인 ROM에 알려진 호환성 문제가 있습니다. 계속할 수는 있지만 OpenPod가 제대로 작동하지 않을 수 있습니다.</string>
|
||||
<string name="miui_warning_continue">계속</string>
|
||||
@@ -21,15 +21,13 @@
|
||||
<string name="batterySaver_desc">Bluetooth에서 배터리를 많이 사용하는 경우 이 옵션을 활성화하세요.</string>
|
||||
<string name="hide">앱 숨기기</string>
|
||||
<string name="hide_desc">실행 프로그램에서 이 앱 숨기기</string>
|
||||
<string name="hide_dialog" tools:ignore="MissingTranslation">정말 계속하시겠습니까?</string>
|
||||
<string name="hide_dialog_desc" tools:ignore="MissingTranslation">정말 이 앱을 숨기시겠습니까? 앱을 다시 설치해야 기능을 해제할 수 있습니다.</string>
|
||||
<string name="hide_dialog_button" tools:ignore="MissingTranslation">숨기기</string>
|
||||
<string name="hide_dialog">정말 계속하시겠습니까?</string>
|
||||
<string name="hide_dialog_desc">정말 이 앱을 숨기시겠습니까? 앱을 다시 설치해야 기능을 해제할 수 있습니다.</string>
|
||||
<string name="hide_dialog_button">숨기기</string>
|
||||
<string name="hideClicked">아이콘이 곧 사라집니다</string>
|
||||
<string name="about">정보</string>
|
||||
|
||||
<string name="about_dev">개발자 : Federico Dossena, Itai Levin</string>
|
||||
<string name="website">웹사이트</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="donate">후원하기</string>
|
||||
<string name="fdroid" translatable="false">F-Droid</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="intro1">Met deze app kun je de status van je AirPods bekijken op elk Android-apparaat</string>
|
||||
<string name="intro2">De app heeft toegang nodig tot Bluetooth LE (locatie), en moet op de achtergrond worden uitgevoerd</string>
|
||||
<string name="introAllow">Toestaan</string>
|
||||
<string name="intro_title">Met deze app kun je de status van je AirPods bekijken op elk Android-apparaat</string>
|
||||
<string name="intro_message">De app heeft toegang nodig tot Bluetooth LE (locatie), en moet op de achtergrond worden uitgevoerd</string>
|
||||
<string name="intro_allow">Toestaan</string>
|
||||
|
||||
<string name="main_description">De app toont een melding zodra je je AirPods verbindt</string>
|
||||
<string name="hide_message">Als je wilt, kun je deze app verbergen</string>
|
||||
<string name="settings">Instellingen</string>
|
||||
<string name="miui_warning">MIUI detected</string>
|
||||
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue">Continue</string>
|
||||
|
||||
<string name="miui_warning">MIUI gedetecteerd</string>
|
||||
<string name="miui_warning_continue">Doorgaan met</string>
|
||||
|
||||
<string name="noBtText">Het lijkt erop dat dit apparaat niet beschikt over Bluetooth LE</string>
|
||||
<string name="locationDisabledText">Schakel je locatie in zodat OpenPods de status kan uitlezen</string>
|
||||
@@ -24,6 +25,5 @@
|
||||
|
||||
<string name="about_dev">Gemaakt door Federico Dossena en Itai Levin</string>
|
||||
<string name="website">Website</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="donate">Doneren</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="intro1">Это приложение позволяет Вам проверить статус ваших AirPods на любом Android-устройстве</string>
|
||||
<string name="intro2">Для работы нам нужно Bluetooth LE(местоположение) и разрешение на запуск в фоновом режиме</string>
|
||||
<string name="introAllow">Разрешить</string>
|
||||
<string name="intro_title">Это приложение позволяет Вам проверить статус ваших AirPods на любом Android-устройстве</string>
|
||||
<string name="intro_message">Для работы нам нужно Bluetooth LE(местоположение) и разрешение на запуск в фоновом режиме</string>
|
||||
<string name="intro_allow">Разрешить</string>
|
||||
|
||||
<string name="main_description">Приложение покажет уведомление, когда будет установлено соединение с AirPods</string>
|
||||
<string name="hide_message">Вы можете скрыть это приложение, если хотите</string>
|
||||
<string name="settings">Настройки</string>
|
||||
<string name="miui_warning">MIUI detected</string>
|
||||
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue">Continue</string>
|
||||
|
||||
<string name="miui_warning">MIUI обнаружено</string>
|
||||
<string name="miui_warning_continue">Продолжать</string>
|
||||
|
||||
<string name="noBtText">Похоже, что Bluetooth LE не поддерживается на Вашем устройстве</string>
|
||||
<string name="locationDisabledText">Вам нужно включить местоположение, чтобы разрешить OpenPods читать статус</string>
|
||||
@@ -24,6 +25,5 @@
|
||||
|
||||
<string name="about_dev">Разработано Federico Dossena и Itai Levin</string>
|
||||
<string name="website">Сайт</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="donate">Поддержать</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="intro1">Цей додаток дозволяє Вам перевірити статус ваших AirPods на будь-якому Android-пристрої</string>
|
||||
<string name="intro2">Для роботи ми використовуємо Bluetooth LE (місцезнаходження) та дозвіл на роботу додатку в фоновому режимі</string>
|
||||
<string name="introAllow">Дозволити</string>
|
||||
<string name="intro_title">Цей додаток дозволяє Вам перевірити статус ваших AirPods на будь-якому Android-пристрої</string>
|
||||
<string name="intro_message">Для роботи ми використовуємо Bluetooth LE (місцезнаходження) та дозвіл на роботу додатку в фоновому режимі</string>
|
||||
<string name="intro_allow">Дозволити</string>
|
||||
|
||||
<string name="main_description">Цей додаток покаже сповіщення, коли Ваші AirPods будуть підключені</string>
|
||||
<string name="hide_message">Ви можете сховати цей додаток, якщо бажаєте</string>
|
||||
<string name="settings">Налаштування</string>
|
||||
<string name="miui_warning">MIUI detected</string>
|
||||
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue">Continue</string>
|
||||
|
||||
<string name="miui_warning">MIUI виявлено</string>
|
||||
<string name="miui_warning_continue">продовжувати</string>
|
||||
|
||||
<string name="noBtText">Схоже, що цей пристрій не підтримує Bluetooth LE</string>
|
||||
<string name="locationDisabledText">Вам потрібно ввімкнути місцезнаходження, для того, щоб дозволити OpenPods читати статус</string>
|
||||
@@ -24,6 +25,5 @@
|
||||
|
||||
<string name="about_dev">Розроблено Federico Dossena й Itai Levin</string>
|
||||
<string name="website">Сайт</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="donate">Підтримати</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="intro1">此应用可以让您在任何安卓设备上查看 AirPods 的状态</string>
|
||||
<string name="intro2">我们需要蓝牙、定位以及在后台运行的权限来正常运作</string>
|
||||
<string name="introAllow">允许</string>
|
||||
<string name="intro_title">此应用可以让您在任何安卓设备上查看 AirPods 的状态</string>
|
||||
<string name="intro_message">我们需要蓝牙、定位以及在后台运行的权限来正常运作</string>
|
||||
<string name="intro_allow">允许</string>
|
||||
|
||||
<string name="main_description">当您的 AirPods 接入时,我们会在通知栏显示通知</string>
|
||||
<string name="hide_message">您可以隐藏此应用</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="miui_warning">MIUI detected</string>
|
||||
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue">Continue</string>
|
||||
|
||||
<string name="noBtText">看起来您的设备并不支持蓝牙</string>
|
||||
<string name="locationDisabledText">您需要开启定位来让 OpenPods 读取状态</string>
|
||||
@@ -24,6 +21,5 @@
|
||||
|
||||
<string name="about_dev">由 Federico Dossena 和 Itai Levin 开发</string>
|
||||
<string name="website">网站</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="donate">捐赠</string>
|
||||
</resources>
|
||||
|
||||
@@ -2,16 +2,21 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="app_name" translatable="false">OpenPods</string>
|
||||
|
||||
<string name="intro1">This app lets you check the status of your AirPods on any Android device</string>
|
||||
<string name="intro2">To operate, we need permission to use Bluetooth LE (Location) and permission to run in background</string>
|
||||
<string name="intro3" translatable="false">In Android 11 and above we need to change location permission to "Allow all the time"</string>
|
||||
<string name="introAllow">Allow</string>
|
||||
<string name="intro_title">This app lets you check the status of your AirPods on any Android device</string>
|
||||
<string name="intro_message">To operate, we need permission to use Bluetooth LE (Location) and permission to run in background</string>
|
||||
<string name="intro_allow">Allow</string>
|
||||
<string name="intro_step" translatable="false">Step</string>
|
||||
<string name="intro_bat_perm" translatable="false">Battery Optimization</string>
|
||||
<string name="intro_loc1_perm" translatable="false">Location Permission</string>
|
||||
<string name="intro_loc2_perm" translatable="false">Background Location Permission</string>
|
||||
|
||||
<string name="main_description">The app will show a notification when your AirPods are connected</string>
|
||||
<string name="hide_message">You can hide this app if you want</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="miui_warning">MIUI detected</string>
|
||||
<string name="miui_warning_desc">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue">Continue</string>
|
||||
<string name="settings" tools:ignore="MissingTranslation">Settings</string>
|
||||
|
||||
<string name="miui_warning" tools:ignore="MissingTranslation">MIUI detected</string>
|
||||
<string name="miui_warning_desc" tools:ignore="MissingTranslation">The ROM running on this device has known compatibility issues. You can continue but OpenPods may not work properly.</string>
|
||||
<string name="miui_warning_continue" tools:ignore="MissingTranslation">Continue</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>
|
||||
@@ -30,7 +35,7 @@
|
||||
|
||||
<string name="about_dev">Developed by Federico Dossena and Itai Levin</string>
|
||||
<string name="website">Website</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="github" translatable="false">Github</string>
|
||||
<string name="donate">Donate</string>
|
||||
<string name="fdroid" translatable="false">F-Droid</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user