mirror of
https://codeberg.org/timelimit/timelimit-android.git
synced 2025-10-03 01:39:22 +02:00
Whitelist package installer only in store version; otherwise add to default whitelist
This commit is contained in:
parent
50a5ae56a6
commit
822c148832
3 changed files with 67 additions and 22 deletions
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue