From db71e87a9d168ab567a0caa3fbc23b4d7d8caffa Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Tue, 15 Oct 2024 17:18:54 +0600 Subject: [PATCH 1/8] feat: block installation of third-party store apps when parental control is active Similar to 'not-working' and 'zero-privacy' apps, list of third-party app stores, stored in the JSON at GitLab repo, are downloaded and saved into filesystem cache. When trying to install such app, App Lounge checks if the package is already in the blocklist. If any such package is already installed on the device prior to activating parental control, the package is checked against the blocklist and the data is sent to Parental Control app via AgeRatingProvider. Thus, it blocks the app from running. --- .../e/apps/data/blockedApps/AppWarningInfo.kt | 7 ++++--- .../apps/data/blockedApps/BlockedAppRepository.kt | 10 +++++++--- .../e/apps/domain/ValidateAppAgeLimitUseCase.kt | 15 ++++++++++++--- .../e/apps/provider/AgeRatingProvider.kt | 13 +++++++++++-- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt index c645eda16..b758428cb 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt @@ -1,6 +1,5 @@ /* - * Apps Quickly and easily install Android apps onto your device! - * Copyright (C) 2022 E FOUNDATION + * Copyright (C) 2022-2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -14,6 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . + * */ package foundation.e.apps.data.blockedApps @@ -22,5 +22,6 @@ import com.google.gson.annotations.SerializedName data class AppWarningInfo( @SerializedName("not_working_apps") val notWorkingApps: List, - @SerializedName("zero_privacy_apps") val zeroPrivacyApps: List + @SerializedName("zero_privacy_apps") val zeroPrivacyApps: List, + @SerializedName("third_party_store_apps") val thirdPartyStoreApps: List = emptyList() ) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt index 79755cb7e..39c767042 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt @@ -1,6 +1,5 @@ /* - * Apps Quickly and easily install Android apps onto your device! - * Copyright (C) 2022 E FOUNDATION + * Copyright (C) 2022-2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -14,6 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . + * */ package foundation.e.apps.data.blockedApps @@ -53,6 +53,10 @@ class BlockedAppRepository @Inject constructor( fun isPrivacyScoreZero(packageName: String) = blockedAppInfoList?.zeroPrivacyApps?.contains(packageName) ?: false + fun isThirdPartyStoreApp(packageName: String): Boolean { + return blockedAppInfoList?.thirdPartyStoreApps?.contains(packageName) ?: false + } + suspend fun fetchUpdateOfAppWarningList(): Boolean = suspendCancellableCoroutine { continuation -> downloadManager.downloadFileInCache( @@ -78,7 +82,7 @@ class BlockedAppRepository @Inject constructor( gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) } catch (exception: Exception) { Timber.e(exception.localizedMessage ?: "", exception) - AppWarningInfo(listOf(), listOf()) + AppWarningInfo(listOf(), listOf(), listOf()) } } } diff --git a/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt b/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt index 1370ad1cf..4da0219ed 100644 --- a/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt +++ b/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt @@ -21,13 +21,14 @@ package foundation.e.apps.domain import com.aurora.gplayapi.data.models.ContentRating import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.application.apps.AppsApi -import foundation.e.apps.data.parentalcontrol.Age -import foundation.e.apps.data.parentalcontrol.ParentalControlRepository +import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Type import foundation.e.apps.data.install.models.AppInstall -import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository +import foundation.e.apps.data.parentalcontrol.Age import foundation.e.apps.data.parentalcontrol.ContentRatingDao +import foundation.e.apps.data.parentalcontrol.ParentalControlRepository +import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingGroup import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingRepository import foundation.e.apps.domain.model.ContentRatingValidity @@ -38,6 +39,7 @@ class ValidateAppAgeLimitUseCase @Inject constructor( private val gPlayContentRatingRepository: GPlayContentRatingRepository, private val fDroidAntiFeatureRepository: FDroidAntiFeatureRepository, private val parentalControlRepository: ParentalControlRepository, + private val blockedAppRepository: BlockedAppRepository, private val appsApi: AppsApi, private val contentRatingDao: ContentRatingDao, ) { @@ -60,7 +62,10 @@ class ValidateAppAgeLimitUseCase @Inject constructor( data = ContentRatingValidity(true) ) + isThirdPartyStoreApp(app) -> ResultSupreme.Success(data = ContentRatingValidity(false)) + isKnownNsfwApp(app) -> ResultSupreme.Success(data = ContentRatingValidity(false)) + isCleanApkApp(app) -> ResultSupreme.Success( data = ContentRatingValidity(isValid = !isNsfwAppByCleanApkApi(app)) ) @@ -74,6 +79,10 @@ class ValidateAppAgeLimitUseCase @Inject constructor( } } + private fun isThirdPartyStoreApp(app: AppInstall): Boolean { + return blockedAppRepository.isThirdPartyStoreApp(app.packageName) + } + private fun isGitlabApp(app: AppInstall): Boolean { return app.origin == Origin.GITLAB_RELEASES } diff --git a/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt b/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt index c82240b40..a09a64255 100644 --- a/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt +++ b/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt @@ -40,6 +40,7 @@ import foundation.e.apps.contract.ParentalControlContract.PATH_BLOCKLIST import foundation.e.apps.contract.ParentalControlContract.PATH_LOGIN_TYPE import foundation.e.apps.contract.ParentalControlContract.getAppLoungeProviderAuthority import foundation.e.apps.data.ResultSupreme +import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.install.models.AppInstall import foundation.e.apps.data.login.AuthenticatorRepository @@ -73,6 +74,7 @@ class AgeRatingProvider : ContentProvider() { fun provideDataStoreManager(): DataStoreManager fun provideNotificationManager(): NotificationManager fun provideContentRatingDao(): ContentRatingDao + fun provideBlockedAppRepository(): BlockedAppRepository } companion object { @@ -88,6 +90,7 @@ class AgeRatingProvider : ContentProvider() { private lateinit var dataStoreManager: DataStoreManager private lateinit var notificationManager: NotificationManager private lateinit var contentRatingDao: ContentRatingDao + private lateinit var blockedAppRepository: BlockedAppRepository private enum class UriCode(val code: Int) { LoginType(1), @@ -230,7 +233,7 @@ class AgeRatingProvider : ContentProvider() { ) } - private suspend fun isAppValidRegardingNSWF(packageName: String): Boolean { + private suspend fun isAppValidRegardingNSFW(packageName: String): Boolean { val fakeAppInstall = AppInstall( packageName = packageName, origin = Origin.CLEANAPK, @@ -243,12 +246,17 @@ class AgeRatingProvider : ContentProvider() { return when { validateAppAgeLimitUseCase.isParentalControlDisabled() -> true !isInitialized() -> false - !isAppValidRegardingNSWF(packageName) -> false + isThirdPartyStoreApp(packageName) -> false + !isAppValidRegardingNSFW(packageName) -> false isAppValidRegardingAge(packageName) == false -> false else -> true } } + private fun isThirdPartyStoreApp(packageName: String): Boolean { + return blockedAppRepository.isThirdPartyStoreApp(packageName) + } + private suspend fun compileAppBlockList( cursor: MatrixCursor, packageNames: List, @@ -304,6 +312,7 @@ class AgeRatingProvider : ContentProvider() { dataStoreManager = hiltEntryPoint.provideDataStoreManager() notificationManager = hiltEntryPoint.provideNotificationManager() contentRatingDao = hiltEntryPoint.provideContentRatingDao() + blockedAppRepository = hiltEntryPoint.provideBlockedAppRepository() return true } -- GitLab From 5e9ed6ba77cac0b1aeb1e8c674968cc19fa501ee Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Wed, 16 Oct 2024 13:11:08 +0000 Subject: [PATCH 2/8] Apply 1 suggestion(s) to 1 file(s) Co-authored-by: Romain Hunault --- .../java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt index b758428cb..77b01edd3 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt @@ -1,5 +1,6 @@ /* - * Copyright (C) 2022-2024 MURENA SAS + * Copyright (C) 2022 E FOUNDATION + * Copyright (C) 2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -- GitLab From 3bee01fecda9f7c182237b08a3b9d32e3afdca32 Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Wed, 16 Oct 2024 19:14:50 +0600 Subject: [PATCH 3/8] chore: update copyright text --- .../foundation/e/apps/data/blockedApps/BlockedAppRepository.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt index 39c767042..6f682021e 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2024 MURENA SAS + * Copyright (C) 2024-2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -- GitLab From 83492c86a35c86a8c12ada775e66c818f19f2ba8 Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Tue, 15 Oct 2024 17:18:54 +0600 Subject: [PATCH 4/8] feat: block installation of third-party store apps when parental control is active Similar to 'not-working' and 'zero-privacy' apps, list of third-party app stores, stored in the JSON at GitLab repo, are downloaded and saved into filesystem cache. When trying to install such app, App Lounge checks if the package is already in the blocklist. If any such package is already installed on the device prior to activating parental control, the package is checked against the blocklist and the data is sent to Parental Control app via AgeRatingProvider. Thus, it blocks the app from running. --- .../e/apps/data/blockedApps/AppWarningInfo.kt | 7 ++++--- .../apps/data/blockedApps/BlockedAppRepository.kt | 10 +++++++--- .../e/apps/domain/ValidateAppAgeLimitUseCase.kt | 15 ++++++++++++--- .../e/apps/provider/AgeRatingProvider.kt | 13 +++++++++++-- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt index c645eda16..b758428cb 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt @@ -1,6 +1,5 @@ /* - * Apps Quickly and easily install Android apps onto your device! - * Copyright (C) 2022 E FOUNDATION + * Copyright (C) 2022-2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -14,6 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . + * */ package foundation.e.apps.data.blockedApps @@ -22,5 +22,6 @@ import com.google.gson.annotations.SerializedName data class AppWarningInfo( @SerializedName("not_working_apps") val notWorkingApps: List, - @SerializedName("zero_privacy_apps") val zeroPrivacyApps: List + @SerializedName("zero_privacy_apps") val zeroPrivacyApps: List, + @SerializedName("third_party_store_apps") val thirdPartyStoreApps: List = emptyList() ) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt index 79755cb7e..39c767042 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt @@ -1,6 +1,5 @@ /* - * Apps Quickly and easily install Android apps onto your device! - * Copyright (C) 2022 E FOUNDATION + * Copyright (C) 2022-2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -14,6 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . + * */ package foundation.e.apps.data.blockedApps @@ -53,6 +53,10 @@ class BlockedAppRepository @Inject constructor( fun isPrivacyScoreZero(packageName: String) = blockedAppInfoList?.zeroPrivacyApps?.contains(packageName) ?: false + fun isThirdPartyStoreApp(packageName: String): Boolean { + return blockedAppInfoList?.thirdPartyStoreApps?.contains(packageName) ?: false + } + suspend fun fetchUpdateOfAppWarningList(): Boolean = suspendCancellableCoroutine { continuation -> downloadManager.downloadFileInCache( @@ -78,7 +82,7 @@ class BlockedAppRepository @Inject constructor( gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) } catch (exception: Exception) { Timber.e(exception.localizedMessage ?: "", exception) - AppWarningInfo(listOf(), listOf()) + AppWarningInfo(listOf(), listOf(), listOf()) } } } diff --git a/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt b/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt index 1370ad1cf..4da0219ed 100644 --- a/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt +++ b/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt @@ -21,13 +21,14 @@ package foundation.e.apps.domain import com.aurora.gplayapi.data.models.ContentRating import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.application.apps.AppsApi -import foundation.e.apps.data.parentalcontrol.Age -import foundation.e.apps.data.parentalcontrol.ParentalControlRepository +import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Type import foundation.e.apps.data.install.models.AppInstall -import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository +import foundation.e.apps.data.parentalcontrol.Age import foundation.e.apps.data.parentalcontrol.ContentRatingDao +import foundation.e.apps.data.parentalcontrol.ParentalControlRepository +import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingGroup import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingRepository import foundation.e.apps.domain.model.ContentRatingValidity @@ -38,6 +39,7 @@ class ValidateAppAgeLimitUseCase @Inject constructor( private val gPlayContentRatingRepository: GPlayContentRatingRepository, private val fDroidAntiFeatureRepository: FDroidAntiFeatureRepository, private val parentalControlRepository: ParentalControlRepository, + private val blockedAppRepository: BlockedAppRepository, private val appsApi: AppsApi, private val contentRatingDao: ContentRatingDao, ) { @@ -60,7 +62,10 @@ class ValidateAppAgeLimitUseCase @Inject constructor( data = ContentRatingValidity(true) ) + isThirdPartyStoreApp(app) -> ResultSupreme.Success(data = ContentRatingValidity(false)) + isKnownNsfwApp(app) -> ResultSupreme.Success(data = ContentRatingValidity(false)) + isCleanApkApp(app) -> ResultSupreme.Success( data = ContentRatingValidity(isValid = !isNsfwAppByCleanApkApi(app)) ) @@ -74,6 +79,10 @@ class ValidateAppAgeLimitUseCase @Inject constructor( } } + private fun isThirdPartyStoreApp(app: AppInstall): Boolean { + return blockedAppRepository.isThirdPartyStoreApp(app.packageName) + } + private fun isGitlabApp(app: AppInstall): Boolean { return app.origin == Origin.GITLAB_RELEASES } diff --git a/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt b/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt index c82240b40..a09a64255 100644 --- a/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt +++ b/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt @@ -40,6 +40,7 @@ import foundation.e.apps.contract.ParentalControlContract.PATH_BLOCKLIST import foundation.e.apps.contract.ParentalControlContract.PATH_LOGIN_TYPE import foundation.e.apps.contract.ParentalControlContract.getAppLoungeProviderAuthority import foundation.e.apps.data.ResultSupreme +import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.install.models.AppInstall import foundation.e.apps.data.login.AuthenticatorRepository @@ -73,6 +74,7 @@ class AgeRatingProvider : ContentProvider() { fun provideDataStoreManager(): DataStoreManager fun provideNotificationManager(): NotificationManager fun provideContentRatingDao(): ContentRatingDao + fun provideBlockedAppRepository(): BlockedAppRepository } companion object { @@ -88,6 +90,7 @@ class AgeRatingProvider : ContentProvider() { private lateinit var dataStoreManager: DataStoreManager private lateinit var notificationManager: NotificationManager private lateinit var contentRatingDao: ContentRatingDao + private lateinit var blockedAppRepository: BlockedAppRepository private enum class UriCode(val code: Int) { LoginType(1), @@ -230,7 +233,7 @@ class AgeRatingProvider : ContentProvider() { ) } - private suspend fun isAppValidRegardingNSWF(packageName: String): Boolean { + private suspend fun isAppValidRegardingNSFW(packageName: String): Boolean { val fakeAppInstall = AppInstall( packageName = packageName, origin = Origin.CLEANAPK, @@ -243,12 +246,17 @@ class AgeRatingProvider : ContentProvider() { return when { validateAppAgeLimitUseCase.isParentalControlDisabled() -> true !isInitialized() -> false - !isAppValidRegardingNSWF(packageName) -> false + isThirdPartyStoreApp(packageName) -> false + !isAppValidRegardingNSFW(packageName) -> false isAppValidRegardingAge(packageName) == false -> false else -> true } } + private fun isThirdPartyStoreApp(packageName: String): Boolean { + return blockedAppRepository.isThirdPartyStoreApp(packageName) + } + private suspend fun compileAppBlockList( cursor: MatrixCursor, packageNames: List, @@ -304,6 +312,7 @@ class AgeRatingProvider : ContentProvider() { dataStoreManager = hiltEntryPoint.provideDataStoreManager() notificationManager = hiltEntryPoint.provideNotificationManager() contentRatingDao = hiltEntryPoint.provideContentRatingDao() + blockedAppRepository = hiltEntryPoint.provideBlockedAppRepository() return true } -- GitLab From dbf0a8f8b6f82011d5ef751eb169ba947d135631 Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Wed, 16 Oct 2024 13:11:08 +0000 Subject: [PATCH 5/8] Apply 1 suggestion(s) to 1 file(s) Co-authored-by: Romain Hunault --- .../java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt index b758428cb..77b01edd3 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt @@ -1,5 +1,6 @@ /* - * Copyright (C) 2022-2024 MURENA SAS + * Copyright (C) 2022 E FOUNDATION + * Copyright (C) 2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -- GitLab From 62dc24e5e19190577bcb84d70c522e8a2bbd4c70 Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Wed, 16 Oct 2024 19:14:50 +0600 Subject: [PATCH 6/8] chore: update copyright text --- .../foundation/e/apps/data/blockedApps/BlockedAppRepository.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt index 39c767042..6f682021e 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2024 MURENA SAS + * Copyright (C) 2024-2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -- GitLab From c508729652dbfb5462bb3d2e74cad9253b85849c Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Thu, 17 Oct 2024 16:28:13 +0600 Subject: [PATCH 7/8] chore: update copyright info --- .../foundation/e/apps/data/blockedApps/BlockedAppRepository.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt index 6f682021e..f56587874 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt @@ -1,5 +1,6 @@ /* - * Copyright (C) 2024-2024 MURENA SAS + * Copyright (C) 2022 E FOUNDATION + * Copyright (C) 2024 MURENA SAS * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -- GitLab From bca495acef5fd15b06ac8b3bf1fd5020462ea9c5 Mon Sep 17 00:00:00 2001 From: Fahim Masud Choudhury Date: Mon, 21 Oct 2024 14:29:57 +0600 Subject: [PATCH 8/8] chore: update copyright info --- .../java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt | 3 +-- .../foundation/e/apps/data/blockedApps/BlockedAppRepository.kt | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt index 77b01edd3..f19899379 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt @@ -1,6 +1,5 @@ /* - * Copyright (C) 2022 E FOUNDATION - * Copyright (C) 2024 MURENA SAS + * Copyright (C) 2022-2024 E FOUNDATION * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt index f56587874..962b1e0d5 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt @@ -1,6 +1,5 @@ /* - * Copyright (C) 2022 E FOUNDATION - * Copyright (C) 2024 MURENA SAS + * Copyright (C) 2022-2024 E FOUNDATION * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -- GitLab