diff --git a/app/src/main/java/com/topjohnwu/magisk/data/database/PolicyDao.kt b/app/src/main/java/com/topjohnwu/magisk/data/database/PolicyDao.kt index 0ae902bfb..24ce2e664 100644 --- a/app/src/main/java/com/topjohnwu/magisk/data/database/PolicyDao.kt +++ b/app/src/main/java/com/topjohnwu/magisk/data/database/PolicyDao.kt @@ -8,6 +8,7 @@ import com.topjohnwu.magisk.model.entity.MagiskPolicy import com.topjohnwu.magisk.model.entity.toMap import com.topjohnwu.magisk.model.entity.toPolicy import com.topjohnwu.magisk.utils.now +import timber.log.Timber import java.util.concurrent.TimeUnit @@ -47,12 +48,7 @@ class PolicyDao( condition { equals("uid", uid) } - }.map { it.firstOrNull()?.toPolicy(context.packageManager) } - .doOnError { - if (it is PackageManager.NameNotFoundException) { - delete(uid).subscribe() - } - } + }.map { it.first().toPolicySafe() } fun update(policy: MagiskPolicy) = query { values(policy.toMap()) @@ -62,8 +58,24 @@ class PolicyDao( condition { equals("uid/100000", Const.USER_ID) } - }.flattenAsFlowable { it } - .map { it.toPolicy(context.packageManager) } - .toList() + }.map { it.mapNotNull { it.toPolicySafe() } } + + + private fun Map.toPolicySafe(): MagiskPolicy? { + val taskResult = runCatching { toPolicy(context.packageManager) } + val result = taskResult.getOrNull() + val exception = taskResult.exceptionOrNull() + + Timber.e(exception) + + when (exception) { + is PackageManager.NameNotFoundException -> { + val uid = getOrElse("uid") { null } ?: return null + delete(uid).subscribe() + } + } + + return result + } } \ No newline at end of file