diff options
author | YuutaW <17158086+trumeet@users.noreply.github.com> | 2019-05-18 09:17:52 -0700 |
---|---|---|
committer | YuutaW <17158086+Trumeet@users.noreply.github.com> | 2019-05-18 09:17:52 -0700 |
commit | bedce81f29d1d0e378725836b014e0ce0a521f69 (patch) | |
tree | 1812953518dc470714d8577d9c40272dc0d87e1a /app/src/main/java/moe/yuuta/workmode/access | |
parent | 1ae04c3850eb876c7f4d1956089741e747691b3a (diff) | |
download | WorkMode-bedce81f29d1d0e378725836b014e0ce0a521f69.tar WorkMode-bedce81f29d1d0e378725836b014e0ce0a521f69.tar.gz WorkMode-bedce81f29d1d0e378725836b014e0ce0a521f69.tar.bz2 WorkMode-bedce81f29d1d0e378725836b014e0ce0a521f69.zip |
fix(app): shrink & add MATCH_DISABLED_COMPONENTS flag & mark uninstalled apps as "unsafe" while loading the list
Signed-off-by: YuutaW <17158086+Trumeet@users.noreply.github.com>
Diffstat (limited to 'app/src/main/java/moe/yuuta/workmode/access')
3 files changed, 9 insertions, 7 deletions
diff --git a/app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt b/app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt index d3fccb6..ed6e75b 100644 --- a/app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt +++ b/app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt @@ -49,7 +49,7 @@ internal class AccessLayer(internal val mContext: Context) { * Create a new process and access it. */ fun getSuspendedPackageAppExtras(packageName: String, userId: Int): PersistableBundle? { - Os.setuid(mPM.getPackageUid(packageName, 0)) + Os.setuid(mPM.getPackageUid(packageName, PackageManager.MATCH_DISABLED_COMPONENTS)) // ApplicationPackageManager ALWAYS uses hostContext.getOpPackageName() as the package name // F**k Google val func: Method = Class.forName("android.content.pm.IPackageManager") @@ -78,7 +78,7 @@ internal class AccessLayer(internal val mContext: Context) { mContext.getSystemService(LauncherApps::class.java).getSuspendedPackageLauncherExtras(packageName, createUserHandleWithUserID(userId)) - fun getInstalledApplicationsAsUser(flags: Int, userId: Int): List<ApplicationInfo> = + fun getInstalledApplicationsAsUser(@PackageManager.ApplicationInfoFlags flags: Int, userId: Int): List<ApplicationInfo> = mPM.getInstalledApplicationsAsUser(flags, userId) companion object { diff --git a/app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt b/app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt index 7248198..08aed19 100644 --- a/app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt +++ b/app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt @@ -1,6 +1,7 @@ package moe.yuuta.workmode.access import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager import android.os.* import com.elvishew.xlog.XLog import moe.yuuta.workmode.R @@ -80,10 +81,10 @@ internal class AccessLayerUtil(private val accessLayer: AccessLayer) { accessLayer.getSuspendedPackageLauncherExtras(packageName = packageInfo.packageName, userId = packageInfo.userId) - fun getInstalledApplicationsAsUser(flags: Int, userId: Int): List<ApplicationInfo> = + fun getInstalledApplicationsAsUser(@PackageManager.ApplicationInfoFlags flags: Int, userId: Int): List<ApplicationInfo> = accessLayer.getInstalledApplicationsAsUser(flags, userId) - fun getInstalledApplicationsAnyUser(flags: Int): List<ApplicationInfo> { + fun getInstalledApplicationsAnyUser(@PackageManager.ApplicationInfoFlags flags: Int): List<ApplicationInfo> { val userManager = accessLayer.mContext.getSystemService(UserManager::class.java) val finalResult = mutableListOf<ApplicationInfo>() val ids = userManager.getUsers(false) diff --git a/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt b/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt index af60701..7bfe2f4 100644 --- a/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt +++ b/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt @@ -5,6 +5,7 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager import android.os.Bundle import android.os.PersistableBundle import android.os.UserHandle @@ -87,7 +88,7 @@ class WorkModeAccessor { return result } - private fun _getInstalledApplicationsAcrossUser(pmAccess: AccessLayerUtil, hostInfo: HostInfo, flags: Int): MutableList<TransferableSuspendedApp> { + private fun _getInstalledApplicationsAcrossUser(pmAccess: AccessLayerUtil, hostInfo: HostInfo, @PackageManager.ApplicationInfoFlags flags: Int): MutableList<TransferableSuspendedApp> { val originalApplicationInfo = mutableMapOf<TransferableSuspendedApp, ApplicationInfo>() val packages = if (hostInfo.userId == UserHandle.USER_OWNER) { @@ -110,7 +111,7 @@ class WorkModeAccessor { for (userId in packagesWithUserIds.keys) { // Create a hostContext to "enter" the target user without overriding "getUserId()" or // access hidden api a lot. - val appsInUser = pmAccess.getInstalledApplicationsAsUser(0, userId) + val appsInUser = pmAccess.getInstalledApplicationsAsUser(flags, userId) val firstApp = appsInUser[0] val targetContext = mSystemContext.createPackageContextAsUser(firstApp.packageName, 0, @@ -230,7 +231,7 @@ class WorkModeAccessor { // We use these two lists to determine whatever an app is suspended // It it is suspended but not appears in systemSuspendedList, we know that // it is suspended by other apps, like D**ital Wellbeing, we can just override it. - val systemAllAppList = _getInstalledApplicationsAcrossUser(pmAccess, hostInfo, 0) + val systemAllAppList = _getInstalledApplicationsAcrossUser(pmAccess, hostInfo, PackageManager.MATCH_DISABLED_COMPONENTS) val systemSuspendedList = _getPackagesSuspendedByWorkMode(pmAccess, systemAllAppList) val listMode = when (rawListMode) { 1 -> ListMode.BLACKLIST |