diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml
index 8968baf74f8cfd197142ee194b0594f790ee78a6..9b4ff20b2602a7462e155a66c3e1f7f5af58d4de 100644
--- a/app/detekt-baseline.xml
+++ b/app/detekt-baseline.xml
@@ -16,23 +16,16 @@
LongParameterList:MainActivityViewModel.kt$MainActivityViewModel$( private val appLoungeDataStore: AppLoungeDataStore, private val applicationRepository: ApplicationRepository, private val appManagerWrapper: AppManagerWrapper, private val appLoungePackageManager: AppLoungePackageManager, private val pwaManager: PwaManager, private val blockedAppRepository: BlockedAppRepository, private val gPlayContentRatingRepository: GPlayContentRatingRepository, private val fDroidAntiFeatureRepository: FDroidAntiFeatureRepository, private val appInstallProcessor: AppInstallProcessor, private val systemAppsUpdatesRepository: SystemAppsUpdatesRepository, private val reportFaultyTokenUseCase: ReportFaultyTokenUseCase, )
LongParameterList:UpdatesManagerImpl.kt$UpdatesManagerImpl$( @ApplicationContext private val context: Context, private val appLoungePackageManager: AppLoungePackageManager, private val applicationRepository: ApplicationRepository, private val faultyAppRepository: FaultyAppRepository, private val appLoungePreference: AppLoungePreference, private val fDroidRepository: FDroidRepository, private val blockedAppRepository: BlockedAppRepository, private val systemAppsUpdatesRepository: SystemAppsUpdatesRepository, )
LongParameterList:UpdatesWorker.kt$UpdatesWorker$( @Assisted private val context: Context, @Assisted private val params: WorkerParameters, private val updatesManagerRepository: UpdatesManagerRepository, private val appLoungeDataStore: AppLoungeDataStore, private val authenticatorRepository: AuthenticatorRepository, private val appInstallProcessor: AppInstallProcessor, private val blockedAppRepository: BlockedAppRepository, private val systemAppsUpdatesRepository: SystemAppsUpdatesRepository, )
+ NoUnusedImports:AppInstallComponents.kt$foundation.e.apps.data.install.AppInstallComponents.kt
ProtectedMemberInFinalClass:ApplicationListFragment.kt$ApplicationListFragment$// protected to avoid SyntheticAccessor protected val args: ApplicationListFragmentArgs by navArgs()
ProtectedMemberInFinalClass:ApplicationListFragment.kt$ApplicationListFragment$// protected to avoid SyntheticAccessor protected val viewModel: ApplicationListViewModel by viewModels()
ProtectedMemberInFinalClass:GoogleSignInFragment.kt$GoogleSignInFragment$// protected to avoid SyntheticAccessor protected val viewModel: LoginViewModel by lazy { ViewModelProvider(requireActivity())[LoginViewModel::class.java] }
- ReturnCount:ApkSignatureManager.kt$ApkSignatureManager$private fun verifyAPKSignature( apkInputStream: BufferedInputStream, apkSignatureInputStream: InputStream, publicKeyInputStream: InputStream, packageName: String ): Boolean
ReturnCount:AppInstallProcessor.kt$AppInstallProcessor$private suspend fun updateDownloadUrls(appInstall: AppInstall): Boolean
- ReturnCount:AppInstallProcessor.kt$AppInstallProcessor$suspend fun enqueueFusedDownload( appInstall: AppInstall, isAnUpdate: Boolean = false, isSystemApp: Boolean = false )
ReturnCount:AppManagerWrapper.kt$AppManagerWrapper$suspend fun addDownload(appInstall: AppInstall): Boolean
- ReturnCount:AppManagerWrapper.kt$AppManagerWrapper$suspend fun calculateProgress( application: Application?, progress: DownloadProgress ): Int
- ReturnCount:AppPrivacyInfoRepositoryImpl.kt$AppPrivacyInfoRepositoryImpl$override suspend fun getAppPrivacyInfo( application: Application, appHandle: String ): Result<AppPrivacyInfo>
ReturnCount:CleanApkAppsRepository.kt$CleanApkAppsRepository$override suspend fun getAppDetails(packageName: String): Application
ReturnCount:CleanApkPwaRepository.kt$CleanApkPwaRepository$override suspend fun getAppDetails(packageName: String): Application
ReturnCount:DownloadManager.kt$DownloadManager$fun getSizeRequired(downloadId: Long): Long
- ReturnCount:DownloadManager.kt$DownloadManager$private fun sanitizeStatus(downloadId: Long, status: Int, reason: Int): Int
- ReturnCount:Extensions.kt$fun Context.isNetworkAvailable(): Boolean
- ReturnCount:PrivacyInfoViewModel.kt$PrivacyInfoViewModel$fun shouldRequestExodusReport(application: Application?): Boolean
- ReturnCount:StorageNotificationManager.kt$StorageNotificationManager$private fun getSpaceMissing(appInstall: AppInstall, downloadId: Long? = null): Long
- ReturnCount:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$private suspend fun getApplication( packageName: String, releaseType: OsReleaseType, sdkLevel: Int, device: String, ): Application?
+ ReturnCount:NetworkExtensions.kt$fun Context.isNetworkAvailable(): Boolean
ReturnCount:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$private suspend fun getReleaseDetailsUrl( systemAppProject: SystemAppProject, releaseType: OsReleaseType, ): String?
ReturnCount:UpdatesManagerImpl.kt$UpdatesManagerImpl$private suspend fun calculateSignatureVersion(latestCleanapkApp: Application): String
SpreadOperator:EglExtensionProvider.kt$EglExtensionProvider$(*`as`)
@@ -61,7 +54,6 @@
TooGenericExceptionCaught:AppPrivacyInfoRepositoryImpl.kt$AppPrivacyInfoRepositoryImpl$exception: Exception
TooGenericExceptionCaught:ApplicationViewModel.kt$ApplicationViewModel$e: Exception
TooGenericExceptionCaught:BlockedAppRepository.kt$BlockedAppRepository$exception: Exception
- TooGenericExceptionCaught:CommonUtilsModule.kt$CommonUtilsModule$e: Exception
TooGenericExceptionCaught:DownloadManager.kt$DownloadManager$e: Exception
TooGenericExceptionCaught:DownloadManager.kt$DownloadManager$e: RuntimeException
TooGenericExceptionCaught:DownloadProgressLD.kt$DownloadProgressLD$e: Exception
@@ -71,6 +63,7 @@
TooGenericExceptionCaught:InstallWorkManager.kt$InstallWorkManager$e: Exception
TooGenericExceptionCaught:LocaleChangedBroadcastReceiver.kt$LocaleChangedBroadcastReceiver$ex: Exception
TooGenericExceptionCaught:NativeDeviceInfoProviderModule.kt$NativeDeviceInfoProviderModule$e: Exception
+ TooGenericExceptionCaught:NavControllerExtensions.kt$e: Exception
TooGenericExceptionCaught:NetworkHandler.kt$e: Exception
TooGenericExceptionCaught:PlayStoreRepository.kt$PlayStoreRepository$exception: Exception
TooGenericExceptionCaught:PwaManager.kt$PwaManager$e: Exception
@@ -92,7 +85,6 @@
UseCheckOrError:AppsApiImpl.kt$AppsApiImpl$throw IllegalStateException("Could not get store")
UseCheckOrError:CleanApkAppsRepository.kt$CleanApkAppsRepository$throw IllegalStateException("No home data found")
UseCheckOrError:CleanApkPwaRepository.kt$CleanApkPwaRepository$throw IllegalStateException("No home data found")
- UseCheckOrError:HomeApiImpl.kt$HomeApiImpl$throw IllegalStateException("Could not find store for $source")
UseCheckOrError:PlayStoreRepository.kt$PlayStoreRepository$throw IllegalStateException("App version code cannot be 0")
UseCheckOrError:PlayStoreRepository.kt$PlayStoreRepository$throw IllegalStateException("Could not get download details for $idOrPackageName")
Wrapping:AppInstallProcessor.kt$AppInstallProcessor$(
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cb9d3d92a951959d070a817074fa7e9e020a32c3..a8fff317b851c876840266a3b9f12e8103b53986 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -124,12 +124,12 @@
@@ -139,7 +139,7 @@
-
@@ -147,7 +147,7 @@
-
@@ -156,7 +156,7 @@
-
@@ -166,7 +166,7 @@
-
@@ -195,7 +195,7 @@
@@ -205,7 +205,7 @@
tools:node="merge" />
diff --git a/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt b/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt
index b98bfc5d4d13373a15b9792e6c243917cd6f9d5e..98b7056d47c10a915b3d18564dd14ba0165e4609 100644
--- a/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt
+++ b/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt
@@ -28,17 +28,17 @@ import androidx.work.ExistingPeriodicWorkPolicy
import dagger.hilt.android.HiltAndroidApp
import foundation.e.apps.data.Constants.TAG_APP_INSTALL_STATE
import foundation.e.apps.data.Constants.TAG_AUTHDATA_DUMP
+import foundation.e.apps.data.di.qualifiers.IoCoroutineScope
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.install.AppInstallDAO
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PkgManagerBR
+import foundation.e.apps.data.install.updates.UpdatesWorkManager
+import foundation.e.apps.data.install.workmanager.InstallWorkManager
import foundation.e.apps.data.preference.AppLoungeDataStore
import foundation.e.apps.data.preference.AppLoungePreference
-import foundation.e.apps.di.qualifiers.IoCoroutineScope
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PkgManagerBR
-import foundation.e.apps.install.updates.UpdatesWorkManager
-import foundation.e.apps.install.workmanager.InstallWorkManager
+import foundation.e.apps.data.system.CustomUncaughtExceptionHandler
import foundation.e.apps.ui.setup.tos.TOS_VERSION
-import foundation.e.apps.utils.CustomUncaughtExceptionHandler
import foundation.e.lib.telemetry.Telemetry
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
diff --git a/app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt b/app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt
index 29670f642a42096777a36184714bf8970b6e8b8e..8dbdf763d107ab1654cf7f5285ef72157edd3d3c 100644
--- a/app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt
@@ -25,8 +25,8 @@ import foundation.e.apps.data.application.utils.AppVisibilityResolver
import foundation.e.apps.data.enums.FilterLevel
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/CleanApkSearchHelper.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/CleanApkSearchHelper.kt
index 97de5c53edf186c35f678f1b369bcf8562214792..21c90013400cd7403f9411ed1a7e7ade30811052 100644
--- a/app/src/main/java/foundation/e/apps/data/cleanapk/CleanApkSearchHelper.kt
+++ b/app/src/main/java/foundation/e/apps/data/cleanapk/CleanApkSearchHelper.kt
@@ -23,7 +23,7 @@ import foundation.e.apps.data.cleanapk.data.search.Search
import foundation.e.apps.data.cleanapk.repositories.NUMBER_OF_ITEMS
import foundation.e.apps.data.cleanapk.repositories.NUMBER_OF_PAGES
import foundation.e.apps.data.enums.Source
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.system.SystemInfoProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import javax.inject.Inject
diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepository.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepository.kt
index d9e03e71572f3a406ffceaccbfc2c3895ebe0114..8aea72bf0e8465839332640fad7ba580a51a7efd 100644
--- a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepository.kt
+++ b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepository.kt
@@ -29,7 +29,7 @@ import foundation.e.apps.data.cleanapk.data.categories.Categories
import foundation.e.apps.data.cleanapk.data.download.Download
import foundation.e.apps.data.cleanapk.data.search.Search
import foundation.e.apps.data.enums.Source
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.system.SystemInfoProvider
import retrofit2.Response
import javax.inject.Inject
diff --git a/app/src/main/java/foundation/e/apps/di/DataModule.kt b/app/src/main/java/foundation/e/apps/data/di/bindings/DataModule.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/di/DataModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/bindings/DataModule.kt
index 5d0d905768aa6669b35dfdd2304b22e5d52a4daf..65ec3c222ba1e084d8312090d72ec246bd21f2e2 100644
--- a/app/src/main/java/foundation/e/apps/di/DataModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/bindings/DataModule.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.bindings
import dagger.Binds
import dagger.Module
diff --git a/app/src/main/java/foundation/e/apps/di/LoginModule.kt b/app/src/main/java/foundation/e/apps/data/di/bindings/LoginModule.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/di/LoginModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/bindings/LoginModule.kt
index 20d7c4b0b9876ea1c051b43ddc1c87de8cb06a19..e2de022ad750304162bd0399691c63980e674f93 100644
--- a/app/src/main/java/foundation/e/apps/di/LoginModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/bindings/LoginModule.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.bindings
import dagger.Module
import dagger.Provides
diff --git a/app/src/main/java/foundation/e/apps/di/RepositoryModule.kt b/app/src/main/java/foundation/e/apps/data/di/bindings/RepositoryModule.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/di/RepositoryModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/bindings/RepositoryModule.kt
index 0038958d12fba4cc8fcc754842f0a54014335e73..9b4ded794821f08253a68fd04211480fe093eb20 100644
--- a/app/src/main/java/foundation/e/apps/di/RepositoryModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/bindings/RepositoryModule.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.bindings
import dagger.Binds
import dagger.Module
diff --git a/app/src/main/java/foundation/e/apps/di/SearchPagingModule.kt b/app/src/main/java/foundation/e/apps/data/di/bindings/SearchPagingModule.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/di/SearchPagingModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/bindings/SearchPagingModule.kt
index d0aa29ffbaf7fa657581d53f8cd74433782d6627..46ba941d834dc89919b23a36f6dea346fd35bd4d 100644
--- a/app/src/main/java/foundation/e/apps/di/SearchPagingModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/bindings/SearchPagingModule.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.bindings
import dagger.Binds
import dagger.Module
diff --git a/app/src/main/java/foundation/e/apps/di/SearchSuggestionModule.kt b/app/src/main/java/foundation/e/apps/data/di/bindings/SearchSuggestionModule.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/di/SearchSuggestionModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/bindings/SearchSuggestionModule.kt
index 8f538b8c81ca51480beaeadc164b4c8fb0f92c85..eb4164dda593907b2d98ed647696c0405a62b61b 100644
--- a/app/src/main/java/foundation/e/apps/di/SearchSuggestionModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/bindings/SearchSuggestionModule.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.bindings
import dagger.Binds
import dagger.Module
diff --git a/app/src/main/java/foundation/e/apps/di/DaoModule.kt b/app/src/main/java/foundation/e/apps/data/di/db/DaoModule.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/di/DaoModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/db/DaoModule.kt
index c58bbde22d4d7c233ad6c69a1fa96fe9e8a4facc..e86eb719f3850740c59b1a65fe10d1cd04fd972b 100644
--- a/app/src/main/java/foundation/e/apps/di/DaoModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/db/DaoModule.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.di
+package foundation.e.apps.data.di.db
import android.content.Context
import dagger.Module
diff --git a/app/src/main/java/foundation/e/apps/di/DatabaseModule.kt b/app/src/main/java/foundation/e/apps/data/di/db/DatabaseModule.kt
similarity index 95%
rename from app/src/main/java/foundation/e/apps/di/DatabaseModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/db/DatabaseModule.kt
index 00be9761f1741e5d38ff2c57b283bae7e0a28ebc..615edbd93ff7573cb073740d3029daba6d81d263 100644
--- a/app/src/main/java/foundation/e/apps/di/DatabaseModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/db/DatabaseModule.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.di
+package foundation.e.apps.data.di.db
import android.content.Context
import dagger.Module
diff --git a/app/src/main/java/foundation/e/apps/di/network/InterceptorModule.kt b/app/src/main/java/foundation/e/apps/data/di/network/InterceptorModule.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/di/network/InterceptorModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/network/InterceptorModule.kt
index e5ba08cf7b63cdf6d52b4ed7a3821bb03478d269..35b98ef47e1bc9b37d4e1c8ec855ca4ae065f844 100644
--- a/app/src/main/java/foundation/e/apps/di/network/InterceptorModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/network/InterceptorModule.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.di.network
+package foundation.e.apps.data.di.network
import android.annotation.SuppressLint
import android.os.Build
diff --git a/app/src/main/java/foundation/e/apps/di/network/NetworkModule.kt b/app/src/main/java/foundation/e/apps/data/di/network/NetworkModule.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/di/network/NetworkModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/network/NetworkModule.kt
index cdeb0e363459775920d9e9ad6dffd030804356fc..077da8db48d0a074fe636f2d5be79c943ab2a200 100644
--- a/app/src/main/java/foundation/e/apps/di/network/NetworkModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/network/NetworkModule.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.di.network
+package foundation.e.apps.data.di.network
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
diff --git a/app/src/main/java/foundation/e/apps/di/network/RetrofitApiModule.kt b/app/src/main/java/foundation/e/apps/data/di/network/RetrofitApiModule.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/di/network/RetrofitApiModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/network/RetrofitApiModule.kt
index e021ae9828f1b664ca2d4a0177299081e8bfad5f..b25d776b6901fb60a0a68a3167bef53d9deb165b 100644
--- a/app/src/main/java/foundation/e/apps/di/network/RetrofitApiModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/network/RetrofitApiModule.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.di.network
+package foundation.e.apps.data.di.network
import com.google.gson.Gson
import com.squareup.moshi.Moshi
@@ -25,6 +25,7 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import foundation.e.apps.data.cleanapk.CleanApkRetrofit
+import foundation.e.apps.data.di.network.NetworkModule.getYamlFactory
import foundation.e.apps.data.ecloud.EcloudApiInterface
import foundation.e.apps.data.fdroid.FdroidApiInterface
import foundation.e.apps.data.gitlab.ReleaseInfoApi
@@ -32,7 +33,6 @@ import foundation.e.apps.data.gitlab.SystemAppDefinitionApi
import foundation.e.apps.data.gitlab.UpdatableSystemAppsApi
import foundation.e.apps.data.parentalcontrol.fdroid.FDroidMonitorApi
import foundation.e.apps.data.parentalcontrol.googleplay.AgeGroupApi
-import foundation.e.apps.di.network.NetworkModule.getYamlFactory
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
diff --git a/app/src/main/java/foundation/e/apps/di/qualifiers/IoCoroutineScope.kt b/app/src/main/java/foundation/e/apps/data/di/qualifiers/IoCoroutineScope.kt
similarity index 94%
rename from app/src/main/java/foundation/e/apps/di/qualifiers/IoCoroutineScope.kt
rename to app/src/main/java/foundation/e/apps/data/di/qualifiers/IoCoroutineScope.kt
index 0e6858f36006f802572997d41592ee6c2ed2a473..2964d6a892194b1b57f00d94009de29a6638ffff 100644
--- a/app/src/main/java/foundation/e/apps/di/qualifiers/IoCoroutineScope.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/qualifiers/IoCoroutineScope.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.di.qualifiers
+package foundation.e.apps.data.di.qualifiers
import javax.inject.Qualifier
diff --git a/app/src/main/java/foundation/e/apps/di/AccountManagerModule.kt b/app/src/main/java/foundation/e/apps/data/di/system/AccountManagerModule.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/di/AccountManagerModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/system/AccountManagerModule.kt
index c7f5029727c982f04bcf12f1873dc50e57214f6a..f43107ec7c91f0d7ae6a5c048b92e758c7e81f2e 100644
--- a/app/src/main/java/foundation/e/apps/di/AccountManagerModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/system/AccountManagerModule.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.system
import android.accounts.AccountManager
import android.content.Context
diff --git a/app/src/main/java/foundation/e/apps/di/CommonUtilsModule.kt b/app/src/main/java/foundation/e/apps/data/di/system/CommonUtilsModule.kt
similarity index 75%
rename from app/src/main/java/foundation/e/apps/di/CommonUtilsModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/system/CommonUtilsModule.kt
index 44af528d97cca4e7d5924f8f9d510ca4dcfe2f19..486a3b2887d5040d42a41039a1f8bcca05e5699b 100644
--- a/app/src/main/java/foundation/e/apps/di/CommonUtilsModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/system/CommonUtilsModule.kt
@@ -16,16 +16,12 @@
*
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.system
-import android.content.ClipboardManager
import android.content.Context
import android.os.Build
-import android.os.Bundle
import android.os.Environment
import android.os.StatFs
-import androidx.annotation.IdRes
-import androidx.navigation.NavController
import com.aurora.gplayapi.data.serializers.LocaleSerializer
import com.aurora.gplayapi.data.serializers.PropertiesSerializer
import dagger.Module
@@ -34,7 +30,7 @@ import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import foundation.e.apps.BuildConfig
-import foundation.e.apps.di.qualifiers.IoCoroutineScope
+import foundation.e.apps.data.di.qualifiers.IoCoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
@@ -42,7 +38,6 @@ import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual
import okhttp3.Cache
-import timber.log.Timber
import javax.inject.Named
import javax.inject.Singleton
@@ -50,7 +45,6 @@ import javax.inject.Singleton
@InstallIn(SingletonComponent::class)
object CommonUtilsModule {
- val LIST_OF_NULL = listOf("null")
private const val CACHE_SIZE_MB = 30L
private const val BYTES_IN_MB = 1024L * 1024L
@@ -126,37 +120,9 @@ object CommonUtilsModule {
return Cache(context.cacheDir, cacheSize)
}
- /**
- * Prevents calling a route if the navigation is already done, i.e. prevents duplicate calls.
- * Source:
- * https://nezspencer.medium.com/navigation-components-a-fix-for-navigation-action-
- * cannot-be-found-in-the-current-destination-95b63e16152e
- * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5166
- * Also related: https://gitlab.e.foundation/ecorp/apps/apps/-/merge_requests/28
- */
- fun NavController.safeNavigate(
- @IdRes currentDestinationId: Int,
- @IdRes id: Int,
- args: Bundle? = null
- ) {
- try {
- if (currentDestinationId == currentDestination?.id) {
- navigate(id, args)
- }
- } catch (e: Exception) {
- Timber.w(e, "Navigation to destination $id failed")
- }
- }
-
@Provides
@IoCoroutineScope
fun provideIoCoroutineScope(): CoroutineScope {
return CoroutineScope(SupervisorJob() + Dispatchers.IO)
}
-
- @Singleton
- @Provides
- fun provideClipboardService(@ApplicationContext context: Context): ClipboardManager {
- return context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
- }
}
diff --git a/app/src/main/java/foundation/e/apps/di/DownloadManagerModule.kt b/app/src/main/java/foundation/e/apps/data/di/system/DownloadManagerModule.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/di/DownloadManagerModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/system/DownloadManagerModule.kt
index 91f2d7fb57d84806e635d3a5cf034ad7c2c3ce57..f819352ffd404cf98f553933d7e4984281a9dcf2 100644
--- a/app/src/main/java/foundation/e/apps/di/DownloadManagerModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/system/DownloadManagerModule.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.system
import android.app.DownloadManager
import android.content.Context
diff --git a/app/src/main/java/foundation/e/apps/di/NotificationManagerModule.kt b/app/src/main/java/foundation/e/apps/data/di/system/NotificationManagerModule.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/di/NotificationManagerModule.kt
rename to app/src/main/java/foundation/e/apps/data/di/system/NotificationManagerModule.kt
index 3f7ffe30cc7f40547a07a601d889d8a433a7de3e..f3cb76b6f411dd7060e1e42794bd593f0074e936 100644
--- a/app/src/main/java/foundation/e/apps/di/NotificationManagerModule.kt
+++ b/app/src/main/java/foundation/e/apps/data/di/system/NotificationManagerModule.kt
@@ -17,7 +17,7 @@
*
*/
-package foundation.e.apps.di
+package foundation.e.apps.data.di.system
import android.app.NotificationChannel
import android.app.NotificationManager
diff --git a/app/src/main/java/foundation/e/apps/utils/eventBus/AppEvent.kt b/app/src/main/java/foundation/e/apps/data/event/AppEvent.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/utils/eventBus/AppEvent.kt
rename to app/src/main/java/foundation/e/apps/data/event/AppEvent.kt
index 8d5b38673348732969ab2319f266ee5179101018..57806cd6188cce1e02012ced39a4e7e304bbe870 100644
--- a/app/src/main/java/foundation/e/apps/utils/eventBus/AppEvent.kt
+++ b/app/src/main/java/foundation/e/apps/data/event/AppEvent.kt
@@ -18,7 +18,7 @@
*
*/
-package foundation.e.apps.utils.eventBus
+package foundation.e.apps.data.event
import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.enums.ResultStatus
diff --git a/app/src/main/java/foundation/e/apps/utils/eventBus/EventBus.kt b/app/src/main/java/foundation/e/apps/data/event/EventBus.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/utils/eventBus/EventBus.kt
rename to app/src/main/java/foundation/e/apps/data/event/EventBus.kt
index ffb5fac954cbe10ef69552dc3ff40b8c9a684d47..e925f80f9f4201b524372613c70c3c6627b47056 100644
--- a/app/src/main/java/foundation/e/apps/utils/eventBus/EventBus.kt
+++ b/app/src/main/java/foundation/e/apps/data/event/EventBus.kt
@@ -18,7 +18,7 @@
*
*/
-package foundation.e.apps.utils.eventBus
+package foundation.e.apps.data.event
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
diff --git a/app/src/main/java/foundation/e/apps/utils/ExodusUriGenerator.kt b/app/src/main/java/foundation/e/apps/data/exodus/ExodusUriGenerator.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/utils/ExodusUriGenerator.kt
rename to app/src/main/java/foundation/e/apps/data/exodus/ExodusUriGenerator.kt
index 3305a2042c0f532a91fe576e2717e61df67f307a..ae9a81e9b82c4a947cf4d40378a598eb38ac2fc6 100644
--- a/app/src/main/java/foundation/e/apps/utils/ExodusUriGenerator.kt
+++ b/app/src/main/java/foundation/e/apps/data/exodus/ExodusUriGenerator.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.utils
+package foundation.e.apps.data.exodus
import android.net.Uri
import java.util.Locale
diff --git a/app/src/main/java/foundation/e/apps/data/fdroid/FdroidApiInterface.kt b/app/src/main/java/foundation/e/apps/data/fdroid/FdroidApiInterface.kt
index 120064d8e99ab7640bb36093afbb790204fffe01..32c69536921422b3495a6864c611d7ba7b0e0de6 100644
--- a/app/src/main/java/foundation/e/apps/data/fdroid/FdroidApiInterface.kt
+++ b/app/src/main/java/foundation/e/apps/data/fdroid/FdroidApiInterface.kt
@@ -25,7 +25,7 @@ import retrofit2.http.Path
/**
* Interface for retrofit calls.
- * Created from [foundation.e.apps.di.network.RetrofitApiModule.provideFdroidApi].
+ * Created from [foundation.e.apps.data.di.network.RetrofitApiModule.provideFdroidApi].
*/
interface FdroidApiInterface {
diff --git a/app/src/main/java/foundation/e/apps/data/fdroid/FdroidDao.kt b/app/src/main/java/foundation/e/apps/data/fdroid/FdroidDao.kt
index 19576d5ea777d4df66fd3bfb158242199fcffbf4..d53dda5aa691a6f8d8f0dd132e7ef89cb350a266 100644
--- a/app/src/main/java/foundation/e/apps/data/fdroid/FdroidDao.kt
+++ b/app/src/main/java/foundation/e/apps/data/fdroid/FdroidDao.kt
@@ -8,7 +8,7 @@ import foundation.e.apps.data.fdroid.models.FdroidEntity
/**
* Dao interface for storing Fdroid info in DB.
- * Created from [foundation.e.apps.di.DaoModule.getFdroidDao]
+ * Created from [foundation.e.apps.data.di.db.DaoModule.getFdroidDao]
*/
@Dao
interface FdroidDao {
diff --git a/app/src/main/java/foundation/e/apps/data/gitlab/SystemAppsUpdatesRepository.kt b/app/src/main/java/foundation/e/apps/data/gitlab/SystemAppsUpdatesRepository.kt
index 9071df854ea57d4b6dfeab956ac896d52e348997..20d757c79a809789d0e06dd58724fc089175bcc7 100644
--- a/app/src/main/java/foundation/e/apps/data/gitlab/SystemAppsUpdatesRepository.kt
+++ b/app/src/main/java/foundation/e/apps/data/gitlab/SystemAppsUpdatesRepository.kt
@@ -31,8 +31,8 @@ import foundation.e.apps.data.gitlab.models.SystemAppInfo
import foundation.e.apps.data.gitlab.models.SystemAppProject
import foundation.e.apps.data.gitlab.models.toApplication
import foundation.e.apps.data.handleNetworkResult
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.system.SystemInfoProvider
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/foundation/e/apps/install/AppInstallComponents.kt b/app/src/main/java/foundation/e/apps/data/install/AppInstallComponents.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/install/AppInstallComponents.kt
rename to app/src/main/java/foundation/e/apps/data/install/AppInstallComponents.kt
index dfe3f93ac9ca6266b65c3ad51c82b0f2c78fe85f..4133ec4594e6f27113d0c3de21c907cf6d52cda0 100644
--- a/app/src/main/java/foundation/e/apps/install/AppInstallComponents.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/AppInstallComponents.kt
@@ -17,7 +17,7 @@
*
*/
-package foundation.e.apps.install
+package foundation.e.apps.data.install
import foundation.e.apps.data.install.AppInstallRepository
import foundation.e.apps.data.install.AppManagerWrapper
diff --git a/app/src/main/java/foundation/e/apps/data/install/AppManagerImpl.kt b/app/src/main/java/foundation/e/apps/data/install/AppManagerImpl.kt
index b7ff07e81d350879c90c5d16d7bbe5beb3659079..803c36e3b36cfe4e31ede10e5d45ec29b5cb38ed 100644
--- a/app/src/main/java/foundation/e/apps/data/install/AppManagerImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/AppManagerImpl.kt
@@ -30,13 +30,13 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.enums.Type
+import foundation.e.apps.data.install.download.data.DownloadProgressLD
import foundation.e.apps.data.install.models.AppInstall
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import foundation.e.apps.data.parentalcontrol.ContentRatingDao
import foundation.e.apps.data.parentalcontrol.ContentRatingEntity
import foundation.e.apps.data.preference.AppLoungePreference
-import foundation.e.apps.install.download.data.DownloadProgressLD
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
diff --git a/app/src/main/java/foundation/e/apps/data/install/AppManagerWrapper.kt b/app/src/main/java/foundation/e/apps/data/install/AppManagerWrapper.kt
index 4fce1f9681f92bd13b94889be96c26de65fa4548..54b80142990eb180e1fc3cf649fa193b3fa8842d 100644
--- a/app/src/main/java/foundation/e/apps/data/install/AppManagerWrapper.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/AppManagerWrapper.kt
@@ -25,9 +25,9 @@ import foundation.e.apps.data.Constants.MIN_VALID_RATING
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.fdroid.FDroidRepository
+import foundation.e.apps.data.install.download.data.DownloadProgress
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.install.download.data.DownloadProgress
-import foundation.e.apps.install.workmanager.InstallWorkManager
+import foundation.e.apps.data.install.workmanager.InstallWorkManager
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerBR.kt b/app/src/main/java/foundation/e/apps/data/install/download/DownloadManagerBR.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/install/download/DownloadManagerBR.kt
rename to app/src/main/java/foundation/e/apps/data/install/download/DownloadManagerBR.kt
index 819302f306de34a80e1fe677f27a5695f05863cb..40441bd9c54c21a478412647cb74cf903ba754cf 100644
--- a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerBR.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/download/DownloadManagerBR.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.download
+package foundation.e.apps.data.install.download
import android.app.DownloadManager
import android.content.BroadcastReceiver
diff --git a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt b/app/src/main/java/foundation/e/apps/data/install/download/DownloadManagerUtils.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt
rename to app/src/main/java/foundation/e/apps/data/install/download/DownloadManagerUtils.kt
index e02c357b69636193b6685f39786b0320409988c7..be7358f41f2804b1b906aa940602d19c6f917c85 100644
--- a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/download/DownloadManagerUtils.kt
@@ -16,20 +16,20 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.download
+package foundation.e.apps.data.install.download
import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
import foundation.e.apps.data.DownloadManager
+import foundation.e.apps.data.di.qualifiers.IoCoroutineScope
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
import foundation.e.apps.data.install.AppManagerWrapper
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.di.qualifiers.IoCoroutineScope
-import foundation.e.apps.install.notification.StorageNotificationManager
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
+import foundation.e.apps.data.install.notification.StorageNotificationManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.delay
diff --git a/app/src/main/java/foundation/e/apps/install/download/data/DownloadProgress.kt b/app/src/main/java/foundation/e/apps/data/install/download/data/DownloadProgress.kt
similarity index 82%
rename from app/src/main/java/foundation/e/apps/install/download/data/DownloadProgress.kt
rename to app/src/main/java/foundation/e/apps/data/install/download/data/DownloadProgress.kt
index 26702236f143147b27533ec1d595323bcb93f9fd..256e028060fa4bd47baec3a1dfe27c294902d998 100644
--- a/app/src/main/java/foundation/e/apps/install/download/data/DownloadProgress.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/download/data/DownloadProgress.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.install.download.data
+package foundation.e.apps.data.install.download.data
data class DownloadProgress(
var totalSizeBytes: MutableMap = mutableMapOf(),
diff --git a/app/src/main/java/foundation/e/apps/install/download/data/DownloadProgressLD.kt b/app/src/main/java/foundation/e/apps/data/install/download/data/DownloadProgressLD.kt
similarity index 99%
rename from app/src/main/java/foundation/e/apps/install/download/data/DownloadProgressLD.kt
rename to app/src/main/java/foundation/e/apps/data/install/download/data/DownloadProgressLD.kt
index f5972e70e120321cf9e201e4e4a45e73e288e8d5..52023193f53d0ecf42bb8681dc9694806993e538 100644
--- a/app/src/main/java/foundation/e/apps/install/download/data/DownloadProgressLD.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/download/data/DownloadProgressLD.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.download.data
+package foundation.e.apps.data.install.download.data
import android.app.DownloadManager
import android.app.DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR
diff --git a/app/src/main/java/foundation/e/apps/install/notification/StorageNotificationManager.kt b/app/src/main/java/foundation/e/apps/data/install/notification/StorageNotificationManager.kt
similarity index 95%
rename from app/src/main/java/foundation/e/apps/install/notification/StorageNotificationManager.kt
rename to app/src/main/java/foundation/e/apps/data/install/notification/StorageNotificationManager.kt
index 292310b8e1c60b76f016978ec3fefacfcca30d03..77c89ee353faa1e2a97a9a30559e8adb81820cad 100644
--- a/app/src/main/java/foundation/e/apps/install/notification/StorageNotificationManager.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/notification/StorageNotificationManager.kt
@@ -17,7 +17,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.notification
+package foundation.e.apps.data.install.notification
import android.Manifest
import android.app.Notification
@@ -29,9 +29,9 @@ import androidx.core.app.NotificationManagerCompat
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
import foundation.e.apps.data.DownloadManager
+import foundation.e.apps.data.di.system.NotificationManagerModule
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.di.NotificationManagerModule
-import foundation.e.apps.utils.StorageComputer
+import foundation.e.apps.data.system.StorageComputer
import javax.inject.Inject
class StorageNotificationManager @Inject constructor(
diff --git a/app/src/main/java/foundation/e/apps/install/pkg/AppLoungePackageManager.kt b/app/src/main/java/foundation/e/apps/data/install/pkg/AppLoungePackageManager.kt
similarity index 99%
rename from app/src/main/java/foundation/e/apps/install/pkg/AppLoungePackageManager.kt
rename to app/src/main/java/foundation/e/apps/data/install/pkg/AppLoungePackageManager.kt
index 984b4a63f215a7fd980c8a5feb37df0482dda152..ba909b51df67a429c9d35953c284e3c57f50a977 100644
--- a/app/src/main/java/foundation/e/apps/install/pkg/AppLoungePackageManager.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/pkg/AppLoungePackageManager.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.pkg
+package foundation.e.apps.data.install.pkg
import android.app.PendingIntent
import android.content.Context
diff --git a/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt b/app/src/main/java/foundation/e/apps/data/install/pkg/InstallerService.kt
similarity index 95%
rename from app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt
rename to app/src/main/java/foundation/e/apps/data/install/pkg/InstallerService.kt
index 9cc401c21e4d720240bbf7b7e709b01f7642e898..8e89f9ae2e4852fee51ed263ac03a31bcc77b35e 100644
--- a/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/pkg/InstallerService.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.pkg
+package foundation.e.apps.data.install.pkg
import android.app.Service
import android.content.Intent
@@ -24,11 +24,11 @@ import android.content.pm.PackageInstaller
import android.os.IBinder
import dagger.hilt.android.AndroidEntryPoint
import foundation.e.apps.data.application.UpdatesDao
+import foundation.e.apps.data.di.qualifiers.IoCoroutineScope
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
import foundation.e.apps.data.faultyApps.FaultyAppRepository
import foundation.e.apps.data.install.AppManagerWrapper
-import foundation.e.apps.di.qualifiers.IoCoroutineScope
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
diff --git a/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerBR.kt b/app/src/main/java/foundation/e/apps/data/install/pkg/PkgManagerBR.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/install/pkg/PkgManagerBR.kt
rename to app/src/main/java/foundation/e/apps/data/install/pkg/PkgManagerBR.kt
index 4ae52e515db5fa793417e26ae8c6d2785a5295ee..8c85381fd0ffa2ce8dbc90073a5efffdf3d6e778 100644
--- a/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerBR.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/pkg/PkgManagerBR.kt
@@ -16,17 +16,17 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.pkg
+package foundation.e.apps.data.install.pkg
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import dagger.hilt.android.AndroidEntryPoint
+import foundation.e.apps.data.di.qualifiers.IoCoroutineScope
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.faultyApps.FaultyAppRepository
import foundation.e.apps.data.install.AppManagerWrapper
-import foundation.e.apps.di.qualifiers.IoCoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import timber.log.Timber
diff --git a/app/src/main/java/foundation/e/apps/install/pkg/PwaManager.kt b/app/src/main/java/foundation/e/apps/data/install/pkg/PwaManager.kt
similarity index 99%
rename from app/src/main/java/foundation/e/apps/install/pkg/PwaManager.kt
rename to app/src/main/java/foundation/e/apps/data/install/pkg/PwaManager.kt
index c505af2d913cceb6d22da2d7e132ebb146da8dc6..af585c7920e1429063b70f471ac594c076a39d0c 100644
--- a/app/src/main/java/foundation/e/apps/install/pkg/PwaManager.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/pkg/PwaManager.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.install.pkg
+package foundation.e.apps.data.install.pkg
import android.content.ContentUris
import android.content.ContentValues
diff --git a/app/src/main/java/foundation/e/apps/install/receiver/PwaPlayerStatusReceiver.kt b/app/src/main/java/foundation/e/apps/data/install/receiver/PwaPlayerStatusReceiver.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/install/receiver/PwaPlayerStatusReceiver.kt
rename to app/src/main/java/foundation/e/apps/data/install/receiver/PwaPlayerStatusReceiver.kt
index dce98e93473dde7f5dd6a92280c40984bed528f0..a453de0adc321186313c1eb65d1545e0e09563a1 100644
--- a/app/src/main/java/foundation/e/apps/install/receiver/PwaPlayerStatusReceiver.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/receiver/PwaPlayerStatusReceiver.kt
@@ -15,15 +15,15 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.receiver
+package foundation.e.apps.data.install.receiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import dagger.hilt.android.AndroidEntryPoint
+import foundation.e.apps.data.di.qualifiers.IoCoroutineScope
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.install.AppInstallRepository
-import foundation.e.apps.di.qualifiers.IoCoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import timber.log.Timber
diff --git a/app/src/main/java/foundation/e/apps/install/updates/UpdatesBroadcastReceiver.kt b/app/src/main/java/foundation/e/apps/data/install/updates/UpdatesBroadcastReceiver.kt
similarity index 97%
rename from app/src/main/java/foundation/e/apps/install/updates/UpdatesBroadcastReceiver.kt
rename to app/src/main/java/foundation/e/apps/data/install/updates/UpdatesBroadcastReceiver.kt
index d0173bd56effd6f3c5f7daa4c8d379cb022b96ad..5599eced76320dcdd228ac9802822fc5e61d42f0 100644
--- a/app/src/main/java/foundation/e/apps/install/updates/UpdatesBroadcastReceiver.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/updates/UpdatesBroadcastReceiver.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.updates
+package foundation.e.apps.data.install.updates
import android.content.BroadcastReceiver
import android.content.Context
diff --git a/app/src/main/java/foundation/e/apps/install/updates/UpdatesNotifier.kt b/app/src/main/java/foundation/e/apps/data/install/updates/UpdatesNotifier.kt
similarity index 99%
rename from app/src/main/java/foundation/e/apps/install/updates/UpdatesNotifier.kt
rename to app/src/main/java/foundation/e/apps/data/install/updates/UpdatesNotifier.kt
index e63239fc96ee2bfd364d062b2a58fe7b6a21a44a..e48d8d42a82233d367c1be94e35829389a54dcbe 100644
--- a/app/src/main/java/foundation/e/apps/install/updates/UpdatesNotifier.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/updates/UpdatesNotifier.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.updates
+package foundation.e.apps.data.install.updates
import android.Manifest
import android.app.Notification
diff --git a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorkManager.kt b/app/src/main/java/foundation/e/apps/data/install/updates/UpdatesWorkManager.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/install/updates/UpdatesWorkManager.kt
rename to app/src/main/java/foundation/e/apps/data/install/updates/UpdatesWorkManager.kt
index 617ab0654666d7e24009ffe877a24cbbfeadf8ca..348e1a99c85ababf1283a3366ee3cb10da647c7e 100644
--- a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorkManager.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/updates/UpdatesWorkManager.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.updates
+package foundation.e.apps.data.install.updates
import android.content.Context
import androidx.work.Constraints
diff --git a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt b/app/src/main/java/foundation/e/apps/data/install/updates/UpdatesWorker.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt
rename to app/src/main/java/foundation/e/apps/data/install/updates/UpdatesWorker.kt
index 021818c4cd6ac4e6b4cf1c45d9a4e32b90efdf9b..31d0e20d26a901ada9b5f77381e7e80b6578c471 100644
--- a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/updates/UpdatesWorker.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.install.updates
+package foundation.e.apps.data.install.updates
import android.Manifest
import android.content.Context
@@ -20,13 +20,13 @@ import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.blockedApps.BlockedAppRepository
import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.User
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
import foundation.e.apps.data.gitlab.SystemAppsUpdatesRepository
+import foundation.e.apps.data.install.workmanager.AppInstallProcessor
import foundation.e.apps.data.login.repository.AuthenticatorRepository
import foundation.e.apps.data.preference.AppLoungeDataStore
import foundation.e.apps.data.updates.UpdatesManagerRepository
-import foundation.e.apps.install.workmanager.AppInstallProcessor
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
diff --git a/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt b/app/src/main/java/foundation/e/apps/data/install/workmanager/AppInstallProcessor.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt
rename to app/src/main/java/foundation/e/apps/data/install/workmanager/AppInstallProcessor.kt
index 198a18c4dfc802562386d09438023ecbdf52e286..0e968c35b212aca9e5324e9fae8c596ee457997a 100644
--- a/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/workmanager/AppInstallProcessor.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.workmanager
+package foundation.e.apps.data.install.workmanager
import android.content.Context
import androidx.annotation.VisibleForTesting
@@ -32,22 +32,22 @@ import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.enums.Type
import foundation.e.apps.data.enums.User
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
+import foundation.e.apps.data.install.AppInstallComponents
import foundation.e.apps.data.install.AppManager
+import foundation.e.apps.data.install.download.DownloadManagerUtils
import foundation.e.apps.data.install.models.AppInstall
+import foundation.e.apps.data.install.notification.StorageNotificationManager
+import foundation.e.apps.data.install.updates.UpdatesNotifier
import foundation.e.apps.data.playstore.utils.GplayHttpRequestException
import foundation.e.apps.data.preference.AppLoungeDataStore
+import foundation.e.apps.data.system.ParentalControlAuthenticator
+import foundation.e.apps.data.system.StorageComputer
+import foundation.e.apps.data.system.isNetworkAvailable
+import foundation.e.apps.data.utils.getFormattedString
import foundation.e.apps.domain.ValidateAppAgeLimitUseCase
import foundation.e.apps.domain.model.ContentRatingValidity
-import foundation.e.apps.install.AppInstallComponents
-import foundation.e.apps.install.download.DownloadManagerUtils
-import foundation.e.apps.install.notification.StorageNotificationManager
-import foundation.e.apps.install.updates.UpdatesNotifier
-import foundation.e.apps.utils.ParentalControlAuthenticator
-import foundation.e.apps.utils.StorageComputer
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
-import foundation.e.apps.utils.getFormattedString
-import foundation.e.apps.utils.isNetworkAvailable
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.flow.transformWhile
diff --git a/app/src/main/java/foundation/e/apps/install/workmanager/InstallAppWorker.kt b/app/src/main/java/foundation/e/apps/data/install/workmanager/InstallAppWorker.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/install/workmanager/InstallAppWorker.kt
rename to app/src/main/java/foundation/e/apps/data/install/workmanager/InstallAppWorker.kt
index 0344e45eff580f3b4dd1402274b3b8c063780bbe..c4af7cfbb4a7bd717c6f2351a9923ecff40d439a 100644
--- a/app/src/main/java/foundation/e/apps/install/workmanager/InstallAppWorker.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/workmanager/InstallAppWorker.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.workmanager
+package foundation.e.apps.data.install.workmanager
import android.app.NotificationChannel
import android.app.NotificationManager
diff --git a/app/src/main/java/foundation/e/apps/install/workmanager/InstallWorkManager.kt b/app/src/main/java/foundation/e/apps/data/install/workmanager/InstallWorkManager.kt
similarity index 96%
rename from app/src/main/java/foundation/e/apps/install/workmanager/InstallWorkManager.kt
rename to app/src/main/java/foundation/e/apps/data/install/workmanager/InstallWorkManager.kt
index 82db14f769be3d491c13004663477521adb052f8..e3a453b6e4c6acadca1461c10c0995e471791c81 100644
--- a/app/src/main/java/foundation/e/apps/install/workmanager/InstallWorkManager.kt
+++ b/app/src/main/java/foundation/e/apps/data/install/workmanager/InstallWorkManager.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.install.workmanager
+package foundation.e.apps.data.install.workmanager
import android.app.Application
import androidx.work.Data
diff --git a/app/src/main/java/foundation/e/apps/data/login/playstore/PlayStoreSession.kt b/app/src/main/java/foundation/e/apps/data/login/playstore/PlayStoreSession.kt
index 8ae043a88cc858af03e7a545b1e8c4216a0a3f6c..a4813eeccb0561a1f6eb01d14f10d2b4eb020ce2 100644
--- a/app/src/main/java/foundation/e/apps/data/login/playstore/PlayStoreSession.kt
+++ b/app/src/main/java/foundation/e/apps/data/login/playstore/PlayStoreSession.kt
@@ -21,11 +21,11 @@ package foundation.e.apps.data.login.playstore
import com.aurora.gplayapi.data.models.AuthData
import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.enums.User
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
import foundation.e.apps.data.handleNetworkResult
import foundation.e.apps.data.login.api.LoginManager
import foundation.e.apps.data.login.exceptions.GPlayLoginException
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
import java.util.Locale
class PlayStoreSession(
diff --git a/app/src/main/java/foundation/e/apps/microg/AuthDataProvider.kt b/app/src/main/java/foundation/e/apps/data/microg/AuthDataProvider.kt
similarity index 99%
rename from app/src/main/java/foundation/e/apps/microg/AuthDataProvider.kt
rename to app/src/main/java/foundation/e/apps/data/microg/AuthDataProvider.kt
index 61714d6ee4334bfb115de61ecaf12ac22dd5466d..b55665eda5612726f2134980db234e2dad3768f9 100644
--- a/app/src/main/java/foundation/e/apps/microg/AuthDataProvider.kt
+++ b/app/src/main/java/foundation/e/apps/data/microg/AuthDataProvider.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.microg
+package foundation.e.apps.data.microg
import android.content.ContentProvider
import android.content.ContentValues
diff --git a/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt
index 25540ddc4dd63e3cface7d953ea102752694a242..7f2a6579f20dc2520edadf91944a1bcbcdbc0a6d 100644
--- a/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt
+++ b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt
@@ -49,7 +49,7 @@ import foundation.e.apps.data.login.core.StoreType
import foundation.e.apps.data.login.repository.AuthenticatorRepository
import foundation.e.apps.data.playstore.utils.GPlayHttpClient
import foundation.e.apps.data.playstore.utils.GplayHttpRequestException
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.system.SystemInfoProvider
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
diff --git a/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt
index 4d525919a427f239d25a6efcba4b2dd58b290c6a..8cc187ea3f93f4eadc175ddd57096ba75de14901 100644
--- a/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt
+++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt
@@ -21,10 +21,10 @@ package foundation.e.apps.data.playstore.utils
import androidx.annotation.VisibleForTesting
import com.aurora.gplayapi.data.models.PlayResponse
import com.aurora.gplayapi.network.IHttpClient
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
import foundation.e.apps.data.login.core.AuthObject
-import foundation.e.apps.utils.SystemInfoProvider
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
+import foundation.e.apps.data.system.SystemInfoProvider
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
diff --git a/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt b/app/src/main/java/foundation/e/apps/data/provider/AgeRatingProvider.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt
rename to app/src/main/java/foundation/e/apps/data/provider/AgeRatingProvider.kt
index 80fd58e220df580185dce2ef32c073334e7fe0a5..fdfc8991668ffdbcd1b3f033e2c942bed61154f6 100644
--- a/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt
+++ b/app/src/main/java/foundation/e/apps/data/provider/AgeRatingProvider.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.provider
+package foundation.e.apps.data.provider
import android.app.NotificationChannel
import android.app.NotificationManager
@@ -46,6 +46,7 @@ import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.blockedApps.BlockedAppRepository
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.install.models.AppInstall
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
import foundation.e.apps.data.login.exceptions.GPlayLoginException
import foundation.e.apps.data.login.repository.AuthenticatorRepository
import foundation.e.apps.data.parentalcontrol.ContentRatingDao
@@ -53,10 +54,9 @@ import foundation.e.apps.data.parentalcontrol.ContentRatingEntity
import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository
import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingRepository
import foundation.e.apps.data.preference.AppLoungeDataStore
+import foundation.e.apps.data.system.isNetworkAvailable
import foundation.e.apps.domain.ValidateAppAgeLimitUseCase
import foundation.e.apps.domain.model.ContentRatingValidity
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.utils.isNetworkAvailable
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
diff --git a/app/src/main/java/foundation/e/apps/receivers/DumpAppInstallStatusReceiver.kt b/app/src/main/java/foundation/e/apps/data/receivers/DumpAppInstallStatusReceiver.kt
similarity index 95%
rename from app/src/main/java/foundation/e/apps/receivers/DumpAppInstallStatusReceiver.kt
rename to app/src/main/java/foundation/e/apps/data/receivers/DumpAppInstallStatusReceiver.kt
index fdac17e2ec716b7abb3e91cc0f3c87c4136559c3..fec38c309d618e9b79905c2c6805379eab1f33b2 100644
--- a/app/src/main/java/foundation/e/apps/receivers/DumpAppInstallStatusReceiver.kt
+++ b/app/src/main/java/foundation/e/apps/data/receivers/DumpAppInstallStatusReceiver.kt
@@ -17,7 +17,7 @@
*
*/
-package foundation.e.apps.receivers
+package foundation.e.apps.data.receivers
import android.content.BroadcastReceiver
import android.content.Context
@@ -31,8 +31,8 @@ import foundation.e.apps.data.DownloadManager
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.install.AppInstallRepository
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.utils.NetworkStatusManager
-import foundation.e.apps.utils.StorageComputer
+import foundation.e.apps.data.system.NetworkStatusManager
+import foundation.e.apps.data.system.StorageComputer
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import timber.log.Timber
diff --git a/app/src/main/java/foundation/e/apps/receivers/DumpAuthData.kt b/app/src/main/java/foundation/e/apps/data/receivers/DumpAuthData.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/receivers/DumpAuthData.kt
rename to app/src/main/java/foundation/e/apps/data/receivers/DumpAuthData.kt
index 5142132d64fdfab59ad9ecf96b7e72976c864a73..353029a4e173ab739594755e4fc2b56fc5b3d193 100644
--- a/app/src/main/java/foundation/e/apps/receivers/DumpAuthData.kt
+++ b/app/src/main/java/foundation/e/apps/data/receivers/DumpAuthData.kt
@@ -17,7 +17,7 @@
*
*/
-package foundation.e.apps.receivers
+package foundation.e.apps.data.receivers
import android.content.BroadcastReceiver
import android.content.Context
diff --git a/app/src/main/java/foundation/e/apps/utils/CustomUncaughtExceptionHandler.kt b/app/src/main/java/foundation/e/apps/data/system/CustomUncaughtExceptionHandler.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/utils/CustomUncaughtExceptionHandler.kt
rename to app/src/main/java/foundation/e/apps/data/system/CustomUncaughtExceptionHandler.kt
index c3e9fd6d70ab584db69de2e930a1492e3773eda8..18f206112c8e9920d0af10087592401cd2487b70 100644
--- a/app/src/main/java/foundation/e/apps/utils/CustomUncaughtExceptionHandler.kt
+++ b/app/src/main/java/foundation/e/apps/data/system/CustomUncaughtExceptionHandler.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.utils
+package foundation.e.apps.data.system
import android.Manifest
import android.app.Notification
diff --git a/app/src/main/java/foundation/e/apps/data/system/NetworkExtensions.kt b/app/src/main/java/foundation/e/apps/data/system/NetworkExtensions.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d5b50e0752cc543131fb4e93cb76f9a498b18b7c
--- /dev/null
+++ b/app/src/main/java/foundation/e/apps/data/system/NetworkExtensions.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2026 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package foundation.e.apps.data.system
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
+
+fun Context.isNetworkAvailable(): Boolean {
+ val connectivityManager = getSystemService(ConnectivityManager::class.java)
+ val capabilities =
+ connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
+
+ if (capabilities == null) {
+ return false
+ }
+
+ if (
+ capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
+ capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
+ ) {
+ return true
+ }
+
+ return false
+}
diff --git a/app/src/main/java/foundation/e/apps/utils/NetworkStatusManager.kt b/app/src/main/java/foundation/e/apps/data/system/NetworkStatusManager.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/utils/NetworkStatusManager.kt
rename to app/src/main/java/foundation/e/apps/data/system/NetworkStatusManager.kt
index b49d41e99ce035f8a0fd6a6d9d36e3af2d84e48e..abd203097b7b3886f022b8f41fb6c75db9d8f13e 100644
--- a/app/src/main/java/foundation/e/apps/utils/NetworkStatusManager.kt
+++ b/app/src/main/java/foundation/e/apps/data/system/NetworkStatusManager.kt
@@ -17,7 +17,7 @@
*
*/
-package foundation.e.apps.utils
+package foundation.e.apps.data.system
import android.content.Context
import android.net.ConnectivityManager
diff --git a/app/src/main/java/foundation/e/apps/utils/ParentalControlAuthenticator.kt b/app/src/main/java/foundation/e/apps/data/system/ParentalControlAuthenticator.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/utils/ParentalControlAuthenticator.kt
rename to app/src/main/java/foundation/e/apps/data/system/ParentalControlAuthenticator.kt
index bbfd82a5200ee1e233ad881ad82f360bfe9dafc3..b8496d0a225b9efe7c23f20b5e90c1e42c307618 100644
--- a/app/src/main/java/foundation/e/apps/utils/ParentalControlAuthenticator.kt
+++ b/app/src/main/java/foundation/e/apps/data/system/ParentalControlAuthenticator.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.utils
+package foundation.e.apps.data.system
import android.content.Intent
import androidx.activity.result.ActivityResultLauncher
diff --git a/app/src/main/java/foundation/e/apps/utils/StorageComputer.kt b/app/src/main/java/foundation/e/apps/data/system/StorageComputer.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/utils/StorageComputer.kt
rename to app/src/main/java/foundation/e/apps/data/system/StorageComputer.kt
index 6af73e0e2e6111467996c625c6583df3647f1f69..a1f1a50efd36bd4347821b8b2a7ad8476a831f09 100644
--- a/app/src/main/java/foundation/e/apps/utils/StorageComputer.kt
+++ b/app/src/main/java/foundation/e/apps/data/system/StorageComputer.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.utils
+package foundation.e.apps.data.system
import android.os.Environment
import android.os.StatFs
diff --git a/app/src/main/java/foundation/e/apps/utils/SystemInfoProvider.kt b/app/src/main/java/foundation/e/apps/data/system/SystemInfoProvider.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/utils/SystemInfoProvider.kt
rename to app/src/main/java/foundation/e/apps/data/system/SystemInfoProvider.kt
index ae20f7cdb480d29ddd9352203c69a27f93792c18..41dabf9a735f35cdbdd8b39af51d1853660dd912 100644
--- a/app/src/main/java/foundation/e/apps/utils/SystemInfoProvider.kt
+++ b/app/src/main/java/foundation/e/apps/data/system/SystemInfoProvider.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.utils
+package foundation.e.apps.data.system
import android.annotation.SuppressLint
import android.os.Build
diff --git a/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt b/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt
index 5d8ad93eaebe0856232432eb62ac59b6d723c7eb..17fe245b405232b3a77f5a60dcaca30a54cda77f 100644
--- a/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt
@@ -33,8 +33,8 @@ import foundation.e.apps.data.faultyApps.FaultyAppRepository
import foundation.e.apps.data.fdroid.FDroidRepository
import foundation.e.apps.data.gitlab.SystemAppsUpdatesRepository
import foundation.e.apps.data.handleNetworkResult
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
import foundation.e.apps.data.preference.AppLoungePreference
-import foundation.e.apps.install.pkg.AppLoungePackageManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import timber.log.Timber
diff --git a/app/src/main/java/foundation/e/apps/data/utils/ContentRatingExtensions.kt b/app/src/main/java/foundation/e/apps/data/utils/ContentRatingExtensions.kt
new file mode 100644
index 0000000000000000000000000000000000000000..48c5e5f184169317bad912e4e2984386e6828c16
--- /dev/null
+++ b/app/src/main/java/foundation/e/apps/data/utils/ContentRatingExtensions.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2026 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package foundation.e.apps.data.utils
+
+import com.aurora.gplayapi.data.models.ContentRating
+
+fun ContentRating.isValid() = title.isNotBlank() && artwork.url.isNotBlank()
diff --git a/app/src/main/java/foundation/e/apps/data/utils/DateExtensions.kt b/app/src/main/java/foundation/e/apps/data/utils/DateExtensions.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5aa6024a651e14b05e710d8d19e292e32e0d7bae
--- /dev/null
+++ b/app/src/main/java/foundation/e/apps/data/utils/DateExtensions.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2026 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package foundation.e.apps.data.utils
+
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+
+fun Date.getFormattedString(format: String, locale: Locale = Locale.getDefault()): String {
+ val dateFormat = SimpleDateFormat(format, locale)
+ return dateFormat.format(this)
+}
diff --git a/app/src/main/java/foundation/e/apps/domain/login/ReportFaultyTokenUseCase.kt b/app/src/main/java/foundation/e/apps/domain/login/ReportFaultyTokenUseCase.kt
index 8b6d49f68d5afe815e40cf0c402bebb7f767a2e2..03f96ae77e289a0ed69b3495d917b7d677d8c4ed 100644
--- a/app/src/main/java/foundation/e/apps/domain/login/ReportFaultyTokenUseCase.kt
+++ b/app/src/main/java/foundation/e/apps/domain/login/ReportFaultyTokenUseCase.kt
@@ -3,7 +3,7 @@ package foundation.e.apps.domain.login
import foundation.e.apps.data.ecloud.EcloudRepository
import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.login.exceptions.GPlayValidationException
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.system.SystemInfoProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import timber.log.Timber
diff --git a/app/src/main/java/foundation/e/apps/ui/AppProgressViewModel.kt b/app/src/main/java/foundation/e/apps/ui/AppProgressViewModel.kt
index 6deb29e8f0832f8611a1b883db2f69569e130ee3..3990fdf130b260cc22a8d8855a79ad451d910f05 100644
--- a/app/src/main/java/foundation/e/apps/ui/AppProgressViewModel.kt
+++ b/app/src/main/java/foundation/e/apps/ui/AppProgressViewModel.kt
@@ -23,9 +23,9 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.application.mapper.toApplication
import foundation.e.apps.data.install.AppManagerWrapper
+import foundation.e.apps.data.install.download.data.DownloadProgress
+import foundation.e.apps.data.install.download.data.DownloadProgressLD
import foundation.e.apps.domain.application.ApplicationDomain
-import foundation.e.apps.install.download.data.DownloadProgress
-import foundation.e.apps.install.download.data.DownloadProgressLD
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt
index f0fd66815ac6696c9abe2c7524edf96877ec9aba..6102b1d8241d1fab932af464f2f8a92a1b735022 100644
--- a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt
+++ b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt
@@ -48,18 +48,18 @@ import foundation.e.apps.R
import foundation.e.apps.contract.ParentalControlContract.COLUMN_LOGIN_TYPE
import foundation.e.apps.data.Constants
import foundation.e.apps.data.enums.User
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
import foundation.e.apps.data.install.models.AppInstall
+import foundation.e.apps.data.install.updates.UpdatesNotifier
import foundation.e.apps.data.login.core.StoreType
+import foundation.e.apps.data.system.ParentalControlAuthenticator
import foundation.e.apps.databinding.ActivityMainBinding
-import foundation.e.apps.install.updates.UpdatesNotifier
import foundation.e.apps.ui.application.subFrags.ApplicationDialogFragment
import foundation.e.apps.ui.error.AppUnavailableDialogDirections
import foundation.e.apps.ui.purchase.AppPurchaseFragmentDirections
import foundation.e.apps.ui.settings.SettingsFragment
import foundation.e.apps.ui.setup.signin.SignInViewModel
-import foundation.e.apps.utils.ParentalControlAuthenticator
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.distinctUntilChanged
diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt
index f48c1990a09a5e19e20104212366a0dcb0e6ea5c..8d41a6a959f7e87208500ba814a4f4d83717e946 100644
--- a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt
+++ b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt
@@ -38,18 +38,18 @@ import foundation.e.apps.data.enums.isUnFiltered
import foundation.e.apps.data.gitlab.SystemAppsUpdatesRepository
import foundation.e.apps.data.install.AppManagerWrapper
import foundation.e.apps.data.install.models.AppInstall
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
+import foundation.e.apps.data.install.workmanager.AppInstallProcessor
import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.login.state.LoginState
import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository
import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingRepository
import foundation.e.apps.data.preference.AppLoungeDataStore
import foundation.e.apps.data.preference.getSync
+import foundation.e.apps.data.system.NetworkStatusManager
import foundation.e.apps.domain.application.ApplicationDomain
import foundation.e.apps.domain.login.ReportFaultyTokenUseCase
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
-import foundation.e.apps.install.workmanager.AppInstallProcessor
-import foundation.e.apps.utils.NetworkStatusManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import javax.inject.Inject
diff --git a/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt b/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt
index 2b2877f51f10dba5597ffa7553db9d08bcab956d..0f1606afa2139301a8697c8818322d25b22984e7 100644
--- a/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt
+++ b/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt
@@ -58,14 +58,16 @@ import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.enums.User
import foundation.e.apps.data.enums.isInitialized
+import foundation.e.apps.data.exodus.ExodusUriGenerator
+import foundation.e.apps.data.install.download.data.DownloadProgress
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.login.exceptions.GPlayLoginException
import foundation.e.apps.data.login.state.LoginState
+import foundation.e.apps.data.utils.isValid
import foundation.e.apps.databinding.FragmentApplicationBinding
import foundation.e.apps.domain.ValidateAppAgeLimitUseCase.Companion.KEY_ANTI_FEATURES_NSFW
-import foundation.e.apps.install.download.data.DownloadProgress
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
import foundation.e.apps.ui.AppInfoFetchViewModel
import foundation.e.apps.ui.MainActivity
import foundation.e.apps.ui.MainActivityViewModel
@@ -75,8 +77,6 @@ import foundation.e.apps.ui.application.ShareButtonVisibilityState.Visible
import foundation.e.apps.ui.application.model.ApplicationScreenshotsRVAdapter
import foundation.e.apps.ui.application.subFrags.ApplicationDialogFragment
import foundation.e.apps.ui.parentFragment.TimeoutFragment
-import foundation.e.apps.utils.ExodusUriGenerator
-import foundation.e.apps.utils.isValid
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
diff --git a/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt b/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt
index 02327a2131e57bdd7def838451dddfa61d119809..d656f87c2abbf45aadd2a974957f3cb9d11735e2 100644
--- a/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt
+++ b/app/src/main/java/foundation/e/apps/ui/application/ApplicationViewModel.kt
@@ -31,18 +31,18 @@ import foundation.e.apps.data.application.data.shareUri
import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
import foundation.e.apps.data.install.AppManagerWrapper
+import foundation.e.apps.data.install.download.data.DownloadProgress
+import foundation.e.apps.data.install.download.data.DownloadProgressLD
import foundation.e.apps.data.install.models.AppInstall
import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository
import foundation.e.apps.data.playstore.PlayStoreRepository
-import foundation.e.apps.install.download.data.DownloadProgress
-import foundation.e.apps.install.download.data.DownloadProgressLD
import foundation.e.apps.ui.application.ShareButtonVisibilityState.Hidden
import foundation.e.apps.ui.application.ShareButtonVisibilityState.Visible
import foundation.e.apps.ui.parentFragment.LoadingViewModel
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
diff --git a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt
index 8be111cae78fd8e96c3ee32621459125cc531002..d59988a293d6b7b146ec949a8b2cc63ec740649b 100644
--- a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt
+++ b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt
@@ -35,12 +35,12 @@ import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.application.ApplicationInstaller
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.Status
+import foundation.e.apps.data.install.download.data.DownloadProgress
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.login.exceptions.GPlayLoginException
import foundation.e.apps.databinding.FragmentApplicationListBinding
-import foundation.e.apps.install.download.data.DownloadProgress
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
import foundation.e.apps.ui.AppInfoFetchViewModel
import foundation.e.apps.ui.AppProgressViewModel
import foundation.e.apps.ui.MainActivityViewModel
diff --git a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt
index 4d02f72e86b28d8abacb060a725b534793f62171..a803cc4834f1ba4b43d29bb8c707134d1da53c33 100644
--- a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt
+++ b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt
@@ -45,20 +45,21 @@ import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.enums.User
+import foundation.e.apps.data.install.pkg.InstallerService
import foundation.e.apps.data.login.state.LoginState
import foundation.e.apps.databinding.ApplicationListItemBinding
-import foundation.e.apps.install.pkg.InstallerService
import foundation.e.apps.ui.AppInfoFetchViewModel
import foundation.e.apps.ui.MainActivityViewModel
import foundation.e.apps.ui.PrivacyInfoViewModel
import foundation.e.apps.ui.applicationlist.diffUtils.ConciseAppDiffUtils
import foundation.e.apps.ui.search.SearchFragmentDirections
import foundation.e.apps.ui.updates.UpdatesFragmentDirections
-import foundation.e.apps.utils.disableInstallButton
-import foundation.e.apps.utils.enableInstallButton
+import foundation.e.apps.ui.utils.disableInstallButton
+import foundation.e.apps.ui.utils.enableInstallButton
import timber.log.Timber
import javax.inject.Singleton
import foundation.e.elib.R as eR
+
@Singleton
class ApplicationListRVAdapter(
private val applicationInstaller: ApplicationInstaller,
diff --git a/app/src/main/java/foundation/e/apps/ui/compose/state/InstallButtonStateInput.kt b/app/src/main/java/foundation/e/apps/ui/compose/state/InstallButtonStateInput.kt
index 9321c0137559ef908da3dbcacebf297badf6dd9c..4c4f4727da60a9f6b9b5f46dde7c1449b68281fd 100644
--- a/app/src/main/java/foundation/e/apps/ui/compose/state/InstallButtonStateInput.kt
+++ b/app/src/main/java/foundation/e/apps/ui/compose/state/InstallButtonStateInput.kt
@@ -21,7 +21,7 @@ package foundation.e.apps.ui.compose.state
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.enums.User
-import foundation.e.apps.install.pkg.InstallerService
+import foundation.e.apps.data.install.pkg.InstallerService
data class InstallationFault(
val isFaulty: Boolean,
diff --git a/app/src/main/java/foundation/e/apps/ui/compose/state/InstallStatusReconciler.kt b/app/src/main/java/foundation/e/apps/ui/compose/state/InstallStatusReconciler.kt
index 97d84312552c5e43c3685df0d139b74e2bee49e1..4546e9023885a61413b21a292a2aef58d4c80453 100644
--- a/app/src/main/java/foundation/e/apps/ui/compose/state/InstallStatusReconciler.kt
+++ b/app/src/main/java/foundation/e/apps/ui/compose/state/InstallStatusReconciler.kt
@@ -21,8 +21,8 @@ package foundation.e.apps.ui.compose.state
import foundation.e.apps.data.application.ApplicationRepository
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.install.AppManagerWrapper
+import foundation.e.apps.data.install.download.data.DownloadProgress
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.install.download.data.DownloadProgress
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/foundation/e/apps/ui/compose/state/InstallStatusStream.kt b/app/src/main/java/foundation/e/apps/ui/compose/state/InstallStatusStream.kt
index 797938acf8fed9d7f6fe8904f87f88636dcfb959..f120780b8253e25304be639bee7f6fa5a45ab91d 100644
--- a/app/src/main/java/foundation/e/apps/ui/compose/state/InstallStatusStream.kt
+++ b/app/src/main/java/foundation/e/apps/ui/compose/state/InstallStatusStream.kt
@@ -32,8 +32,8 @@ package foundation.e.apps.ui.compose.state
import androidx.lifecycle.asFlow
import foundation.e.apps.data.install.AppManagerWrapper
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
diff --git a/app/src/main/java/foundation/e/apps/ui/di/UiSystemModule.kt b/app/src/main/java/foundation/e/apps/ui/di/UiSystemModule.kt
new file mode 100644
index 0000000000000000000000000000000000000000..1f415b511490260963272c81c1484eb546e72072
--- /dev/null
+++ b/app/src/main/java/foundation/e/apps/ui/di/UiSystemModule.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2026 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package foundation.e.apps.ui.di
+
+import android.content.ClipboardManager
+import android.content.Context
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object UiSystemModule {
+ @Singleton
+ @Provides
+ fun provideClipboardManager(@ApplicationContext context: Context): ClipboardManager {
+ return context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+ }
+}
diff --git a/app/src/main/java/foundation/e/apps/utils/Extensions.kt b/app/src/main/java/foundation/e/apps/ui/extensions/ContextDialogExtensions.kt
similarity index 53%
rename from app/src/main/java/foundation/e/apps/utils/Extensions.kt
rename to app/src/main/java/foundation/e/apps/ui/extensions/ContextDialogExtensions.kt
index 07f652e9cac50eaa129638380a6fb6e88dc4852d..5a1b7b1c7f63164625c5acace32583810f9fbb2d 100644
--- a/app/src/main/java/foundation/e/apps/utils/Extensions.kt
+++ b/app/src/main/java/foundation/e/apps/ui/extensions/ContextDialogExtensions.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2024 MURENA SAS
+ * Copyright (C) 2026 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
@@ -16,22 +16,11 @@
*
*/
-package foundation.e.apps.utils
+package foundation.e.apps.ui.extensions
import android.content.Context
-import android.net.ConnectivityManager
-import android.net.NetworkCapabilities
import androidx.appcompat.app.AlertDialog
-import com.aurora.gplayapi.data.models.ContentRating
import foundation.e.apps.R
-import java.text.SimpleDateFormat
-import java.util.Date
-import java.util.Locale
-
-fun Date.getFormattedString(format: String, locale: Locale = Locale.getDefault()): String {
- val dateFormat = SimpleDateFormat(format, locale)
- return dateFormat.format(this)
-}
fun Context.showGoogleSignInAlertDialog(
onYesClickListener: () -> Unit,
@@ -44,22 +33,3 @@ fun Context.showGoogleSignInAlertDialog(
.setNegativeButton(R.string.cancel) { _, _ -> onCancelClickListener() }
.show()
}
-
-fun Context.isNetworkAvailable(): Boolean {
- val connectivityManager =
- this.getSystemService(ConnectivityManager::class.java)
-
- val capabilities =
- connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
- ?: return false
-
- if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
- capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
- ) {
- return true
- }
-
- return false
-}
-
-fun ContentRating.isValid() = title.isNotBlank() && artwork.url.isNotBlank()
diff --git a/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt b/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt
index b43f23bcdf5a685ae69a364bba1fe503543c0d96..33acdd009431521f4571239daa85304b1094f0e6 100644
--- a/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt
+++ b/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt
@@ -29,9 +29,9 @@ import androidx.recyclerview.widget.RecyclerView
import dagger.hilt.android.AndroidEntryPoint
import foundation.e.apps.R
import foundation.e.apps.data.enums.Status
+import foundation.e.apps.data.install.download.data.DownloadProgress
import foundation.e.apps.databinding.FragmentHomeBinding
import foundation.e.apps.domain.application.ApplicationDomain
-import foundation.e.apps.install.download.data.DownloadProgress
import foundation.e.apps.ui.AppInfoFetchViewModel
import foundation.e.apps.ui.AppProgressViewModel
import foundation.e.apps.ui.MainActivityViewModel
diff --git a/app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt b/app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt
index 0ead5aac1aa7a745f842cc9aea2bf2ea2b8fa430..3c527119f75c82904dbaeb9f1f5b192b145956db 100644
--- a/app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt
+++ b/app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt
@@ -40,8 +40,8 @@ import foundation.e.apps.domain.application.ApplicationDomain
import foundation.e.apps.ui.AppInfoFetchViewModel
import foundation.e.apps.ui.MainActivityViewModel
import foundation.e.apps.ui.home.HomeFragmentDirections
-import foundation.e.apps.utils.disableInstallButton
-import foundation.e.apps.utils.enableInstallButton
+import foundation.e.apps.ui.utils.disableInstallButton
+import foundation.e.apps.ui.utils.enableInstallButton
class HomeChildRVAdapter(
private val appInfoFetchViewModel: AppInfoFetchViewModel,
diff --git a/app/src/main/java/foundation/e/apps/ui/navigation/NavControllerExtensions.kt b/app/src/main/java/foundation/e/apps/ui/navigation/NavControllerExtensions.kt
new file mode 100644
index 0000000000000000000000000000000000000000..20a568329abe701cab8204a7cc32a5bd086ffe9a
--- /dev/null
+++ b/app/src/main/java/foundation/e/apps/ui/navigation/NavControllerExtensions.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2026 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package foundation.e.apps.ui.navigation
+
+import android.os.Bundle
+import androidx.annotation.IdRes
+import androidx.navigation.NavController
+import timber.log.Timber
+
+fun NavController.safeNavigate(
+ @IdRes currentDestinationId: Int,
+ @IdRes id: Int,
+ args: Bundle? = null
+) {
+ try {
+ if (currentDestinationId == currentDestination?.id) {
+ navigate(id, args)
+ }
+ } catch (e: Exception) {
+ Timber.w(e, "Navigation to destination $id failed")
+ }
+}
diff --git a/app/src/main/java/foundation/e/apps/ui/search/SearchFragment.kt b/app/src/main/java/foundation/e/apps/ui/search/SearchFragment.kt
index cd0ece6ea3456d2091c1fbd52e0fb392a0e352e8..8082111d7863b1b8c303fb7fb7b49bec3eebf1b5 100644
--- a/app/src/main/java/foundation/e/apps/ui/search/SearchFragment.kt
+++ b/app/src/main/java/foundation/e/apps/ui/search/SearchFragment.kt
@@ -44,17 +44,17 @@ import foundation.e.apps.R
import foundation.e.apps.data.application.ApplicationInstaller
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.Status
+import foundation.e.apps.data.install.download.data.DownloadProgress
import foundation.e.apps.data.install.models.AppInstall
+import foundation.e.apps.data.install.pkg.PwaManager
+import foundation.e.apps.data.system.isNetworkAvailable
import foundation.e.apps.databinding.FragmentSearchBinding
-import foundation.e.apps.install.download.data.DownloadProgress
-import foundation.e.apps.install.pkg.PwaManager
import foundation.e.apps.ui.AppInfoFetchViewModel
import foundation.e.apps.ui.AppProgressViewModel
import foundation.e.apps.ui.MainActivityViewModel
import foundation.e.apps.ui.PrivacyInfoViewModel
import foundation.e.apps.ui.application.subFrags.ApplicationDialogFragment
import foundation.e.apps.ui.applicationlist.ApplicationListRVAdapter
-import foundation.e.apps.utils.isNetworkAvailable
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import java.util.Locale
diff --git a/app/src/main/java/foundation/e/apps/ui/search/v2/SearchFragmentV2.kt b/app/src/main/java/foundation/e/apps/ui/search/v2/SearchFragmentV2.kt
index ca59845a25dab878e32873e580fb156d4321e4ca..c2081b38a1f105d10e3a45e51fde73a099fcd5e4 100644
--- a/app/src/main/java/foundation/e/apps/ui/search/v2/SearchFragmentV2.kt
+++ b/app/src/main/java/foundation/e/apps/ui/search/v2/SearchFragmentV2.kt
@@ -42,7 +42,7 @@ import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.enums.User
import foundation.e.apps.data.enums.isInitialized
import foundation.e.apps.data.enums.isUnFiltered
-import foundation.e.apps.install.download.data.DownloadProgress
+import foundation.e.apps.data.install.download.data.DownloadProgress
import foundation.e.apps.ui.AppInfoFetchViewModel
import foundation.e.apps.ui.AppProgressViewModel
import foundation.e.apps.ui.MainActivityViewModel
diff --git a/app/src/main/java/foundation/e/apps/ui/search/v2/SearchViewModelV2.kt b/app/src/main/java/foundation/e/apps/ui/search/v2/SearchViewModelV2.kt
index 3de94ff524859aeb89a4c7533c66430abe282cf5..b88910b5af2a9786df448d6933f6ad2a13084303 100644
--- a/app/src/main/java/foundation/e/apps/ui/search/v2/SearchViewModelV2.kt
+++ b/app/src/main/java/foundation/e/apps/ui/search/v2/SearchViewModelV2.kt
@@ -29,13 +29,13 @@ import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.cleanapk.CleanApkRetrofit
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
+import foundation.e.apps.data.install.download.data.DownloadProgress
import foundation.e.apps.data.preference.AppLoungePreference
import foundation.e.apps.domain.search.CleanApkSearchPagingUseCase
import foundation.e.apps.domain.search.FetchSearchSuggestionsUseCase
import foundation.e.apps.domain.search.PlayStoreSearchPagingUseCase
import foundation.e.apps.domain.search.PrepareSearchSubmissionUseCase
import foundation.e.apps.domain.search.SearchRequest
-import foundation.e.apps.install.download.data.DownloadProgress
import foundation.e.apps.ui.compose.state.InstallStatusReconciler
import foundation.e.apps.ui.compose.state.InstallStatusStream
import foundation.e.apps.ui.compose.state.StatusSnapshot
diff --git a/app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt b/app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt
index a6de6b630dc7672eaf8a98698c802d96cb6051b4..12f85b222bdd714d3710514123469d78536bae75 100644
--- a/app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt
@@ -45,12 +45,12 @@ import foundation.e.apps.data.Stores
import foundation.e.apps.data.application.UpdatesDao
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.User
+import foundation.e.apps.data.install.updates.UpdatesWorkManager
import foundation.e.apps.data.preference.AppLoungeDataStore
import foundation.e.apps.data.preference.getSync
+import foundation.e.apps.data.system.SystemInfoProvider
import foundation.e.apps.databinding.CustomPreferenceBinding
-import foundation.e.apps.install.updates.UpdatesWorkManager
import foundation.e.apps.ui.LoginViewModel
-import foundation.e.apps.utils.SystemInfoProvider
import timber.log.Timber
import java.util.Locale
import javax.inject.Inject
diff --git a/app/src/main/java/foundation/e/apps/ui/setup/signin/LocaleChangedBroadcastReceiver.kt b/app/src/main/java/foundation/e/apps/ui/setup/signin/LocaleChangedBroadcastReceiver.kt
index cc83bca5630d9468f28c03419f25d8f3a733c47d..1ebb0bb6f220a1576daa2c5f0af2c52893b830e1 100644
--- a/app/src/main/java/foundation/e/apps/ui/setup/signin/LocaleChangedBroadcastReceiver.kt
+++ b/app/src/main/java/foundation/e/apps/ui/setup/signin/LocaleChangedBroadcastReceiver.kt
@@ -23,9 +23,9 @@ import android.content.Context
import android.content.Intent
import com.aurora.gplayapi.data.models.AuthData
import dagger.hilt.android.AndroidEntryPoint
+import foundation.e.apps.data.di.qualifiers.IoCoroutineScope
import foundation.e.apps.data.preference.AppLoungeDataStore
import foundation.e.apps.data.preference.getSync
-import foundation.e.apps.di.qualifiers.IoCoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.serialization.json.Json
diff --git a/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt b/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt
index 9febd670642b3a791476b30e5e2c4ee78a75d0f3..67e247befdc7b06fc629b86811977ce313f4bbc8 100644
--- a/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt
+++ b/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt
@@ -13,9 +13,9 @@ import foundation.e.apps.R
import foundation.e.apps.data.login.microg.MicrogCertUtil
import foundation.e.apps.data.login.microg.MicrogSupportChecker
import foundation.e.apps.databinding.FragmentSignInBinding
-import foundation.e.apps.di.CommonUtilsModule.safeNavigate
import foundation.e.apps.ui.LoginViewModel
-import foundation.e.apps.utils.showGoogleSignInAlertDialog
+import foundation.e.apps.ui.extensions.showGoogleSignInAlertDialog
+import foundation.e.apps.ui.navigation.safeNavigate
@AndroidEntryPoint
class SignInFragment : Fragment(R.layout.fragment_sign_in) {
diff --git a/app/src/main/java/foundation/e/apps/ui/setup/signin/google/GoogleSignInFragment.kt b/app/src/main/java/foundation/e/apps/ui/setup/signin/google/GoogleSignInFragment.kt
index 1bab86ff5ae3ae40205ee04c6239fff1ea13b996..f615b81499e8a19a29fa78e640e4d6ed207cdea3 100644
--- a/app/src/main/java/foundation/e/apps/ui/setup/signin/google/GoogleSignInFragment.kt
+++ b/app/src/main/java/foundation/e/apps/ui/setup/signin/google/GoogleSignInFragment.kt
@@ -32,8 +32,8 @@ import dagger.hilt.android.AndroidEntryPoint
import foundation.e.apps.R
import foundation.e.apps.data.playstore.utils.AC2DMUtil
import foundation.e.apps.databinding.FragmentGoogleSigninBinding
-import foundation.e.apps.di.CommonUtilsModule.safeNavigate
import foundation.e.apps.ui.LoginViewModel
+import foundation.e.apps.ui.navigation.safeNavigate
@AndroidEntryPoint
class GoogleSignInFragment : Fragment(R.layout.fragment_google_signin) {
diff --git a/app/src/main/java/foundation/e/apps/ui/updates/UpdatesFragment.kt b/app/src/main/java/foundation/e/apps/ui/updates/UpdatesFragment.kt
index 87ad47e7520af3a181776a5f0dfb2592f511cba1..fb22fe8573826e9d06a6b13f66554ff7b5571481 100644
--- a/app/src/main/java/foundation/e/apps/ui/updates/UpdatesFragment.kt
+++ b/app/src/main/java/foundation/e/apps/ui/updates/UpdatesFragment.kt
@@ -41,26 +41,26 @@ import foundation.e.apps.data.application.ApplicationInstaller
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.Status
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
+import foundation.e.apps.data.install.download.data.DownloadProgress
import foundation.e.apps.data.install.models.AppInstall
+import foundation.e.apps.data.install.pkg.PwaManager
+import foundation.e.apps.data.install.updates.UpdatesWorkManager
+import foundation.e.apps.data.install.workmanager.InstallWorkManager
import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.login.exceptions.GPlayException
import foundation.e.apps.data.login.exceptions.GPlayLoginException
import foundation.e.apps.databinding.FragmentUpdatesBinding
-import foundation.e.apps.di.CommonUtilsModule.safeNavigate
-import foundation.e.apps.install.download.data.DownloadProgress
-import foundation.e.apps.install.pkg.PwaManager
-import foundation.e.apps.install.updates.UpdatesWorkManager
-import foundation.e.apps.install.workmanager.InstallWorkManager
import foundation.e.apps.ui.AppInfoFetchViewModel
import foundation.e.apps.ui.AppProgressViewModel
import foundation.e.apps.ui.MainActivityViewModel
import foundation.e.apps.ui.PrivacyInfoViewModel
import foundation.e.apps.ui.application.subFrags.ApplicationDialogFragment
import foundation.e.apps.ui.applicationlist.ApplicationListRVAdapter
+import foundation.e.apps.ui.navigation.safeNavigate
import foundation.e.apps.ui.parentFragment.TimeoutFragment
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
-import foundation.e.apps.utils.toast
+import foundation.e.apps.ui.utils.toast
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.launch
diff --git a/app/src/main/java/foundation/e/apps/utils/MaterialButtonUtils.kt b/app/src/main/java/foundation/e/apps/ui/utils/MaterialButtonUtils.kt
similarity index 98%
rename from app/src/main/java/foundation/e/apps/utils/MaterialButtonUtils.kt
rename to app/src/main/java/foundation/e/apps/ui/utils/MaterialButtonUtils.kt
index 45a1ec1e1c09ee27aaaa7014452f1506f835e0a3..e7bdad247b247d2d87eeade87358f0210135c21e 100644
--- a/app/src/main/java/foundation/e/apps/utils/MaterialButtonUtils.kt
+++ b/app/src/main/java/foundation/e/apps/ui/utils/MaterialButtonUtils.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.utils
+package foundation.e.apps.ui.utils
import androidx.core.content.ContextCompat
import com.google.android.material.button.MaterialButton
diff --git a/app/src/main/java/foundation/e/apps/utils/ViewUtils.kt b/app/src/main/java/foundation/e/apps/ui/utils/ViewUtils.kt
similarity index 93%
rename from app/src/main/java/foundation/e/apps/utils/ViewUtils.kt
rename to app/src/main/java/foundation/e/apps/ui/utils/ViewUtils.kt
index d483285e1108fdfbcfed514a4bd9538582c8f090..68733841419be0622aaadc7670fb928e07f093dd 100644
--- a/app/src/main/java/foundation/e/apps/utils/ViewUtils.kt
+++ b/app/src/main/java/foundation/e/apps/ui/utils/ViewUtils.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.utils
+package foundation.e.apps.ui.utils
import android.content.Context
import android.content.res.Resources
diff --git a/app/src/test/java/foundation/e/apps/FakeAppLoungePackageManager.kt b/app/src/test/java/foundation/e/apps/FakeAppLoungePackageManager.kt
index 9b2b69fd29ac49712f3effdb85af3a49a3f0094f..37da4a13ed254990d73590321ab3cff97f466aa0 100644
--- a/app/src/test/java/foundation/e/apps/FakeAppLoungePackageManager.kt
+++ b/app/src/test/java/foundation/e/apps/FakeAppLoungePackageManager.kt
@@ -23,7 +23,7 @@ import android.content.pm.ApplicationInfo
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.updates.UpdatesManagerImpl.Companion.PACKAGE_NAME_ANDROID_VENDING
import foundation.e.apps.data.updates.UpdatesManagerImpl.Companion.PACKAGE_NAME_F_DROID
-import foundation.e.apps.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
open class FakeAppLoungePackageManager(
context: Context,
diff --git a/app/src/test/java/foundation/e/apps/apps/AppsApiTest.kt b/app/src/test/java/foundation/e/apps/apps/AppsApiTest.kt
index 92f2dccfa3b9559d002da02037ac78eab6ee4228..78d836962374812a007e622bfdd719655feb6155 100644
--- a/app/src/test/java/foundation/e/apps/apps/AppsApiTest.kt
+++ b/app/src/test/java/foundation/e/apps/apps/AppsApiTest.kt
@@ -32,8 +32,8 @@ import foundation.e.apps.data.enums.FilterLevel
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.playstore.PlayStoreRepository
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import foundation.e.apps.util.MainCoroutineRule
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
diff --git a/app/src/test/java/foundation/e/apps/category/CategoryApiTest.kt b/app/src/test/java/foundation/e/apps/category/CategoryApiTest.kt
index 6631cc1e48c05e5bf9a57ee2da74aeead9cb42cb..0789c6d35c414eab1c0906a4bf47f80b8584edd8 100644
--- a/app/src/test/java/foundation/e/apps/category/CategoryApiTest.kt
+++ b/app/src/test/java/foundation/e/apps/category/CategoryApiTest.kt
@@ -37,8 +37,8 @@ import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.playstore.PlayStoreRepository
import foundation.e.apps.data.preference.AppLoungePreference
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import foundation.e.apps.util.MainCoroutineRule
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
diff --git a/app/src/test/java/foundation/e/apps/data/application/ApplicationDataManagerTest.kt b/app/src/test/java/foundation/e/apps/data/application/ApplicationDataManagerTest.kt
index 2b3b32831f731ceba05fd074c22fff1e3c2f70d0..3df0b22f5f63598a1ccbda493252538186dba6a0 100644
--- a/app/src/test/java/foundation/e/apps/data/application/ApplicationDataManagerTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/application/ApplicationDataManagerTest.kt
@@ -6,7 +6,7 @@ import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.FilterLevel
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
-import foundation.e.apps.install.pkg.PwaManager
+import foundation.e.apps.data.install.pkg.PwaManager
import foundation.e.apps.data.application.utils.AppVisibilityResolver
import io.mockk.coEvery
import io.mockk.every
diff --git a/app/src/test/java/foundation/e/apps/data/cleanapk/CleanApkSearchHelperTest.kt b/app/src/test/java/foundation/e/apps/data/cleanapk/CleanApkSearchHelperTest.kt
index 6513bf4a6c1dda160b10023357161793d4d2ee7b..c8138ace57a2c0c703904817a168f4f784df52e1 100644
--- a/app/src/test/java/foundation/e/apps/data/cleanapk/CleanApkSearchHelperTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/cleanapk/CleanApkSearchHelperTest.kt
@@ -42,7 +42,7 @@ import foundation.e.apps.data.cleanapk.data.search.Search
import foundation.e.apps.data.cleanapk.repositories.NUMBER_OF_ITEMS
import foundation.e.apps.data.cleanapk.repositories.NUMBER_OF_PAGES
import foundation.e.apps.data.enums.Source
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.system.SystemInfoProvider
class CleanApkSearchHelperTest {
diff --git a/app/src/test/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepositoryTest.kt b/app/src/test/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepositoryTest.kt
index f78a8da277a996b93097dcb53a36a9de91c4a063..927521f1c35ffd1341b603465c36d3cc0ec16a32 100644
--- a/app/src/test/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepositoryTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepositoryTest.kt
@@ -36,7 +36,7 @@ import foundation.e.apps.data.cleanapk.data.home.CleanApkHome
import foundation.e.apps.data.cleanapk.data.home.HomeScreenResponse
import foundation.e.apps.data.cleanapk.data.search.Search
import foundation.e.apps.data.enums.Source
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.system.SystemInfoProvider
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
diff --git a/app/src/test/java/foundation/e/apps/di/network/InterceptorModuleTest.kt b/app/src/test/java/foundation/e/apps/data/di/network/InterceptorModuleTest.kt
similarity index 98%
rename from app/src/test/java/foundation/e/apps/di/network/InterceptorModuleTest.kt
rename to app/src/test/java/foundation/e/apps/data/di/network/InterceptorModuleTest.kt
index 929874288c5477fdb9bf7f11dace5c242e7ca23e..5409e9a9a1cbcc6e7298bf19cd20d2d9f76267ea 100644
--- a/app/src/test/java/foundation/e/apps/di/network/InterceptorModuleTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/di/network/InterceptorModuleTest.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.di.network
+package foundation.e.apps.data.di.network
import junit.framework.TestCase.assertEquals
import okhttp3.Interceptor
diff --git a/app/src/test/java/foundation/e/apps/utils/eventBus/AppEventTest.kt b/app/src/test/java/foundation/e/apps/data/event/AppEventTest.kt
similarity index 96%
rename from app/src/test/java/foundation/e/apps/utils/eventBus/AppEventTest.kt
rename to app/src/test/java/foundation/e/apps/data/event/AppEventTest.kt
index eaf1529b4189f4934ca4030a26739ff304e8f563..4f7c0ba385dabbed595ee0423b767fe7d417b2ec 100644
--- a/app/src/test/java/foundation/e/apps/utils/eventBus/AppEventTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/event/AppEventTest.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.utils.eventBus
+package foundation.e.apps.data.event
import com.google.common.truth.Truth.assertThat
import foundation.e.apps.data.enums.ResultStatus
diff --git a/app/src/test/java/foundation/e/apps/utils/ExodusUriGeneratorTest.kt b/app/src/test/java/foundation/e/apps/data/exodus/ExodusUriGeneratorTest.kt
similarity index 96%
rename from app/src/test/java/foundation/e/apps/utils/ExodusUriGeneratorTest.kt
rename to app/src/test/java/foundation/e/apps/data/exodus/ExodusUriGeneratorTest.kt
index 74351f1cfe5ded48c38c75615e35036140042124..3e1263d9d45eec3f8ecb7a4bc53c8f0a6be6a254 100644
--- a/app/src/test/java/foundation/e/apps/utils/ExodusUriGeneratorTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/exodus/ExodusUriGeneratorTest.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.utils
+package foundation.e.apps.data.exodus
import com.google.common.truth.Truth.assertThat
import java.util.Locale
diff --git a/app/src/test/java/foundation/e/apps/data/gitlab/SystemAppsUpdatesRepositoryTest.kt b/app/src/test/java/foundation/e/apps/data/gitlab/SystemAppsUpdatesRepositoryTest.kt
index 5910223622d3ebecd811b8c098dcdec00339cfdc..43443a9a9b29d7494c7a3a351449b59d5c6e5936 100644
--- a/app/src/test/java/foundation/e/apps/data/gitlab/SystemAppsUpdatesRepositoryTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/gitlab/SystemAppsUpdatesRepositoryTest.kt
@@ -20,7 +20,7 @@ package foundation.e.apps.data.gitlab
import android.content.Context
import foundation.e.apps.data.application.ApplicationDataManager
import foundation.e.apps.data.gitlab.models.SystemAppProject
-import foundation.e.apps.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.mockk
diff --git a/app/src/test/java/foundation/e/apps/data/install/AppManagerWrapperProgressTest.kt b/app/src/test/java/foundation/e/apps/data/install/AppManagerWrapperProgressTest.kt
index 071aeffb826fa0f3819f32c7f3bce6029cb9d66b..277cb7d3bab325ad1711554da5b997d6c0156176 100644
--- a/app/src/test/java/foundation/e/apps/data/install/AppManagerWrapperProgressTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/install/AppManagerWrapperProgressTest.kt
@@ -20,7 +20,7 @@ package foundation.e.apps.data.install
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.fdroid.FDroidRepository
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.install.download.data.DownloadProgress
+import foundation.e.apps.data.install.download.data.DownloadProgress
import io.mockk.mockk
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals
diff --git a/app/src/test/java/foundation/e/apps/install/download/data/DownloadProgressLDTest.kt b/app/src/test/java/foundation/e/apps/data/install/download/data/DownloadProgressLDTest.kt
similarity index 97%
rename from app/src/test/java/foundation/e/apps/install/download/data/DownloadProgressLDTest.kt
rename to app/src/test/java/foundation/e/apps/data/install/download/data/DownloadProgressLDTest.kt
index 5ae4d24c2163faf12d603d82b4b99a1e1abecca3..f11379d76086a97607807c67c3f3c0c71d209756 100644
--- a/app/src/test/java/foundation/e/apps/install/download/data/DownloadProgressLDTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/install/download/data/DownloadProgressLDTest.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.install.download.data
+package foundation.e.apps.data.install.download.data
import android.app.DownloadManager
import android.database.Cursor
diff --git a/app/src/test/java/foundation/e/apps/install/pkg/AppLoungePackageManagerTest.kt b/app/src/test/java/foundation/e/apps/data/install/pkg/AppLoungePackageManagerTest.kt
similarity index 98%
rename from app/src/test/java/foundation/e/apps/install/pkg/AppLoungePackageManagerTest.kt
rename to app/src/test/java/foundation/e/apps/data/install/pkg/AppLoungePackageManagerTest.kt
index 4e0bd6c5c43f411e4cd8ce45b0ba804401a25607..ed5460fe790a46a4d056578eea1634978839450a 100644
--- a/app/src/test/java/foundation/e/apps/install/pkg/AppLoungePackageManagerTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/install/pkg/AppLoungePackageManagerTest.kt
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.pkg
+package foundation.e.apps.data.install.pkg
import android.content.Context
import android.content.pm.PackageInfo
diff --git a/app/src/test/java/foundation/e/apps/install/pkg/PwaManagerTest.kt b/app/src/test/java/foundation/e/apps/data/install/pkg/PwaManagerTest.kt
similarity index 98%
rename from app/src/test/java/foundation/e/apps/install/pkg/PwaManagerTest.kt
rename to app/src/test/java/foundation/e/apps/data/install/pkg/PwaManagerTest.kt
index 1f7e799f7c0c5f3b71dc9be0731b49a9e9e1b554..71a4485119267c426eb29ef5c51073ab1785f8b3 100644
--- a/app/src/test/java/foundation/e/apps/install/pkg/PwaManagerTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/install/pkg/PwaManagerTest.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.apps.install.pkg
+package foundation.e.apps.data.install.pkg
import android.content.ContentProvider
import android.content.ContentValues
diff --git a/app/src/test/java/foundation/e/apps/install/updates/UpdatesWorkerTest.kt b/app/src/test/java/foundation/e/apps/data/install/updates/UpdatesWorkerTest.kt
similarity index 99%
rename from app/src/test/java/foundation/e/apps/install/updates/UpdatesWorkerTest.kt
rename to app/src/test/java/foundation/e/apps/data/install/updates/UpdatesWorkerTest.kt
index a73558bf2727ccbce77166956616f89f1a3ef361..962863037d67f8d86b81db25891659a5e5412f38 100644
--- a/app/src/test/java/foundation/e/apps/install/updates/UpdatesWorkerTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/install/updates/UpdatesWorkerTest.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.install.updates
+package foundation.e.apps.data.install.updates
import android.app.NotificationManager
import android.content.Context
@@ -52,7 +52,7 @@ import foundation.e.apps.data.login.repository.AuthenticatorRepository
import foundation.e.apps.data.login.state.LoginState
import foundation.e.apps.data.preference.AppLoungeDataStore
import foundation.e.apps.data.updates.UpdatesManagerRepository
-import foundation.e.apps.install.workmanager.AppInstallProcessor
+import foundation.e.apps.data.install.workmanager.AppInstallProcessor
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
diff --git a/app/src/test/java/foundation/e/apps/utils/MicrogSupportCheckerTest.kt b/app/src/test/java/foundation/e/apps/data/login/microg/MicrogSupportCheckerTest.kt
similarity index 98%
rename from app/src/test/java/foundation/e/apps/utils/MicrogSupportCheckerTest.kt
rename to app/src/test/java/foundation/e/apps/data/login/microg/MicrogSupportCheckerTest.kt
index 0744369cec3996e3a253b428b5b742cc12368899..cc1b48767b84b41ec68810c116918b659336f5a9 100644
--- a/app/src/test/java/foundation/e/apps/utils/MicrogSupportCheckerTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/login/microg/MicrogSupportCheckerTest.kt
@@ -16,7 +16,7 @@
*
*/
-package foundation.e.apps.utils
+package foundation.e.apps.data.login.microg
import android.content.Context
import android.content.pm.PackageInfo
diff --git a/app/src/test/java/foundation/e/apps/data/playstore/PlayStoreRepositoryTest.kt b/app/src/test/java/foundation/e/apps/data/playstore/PlayStoreRepositoryTest.kt
index d1616d8a5663f4534174c1b522d990a969c4679b..11113d0921653cd55f193cc348e27ac1b2486bcb 100644
--- a/app/src/test/java/foundation/e/apps/data/playstore/PlayStoreRepositoryTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/playstore/PlayStoreRepositoryTest.kt
@@ -22,7 +22,7 @@ import foundation.e.apps.data.login.repository.AuthenticatorRepository
import foundation.e.apps.data.playstore.utils.GPlayHttpClient
import foundation.e.apps.data.playstore.utils.GplayHttpRequestException
import foundation.e.apps.data.enums.Source
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.system.SystemInfoProvider
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkConstructor
diff --git a/app/src/test/java/foundation/e/apps/utils/StorageComputerTest.kt b/app/src/test/java/foundation/e/apps/data/system/StorageComputerTest.kt
similarity index 96%
rename from app/src/test/java/foundation/e/apps/utils/StorageComputerTest.kt
rename to app/src/test/java/foundation/e/apps/data/system/StorageComputerTest.kt
index 849b3517ef96aaa9102d087b3bd7e85ffc7ae9f7..89d0da0fb638dce20293b7fa49617c50dd91ac0e 100644
--- a/app/src/test/java/foundation/e/apps/utils/StorageComputerTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/system/StorageComputerTest.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.utils
+package foundation.e.apps.data.system
import com.google.common.truth.Truth.assertThat
import java.util.Locale
diff --git a/app/src/test/java/foundation/e/apps/utils/SystemInfoProviderTest.kt b/app/src/test/java/foundation/e/apps/data/system/SystemInfoProviderTest.kt
similarity index 94%
rename from app/src/test/java/foundation/e/apps/utils/SystemInfoProviderTest.kt
rename to app/src/test/java/foundation/e/apps/data/system/SystemInfoProviderTest.kt
index 7a260ce2865e4f570458e764df070e54c9d6bf84..d29a5d05f3c167e7f3b396c89b49789cfbfa4165 100644
--- a/app/src/test/java/foundation/e/apps/utils/SystemInfoProviderTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/system/SystemInfoProviderTest.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.utils
+package foundation.e.apps.data.system
import com.google.common.truth.Truth.assertThat
import org.json.JSONObject
diff --git a/app/src/test/java/foundation/e/apps/utils/ExtensionsTest.kt b/app/src/test/java/foundation/e/apps/data/utils/ExtensionsTest.kt
similarity index 91%
rename from app/src/test/java/foundation/e/apps/utils/ExtensionsTest.kt
rename to app/src/test/java/foundation/e/apps/data/utils/ExtensionsTest.kt
index 2e94492eb3da2dd7a9b05448b072585c3a2b7a77..7662bcd17e2ae77fa6890afa7e3c14d33d868be4 100644
--- a/app/src/test/java/foundation/e/apps/utils/ExtensionsTest.kt
+++ b/app/src/test/java/foundation/e/apps/data/utils/ExtensionsTest.kt
@@ -1,4 +1,4 @@
-package foundation.e.apps.utils
+package foundation.e.apps.data.utils
import com.google.common.truth.Truth.assertThat
import java.util.Date
diff --git a/app/src/test/java/foundation/e/apps/domain/login/ReportFaultyTokenUseCaseTest.kt b/app/src/test/java/foundation/e/apps/domain/login/ReportFaultyTokenUseCaseTest.kt
index f690fc2531e51b7122d9e6171acd95c9217d9ae8..3b8d567c1db5d50212e0be805a3595d13c8dbe62 100644
--- a/app/src/test/java/foundation/e/apps/domain/login/ReportFaultyTokenUseCaseTest.kt
+++ b/app/src/test/java/foundation/e/apps/domain/login/ReportFaultyTokenUseCaseTest.kt
@@ -6,7 +6,7 @@ import foundation.e.apps.data.enums.User
import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.login.exceptions.GPlayValidationException
import foundation.e.apps.data.ecloud.EcloudRepository
-import foundation.e.apps.utils.SystemInfoProvider
+import foundation.e.apps.data.system.SystemInfoProvider
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.mockk
diff --git a/app/src/test/java/foundation/e/apps/exodus/PrivacyScoreRepositoryImplTest.kt b/app/src/test/java/foundation/e/apps/exodus/PrivacyScoreRepositoryImplTest.kt
index fcd0aa5cf65e52b9799dc69b14b12ff3b976e40e..4d108c3dc4f43f7dd07274c6125609f2f91d952c 100644
--- a/app/src/test/java/foundation/e/apps/exodus/PrivacyScoreRepositoryImplTest.kt
+++ b/app/src/test/java/foundation/e/apps/exodus/PrivacyScoreRepositoryImplTest.kt
@@ -22,7 +22,6 @@ import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepositoryImpl
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.blockedApps.BlockedAppRepository
-import foundation.e.apps.di.CommonUtilsModule
import org.junit.Assert
import org.junit.Before
import org.junit.Test
diff --git a/app/src/test/java/foundation/e/apps/fused/SearchRepositoryImplTest.kt b/app/src/test/java/foundation/e/apps/fused/SearchRepositoryImplTest.kt
index 0f4a24cdc83524eee4f5e775c71202e4bfc32d32..38ef3b5a8082c78a577796fa5a7cd8a12b0bc51c 100644
--- a/app/src/test/java/foundation/e/apps/fused/SearchRepositoryImplTest.kt
+++ b/app/src/test/java/foundation/e/apps/fused/SearchRepositoryImplTest.kt
@@ -37,8 +37,8 @@ import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.playstore.PlayStoreRepository
import foundation.e.apps.data.preference.AppLoungeDataStore
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import foundation.e.apps.util.MainCoroutineRule
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
diff --git a/app/src/test/java/foundation/e/apps/fusedManager/AppManagerWrapperTest.kt b/app/src/test/java/foundation/e/apps/fusedManager/AppManagerWrapperTest.kt
index fb77fcfce4cb48c54d54cfb54f06ae560566b8e8..9cf3b5152a49bab5afbe2571b00a998e250925e1 100644
--- a/app/src/test/java/foundation/e/apps/fusedManager/AppManagerWrapperTest.kt
+++ b/app/src/test/java/foundation/e/apps/fusedManager/AppManagerWrapperTest.kt
@@ -24,7 +24,7 @@ import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.fdroid.FDroidRepository
import foundation.e.apps.data.install.AppManagerWrapper
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.install.workmanager.InstallWorkManager
+import foundation.e.apps.data.install.workmanager.InstallWorkManager
import foundation.e.apps.installProcessor.FakeAppInstallDAO
import foundation.e.apps.util.MainCoroutineRule
import io.mockk.every
diff --git a/app/src/test/java/foundation/e/apps/gplay/GPlayHttpClientTest.kt b/app/src/test/java/foundation/e/apps/gplay/GPlayHttpClientTest.kt
index 3bd77f11130c0f514838148f50aae1b201de44a5..a846fe5450123034c0c23a9df79b9517bbfafd25 100644
--- a/app/src/test/java/foundation/e/apps/gplay/GPlayHttpClientTest.kt
+++ b/app/src/test/java/foundation/e/apps/gplay/GPlayHttpClientTest.kt
@@ -24,9 +24,9 @@ import foundation.e.apps.data.playstore.utils.GPlayHttpClient
import foundation.e.apps.data.playstore.utils.GplayHttpRequestException
import foundation.e.apps.util.FakeCall
import foundation.e.apps.util.MainCoroutineRule
-import foundation.e.apps.utils.SystemInfoProvider
-import foundation.e.apps.utils.eventBus.AppEvent
-import foundation.e.apps.utils.eventBus.EventBus
+import foundation.e.apps.data.system.SystemInfoProvider
+import foundation.e.apps.data.event.AppEvent
+import foundation.e.apps.data.event.EventBus
import io.mockk.every
import io.mockk.mockkObject
import kotlinx.coroutines.ExperimentalCoroutinesApi
diff --git a/app/src/test/java/foundation/e/apps/installProcessor/AppInstallProcessorTest.kt b/app/src/test/java/foundation/e/apps/installProcessor/AppInstallProcessorTest.kt
index 67544b5c95ec0753d5e9e9fdabc8bbb067c146d6..ade2dc588663aea237a76593de4bf64f3c89f43b 100644
--- a/app/src/test/java/foundation/e/apps/installProcessor/AppInstallProcessorTest.kt
+++ b/app/src/test/java/foundation/e/apps/installProcessor/AppInstallProcessorTest.kt
@@ -35,10 +35,10 @@ import foundation.e.apps.data.install.models.AppInstall
import foundation.e.apps.data.preference.AppLoungeDataStore
import foundation.e.apps.domain.ValidateAppAgeLimitUseCase
import foundation.e.apps.domain.model.ContentRatingValidity
-import foundation.e.apps.install.AppInstallComponents
-import foundation.e.apps.install.notification.StorageNotificationManager
-import foundation.e.apps.install.workmanager.AppInstallProcessor
-import foundation.e.apps.utils.StorageComputer
+import foundation.e.apps.data.install.AppInstallComponents
+import foundation.e.apps.data.install.notification.StorageNotificationManager
+import foundation.e.apps.data.install.workmanager.AppInstallProcessor
+import foundation.e.apps.data.system.StorageComputer
import foundation.e.apps.util.MainCoroutineRule
import io.mockk.coEvery
import io.mockk.coVerify
diff --git a/app/src/test/java/foundation/e/apps/ui/compose/state/InstallButtonStateMapperTest.kt b/app/src/test/java/foundation/e/apps/ui/compose/state/InstallButtonStateMapperTest.kt
index 134a9bdeec74c01eb8cfd6831f74886a17e30cd1..9f3c7c5f1b3938330f4fc58fdffbfb0106a954dd 100644
--- a/app/src/test/java/foundation/e/apps/ui/compose/state/InstallButtonStateMapperTest.kt
+++ b/app/src/test/java/foundation/e/apps/ui/compose/state/InstallButtonStateMapperTest.kt
@@ -23,7 +23,7 @@ import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.enums.User
-import foundation.e.apps.install.pkg.InstallerService
+import foundation.e.apps.data.install.pkg.InstallerService
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
diff --git a/app/src/test/java/foundation/e/apps/ui/compose/state/InstallStatusReconcilerTest.kt b/app/src/test/java/foundation/e/apps/ui/compose/state/InstallStatusReconcilerTest.kt
index 1f37a9cfa8f45d95138eeb8fe6cd11a136653664..ed3a261a34541cc72127c649fcddd68059d30e55 100644
--- a/app/src/test/java/foundation/e/apps/ui/compose/state/InstallStatusReconcilerTest.kt
+++ b/app/src/test/java/foundation/e/apps/ui/compose/state/InstallStatusReconcilerTest.kt
@@ -22,7 +22,7 @@ import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.Status
import foundation.e.apps.data.install.AppManagerWrapper
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.install.download.data.DownloadProgress
+import foundation.e.apps.data.install.download.data.DownloadProgress
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
diff --git a/app/src/test/java/foundation/e/apps/ui/compose/state/InstallStatusStreamTest.kt b/app/src/test/java/foundation/e/apps/ui/compose/state/InstallStatusStreamTest.kt
index d3d8d103828b732f86e0be27dbdadecbd3febb59..ab5a6fedc7c6cee74ecbc6791bd441438d2ecf10 100644
--- a/app/src/test/java/foundation/e/apps/ui/compose/state/InstallStatusStreamTest.kt
+++ b/app/src/test/java/foundation/e/apps/ui/compose/state/InstallStatusStreamTest.kt
@@ -22,8 +22,8 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.MutableLiveData
import foundation.e.apps.data.install.AppManagerWrapper
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.install.pkg.AppLoungePackageManager
-import foundation.e.apps.install.pkg.PwaManager
+import foundation.e.apps.data.install.pkg.AppLoungePackageManager
+import foundation.e.apps.data.install.pkg.PwaManager
import foundation.e.apps.util.MainCoroutineRule
import io.mockk.every
import io.mockk.mockk