diff --git a/OpenPods/app/src/main/AndroidManifest.xml b/OpenPods/app/src/main/AndroidManifest.xml
index 7703060..e3251ba 100644
--- a/OpenPods/app/src/main/AndroidManifest.xml
+++ b/OpenPods/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
@@ -51,6 +52,11 @@
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" />
+
+
{
+ 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();
+ }
+
+}
diff --git a/OpenPods/app/src/main/java/com/dosse/airpods/IntroActivity.java b/OpenPods/app/src/main/java/com/dosse/airpods/IntroActivity.java
index 9dc0b61..8d48d57 100644
--- a/OpenPods/app/src/main/java/com/dosse/airpods/IntroActivity.java
+++ b/OpenPods/app/src/main/java/com/dosse/airpods/IntroActivity.java
@@ -6,6 +6,7 @@ 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;
@@ -62,7 +63,10 @@ public class IntroActivity extends AppCompatActivity {
if (ok) {
timer.cancel();
- startActivity(new Intent(IntroActivity.this, MainActivity.class));
+ if (Build.VERSION.SDK_INT >= 30)
+ startActivity(new Intent(IntroActivity.this, API30Activity.class));
+ else
+ startActivity(new Intent(IntroActivity.this, MainActivity.class));
finish();
}
}
diff --git a/OpenPods/app/src/main/java/com/dosse/airpods/MainActivity.java b/OpenPods/app/src/main/java/com/dosse/airpods/MainActivity.java
index 52ab147..6ed5224 100644
--- a/OpenPods/app/src/main/java/com/dosse/airpods/MainActivity.java
+++ b/OpenPods/app/src/main/java/com/dosse/airpods/MainActivity.java
@@ -7,6 +7,7 @@ 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;
@@ -46,6 +47,9 @@ public class MainActivity extends AppCompatActivity {
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) {
Starter.startPodsService(getApplicationContext());
//Warn MIUI users that their rom has known issues
diff --git a/OpenPods/app/src/main/java/com/dosse/airpods/PodsService.java b/OpenPods/app/src/main/java/com/dosse/airpods/PodsService.java
index 3c8655c..8ab4324 100644
--- a/OpenPods/app/src/main/java/com/dosse/airpods/PodsService.java
+++ b/OpenPods/app/src/main/java/com/dosse/airpods/PodsService.java
@@ -30,6 +30,7 @@ import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;
+import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import androidx.preference.PreferenceManager;
@@ -417,6 +418,9 @@ public class PodsService extends Service {
public void onCreate () {
super.onCreate();
+ if (Build.VERSION.SDK_INT >= 30)
+ startForeground(101, createNotification());
+
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.bluetooth.device.action.ACL_CONNECTED");
intentFilter.addAction("android.bluetooth.device.action.ACL_DISCONNECTED");
@@ -582,4 +586,21 @@ public class PodsService extends Service {
return START_STICKY;
}
+ // Only for API30+
+ // Strings are hardcodded for now because I'm too lazy
+ @RequiresApi(api = Build.VERSION_CODES.O)
+ private Notification createNotification () {
+
+ NotificationManager notManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel notChannel = new NotificationChannel("API30", "Background Notification", NotificationManager.IMPORTANCE_MIN);
+
+ notManager.createNotificationChannel(notChannel);
+
+ Notification.Builder builder = new Notification.Builder(this, "API30")
+ .setSmallIcon(R.drawable.pod_case)
+ .setContentText("Running in the background");
+
+ return builder.build();
+ }
+
}
diff --git a/OpenPods/app/src/main/java/com/dosse/airpods/Starter.java b/OpenPods/app/src/main/java/com/dosse/airpods/Starter.java
index 1d490b3..db06c33 100644
--- a/OpenPods/app/src/main/java/com/dosse/airpods/Starter.java
+++ b/OpenPods/app/src/main/java/com/dosse/airpods/Starter.java
@@ -3,6 +3,7 @@ package com.dosse.airpods;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.os.Build;
import java.util.Objects;
@@ -22,7 +23,10 @@ public class Starter extends BroadcastReceiver {
}
public static void startPodsService (Context context) {
- context.startService(new Intent(context, PodsService.class));
+ if (Build.VERSION.SDK_INT >= 30)
+ context.startForegroundService(new Intent(context, PodsService.class));
+ else
+ context.startService(new Intent(context, PodsService.class));
}
public static void restartPodsService (Context context) {
@@ -31,7 +35,7 @@ public class Starter extends BroadcastReceiver {
Thread.sleep(500);
} catch (Throwable ignored) {
}
- context.startService(new Intent(context, PodsService.class));
+ startPodsService(context);
}
}
diff --git a/OpenPods/app/src/main/res/layout/activity_api30.xml b/OpenPods/app/src/main/res/layout/activity_api30.xml
new file mode 100644
index 0000000..bbb5d91
--- /dev/null
+++ b/OpenPods/app/src/main/res/layout/activity_api30.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+