parent
c8a9e551f2
commit
3ee298a32f
@ -58,8 +58,9 @@ internal class AppRepositoryImpl(
|
|||||||
) {
|
) {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
installedApps.value =
|
val apps = installedApps.value.toMutableList()
|
||||||
installedApps.value.filter { !packageNames.contains(it.componentName.packageName) }
|
apps.removeAll { packageNames.contains(it.componentName.packageName) && it.user == user }
|
||||||
|
installedApps.value = apps
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,8 +69,8 @@ internal class AppRepositoryImpl(
|
|||||||
scope.launch {
|
scope.launch {
|
||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
val apps = installedApps.value.toMutableList()
|
val apps = installedApps.value.toMutableList()
|
||||||
apps.removeAll { packageName == it.componentName.packageName }
|
apps.removeAll { packageName == it.componentName.packageName && it.user == user }
|
||||||
apps.addAll(getApplications(packageName))
|
apps.addAll(getApplications(packageName, user))
|
||||||
installedApps.value = apps
|
installedApps.value = apps
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,7 +85,7 @@ internal class AppRepositoryImpl(
|
|||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
val apps = installedApps.value.toMutableList()
|
val apps = installedApps.value.toMutableList()
|
||||||
for (packageName in packageNames) {
|
for (packageName in packageNames) {
|
||||||
apps.addAll(getApplications(packageName))
|
apps.addAll(getApplications(packageName, user))
|
||||||
}
|
}
|
||||||
installedApps.value = apps
|
installedApps.value = apps
|
||||||
}
|
}
|
||||||
@ -95,7 +96,7 @@ internal class AppRepositoryImpl(
|
|||||||
scope.launch {
|
scope.launch {
|
||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
val apps = installedApps.value.toMutableList()
|
val apps = installedApps.value.toMutableList()
|
||||||
apps.addAll(getApplications(packageName))
|
apps.addAll(getApplications(packageName, user))
|
||||||
installedApps.value = apps
|
installedApps.value = apps
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,8 +105,9 @@ internal class AppRepositoryImpl(
|
|||||||
override fun onPackageRemoved(packageName: String, user: UserHandle) {
|
override fun onPackageRemoved(packageName: String, user: UserHandle) {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
installedApps.value =
|
val apps = installedApps.value.toMutableList()
|
||||||
installedApps.value.filter { packageName != (it.componentName.packageName) || it.user != user }
|
apps.removeAll { packageName == it.componentName.packageName && it.user == user }
|
||||||
|
installedApps.value = apps
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,13 +125,15 @@ internal class AppRepositoryImpl(
|
|||||||
packageNames ?: return
|
packageNames ?: return
|
||||||
scope.launch {
|
scope.launch {
|
||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
installedApps.value = installedApps.value.map {
|
val apps = installedApps.value.toMutableList()
|
||||||
if (packageNames.contains(it.componentName.packageName)) {
|
apps.replaceAll {
|
||||||
|
if (packageNames.contains(it.componentName.packageName) && it.user == user) {
|
||||||
it.copy(isSuspended = true)
|
it.copy(isSuspended = true)
|
||||||
} else {
|
} else {
|
||||||
it
|
it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
installedApps.value = apps
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -141,13 +145,15 @@ internal class AppRepositoryImpl(
|
|||||||
packageNames ?: return
|
packageNames ?: return
|
||||||
scope.launch {
|
scope.launch {
|
||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
installedApps.value = installedApps.value.map {
|
val apps = installedApps.value.toMutableList()
|
||||||
if (packageNames.contains(it.componentName.packageName)) {
|
apps.replaceAll {
|
||||||
|
if (packageNames.contains(it.componentName.packageName) && it.user == user) {
|
||||||
it.copy(isSuspended = false)
|
it.copy(isSuspended = false)
|
||||||
} else {
|
} else {
|
||||||
it
|
it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
installedApps.value = apps
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -157,7 +163,7 @@ internal class AppRepositoryImpl(
|
|||||||
mutex.withLock {
|
mutex.withLock {
|
||||||
val apps = profiles.map { p ->
|
val apps = profiles.map { p ->
|
||||||
try {
|
try {
|
||||||
launcherApps.getActivityList(null, p).mapNotNull { getApplication(it, p) }
|
launcherApps.getActivityList(null, p).mapNotNull { getApplication(it) }
|
||||||
} catch (e: SecurityException) {
|
} catch (e: SecurityException) {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
@ -167,22 +173,20 @@ internal class AppRepositoryImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getApplications(packageName: String): List<LauncherApp> {
|
private fun getApplications(packageName: String, userHandle: UserHandle): List<LauncherApp> {
|
||||||
if (packageName == context.packageName) return emptyList()
|
if (packageName == context.packageName) return emptyList()
|
||||||
|
|
||||||
return profiles.map { p ->
|
return try {
|
||||||
try {
|
launcherApps.getActivityList(packageName, userHandle)
|
||||||
launcherApps.getActivityList(packageName, p).mapNotNull { getApplication(it, p) }
|
.mapNotNull { getApplication(it) }
|
||||||
} catch (e: SecurityException) {
|
} catch (e: SecurityException) {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
}.flatten()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun getApplication(
|
private fun getApplication(
|
||||||
launcherActivityInfo: LauncherActivityInfo,
|
launcherActivityInfo: LauncherActivityInfo
|
||||||
profile: UserHandle
|
|
||||||
): LauncherApp? {
|
): LauncherApp? {
|
||||||
if (launcherActivityInfo.applicationInfo.packageName == context.packageName && !context.packageName.endsWith(
|
if (launcherActivityInfo.applicationInfo.packageName == context.packageName && !context.packageName.endsWith(
|
||||||
".debug"
|
".debug"
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package de.mm20.launcher2.applications
|
package de.mm20.launcher2.applications
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager
|
||||||
import android.content.ActivityNotFoundException
|
import android.content.ActivityNotFoundException
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@ -51,6 +52,7 @@ internal data class LauncherApp(
|
|||||||
constructor(context: Context, launcherActivityInfo: LauncherActivityInfo) : this(
|
constructor(context: Context, launcherActivityInfo: LauncherActivityInfo) : this(
|
||||||
launcherActivityInfo,
|
launcherActivityInfo,
|
||||||
versionName = getPackageVersionName(context, launcherActivityInfo.applicationInfo.packageName),
|
versionName = getPackageVersionName(context, launcherActivityInfo.applicationInfo.packageName),
|
||||||
|
isSuspended = launcherActivityInfo.applicationInfo.flags and ApplicationInfo.FLAG_SUSPENDED != 0,
|
||||||
userSerialNumber = launcherActivityInfo.user.getSerialNumber(context)
|
userSerialNumber = launcherActivityInfo.user.getSerialNumber(context)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -266,6 +268,14 @@ internal data class LauncherApp(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isSuspended(context: Context, packageName: String): Boolean {
|
||||||
|
return try {
|
||||||
|
context.packageManager.getApplicationInfo(packageName, 0).flags and ApplicationInfo.FLAG_SUSPENDED != 0
|
||||||
|
} catch (e: PackageManager.NameNotFoundException) {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const val Domain = "app"
|
const val Domain = "app"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user