Quellcode durchsuchen

app manager fix / removal of itself from list

Milan Jurkulak vor 3 Jahren
Ursprung
Commit
0aa5dd8bff

+ 1 - 1
app/src/main/kotlin/org/mjdev/tvapp/module/ProvideModule.kt

@@ -46,7 +46,7 @@ class ProvideModule {
     fun providesAppsManager(
         @ApplicationContext
         context: Context
-    ): AppsManager = AppsManager(context)
+    ): AppsManager = AppsManager(context, BuildConfig.APPLICATION_ID)
 
     @Singleton
     @Provides

+ 15 - 3
tvlib/src/main/AndroidManifest.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ~ Copyright (c) Milan Jurkulák 2023.
   ~  Contact:
   ~  e: mimoccc@gmail.com
@@ -7,4 +6,17 @@
   ~  w: https://mjdev.org
   -->
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" />
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <permission
+        android:name="android.permission.QUERY_ALL_PACKAGES"
+        tools:ignore="ReservedSystemPermission" />
+
+    <queries>
+        <intent>
+            <action android:name="android.intent.action.MAIN" />
+        </intent>
+    </queries>
+
+</manifest>

+ 15 - 10
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/apps/AppsManager.kt

@@ -21,15 +21,18 @@ import org.mjdev.tvlib.interfaces.ItemWithTitle
 import java.util.Collections
 
 @Composable
-fun rememberAppsManager(): List<App> {
+fun rememberAppsManager(
+    vararg excludedPackages: String?
+): List<App> {
     val context: Context = LocalContext.current
     return remember {
-        AppsManager(context)
+        AppsManager(context, *excludedPackages)
     }
 }
 
 class AppsManager(
-    context: Context
+    context: Context,
+    vararg excludedPackages: String?
 ) : ArrayList<App>() {
     init {
         val packageManager = context.packageManager
@@ -39,13 +42,15 @@ class AppsManager(
         val resolveInfo = packageManager.queryIntentActivities(mainIntent, 0)
         Collections.sort(resolveInfo, ResolveInfo.DisplayNameComparator(packageManager))
         resolveInfo.forEach { ri ->
-            val title = ri.activityInfo.loadLabel(packageManager).toString()
-            val image = ri.activityInfo
-                .loadBanner(packageManager) ?: ri.activityInfo
-                .loadIcon(packageManager)
-            val intent: Intent? =
-                packageManager.getLaunchIntentForPackage(ri.activityInfo.packageName)
-            add(App(title, image, intent))
+            if (!excludedPackages.contains(ri.activityInfo.packageName)) {
+                val title = ri.activityInfo.loadLabel(packageManager).toString()
+                val image = ri.activityInfo
+                    .loadBanner(packageManager) ?: ri.activityInfo
+                    .loadIcon(packageManager)
+                val intent: Intent? = packageManager
+                    .getLaunchIntentForPackage(ri.activityInfo.packageName)
+                add(App(title, image, intent))
+            }
         }
     }
 }