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 @@ + + + + + + + + + + + +