Whitelist package installer only in store version; otherwise add to default whitelist

This commit is contained in:
Jonas L 2019-04-22 00:00:00 +00:00
parent 50a5ae56a6
commit 822c148832
3 changed files with 67 additions and 22 deletions

View file

@ -37,14 +37,19 @@ object AndroidIntegrationApps {
.addCategory(Intent.CATEGORY_DEFAULT) .addCategory(Intent.CATEGORY_DEFAULT)
.addCategory(Intent.CATEGORY_HOME) .addCategory(Intent.CATEGORY_HOME)
val ignoredApps = HashSet<String>() enum class IgnoredAppHandling {
Ignore,
IgnoreOnStoreOtherwiseWhitelistAndDontDisable
}
val ignoredApps = mutableMapOf<String, IgnoredAppHandling>()
init { init {
ignoredApps.add("com.android.systemui") ignoredApps["com.android.systemui"] = AndroidIntegrationApps.IgnoredAppHandling.Ignore
ignoredApps.add("android") ignoredApps["android"] = AndroidIntegrationApps.IgnoredAppHandling.Ignore
ignoredApps.add("com.android.packageinstaller") ignoredApps["com.android.bluetooth"] = AndroidIntegrationApps.IgnoredAppHandling.Ignore
ignoredApps.add("com.google.android.packageinstaller") ignoredApps["com.android.nfc"] = AndroidIntegrationApps.IgnoredAppHandling.Ignore
ignoredApps.add("com.android.bluetooth") ignoredApps["com.android.packageinstaller"] = AndroidIntegrationApps.IgnoredAppHandling.IgnoreOnStoreOtherwiseWhitelistAndDontDisable
ignoredApps.add("com.android.nfc") ignoredApps["com.google.android.packageinstaller"] = AndroidIntegrationApps.IgnoredAppHandling.IgnoreOnStoreOtherwiseWhitelistAndDontDisable
} }
fun getLocalApps(deviceId: String, context: Context): Collection<App> { fun getLocalApps(deviceId: String, context: Context): Collection<App> {
@ -82,16 +87,30 @@ object AndroidIntegrationApps {
for (applicationInfo in installedPackages) { for (applicationInfo in installedPackages) {
val packageName = applicationInfo.packageName val packageName = applicationInfo.packageName
val ignoreConfig = ignoredApps[packageName]
if (!result.containsKey(packageName) && !ignoredApps.contains(packageName)) { if (result.containsKey(packageName)) {
result[packageName] = App( continue
deviceId = deviceId,
packageName = packageName,
title = applicationInfo.loadLabel(packageManager).toString(),
isLaunchable = false,
recommendation = AppRecommendation.None
)
} }
if (when (ignoreConfig) {
null -> false
AndroidIntegrationApps.IgnoredAppHandling.Ignore -> true
AndroidIntegrationApps.IgnoredAppHandling.IgnoreOnStoreOtherwiseWhitelistAndDontDisable -> BuildConfig.storeCompilant
}) {
continue
}
result[packageName] = App(
deviceId = deviceId,
packageName = packageName,
title = applicationInfo.loadLabel(packageManager).toString(),
isLaunchable = false,
recommendation = if (ignoreConfig == AndroidIntegrationApps.IgnoredAppHandling.IgnoreOnStoreOtherwiseWhitelistAndDontDisable)
AppRecommendation.Whitelist
else
AppRecommendation.None
)
} }
return result.values return result.values
@ -117,7 +136,9 @@ object AndroidIntegrationApps {
for (info in resolveInfoList) { for (info in resolveInfoList) {
val packageName = info.activityInfo.applicationInfo.packageName val packageName = info.activityInfo.applicationInfo.packageName
if (ignoredApps.contains(packageName)) { val ignoreConfig = ignoredApps[packageName]
if (ignoreConfig != null && BuildConfig.storeCompilant) {
continue continue
} }
@ -127,7 +148,10 @@ object AndroidIntegrationApps {
packageName = packageName, packageName = packageName,
title = info.activityInfo.applicationInfo.loadLabel(packageManager).toString(), title = info.activityInfo.applicationInfo.loadLabel(packageManager).toString(),
isLaunchable = true, isLaunchable = true,
recommendation = recommendation recommendation = if (ignoreConfig == AndroidIntegrationApps.IgnoredAppHandling.IgnoreOnStoreOtherwiseWhitelistAndDontDisable)
AppRecommendation.Whitelist
else
recommendation
) )
} }
} }
@ -140,7 +164,9 @@ object AndroidIntegrationApps {
return return
} }
if (ignoredApps.contains(packageName)) { val ignoreConfig = ignoredApps[packageName]
if (ignoreConfig != null && BuildConfig.storeCompilant) {
return return
} }
@ -156,7 +182,10 @@ object AndroidIntegrationApps {
packageName = packageName, packageName = packageName,
title = packageInfo.loadLabel(packageManager).toString(), title = packageInfo.loadLabel(packageManager).toString(),
isLaunchable = true, isLaunchable = true,
recommendation = recommendation recommendation = if (ignoreConfig == AndroidIntegrationApps.IgnoredAppHandling.IgnoreOnStoreOtherwiseWhitelistAndDontDisable)
AppRecommendation.Whitelist
else
recommendation
) )
} catch (ex: PackageManager.NameNotFoundException) { } catch (ex: PackageManager.NameNotFoundException) {
// ignore // ignore

View file

@ -270,7 +270,13 @@ class BackgroundTaskLogic(val appLogic: AppLogic) {
if ( if (
(foregroundAppPackageName == BuildConfig.APPLICATION_ID) || (foregroundAppPackageName == BuildConfig.APPLICATION_ID) ||
(foregroundAppPackageName != null && AndroidIntegrationApps.ignoredApps.contains(foregroundAppPackageName)) (foregroundAppPackageName != null && AndroidIntegrationApps.ignoredApps[foregroundAppPackageName].let {
when (it) {
null -> false
AndroidIntegrationApps.IgnoredAppHandling.Ignore -> true
AndroidIntegrationApps.IgnoredAppHandling.IgnoreOnStoreOtherwiseWhitelistAndDontDisable -> BuildConfig.storeCompilant
}
})
) { ) {
usedTimeUpdateHelper?.commit(appLogic) usedTimeUpdateHelper?.commit(appLogic)
showStatusMessageWithCurrentAppTitle( showStatusMessageWithCurrentAppTitle(
@ -303,7 +309,11 @@ class BackgroundTaskLogic(val appLogic: AppLogic) {
if (category == null) { if (category == null) {
usedTimeUpdateHelper?.commit(appLogic) usedTimeUpdateHelper?.commit(appLogic)
appLogic.platformIntegration.setSuspendedApps(listOf(foregroundAppPackageName), true) if (AndroidIntegrationApps.ignoredApps[foregroundAppPackageName] == null) {
// don't suspend system apps which are whitelisted in any version
appLogic.platformIntegration.setSuspendedApps(listOf(foregroundAppPackageName), true)
}
openLockscreen(foregroundAppPackageName, foregroundAppActivityName) openLockscreen(foregroundAppPackageName, foregroundAppActivityName)
} else if (category.temporarilyBlocked or (parentCategory?.temporarilyBlocked == true)) { } else if (category.temporarilyBlocked or (parentCategory?.temporarilyBlocked == true)) {
usedTimeUpdateHelper?.commit(appLogic) usedTimeUpdateHelper?.commit(appLogic)

View file

@ -105,7 +105,13 @@ class BlockingReasonUtil(private val appLogic: AppLogic) {
// check internal whitelist // check internal whitelist
if (packageName == BuildConfig.APPLICATION_ID) { if (packageName == BuildConfig.APPLICATION_ID) {
return liveDataFromValue(NoBlockingReason.getInstance(areNotificationsBlocked = false)) return liveDataFromValue(NoBlockingReason.getInstance(areNotificationsBlocked = false))
} else if (AndroidIntegrationApps.ignoredApps.contains(packageName)) { } else if (AndroidIntegrationApps.ignoredApps[packageName].let {
when (it) {
null -> false
AndroidIntegrationApps.IgnoredAppHandling.Ignore -> true
AndroidIntegrationApps.IgnoredAppHandling.IgnoreOnStoreOtherwiseWhitelistAndDontDisable -> BuildConfig.storeCompilant
}
}) {
return liveDataFromValue(NoBlockingReason.getInstance(areNotificationsBlocked = false)) return liveDataFromValue(NoBlockingReason.getInstance(areNotificationsBlocked = false))
} else { } else {
return getBlockingReasonStep3(packageName, activityName, child, timeZone) return getBlockingReasonStep3(packageName, activityName, child, timeZone)