Loading app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt +24 −5 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.content.UriMatcher import android.database.Cursor import android.database.MatrixCursor import android.net.Uri import android.os.Bundle import androidx.core.app.NotificationCompat import dagger.hilt.EntryPoint import dagger.hilt.InstallIn Loading @@ -34,8 +35,11 @@ import dagger.hilt.components.SingletonComponent import foundation.e.apps.R import foundation.e.apps.contract.ParentalControlContract.COLUMN_LOGIN_TYPE import foundation.e.apps.contract.ParentalControlContract.COLUMN_PACKAGE_NAME import foundation.e.apps.contract.ParentalControlContract.LIMIT import foundation.e.apps.contract.ParentalControlContract.OFFSET import foundation.e.apps.contract.ParentalControlContract.PATH_BLOCKLIST import foundation.e.apps.contract.ParentalControlContract.PATH_LOGIN_TYPE import foundation.e.apps.contract.ParentalControlContract.TOTAL_PACKAGE_NAMES import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.Source Loading Loading @@ -78,6 +82,8 @@ class AgeRatingProvider : ContentProvider() { private const val CHANNEL_ID = "applounge_provider" private const val NOTIFICATION_ID = 77 private const val AUTHORITY = "foundation.e.apps.provider" private const val DEFAULT_LIMIT_VALUE = 50 private const val DEFAULT_OFFSET_VALUE = 0 } private lateinit var authenticatorRepository: AuthenticatorRepository Loading Loading @@ -113,7 +119,7 @@ class AgeRatingProvider : ContentProvider() { val code = uriMatcher.match(uri) return when (code) { UriCode.LoginType.code -> getLoginType() UriCode.AgeRating.code -> getAgeRatings() UriCode.AgeRating.code -> getAgeRatings(uri) else -> null } } Loading @@ -124,20 +130,33 @@ class AgeRatingProvider : ContentProvider() { return cursor } private fun getAgeRatings(): Cursor { fun getAgeRatings(uri: Uri?): Cursor { val cursor = MatrixCursor(arrayOf(COLUMN_PACKAGE_NAME)) val limit = uri?.getQueryParameter(LIMIT)?.toIntOrNull() ?: DEFAULT_LIMIT_VALUE val offset = uri?.getQueryParameter(OFFSET)?.toIntOrNull() ?: DEFAULT_OFFSET_VALUE runBlocking { showNotification() val packageNames = appLoungePackageManager.getAllUserApps().map { it.packageName } Timber.d("Start preparing blocklist from ${packageNames.size} apps.") val totalPackageNames = packageNames.size cursor.extras = Bundle().apply { putInt(TOTAL_PACKAGE_NAMES, totalPackageNames) putInt(LIMIT, limit) putInt(OFFSET, offset) } val page = packageNames .drop(offset) .take(limit) Timber.d("Start preparing blocklist from ${page.size} apps.") withContext(IO) { try { if (packageNames.isEmpty()) return@withContext cursor if (page.isEmpty()) return@withContext cursor initAuthData() ensureAgeGroupDataExists() compileAppBlockList(cursor, packageNames) compileAppBlockList(cursor, page) } catch (e: Exception) { Timber.e("AgeRatingProvider", "Error fetching age ratings", e) } Loading parental-control-data/src/main/java/foundation/e/apps/contract/ParentalControlContract.kt +4 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,10 @@ package foundation.e.apps.contract object ParentalControlContract { const val COLUMN_PACKAGE_NAME = "package_name" const val TOTAL_PACKAGE_NAMES = "total_package_names" const val OFFSET = "offset" const val LIMIT = "limit" const val COLUMN_LOGIN_TYPE = "login_type" const val PATH_LOGIN_TYPE = "login_type" Loading Loading
app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt +24 −5 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.content.UriMatcher import android.database.Cursor import android.database.MatrixCursor import android.net.Uri import android.os.Bundle import androidx.core.app.NotificationCompat import dagger.hilt.EntryPoint import dagger.hilt.InstallIn Loading @@ -34,8 +35,11 @@ import dagger.hilt.components.SingletonComponent import foundation.e.apps.R import foundation.e.apps.contract.ParentalControlContract.COLUMN_LOGIN_TYPE import foundation.e.apps.contract.ParentalControlContract.COLUMN_PACKAGE_NAME import foundation.e.apps.contract.ParentalControlContract.LIMIT import foundation.e.apps.contract.ParentalControlContract.OFFSET import foundation.e.apps.contract.ParentalControlContract.PATH_BLOCKLIST import foundation.e.apps.contract.ParentalControlContract.PATH_LOGIN_TYPE import foundation.e.apps.contract.ParentalControlContract.TOTAL_PACKAGE_NAMES import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.Source Loading Loading @@ -78,6 +82,8 @@ class AgeRatingProvider : ContentProvider() { private const val CHANNEL_ID = "applounge_provider" private const val NOTIFICATION_ID = 77 private const val AUTHORITY = "foundation.e.apps.provider" private const val DEFAULT_LIMIT_VALUE = 50 private const val DEFAULT_OFFSET_VALUE = 0 } private lateinit var authenticatorRepository: AuthenticatorRepository Loading Loading @@ -113,7 +119,7 @@ class AgeRatingProvider : ContentProvider() { val code = uriMatcher.match(uri) return when (code) { UriCode.LoginType.code -> getLoginType() UriCode.AgeRating.code -> getAgeRatings() UriCode.AgeRating.code -> getAgeRatings(uri) else -> null } } Loading @@ -124,20 +130,33 @@ class AgeRatingProvider : ContentProvider() { return cursor } private fun getAgeRatings(): Cursor { fun getAgeRatings(uri: Uri?): Cursor { val cursor = MatrixCursor(arrayOf(COLUMN_PACKAGE_NAME)) val limit = uri?.getQueryParameter(LIMIT)?.toIntOrNull() ?: DEFAULT_LIMIT_VALUE val offset = uri?.getQueryParameter(OFFSET)?.toIntOrNull() ?: DEFAULT_OFFSET_VALUE runBlocking { showNotification() val packageNames = appLoungePackageManager.getAllUserApps().map { it.packageName } Timber.d("Start preparing blocklist from ${packageNames.size} apps.") val totalPackageNames = packageNames.size cursor.extras = Bundle().apply { putInt(TOTAL_PACKAGE_NAMES, totalPackageNames) putInt(LIMIT, limit) putInt(OFFSET, offset) } val page = packageNames .drop(offset) .take(limit) Timber.d("Start preparing blocklist from ${page.size} apps.") withContext(IO) { try { if (packageNames.isEmpty()) return@withContext cursor if (page.isEmpty()) return@withContext cursor initAuthData() ensureAgeGroupDataExists() compileAppBlockList(cursor, packageNames) compileAppBlockList(cursor, page) } catch (e: Exception) { Timber.e("AgeRatingProvider", "Error fetching age ratings", e) } Loading
parental-control-data/src/main/java/foundation/e/apps/contract/ParentalControlContract.kt +4 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,10 @@ package foundation.e.apps.contract object ParentalControlContract { const val COLUMN_PACKAGE_NAME = "package_name" const val TOTAL_PACKAGE_NAMES = "total_package_names" const val OFFSET = "offset" const val LIMIT = "limit" const val COLUMN_LOGIN_TYPE = "login_type" const val PATH_LOGIN_TYPE = "login_type" Loading