Update: Restructure the project in 5 main packages

This commit is contained in:
machiav3lli
2025-02-12 02:15:40 +01:00
parent 3a67b2cff6
commit beaafee27e
157 changed files with 801 additions and 808 deletions

View File

@ -2,7 +2,7 @@
activity = "1.10.0"
agp = "8.8.0"
biometric = "1.2.0-alpha05"
coil = "3.0.4"
coil = "3.1.0"
compose-bom = "2025.01.01"
compose-accompanist = "0.37.0"
compose-markdown = "0.5.0"
@ -13,7 +13,7 @@ koin = "4.0.2"
koin-ksp = "1.4.0"
kotlin = "2.1.10"
ksp = "2.1.10-1.0.29"
ktor = "3.0.3"
ktor = "3.1.0"
leakcanary = "2.14"
libsu = "6.0.0"
lifecycle = "2.8.7"

View File

@ -20,7 +20,7 @@
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<application
android:name=".MainApplication"
android:name=".NeoApp"
android:allowBackup="false"
android:enableOnBackInvokedCallback="true"
android:icon="@mipmap/ic_launcher"
@ -114,11 +114,11 @@
</activity>
<receiver
android:name=".service.InstallerReceiver"
android:name="com.machiav3lli.fdroid.manager.service.InstallerReceiver"
android:exported="false" />
<provider
android:name=".content.Cache$Provider"
android:name="com.machiav3lli.fdroid.data.content.Cache$Provider"
android:authorities="${applicationId}.provider.cache"
android:exported="false"
android:grantUriPermissions="true" />
@ -134,7 +134,7 @@
</provider>
<receiver
android:name=".service.ActionReceiver"
android:name="com.machiav3lli.fdroid.manager.service.ActionReceiver"
android:exported="false" />
<service

View File

@ -1,6 +1,6 @@
package com.machiav3lli.fdroid
import com.machiav3lli.fdroid.entity.PermissionGroup
import com.machiav3lli.fdroid.data.entity.PermissionGroup
const val NOTIFICATION_CHANNEL_SYNCING = "syncing"
const val NOTIFICATION_CHANNEL_UPDATES = "updates"

View File

@ -28,15 +28,15 @@ import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.DatabaseX
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.DatabaseX
import com.machiav3lli.fdroid.ui.compose.theme.AppTheme
import com.machiav3lli.fdroid.ui.navigation.AppNavHost
import com.machiav3lli.fdroid.ui.navigation.NavRoute
import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.utility.extension.text.pathCropped
import com.machiav3lli.fdroid.utility.isBiometricLockEnabled
import com.machiav3lli.fdroid.utility.isDarkTheme
import com.machiav3lli.fdroid.utils.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.utils.extension.text.pathCropped
import com.machiav3lli.fdroid.utils.isBiometricLockEnabled
import com.machiav3lli.fdroid.utils.isDarkTheme
import com.machiav3lli.fdroid.viewmodels.AppSheetVM
import com.machiav3lli.fdroid.viewmodels.MainVM
import com.machiav3lli.fdroid.viewmodels.PrefsVM
@ -82,9 +82,9 @@ class NeoActivity : AppCompatActivity() {
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
override fun onCreate(savedInstanceState: Bundle?) {
(application as MainApplication).mActivity = this
(application as NeoApp).mActivity = this
currentTheme = Preferences[Preferences.Key.Theme].resId
MainApplication.mainActivity = this
NeoApp.mainActivity = this
super.onCreate(savedInstanceState)
setContent {
@ -191,7 +191,7 @@ class NeoActivity : AppCompatActivity() {
if (!packageName.isNullOrEmpty()) {
lifecycleScope.launch {
specialIntent.cacheFileName?.let {
MainApplication.installer.install(packageName, it)
NeoApp.installer.install(packageName, it)
}
}
}
@ -309,7 +309,7 @@ class NeoActivity : AppCompatActivity() {
.setConfirmationRequired(true)
.setAllowedAuthenticators(
BiometricManager.Authenticators.DEVICE_CREDENTIAL or (
if (MainApplication.context.isBiometricLockEnabled()) BiometricManager.Authenticators.BIOMETRIC_WEAK
if (NeoApp.context.isBiometricLockEnabled()) BiometricManager.Authenticators.BIOMETRIC_WEAK
else 0
)
)

View File

@ -17,26 +17,26 @@ import coil3.request.crossfade
import com.anggrayudi.storage.extension.postToUi
import com.google.android.material.color.DynamicColors
import com.google.android.material.color.DynamicColorsOptions
import com.machiav3lli.fdroid.content.Cache
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.DatabaseX
import com.machiav3lli.fdroid.database.databaseModule
import com.machiav3lli.fdroid.index.RepositoryUpdater
import com.machiav3lli.fdroid.installer.AppInstaller
import com.machiav3lli.fdroid.installer.BaseInstaller
import com.machiav3lli.fdroid.installer.installerModule
import com.machiav3lli.fdroid.network.CoilDownloader
import com.machiav3lli.fdroid.network.Downloader
import com.machiav3lli.fdroid.network.downloadClientModule
import com.machiav3lli.fdroid.network.exodusModule
import com.machiav3lli.fdroid.service.PackageChangedReceiver
import com.machiav3lli.fdroid.service.WorkerManager
import com.machiav3lli.fdroid.service.worker.BatchSyncWorker
import com.machiav3lli.fdroid.service.worker.SyncRequest
import com.machiav3lli.fdroid.service.workmanagerModule
import com.machiav3lli.fdroid.utility.Utils.setLanguage
import com.machiav3lli.fdroid.utility.Utils.toInstalledItem
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.data.content.Cache
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.DatabaseX
import com.machiav3lli.fdroid.data.database.databaseModule
import com.machiav3lli.fdroid.data.index.RepositoryUpdater
import com.machiav3lli.fdroid.manager.installer.AppInstaller
import com.machiav3lli.fdroid.manager.installer.BaseInstaller
import com.machiav3lli.fdroid.manager.installer.installerModule
import com.machiav3lli.fdroid.manager.network.CoilDownloader
import com.machiav3lli.fdroid.manager.network.Downloader
import com.machiav3lli.fdroid.manager.network.downloadClientModule
import com.machiav3lli.fdroid.manager.network.exodusModule
import com.machiav3lli.fdroid.manager.service.PackageChangedReceiver
import com.machiav3lli.fdroid.manager.service.WorkerManager
import com.machiav3lli.fdroid.manager.service.worker.BatchSyncWorker
import com.machiav3lli.fdroid.manager.service.worker.SyncRequest
import com.machiav3lli.fdroid.manager.service.workmanagerModule
import com.machiav3lli.fdroid.utils.Utils.setLanguage
import com.machiav3lli.fdroid.utils.Utils.toInstalledItem
import com.machiav3lli.fdroid.utils.extension.android.Android
import io.ktor.client.engine.ProxyBuilder
import io.ktor.http.Url
import kotlinx.coroutines.CoroutineScope
@ -53,7 +53,7 @@ import java.lang.ref.WeakReference
import java.net.Proxy
@OptIn(KoinExperimentalAPI::class)
class MainApplication : Application(), SingletonImageLoader.Factory, KoinStartup {
class NeoApp : Application(), SingletonImageLoader.Factory, KoinStartup {
val db: DatabaseX by inject()
lateinit var mActivity: AppCompatActivity
@ -64,11 +64,11 @@ class MainApplication : Application(), SingletonImageLoader.Factory, KoinStartup
val enqueuedInstalls: MutableSet<String> = mutableSetOf()
val latestSyncs: MutableMap<Long, Long> = mutableMapOf()
private var appRef: WeakReference<MainApplication> = WeakReference(null)
private val neo_store: MainApplication get() = appRef.get()!!
private var appRef: WeakReference<NeoApp> = WeakReference(null)
private val neo_store: NeoApp get() = appRef.get()!!
private var mainActivityRef: WeakReference<NeoActivity> = WeakReference(null)
var mainActivity: NeoActivity?
var mainActivity: NeoActivity? // TODO make private
get() = mainActivityRef.get()
set(mainActivity) {
mainActivityRef = WeakReference(mainActivity)
@ -117,7 +117,7 @@ class MainApplication : Application(), SingletonImageLoader.Factory, KoinStartup
override fun onKoinStartup() = koinConfiguration {
androidLogger()
androidContext(this@MainApplication)
androidContext(this@NeoApp)
modules(
exodusModule,
downloadClientModule,
@ -211,8 +211,9 @@ class MainApplication : Application(), SingletonImageLoader.Factory, KoinStartup
}
private suspend fun updatePeriodicSyncJob(force: Boolean) = withContext(Dispatchers.IO) {
val wm = MainApplication.wm.workManager
val reschedule = force || wm.getWorkInfosForUniqueWork(TAG_BATCH_SYNC_PERIODIC).get().isEmpty()
val wm = NeoApp.wm.workManager
val reschedule =
force || wm.getWorkInfosForUniqueWork(TAG_BATCH_SYNC_PERIODIC).get().isEmpty()
if (reschedule) {
when (val autoSync = Preferences[Preferences.Key.AutoSync]) {
is Preferences.AutoSync.Never -> {

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.content
package com.machiav3lli.fdroid.data.content
import android.content.ContentValues
import android.content.Context
@ -15,9 +15,9 @@ import androidx.core.content.FileProvider
import androidx.documentfile.provider.DocumentFile
import com.anggrayudi.storage.file.getAbsolutePath
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.getDownloadFolder
import com.machiav3lli.fdroid.utility.isDownloadExternal
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.getDownloadFolder
import com.machiav3lli.fdroid.utils.isDownloadExternal
import java.io.File
import java.util.UUID
import kotlin.concurrent.thread

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.content
package com.machiav3lli.fdroid.data.content
import android.content.Context
import android.content.SharedPreferences
@ -6,16 +6,16 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.os.Build
import androidx.appcompat.app.AppCompatDelegate
import com.machiav3lli.fdroid.FILTER_CATEGORY_ALL
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.PREFS_LANGUAGE
import com.machiav3lli.fdroid.PREFS_LANGUAGE_DEFAULT
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.entity.AndroidVersion
import com.machiav3lli.fdroid.entity.InstallerType
import com.machiav3lli.fdroid.entity.Order
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.getHasSystemInstallPermission
import com.machiav3lli.fdroid.utility.isBiometricLockAvailable
import com.machiav3lli.fdroid.data.entity.AndroidVersion
import com.machiav3lli.fdroid.data.entity.InstallerType
import com.machiav3lli.fdroid.data.entity.Order
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.getHasSystemInstallPermission
import com.machiav3lli.fdroid.utils.isBiometricLockAvailable
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
@ -573,7 +573,7 @@ data object Preferences : OnSharedPreferenceChangeListener {
Enumeration<Installer> {
override val values: List<Installer>
get() = mutableListOf(Default, Root, AM, Legacy).apply {
if (MainApplication.context.getHasSystemInstallPermission())
if (NeoApp.context.getHasSystemInstallPermission())
add(System)
}
@ -588,7 +588,7 @@ data object Preferences : OnSharedPreferenceChangeListener {
Enumeration<ActionLock> {
override val values: List<ActionLock>
get() = mutableListOf(None, Device).apply {
if (MainApplication.context.isBiometricLockAvailable())
if (NeoApp.context.isBiometricLockAvailable())
add(Biometric)
}

View File

@ -1,8 +1,8 @@
package com.machiav3lli.fdroid.content
package com.machiav3lli.fdroid.data.content
import android.os.Build
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utils.extension.android.Android
val BooleanPrefsMeta = mapOf(
Preferences.Key.ShowScreenshots to Pair(

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.content
package com.machiav3lli.fdroid.data.content
import android.annotation.SuppressLint
import android.content.Context

View File

@ -1,11 +1,11 @@
package com.machiav3lli.fdroid.database
package com.machiav3lli.fdroid.data.database
import androidx.room.TypeConverter
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.entity.Author
import com.machiav3lli.fdroid.entity.Donate
import com.machiav3lli.fdroid.entity.Screenshot
import com.machiav3lli.fdroid.service.worker.DownloadState
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.data.entity.Author
import com.machiav3lli.fdroid.data.entity.Donate
import com.machiav3lli.fdroid.data.entity.Screenshot
import com.machiav3lli.fdroid.manager.service.worker.DownloadState
object Converters {
@TypeConverter

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database
package com.machiav3lli.fdroid.data.database
import android.content.Context
import androidx.room.AutoMigration
@ -15,53 +15,53 @@ import com.machiav3lli.fdroid.TABLE_EXODUS_INFO
import com.machiav3lli.fdroid.TABLE_INSTALL_TASK
import com.machiav3lli.fdroid.TABLE_REPOSITORY
import com.machiav3lli.fdroid.TABLE_TRACKER
import com.machiav3lli.fdroid.database.dao.CategoryDao
import com.machiav3lli.fdroid.database.dao.CategoryTempDao
import com.machiav3lli.fdroid.database.dao.DownloadedDao
import com.machiav3lli.fdroid.database.dao.ExodusInfoDao
import com.machiav3lli.fdroid.database.dao.ExtrasDao
import com.machiav3lli.fdroid.database.dao.InstallTaskDao
import com.machiav3lli.fdroid.database.dao.InstalledDao
import com.machiav3lli.fdroid.database.dao.ProductDao
import com.machiav3lli.fdroid.database.dao.ProductTempDao
import com.machiav3lli.fdroid.database.dao.ReleaseDao
import com.machiav3lli.fdroid.database.dao.ReleaseTempDao
import com.machiav3lli.fdroid.database.dao.RepositoryDao
import com.machiav3lli.fdroid.database.dao.TrackerDao
import com.machiav3lli.fdroid.database.entity.Category
import com.machiav3lli.fdroid.database.entity.CategoryTemp
import com.machiav3lli.fdroid.database.entity.Downloaded
import com.machiav3lli.fdroid.database.entity.ExodusInfo
import com.machiav3lli.fdroid.database.entity.Extras
import com.machiav3lli.fdroid.database.entity.InstallTask
import com.machiav3lli.fdroid.database.entity.Installed
import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.database.entity.ProductTemp
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.database.entity.ReleaseTemp
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV10
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV11
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV12
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV14
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV15
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV17
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV18
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV19
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV20
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV21
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV22
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV23
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV29
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV30
import com.machiav3lli.fdroid.database.entity.Repository.Companion.addedReposV9
import com.machiav3lli.fdroid.database.entity.Repository.Companion.archiveRepos
import com.machiav3lli.fdroid.database.entity.Repository.Companion.defaultRepositories
import com.machiav3lli.fdroid.database.entity.Repository.Companion.removedReposV28
import com.machiav3lli.fdroid.database.entity.Repository.Companion.removedReposV29
import com.machiav3lli.fdroid.database.entity.Repository.Companion.removedReposV31
import com.machiav3lli.fdroid.database.entity.Tracker
import com.machiav3lli.fdroid.service.worker.SyncWorker.Companion.enableRepo
import com.machiav3lli.fdroid.data.database.dao.CategoryDao
import com.machiav3lli.fdroid.data.database.dao.CategoryTempDao
import com.machiav3lli.fdroid.data.database.dao.DownloadedDao
import com.machiav3lli.fdroid.data.database.dao.ExodusInfoDao
import com.machiav3lli.fdroid.data.database.dao.ExtrasDao
import com.machiav3lli.fdroid.data.database.dao.InstallTaskDao
import com.machiav3lli.fdroid.data.database.dao.InstalledDao
import com.machiav3lli.fdroid.data.database.dao.ProductDao
import com.machiav3lli.fdroid.data.database.dao.ProductTempDao
import com.machiav3lli.fdroid.data.database.dao.ReleaseDao
import com.machiav3lli.fdroid.data.database.dao.ReleaseTempDao
import com.machiav3lli.fdroid.data.database.dao.RepositoryDao
import com.machiav3lli.fdroid.data.database.dao.TrackerDao
import com.machiav3lli.fdroid.data.database.entity.Category
import com.machiav3lli.fdroid.data.database.entity.CategoryTemp
import com.machiav3lli.fdroid.data.database.entity.Downloaded
import com.machiav3lli.fdroid.data.database.entity.ExodusInfo
import com.machiav3lli.fdroid.data.database.entity.Extras
import com.machiav3lli.fdroid.data.database.entity.InstallTask
import com.machiav3lli.fdroid.data.database.entity.Installed
import com.machiav3lli.fdroid.data.database.entity.Product
import com.machiav3lli.fdroid.data.database.entity.ProductTemp
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.data.database.entity.ReleaseTemp
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV10
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV11
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV12
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV14
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV15
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV17
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV18
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV19
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV20
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV21
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV22
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV23
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV29
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV30
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.addedReposV9
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.archiveRepos
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.defaultRepositories
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.removedReposV28
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.removedReposV29
import com.machiav3lli.fdroid.data.database.entity.Repository.Companion.removedReposV31
import com.machiav3lli.fdroid.data.database.entity.Tracker
import com.machiav3lli.fdroid.manager.service.worker.SyncWorker.Companion.enableRepo
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database
package com.machiav3lli.fdroid.data.database
class QueryBuilder {

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Delete
import androidx.room.Insert

View File

@ -1,9 +1,9 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import com.machiav3lli.fdroid.database.entity.Category
import com.machiav3lli.fdroid.database.entity.CategoryTemp
import com.machiav3lli.fdroid.data.database.entity.Category
import com.machiav3lli.fdroid.data.database.entity.CategoryTemp
import kotlinx.coroutines.flow.Flow
@Dao

View File

@ -1,8 +1,8 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import com.machiav3lli.fdroid.database.entity.Downloaded
import com.machiav3lli.fdroid.data.database.entity.Downloaded
import kotlinx.coroutines.flow.Flow
@Dao

View File

@ -1,8 +1,8 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import com.machiav3lli.fdroid.database.entity.ExodusInfo
import com.machiav3lli.fdroid.data.database.entity.ExodusInfo
import kotlinx.coroutines.flow.Flow
@Dao

View File

@ -1,9 +1,9 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Transaction
import com.machiav3lli.fdroid.database.entity.Extras
import com.machiav3lli.fdroid.data.database.entity.Extras
import kotlinx.coroutines.flow.Flow
@Dao

View File

@ -1,8 +1,8 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import com.machiav3lli.fdroid.database.entity.InstallTask
import com.machiav3lli.fdroid.data.database.entity.InstallTask
import kotlinx.coroutines.flow.Flow
// TODO make sure that apps that not uninstalled by Droid-ify still get removed

View File

@ -1,8 +1,8 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import com.machiav3lli.fdroid.database.entity.Installed
import com.machiav3lli.fdroid.data.database.entity.Installed
import kotlinx.coroutines.flow.Flow
// TODO make sure that apps that not uninstalled by Droid-ify still get removed

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.lifecycle.LiveData
import androidx.room.Dao
@ -33,21 +33,21 @@ import com.machiav3lli.fdroid.TABLE_INSTALLED
import com.machiav3lli.fdroid.TABLE_PRODUCT
import com.machiav3lli.fdroid.TABLE_RELEASE
import com.machiav3lli.fdroid.TABLE_REPOSITORY
import com.machiav3lli.fdroid.database.QueryBuilder
import com.machiav3lli.fdroid.database.entity.Category
import com.machiav3lli.fdroid.database.entity.CategoryTemp
import com.machiav3lli.fdroid.database.entity.Extras
import com.machiav3lli.fdroid.database.entity.IconDetails
import com.machiav3lli.fdroid.database.entity.Installed
import com.machiav3lli.fdroid.database.entity.Licenses
import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.database.entity.ProductTemp
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.database.entity.asProductTemp
import com.machiav3lli.fdroid.entity.Order
import com.machiav3lli.fdroid.entity.Request
import com.machiav3lli.fdroid.entity.Section
import com.machiav3lli.fdroid.entity.UpdateCategory
import com.machiav3lli.fdroid.data.database.QueryBuilder
import com.machiav3lli.fdroid.data.database.entity.Category
import com.machiav3lli.fdroid.data.database.entity.CategoryTemp
import com.machiav3lli.fdroid.data.database.entity.Extras
import com.machiav3lli.fdroid.data.database.entity.IconDetails
import com.machiav3lli.fdroid.data.database.entity.Installed
import com.machiav3lli.fdroid.data.database.entity.Licenses
import com.machiav3lli.fdroid.data.database.entity.Product
import com.machiav3lli.fdroid.data.database.entity.ProductTemp
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.data.database.entity.asProductTemp
import com.machiav3lli.fdroid.data.entity.Order
import com.machiav3lli.fdroid.data.entity.Request
import com.machiav3lli.fdroid.data.entity.Section
import com.machiav3lli.fdroid.data.entity.UpdateCategory
import kotlinx.coroutines.flow.Flow
@Dao

View File

@ -1,9 +1,9 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.database.entity.ReleaseTemp
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.data.database.entity.ReleaseTemp
@Dao
interface ReleaseDao : BaseDao<Release> {

View File

@ -1,11 +1,10 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import com.machiav3lli.fdroid.database.entity.LatestSyncs
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.data.database.entity.LatestSyncs
import com.machiav3lli.fdroid.data.database.entity.Repository
import kotlinx.coroutines.flow.Flow
@Dao
@ -14,7 +13,7 @@ interface RepositoryDao : BaseDao<Repository> {
fun getCount(): Int
@Insert
fun insertReturn(repo: Repository) : Long
fun insertReturn(repo: Repository): Long
fun put(repository: Repository): Repository {
repository.let { item ->

View File

@ -1,8 +1,8 @@
package com.machiav3lli.fdroid.database.dao
package com.machiav3lli.fdroid.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import com.machiav3lli.fdroid.database.entity.Tracker
import com.machiav3lli.fdroid.data.database.entity.Tracker
import kotlinx.coroutines.flow.Flow
@Dao

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import androidx.room.Entity
import androidx.room.Index

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
@ -6,7 +6,7 @@ import com.machiav3lli.fdroid.FIELD_CACHEFILENAME
import com.machiav3lli.fdroid.FIELD_VERSION
import com.machiav3lli.fdroid.ROW_PACKAGE_NAME
import com.machiav3lli.fdroid.TABLE_DOWNLOADED
import com.machiav3lli.fdroid.service.worker.DownloadState
import com.machiav3lli.fdroid.manager.service.worker.DownloadState
@Entity(
tableName = TABLE_DOWNLOADED,

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import androidx.room.Entity
import androidx.room.Index
@ -6,7 +6,6 @@ import androidx.room.PrimaryKey
import com.machiav3lli.fdroid.ROW_PACKAGE_NAME
import com.machiav3lli.fdroid.TABLE_EXODUS_INFO
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Entity(

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
@ -8,7 +8,6 @@ import com.machiav3lli.fdroid.ROW_FAVORITE
import com.machiav3lli.fdroid.ROW_PACKAGE_NAME
import com.machiav3lli.fdroid.TABLE_EXTRAS
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Entity(

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import androidx.room.Entity
import com.machiav3lli.fdroid.ROW_PACKAGE_NAME
@ -6,7 +6,6 @@ import com.machiav3lli.fdroid.ROW_REPOSITORY_ID
import com.machiav3lli.fdroid.ROW_VERSION_CODE
import com.machiav3lli.fdroid.TABLE_INSTALL_TASK
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Serializable

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import androidx.room.Entity
import androidx.room.Index

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import androidx.room.Entity
import androidx.room.Index
@ -10,16 +10,15 @@ import com.machiav3lli.fdroid.ROW_REPOSITORY_ID
import com.machiav3lli.fdroid.ROW_UPDATED
import com.machiav3lli.fdroid.TABLE_PRODUCT
import com.machiav3lli.fdroid.TABLE_PRODUCT_TEMP
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.entity.AntiFeature
import com.machiav3lli.fdroid.entity.Author
import com.machiav3lli.fdroid.entity.Donate
import com.machiav3lli.fdroid.entity.ProductItem
import com.machiav3lli.fdroid.entity.Screenshot
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.entity.AntiFeature
import com.machiav3lli.fdroid.data.entity.Author
import com.machiav3lli.fdroid.data.entity.Donate
import com.machiav3lli.fdroid.data.entity.ProductItem
import com.machiav3lli.fdroid.data.entity.Screenshot
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.extension.text.nullIfEmpty
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
// TODO Add Product Extras to handle favorite lists etc..

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import android.net.Uri
import androidx.room.ColumnInfo
@ -15,7 +15,6 @@ import com.machiav3lli.fdroid.ROW_VERSION_CODE
import com.machiav3lli.fdroid.TABLE_RELEASE
import com.machiav3lli.fdroid.TABLE_RELEASE_TEMP
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
// TODO consider denormalizing by adding minSdkVersion and maxSdkVersion columns to Product

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import android.util.Base64
import androidx.room.Entity
@ -7,9 +7,8 @@ import androidx.room.PrimaryKey
import com.machiav3lli.fdroid.ROW_ENABLED
import com.machiav3lli.fdroid.ROW_ID
import com.machiav3lli.fdroid.TABLE_REPOSITORY
import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.utils.extension.text.nullIfEmpty
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import java.net.URL
import java.nio.charset.Charset

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.database.entity
package com.machiav3lli.fdroid.data.database.entity
import androidx.room.Entity
import androidx.room.Index
@ -6,7 +6,6 @@ import androidx.room.PrimaryKey
import com.machiav3lli.fdroid.ROW_KEY
import com.machiav3lli.fdroid.TABLE_TRACKER
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
@Entity(

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.entity
package com.machiav3lli.fdroid.data.entity
import androidx.annotation.StringRes
import androidx.compose.ui.graphics.vector.ImageVector
@ -9,7 +9,7 @@ import com.machiav3lli.fdroid.HELP_MATRIX
import com.machiav3lli.fdroid.HELP_SOURCECODE
import com.machiav3lli.fdroid.HELP_TELEGRAM
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.ui.compose.icons.Phosphor
import com.machiav3lli.fdroid.ui.compose.icons.phosphor.BracketsSquare
import com.machiav3lli.fdroid.ui.compose.icons.phosphor.CalendarPlus

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.entity
package com.machiav3lli.fdroid.data.entity
import android.content.pm.PermissionInfo
import androidx.annotation.StringRes
@ -8,7 +8,7 @@ import com.machiav3lli.fdroid.IDENTIFICATION_DATA_PERMISSIONS
import com.machiav3lli.fdroid.PERMISSION_GROUP_INTERNET
import com.machiav3lli.fdroid.PHYSICAL_DATA_PERMISSIONS
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.database.entity.Tracker
import com.machiav3lli.fdroid.data.database.entity.Tracker
import com.machiav3lli.fdroid.ui.compose.icons.Icon
import com.machiav3lli.fdroid.ui.compose.icons.Phosphor
import com.machiav3lli.fdroid.ui.compose.icons.icon.Opensource

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.entity
package com.machiav3lli.fdroid.data.entity
data class ProductItem(
var repositoryId: Long = 0,

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.entity
package com.machiav3lli.fdroid.data.entity
import android.content.Context
import android.content.pm.PermissionGroupInfo
@ -9,8 +9,8 @@ import androidx.compose.ui.graphics.vector.ImageVector
import com.machiav3lli.backup.ui.compose.icons.phosphor.Plus
import com.machiav3lli.fdroid.FILTER_CATEGORY_ALL
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.ui.compose.icons.Icon
import com.machiav3lli.fdroid.ui.compose.icons.Phosphor
import com.machiav3lli.fdroid.ui.compose.icons.icon.IcDonateLiberapay

View File

@ -1,20 +1,20 @@
package com.machiav3lli.fdroid.index
package com.machiav3lli.fdroid.data.index
import android.content.Context
import android.net.Uri
import com.machiav3lli.fdroid.content.Cache
import com.machiav3lli.fdroid.database.DatabaseX
import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.database.entity.asReleaseTemp
import com.machiav3lli.fdroid.index.v0.IndexV0Parser
import com.machiav3lli.fdroid.index.v1.IndexV1Merger
import com.machiav3lli.fdroid.index.v1.IndexV1Parser
import com.machiav3lli.fdroid.network.Downloader
import com.machiav3lli.fdroid.utility.CoroutineUtils
import com.machiav3lli.fdroid.utility.ProgressInputStream
import com.machiav3lli.fdroid.utility.extension.text.unhex
import com.machiav3lli.fdroid.data.content.Cache
import com.machiav3lli.fdroid.data.database.DatabaseX
import com.machiav3lli.fdroid.data.database.entity.Product
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.data.database.entity.asReleaseTemp
import com.machiav3lli.fdroid.data.index.v0.IndexV0Parser
import com.machiav3lli.fdroid.data.index.v1.IndexV1Merger
import com.machiav3lli.fdroid.data.index.v1.IndexV1Parser
import com.machiav3lli.fdroid.manager.network.Downloader
import com.machiav3lli.fdroid.utils.CoroutineUtils
import com.machiav3lli.fdroid.utils.ProgressInputStream
import com.machiav3lli.fdroid.utils.extension.text.unhex
import io.ktor.http.HttpStatusCode
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

View File

@ -1,11 +1,11 @@
package com.machiav3lli.fdroid.index.v0
package com.machiav3lli.fdroid.data.index.v0
import android.util.Xml
import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.entity.Author
import com.machiav3lli.fdroid.entity.Donate
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.data.database.entity.Product
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.data.entity.Author
import com.machiav3lli.fdroid.data.entity.Donate
import com.machiav3lli.fdroid.utils.extension.android.Android
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException

View File

@ -1,17 +1,17 @@
package com.machiav3lli.fdroid.index.v1
package com.machiav3lli.fdroid.data.index.v1
import android.content.res.Resources
import androidx.core.os.ConfigurationCompat.getLocales
import androidx.core.os.LocaleListCompat
import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.entity.Author
import com.machiav3lli.fdroid.entity.Donate
import com.machiav3lli.fdroid.entity.Screenshot
import com.machiav3lli.fdroid.index.v0.IndexV0Parser
import com.machiav3lli.fdroid.utility.extension.Quintuple
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.data.database.entity.Product
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.data.entity.Author
import com.machiav3lli.fdroid.data.entity.Donate
import com.machiav3lli.fdroid.data.entity.Screenshot
import com.machiav3lli.fdroid.data.index.v0.IndexV0Parser
import com.machiav3lli.fdroid.utils.extension.Quintuple
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.extension.text.nullIfEmpty
import okhttp3.internal.toLongOrDefault
internal fun IndexV1.App.toProduct(repositoryId: Long) = Product(

View File

@ -1,6 +1,6 @@
package com.machiav3lli.fdroid.index.v1
package com.machiav3lli.fdroid.data.index.v1
import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.utils.extension.text.nullIfEmpty
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.builtins.ListSerializer

View File

@ -1,13 +1,13 @@
package com.machiav3lli.fdroid.index.v1
package com.machiav3lli.fdroid.data.index.v1
import android.content.ContentValues
import android.database.sqlite.SQLiteDatabase
import com.machiav3lli.fdroid.database.Converters.toByteArray
import com.machiav3lli.fdroid.database.Converters.toReleases
import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.utility.extension.android.asSequence
import com.machiav3lli.fdroid.utility.extension.android.execWithResult
import com.machiav3lli.fdroid.data.database.Converters.toByteArray
import com.machiav3lli.fdroid.data.database.Converters.toReleases
import com.machiav3lli.fdroid.data.database.entity.Product
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.utils.extension.android.asSequence
import com.machiav3lli.fdroid.utils.extension.android.execWithResult
import java.io.ByteArrayOutputStream
import java.io.Closeable
import java.io.File

View File

@ -1,7 +1,7 @@
package com.machiav3lli.fdroid.index.v1
package com.machiav3lli.fdroid.data.index.v1
import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.data.database.entity.Product
import com.machiav3lli.fdroid.data.database.entity.Release
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream

View File

@ -1,11 +1,11 @@
package com.machiav3lli.fdroid.installer
package com.machiav3lli.fdroid.manager.installer
import android.content.Context
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.entity.InstallerType
import com.machiav3lli.fdroid.utility.amInstalled
import com.machiav3lli.fdroid.utility.getHasSystemInstallPermission
import com.machiav3lli.fdroid.utility.shellIsRoot
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.entity.InstallerType
import com.machiav3lli.fdroid.utils.amInstalled
import com.machiav3lli.fdroid.utils.getHasSystemInstallPermission
import com.machiav3lli.fdroid.utils.shellIsRoot
import org.koin.dsl.module
abstract class AppInstaller {

View File

@ -1,14 +1,14 @@
package com.machiav3lli.fdroid.installer
package com.machiav3lli.fdroid.manager.installer
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.content.Cache
import com.machiav3lli.fdroid.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.content.Cache.getReleaseFileUri
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.data.content.Cache
import com.machiav3lli.fdroid.data.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.data.content.Cache.getReleaseFileUri
import com.machiav3lli.fdroid.utils.extension.android.Android
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File
@ -28,7 +28,7 @@ class AppManagerInstaller(context: Context) : BaseInstaller(context) {
}
override suspend fun isInstalling(packageName: String): Boolean =
MainApplication.enqueuedInstalls.contains(packageName)
NeoApp.enqueuedInstalls.contains(packageName)
override suspend fun uninstall(packageName: String) = mDefaultUninstaller(packageName)
@ -38,7 +38,7 @@ class AppManagerInstaller(context: Context) : BaseInstaller(context) {
postInstall: () -> Unit
) =
withContext(Dispatchers.IO) {
MainApplication.enqueuedInstalls.add(packageName)
NeoApp.enqueuedInstalls.add(packageName)
val (uri, flags) = Pair(
Cache.getReleaseFile(context, cacheFile.name).getReleaseFileUri(context),
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION or Intent.FLAG_ACTIVITY_NEW_TASK
@ -50,8 +50,8 @@ class AppManagerInstaller(context: Context) : BaseInstaller(context) {
.setDataAndType(uri, "application/octet-stream")
.setFlags(flags)
)
MainApplication.db.getInstallTaskDao().delete(packageName)
MainApplication.enqueuedInstalls.remove(packageName)
NeoApp.db.getInstallTaskDao().delete(packageName)
NeoApp.enqueuedInstalls.remove(packageName)
postInstall()
}

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.installer
package com.machiav3lli.fdroid.manager.installer
import android.content.Context

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.installer
package com.machiav3lli.fdroid.manager.installer
interface InstallationEvents {
suspend fun install(packageLabel: String, cacheFileName: String, postInstall: () -> Unit = {})

View File

@ -1,15 +1,15 @@
package com.machiav3lli.fdroid.installer
package com.machiav3lli.fdroid.manager.installer
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.util.AndroidRuntimeException
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.content.Cache
import com.machiav3lli.fdroid.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.content.Cache.getReleaseFileUri
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.data.content.Cache
import com.machiav3lli.fdroid.data.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.data.content.Cache.getReleaseFileUri
import com.machiav3lli.fdroid.utils.extension.android.Android
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File
@ -30,7 +30,7 @@ class LegacyInstaller(context: Context) : BaseInstaller(context) {
}
override suspend fun isInstalling(packageName: String): Boolean =
MainApplication.enqueuedInstalls.contains(packageName)
NeoApp.enqueuedInstalls.contains(packageName)
override suspend fun uninstall(packageName: String) = mOldDefaultUninstaller(packageName)
@ -40,7 +40,7 @@ class LegacyInstaller(context: Context) : BaseInstaller(context) {
postInstall: () -> Unit
) =
withContext(Dispatchers.IO) {
MainApplication.enqueuedInstalls.add(packageName)
NeoApp.enqueuedInstalls.add(packageName)
val (uri, flags) = Pair(
Cache.getReleaseFile(context, cacheFile.name).getReleaseFileUri(context),
Intent.FLAG_GRANT_READ_URI_PERMISSION
@ -60,8 +60,8 @@ class LegacyInstaller(context: Context) : BaseInstaller(context) {
.setFlags(flags or Intent.FLAG_ACTIVITY_NEW_TASK)
)
}
MainApplication.db.getInstallTaskDao().delete(packageName)
MainApplication.enqueuedInstalls.remove(packageName)
NeoApp.db.getInstallTaskDao().delete(packageName)
NeoApp.enqueuedInstalls.remove(packageName)
postInstall()
}

View File

@ -1,16 +1,16 @@
package com.machiav3lli.fdroid.installer
package com.machiav3lli.fdroid.manager.installer
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import com.machiav3lli.fdroid.BuildConfig
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.content.Cache
import com.machiav3lli.fdroid.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.utility.Utils.quotePath
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.notifyFinishedInstall
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.data.content.Cache
import com.machiav3lli.fdroid.data.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.utils.Utils.quotePath
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.notifyFinishedInstall
import com.topjohnwu.superuser.Shell
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@ -110,7 +110,7 @@ class RootInstaller(context: Context) : BaseInstaller(context) {
}
override suspend fun isInstalling(packageName: String): Boolean =
MainApplication.enqueuedInstalls.contains(packageName)
NeoApp.enqueuedInstalls.contains(packageName)
override suspend fun uninstall(packageName: String) = mRootUninstaller(packageName)
@ -120,7 +120,7 @@ class RootInstaller(context: Context) : BaseInstaller(context) {
postInstall: () -> Unit
) =
withContext(Dispatchers.Default) {
MainApplication.enqueuedInstalls.add(packageName)
NeoApp.enqueuedInstalls.add(packageName)
if (Preferences[Preferences.Key.RootSessionInstaller]) {
Shell.cmd(cacheFile.sessionInstallCreate())
.submit {
@ -138,8 +138,8 @@ class RootInstaller(context: Context) : BaseInstaller(context) {
if (result.isSuccess)
Shell.cmd(cacheFile.deletePackage()).submit()
CoroutineScope(Dispatchers.Default).launch {
MainApplication.db.getInstallTaskDao().delete(packageName)
MainApplication.enqueuedInstalls.remove(packageName)
NeoApp.db.getInstallTaskDao().delete(packageName)
NeoApp.enqueuedInstalls.remove(packageName)
notifyFinishedInstall(context, packageName)
}
postInstall()
@ -152,8 +152,8 @@ class RootInstaller(context: Context) : BaseInstaller(context) {
if (result.isSuccess && Preferences[Preferences.Key.ReleasesCacheRetention] == 0)
Shell.cmd(cacheFile.deletePackage()).submit()
CoroutineScope(Dispatchers.Default).launch {
MainApplication.db.getInstallTaskDao().delete(packageName)
MainApplication.enqueuedInstalls.remove(packageName)
NeoApp.db.getInstallTaskDao().delete(packageName)
NeoApp.enqueuedInstalls.remove(packageName)
notifyFinishedInstall(context, packageName)
}
postInstall()

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.installer
package com.machiav3lli.fdroid.manager.installer
import android.app.PendingIntent
import android.content.Context
@ -9,11 +9,11 @@ import android.content.pm.PackageManager
import android.os.Build
import android.util.Log
import com.machiav3lli.fdroid.NeoActivity
import com.machiav3lli.fdroid.content.Cache
import com.machiav3lli.fdroid.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.service.InstallerReceiver
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.data.content.Cache
import com.machiav3lli.fdroid.data.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.manager.service.InstallerReceiver
import com.machiav3lli.fdroid.utils.extension.android.Android
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.installer
package com.machiav3lli.fdroid.manager.installer
import android.app.PendingIntent
import android.content.Context
@ -7,11 +7,11 @@ import android.content.pm.PackageInstaller
import android.net.Uri
import android.os.Build
import android.util.Log
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.content.Cache
import com.machiav3lli.fdroid.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.content.Cache.getReleaseFileUri
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.data.content.Cache
import com.machiav3lli.fdroid.data.content.Cache.getPackageArchiveInfo
import com.machiav3lli.fdroid.data.content.Cache.getReleaseFileUri
import com.machiav3lli.fdroid.utils.extension.android.Android
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File
@ -27,7 +27,7 @@ class SystemInstaller(context: Context) : BaseInstaller(context) {
postInstall: () -> Unit
) =
withContext(Dispatchers.IO) {
MainApplication.enqueuedInstalls.add(packageName)
NeoApp.enqueuedInstalls.add(packageName)
val packageInstaller = context.packageManager.packageInstaller
val packageUri = Cache.getReleaseFile(context, cacheFile.name).getReleaseFileUri(context)
@ -59,8 +59,8 @@ class SystemInstaller(context: Context) : BaseInstaller(context) {
session.commit(statusReceiver)
MainApplication.db.getInstallTaskDao().delete(packageName)
MainApplication.enqueuedInstalls.remove(packageName)
NeoApp.db.getInstallTaskDao().delete(packageName)
NeoApp.enqueuedInstalls.remove(packageName)
postInstall()
}
@ -99,7 +99,7 @@ class SystemInstaller(context: Context) : BaseInstaller(context) {
}
override suspend fun isInstalling(packageName: String): Boolean {
return MainApplication.enqueuedInstalls.contains(packageName)
return NeoApp.enqueuedInstalls.contains(packageName)
}
override suspend fun uninstall(packageName: String) {

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.network
package com.machiav3lli.fdroid.manager.network
import android.net.Uri
import android.util.Log
@ -18,10 +18,10 @@ import com.machiav3lli.fdroid.QUERY_LOCALE
import com.machiav3lli.fdroid.QUERY_METADATA_ICON
import com.machiav3lli.fdroid.QUERY_PACKAGE_NAME
import com.machiav3lli.fdroid.QUERY_SCREENSHOT
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.entity.Screenshot
import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.data.entity.Screenshot
import com.machiav3lli.fdroid.utils.extension.text.nullIfEmpty
import okhttp3.Cache
import okhttp3.Call
import okhttp3.ConnectionPool

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.network
package com.machiav3lli.fdroid.manager.network
sealed class DownloadResult<T>(
val progress: Long? = 0,

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.network
package com.machiav3lli.fdroid.manager.network
import android.app.DownloadManager
import android.content.Context
@ -12,10 +12,10 @@ import com.machiav3lli.fdroid.BuildConfig
import com.machiav3lli.fdroid.CLIENT_CONNECT_TIMEOUT_MS
import com.machiav3lli.fdroid.POOL_DEFAULT_KEEP_ALIVE_DURATION_M
import com.machiav3lli.fdroid.POOL_DEFAULT_MAX_IDLE_CONNECTIONS
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.service.worker.DownloadTask
import com.machiav3lli.fdroid.utility.dmReasonToHttpResponse
import com.machiav3lli.fdroid.utility.extension.text.formatDateTime
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.manager.service.worker.DownloadTask
import com.machiav3lli.fdroid.utils.dmReasonToHttpResponse
import com.machiav3lli.fdroid.utils.extension.text.formatDateTime
import io.ktor.client.HttpClient
import io.ktor.client.engine.ProxyBuilder
import io.ktor.client.engine.okhttp.OkHttp

View File

@ -1,12 +1,12 @@
package com.machiav3lli.fdroid.network
package com.machiav3lli.fdroid.manager.network
import android.util.Log
import com.machiav3lli.fdroid.BuildConfig
import com.machiav3lli.fdroid.CLIENT_CONNECT_TIMEOUT
import com.machiav3lli.fdroid.CLIENT_READ_TIMEOUT
import com.machiav3lli.fdroid.CLIENT_WRITE_TIMEOUT
import com.machiav3lli.fdroid.database.entity.ExodusData
import com.machiav3lli.fdroid.database.entity.Trackers
import com.machiav3lli.fdroid.data.database.entity.ExodusData
import com.machiav3lli.fdroid.data.database.entity.Trackers
import io.ktor.client.HttpClient
import io.ktor.client.engine.okhttp.OkHttp
import io.ktor.client.request.HttpRequestBuilder

View File

@ -1,11 +1,11 @@
package com.machiav3lli.fdroid.service
package com.machiav3lli.fdroid.manager.service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.machiav3lli.fdroid.ARG_PACKAGE_NAME
import com.machiav3lli.fdroid.ARG_REPOSITORY_ID
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.NeoApp
class ActionReceiver : BroadcastReceiver() {
@ -22,25 +22,25 @@ class ActionReceiver : BroadcastReceiver() {
when (intent.action) {
COMMAND_CANCEL_DOWNLOAD -> {
val packageName = intent.getStringExtra(ARG_PACKAGE_NAME)
MainApplication.wm.cancelDownload(packageName)
NeoApp.wm.cancelDownload(packageName)
}
COMMAND_CANCEL_DOWNLOAD_ALL -> {
MainApplication.wm.cancelDownloadAll()
NeoApp.wm.cancelDownloadAll()
}
COMMAND_CANCEL_SYNC -> {
val repoId = intent.getLongExtra(ARG_REPOSITORY_ID, -1)
MainApplication.wm.cancelSync(repoId)
NeoApp.wm.cancelSync(repoId)
}
COMMAND_CANCEL_SYNC_ALL -> {
MainApplication.wm.cancelSyncAll()
NeoApp.wm.cancelSyncAll()
}
COMMAND_CANCEL_INSTALL -> {
intent.getStringExtra(ARG_PACKAGE_NAME)
?.let { packageName -> MainApplication.wm.cancelInstall(packageName) }
?.let { packageName -> NeoApp.wm.cancelInstall(packageName) }
}
else -> {}

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service
package com.machiav3lli.fdroid.manager.service
import android.app.PendingIntent
import android.content.BroadcastReceiver
@ -8,8 +8,8 @@ import android.content.pm.PackageInstaller
import android.net.Uri
import com.machiav3lli.fdroid.ARG_PACKAGE_NAME
import com.machiav3lli.fdroid.NeoActivity
import com.machiav3lli.fdroid.utility.Utils
import com.machiav3lli.fdroid.utility.notifyStatus
import com.machiav3lli.fdroid.utils.Utils
import com.machiav3lli.fdroid.utils.notifyStatus
/**
* Runs during or after a PackageInstaller session in order to handle completion, failure, or

View File

@ -1,16 +1,16 @@
package com.machiav3lli.fdroid.service
package com.machiav3lli.fdroid.manager.service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.entity.Order
import com.machiav3lli.fdroid.entity.Section
import com.machiav3lli.fdroid.utility.Utils.toInstalledItem
import com.machiav3lli.fdroid.utility.displayUpdatesNotification
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.getLaunchActivities
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.entity.Order
import com.machiav3lli.fdroid.data.entity.Section
import com.machiav3lli.fdroid.utils.Utils.toInstalledItem
import com.machiav3lli.fdroid.utils.displayUpdatesNotification
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.getLaunchActivities
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@ -36,14 +36,14 @@ class PackageChangedReceiver : BroadcastReceiver() {
}
val launcherActivities = context.packageManager.getLaunchActivities(packageName)
CoroutineScope(Dispatchers.IO).launch {
if (packageInfo != null) MainApplication.db.getInstalledDao().upsert(
if (packageInfo != null) NeoApp.db.getInstalledDao().upsert(
packageInfo.toInstalledItem(launcherActivities)
)
else MainApplication.db.getInstalledDao().delete(packageName)
else NeoApp.db.getInstalledDao().delete(packageName)
// Update updates notification
if (Preferences[Preferences.Key.UpdateNotify]) context.displayUpdatesNotification(
MainApplication.db.getProductDao()
NeoApp.db.getProductDao()
.queryObject(
installed = true,
updates = true,

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service
package com.machiav3lli.fdroid.manager.service
import android.app.NotificationChannel
import android.app.NotificationManager
@ -17,28 +17,28 @@ import androidx.work.WorkManager
import androidx.work.WorkQuery
import com.machiav3lli.fdroid.ARG_RESULT_CODE
import com.machiav3lli.fdroid.ARG_VALIDATION_ERROR
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.NOTIFICATION_CHANNEL_DOWNLOADING
import com.machiav3lli.fdroid.NOTIFICATION_CHANNEL_SYNCING
import com.machiav3lli.fdroid.NOTIFICATION_CHANNEL_UPDATES
import com.machiav3lli.fdroid.NOTIFICATION_CHANNEL_VULNS
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.TAG_SYNC_ONETIME
import com.machiav3lli.fdroid.database.entity.InstallTask
import com.machiav3lli.fdroid.entity.ProductItem
import com.machiav3lli.fdroid.service.worker.DownloadState
import com.machiav3lli.fdroid.service.worker.DownloadWorker
import com.machiav3lli.fdroid.service.worker.InstallWorker
import com.machiav3lli.fdroid.service.worker.SyncState
import com.machiav3lli.fdroid.service.worker.SyncWorker
import com.machiav3lli.fdroid.service.worker.ValidationError
import com.machiav3lli.fdroid.utility.Utils
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.work.DownloadStateHandler
import com.machiav3lli.fdroid.work.DownloadsTracker
import com.machiav3lli.fdroid.work.SyncStateHandler
import com.machiav3lli.fdroid.work.SyncsTracker
import com.machiav3lli.fdroid.work.WorkStateHolder
import com.machiav3lli.fdroid.data.database.entity.InstallTask
import com.machiav3lli.fdroid.data.entity.ProductItem
import com.machiav3lli.fdroid.manager.service.worker.DownloadState
import com.machiav3lli.fdroid.manager.service.worker.DownloadWorker
import com.machiav3lli.fdroid.manager.service.worker.InstallWorker
import com.machiav3lli.fdroid.manager.service.worker.SyncState
import com.machiav3lli.fdroid.manager.service.worker.SyncWorker
import com.machiav3lli.fdroid.manager.service.worker.ValidationError
import com.machiav3lli.fdroid.utils.Utils
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.manager.work.DownloadStateHandler
import com.machiav3lli.fdroid.manager.work.DownloadsTracker
import com.machiav3lli.fdroid.manager.work.SyncStateHandler
import com.machiav3lli.fdroid.manager.work.SyncsTracker
import com.machiav3lli.fdroid.manager.work.WorkStateHolder
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
@ -90,7 +90,7 @@ class WorkerManager(appContext: Context) : KoinComponent {
setupWorkInfoCollection()
monitorWorkProgress()
scope.launch {
MainApplication.db.getInstallTaskDao()
NeoApp.db.getInstallTaskDao()
.getAllFlow() // Add similar table for DownloadTasks
.distinctUntilChanged()
.collectLatest { tasks ->
@ -167,7 +167,7 @@ class WorkerManager(appContext: Context) : KoinComponent {
workManager.cancelAllWorkByTag(it)
prune()
}
MainApplication.setProgress() // TODO re-consider
NeoApp.setProgress() // TODO re-consider
}
fun cancelSync(repoId: Long = -1) {
@ -184,7 +184,7 @@ class WorkerManager(appContext: Context) : KoinComponent {
workManager.cancelAllWorkByTag(it)
prune()
}
MainApplication.setProgress() // TODO re-consider
NeoApp.setProgress() // TODO re-consider
}
fun cancelDownload(packageName: String?) {
@ -201,7 +201,7 @@ class WorkerManager(appContext: Context) : KoinComponent {
DownloadWorker::class.qualifiedName?.let {
workManager.cancelUniqueWork("Installer_$packageName")
scope.launch {
MainApplication.db.getInstallTaskDao().delete(packageName)
NeoApp.db.getInstallTaskDao().delete(packageName)
}
//prune()
}
@ -216,13 +216,13 @@ class WorkerManager(appContext: Context) : KoinComponent {
productItems.map { productItem ->
Triple(
productItem.packageName,
MainApplication.db.getInstalledDao().get(productItem.packageName),
MainApplication.db.getRepositoryDao().get(productItem.repositoryId)
NeoApp.db.getInstalledDao().get(productItem.packageName),
NeoApp.db.getRepositoryDao().get(productItem.repositoryId)
)
}
.filter { (_, installed, repo) -> (enforce || installed != null) && repo != null }
.forEach { (packageName, installed, repo) ->
val productRepository = MainApplication.db.getProductDao().get(packageName)
val productRepository = NeoApp.db.getProductDao().get(packageName)
.filter { product -> product.repositoryId == repo!!.id }
.map { product -> Pair(product, repo!!) }
scope.launch(Dispatchers.IO) {
@ -287,12 +287,12 @@ class WorkerManager(appContext: Context) : KoinComponent {
companion object {
private val syncNotificationBuilder by lazy {
NotificationCompat
.Builder(MainApplication.context, NOTIFICATION_CHANNEL_SYNCING)
.Builder(NeoApp.context, NOTIFICATION_CHANNEL_SYNCING)
.setGroup(NOTIFICATION_CHANNEL_SYNCING)
.setGroupSummary(true)
.setSortKey("0")
.setSmallIcon(R.drawable.ic_sync)
.setContentTitle(MainApplication.context.getString(R.string.syncing))
.setContentTitle(NeoApp.context.getString(R.string.syncing))
.setOngoing(true)
.setSilent(true)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
@ -300,11 +300,11 @@ class WorkerManager(appContext: Context) : KoinComponent {
.setCategory(NotificationCompat.CATEGORY_PROGRESS)
.addAction(
R.drawable.ic_cancel,
MainApplication.context.getString(R.string.cancel_all),
NeoApp.context.getString(R.string.cancel_all),
PendingIntent.getBroadcast(
MainApplication.context,
NeoApp.context,
"<SYNC_ALL>".hashCode(),
Intent(MainApplication.context, ActionReceiver::class.java).apply {
Intent(NeoApp.context, ActionReceiver::class.java).apply {
action = ActionReceiver.COMMAND_CANCEL_SYNC_ALL
},
PendingIntent.FLAG_IMMUTABLE
@ -314,7 +314,7 @@ class WorkerManager(appContext: Context) : KoinComponent {
private val downloadNotificationBuilder by lazy {
NotificationCompat
.Builder(MainApplication.context, NOTIFICATION_CHANNEL_DOWNLOADING)
.Builder(NeoApp.context, NOTIFICATION_CHANNEL_DOWNLOADING)
.setGroup(NOTIFICATION_CHANNEL_DOWNLOADING)
.setGroupSummary(true)
.setSortKey("0")
@ -326,11 +326,11 @@ class WorkerManager(appContext: Context) : KoinComponent {
.setCategory(NotificationCompat.CATEGORY_PROGRESS)
.addAction(
R.drawable.ic_cancel,
MainApplication.context.getString(R.string.cancel_all),
NeoApp.context.getString(R.string.cancel_all),
PendingIntent.getBroadcast(
MainApplication.context,
NeoApp.context,
"<DOWNLOAD_ALL>".hashCode(),
Intent(MainApplication.context, ActionReceiver::class.java).apply {
Intent(NeoApp.context, ActionReceiver::class.java).apply {
action = ActionReceiver.COMMAND_CANCEL_DOWNLOAD_ALL
},
PendingIntent.FLAG_IMMUTABLE

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service.worker
package com.machiav3lli.fdroid.manager.service.worker
import android.app.Notification
import android.app.NotificationChannel
@ -29,23 +29,23 @@ import com.machiav3lli.fdroid.ARG_EXCEPTION
import com.machiav3lli.fdroid.ARG_REPOSITORY_NAME
import com.machiav3lli.fdroid.ARG_SUCCESS
import com.machiav3lli.fdroid.ARG_SYNC_REQUEST
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.NOTIFICATION_CHANNEL_SYNCING
import com.machiav3lli.fdroid.NeoActivity
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.TAG_BATCH_SYNC_ONETIME
import com.machiav3lli.fdroid.TAG_BATCH_SYNC_PERIODIC
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.entity.AntiFeature
import com.machiav3lli.fdroid.entity.Order
import com.machiav3lli.fdroid.entity.Section
import com.machiav3lli.fdroid.service.ActionReceiver
import com.machiav3lli.fdroid.service.InstallerReceiver
import com.machiav3lli.fdroid.utility.displayUpdatesNotification
import com.machiav3lli.fdroid.utility.displayVulnerabilitiesNotification
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.extension.takeUntilSignal
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.entity.Product
import com.machiav3lli.fdroid.data.entity.AntiFeature
import com.machiav3lli.fdroid.data.entity.Order
import com.machiav3lli.fdroid.data.entity.Section
import com.machiav3lli.fdroid.manager.service.ActionReceiver
import com.machiav3lli.fdroid.manager.service.InstallerReceiver
import com.machiav3lli.fdroid.utils.displayUpdatesNotification
import com.machiav3lli.fdroid.utils.displayVulnerabilitiesNotification
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.extension.takeUntilSignal
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.MutableStateFlow
@ -87,7 +87,7 @@ class BatchSyncWorker(
private suspend fun handleSync(): Boolean = supervisorScope {
val finishSignal = MutableStateFlow(false)
val selectedRepos = MainApplication.db.getRepositoryDao().getAll()
val selectedRepos = NeoApp.db.getRepositoryDao().getAll()
.filter { it.enabled }
totalRepositories = selectedRepos.size
@ -171,7 +171,7 @@ class BatchSyncWorker(
private fun handleCompletion(errors: String) {
Log.e(this::class.java.simpleName, errors)
MainApplication.db.getProductDao()
NeoApp.db.getProductDao()
.queryObject(
installed = true,
updates = true,
@ -187,10 +187,10 @@ class BatchSyncWorker(
true
)
if (Preferences[Preferences.Key.InstallAfterSync]) {
MainApplication.wm.update(*result.toTypedArray())
NeoApp.wm.update(*result.toTypedArray())
}
}
MainApplication.db.getProductDao()
NeoApp.db.getProductDao()
.queryObject(
installed = true,
updates = false,
@ -199,7 +199,7 @@ class BatchSyncWorker(
ascending = true,
).filter { product ->
product.antiFeatures.contains(AntiFeature.KNOWN_VULN.key)
&& MainApplication.db.getExtrasDao()[product.packageName]?.ignoreVulns != true
&& NeoApp.db.getExtrasDao()[product.packageName]?.ignoreVulns != true
}.let { installedWithVulns ->
if (installedWithVulns.isNotEmpty())
context.displayVulnerabilitiesNotification(
@ -228,11 +228,11 @@ class BatchSyncWorker(
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val cancelAllIntent = Intent(MainApplication.context, ActionReceiver::class.java).apply {
val cancelAllIntent = Intent(NeoApp.context, ActionReceiver::class.java).apply {
action = ActionReceiver.COMMAND_CANCEL_SYNC_ALL
}
val cancelAllPendingIntent = PendingIntent.getBroadcast(
MainApplication.context,
NeoApp.context,
"batch_sync_all".hashCode(),
cancelAllIntent,
PendingIntent.FLAG_IMMUTABLE

View File

@ -1,10 +1,10 @@
package com.machiav3lli.fdroid.service.worker
package com.machiav3lli.fdroid.manager.service.worker
import androidx.work.WorkInfo
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.database.entity.InstallTask
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.entity.ActionState
import com.machiav3lli.fdroid.data.database.entity.InstallTask
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.data.entity.ActionState
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlin.math.roundToInt

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service.worker
package com.machiav3lli.fdroid.manager.service.worker
import android.app.DownloadManager
import android.content.Context
@ -31,23 +31,23 @@ import com.machiav3lli.fdroid.ARG_STARTED
import com.machiav3lli.fdroid.ARG_TOTAL
import com.machiav3lli.fdroid.ARG_URL
import com.machiav3lli.fdroid.ARG_VALIDATION_ERROR
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.content.Cache
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.entity.Release
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.network.DownloadSizeException
import com.machiav3lli.fdroid.network.Downloader
import com.machiav3lli.fdroid.utility.Utils
import com.machiav3lli.fdroid.utility.copyTo
import com.machiav3lli.fdroid.utility.downloadNotificationBuilder
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.extension.android.singleSignature
import com.machiav3lli.fdroid.utility.extension.android.versionCodeCompat
import com.machiav3lli.fdroid.utility.extension.text.hex
import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.utility.getDownloadFolder
import com.machiav3lli.fdroid.utility.isDownloadExternal
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.data.content.Cache
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.entity.Release
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.manager.network.DownloadSizeException
import com.machiav3lli.fdroid.manager.network.Downloader
import com.machiav3lli.fdroid.utils.Utils
import com.machiav3lli.fdroid.utils.copyTo
import com.machiav3lli.fdroid.utils.downloadNotificationBuilder
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.extension.android.singleSignature
import com.machiav3lli.fdroid.utils.extension.android.versionCodeCompat
import com.machiav3lli.fdroid.utils.extension.text.hex
import com.machiav3lli.fdroid.utils.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.utils.getDownloadFolder
import com.machiav3lli.fdroid.utils.isDownloadExternal
import io.ktor.http.HttpStatusCode
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.coroutineScope
@ -297,7 +297,7 @@ class DownloadWorker(
.addTag("download_$packageName")
.build()
MainApplication.wm.workManager
NeoApp.wm.workManager
.enqueueUniqueWork(
"$packageName-${repository.id}-${release.version}",
ExistingWorkPolicy.REPLACE,

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service.worker
package com.machiav3lli.fdroid.manager.service.worker
import android.content.Context
import android.util.Log
@ -11,11 +11,11 @@ import androidx.work.workDataOf
import com.machiav3lli.fdroid.ARG_PACKAGE_NAME
import com.machiav3lli.fdroid.ARG_VERSION_CODE
import com.machiav3lli.fdroid.ARG_WORK_TYPE
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.entity.ExodusInfo
import com.machiav3lli.fdroid.database.entity.Tracker
import com.machiav3lli.fdroid.network.RExodusAPI
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.entity.ExodusInfo
import com.machiav3lli.fdroid.data.database.entity.Tracker
import com.machiav3lli.fdroid.manager.network.RExodusAPI
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.koin.android.annotation.KoinWorker
@ -51,7 +51,7 @@ class ExodusWorker(
try {
val trackerList = repoExodusAPI.getTrackers()
// TODO **conditionally** update DB with the trackers
MainApplication.db.getTrackerDao().upsert(
NeoApp.db.getTrackerDao().upsert(
*trackerList.trackers
.map { (key, value) ->
Tracker(
@ -88,7 +88,7 @@ class ExodusWorker(
?: ExodusInfo()
val exodusInfo = latestExodusApp.toExodusInfo(packageName)
MainApplication.db.getExodusInfoDao().upsert(exodusInfo)
NeoApp.db.getExodusInfoDao().upsert(exodusInfo)
} catch (e: Exception) {
Log.e(this::javaClass.name, "Failed fetching exodus info", e)
}
@ -104,7 +104,7 @@ class ExodusWorker(
ARG_WORK_TYPE to WorkType.TRACKERS.ordinal,
)
MainApplication.wm.workManager.enqueueUniqueWork(
NeoApp.wm.workManager.enqueueUniqueWork(
WorkType.TRACKERS.name,
ExistingWorkPolicy.REPLACE,
OneTimeWorkRequestBuilder<ExodusWorker>()
@ -121,7 +121,7 @@ class ExodusWorker(
ARG_VERSION_CODE to versionCode,
)
MainApplication.wm.workManager.enqueueUniqueWork(
NeoApp.wm.workManager.enqueueUniqueWork(
WorkType.TRACKERS.name,
ExistingWorkPolicy.REPLACE,
OneTimeWorkRequestBuilder<ExodusWorker>()

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service.worker
package com.machiav3lli.fdroid.manager.service.worker
sealed class InstallState {
data object Pending : InstallState()

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service.worker
package com.machiav3lli.fdroid.manager.service.worker
import android.content.Context
import android.content.pm.ServiceInfo
@ -16,11 +16,11 @@ import com.machiav3lli.fdroid.ARG_FILE_NAME
import com.machiav3lli.fdroid.ARG_NAME
import com.machiav3lli.fdroid.ARG_PACKAGE_NAME
import com.machiav3lli.fdroid.ARG_REPOSITORY_ID
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.database.entity.InstallTask
import com.machiav3lli.fdroid.installer.LegacyInstaller
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.utility.installNotificationBuilder
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.data.database.entity.InstallTask
import com.machiav3lli.fdroid.manager.installer.LegacyInstaller
import com.machiav3lli.fdroid.utils.extension.android.Android
import com.machiav3lli.fdroid.utils.installNotificationBuilder
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.coroutineScope
@ -37,7 +37,7 @@ class InstallWorker(
) : CoroutineWorker(context, params) {
private lateinit var currentTask: InstallTask
private val installState = MutableStateFlow<InstallState>(InstallState.Pending)
private val installerInstance = MainApplication.installer
private val installerInstance = NeoApp.installer
private val installJob = Job()
override suspend fun doWork(): Result = withContext(Dispatchers.IO + installJob) {
@ -59,7 +59,7 @@ class InstallWorker(
private suspend fun handleInstall(label: String, fileName: String): Result? = coroutineScope {
var result: Result? = null
currentTask = MainApplication.db.getInstallTaskDao()
currentTask = NeoApp.db.getInstallTaskDao()
.get(fileName) ?: return@coroutineScope null
while (installState.value !is InstallState.Completed && installState.value !is InstallState.Failed) {
when (installState.value) {
@ -67,8 +67,8 @@ class InstallWorker(
if (!installerInstance.isInstalling(currentTask.packageName)) {
installState.value = InstallState.Installing
try {
if (MainApplication.mainActivity != null && installerInstance is LegacyInstaller) {
MainApplication.mainActivity?.withResumed {
if (NeoApp.mainActivity != null && installerInstance is LegacyInstaller) {
NeoApp.mainActivity?.withResumed {
launch {
installerInstance.install(label, fileName) {
installState.value = InstallState.Completed
@ -152,7 +152,7 @@ class InstallWorker(
.addTag("installer")
.build()
MainApplication.wm.workManager
NeoApp.wm.workManager
.enqueueUniqueWork(
"Installer_$packageName",
if (enforce) ExistingWorkPolicy.REPLACE

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service.worker
package com.machiav3lli.fdroid.manager.service.worker
class SyncTask(
val repoId: Long,

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.service.worker
package com.machiav3lli.fdroid.manager.service.worker
import android.app.PendingIntent
import android.content.Context
@ -27,18 +27,18 @@ import com.machiav3lli.fdroid.ARG_SUCCESS
import com.machiav3lli.fdroid.ARG_SYNC_REQUEST
import com.machiav3lli.fdroid.ARG_TOTAL
import com.machiav3lli.fdroid.EXODUS_TRACKERS_SYNC
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.NOTIFICATION_CHANNEL_SYNCING
import com.machiav3lli.fdroid.NOTIFICATION_ID_SYNCING
import com.machiav3lli.fdroid.NeoActivity
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.TAG_SYNC_ONETIME
import com.machiav3lli.fdroid.TAG_SYNC_PERIODIC
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.index.RepositoryUpdater
import com.machiav3lli.fdroid.service.ActionReceiver
import com.machiav3lli.fdroid.utility.extension.android.Android
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.data.index.RepositoryUpdater
import com.machiav3lli.fdroid.manager.service.ActionReceiver
import com.machiav3lli.fdroid.utils.extension.android.Android
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.future.future
@ -67,7 +67,7 @@ class SyncWorker(
}
private fun CoroutineScope.handleSync(task: SyncTask): Result {
val repository = MainApplication.db.getRepositoryDao().get(task.repoId)
val repository = NeoApp.db.getRepositoryDao().get(task.repoId)
Log.i(this::class.java.simpleName, "sync repository: ${task.repoId}")
if (repository != null && repository.enabled && task.repoId != EXODUS_TRACKERS_SYNC) {
@ -138,11 +138,11 @@ class SyncWorker(
)
val cancelAllIntent =
Intent(MainApplication.context, ActionReceiver::class.java).apply {
Intent(NeoApp.context, ActionReceiver::class.java).apply {
action = ActionReceiver.COMMAND_CANCEL_SYNC_ALL
}
val cancelAllPendingIntent = PendingIntent.getBroadcast(
MainApplication.context,
NeoApp.context,
"<ALL>".hashCode(),
cancelAllIntent,
PendingIntent.FLAG_IMMUTABLE
@ -259,7 +259,7 @@ class SyncWorker(
ARG_REPOSITORY_NAME to repoName,
)
MainApplication.wm.workManager.enqueueUniqueWork(
NeoApp.wm.workManager.enqueueUniqueWork(
"sync_$repoId",
ExistingWorkPolicy.KEEP,
OneTimeWorkRequestBuilder<SyncWorker>()
@ -273,26 +273,26 @@ class SyncWorker(
suspend fun enableRepo(repository: Repository, enabled: Boolean): Boolean =
withContext(Dispatchers.IO) {
MainApplication.db.getRepositoryDao().put(repository.enable(enabled))
NeoApp.db.getRepositoryDao().put(repository.enable(enabled))
val isEnabled = !repository.enabled && repository.lastModified.isEmpty()
val cooldownedSync = System.currentTimeMillis() -
MainApplication.latestSyncs.getOrDefault(repository.id, 0L) >=
NeoApp.latestSyncs.getOrDefault(repository.id, 0L) >=
10_000L
if (enabled && isEnabled && cooldownedSync) {
MainApplication.latestSyncs[repository.id] = System.currentTimeMillis()
NeoApp.latestSyncs[repository.id] = System.currentTimeMillis()
enqueueManual(Pair(repository.id, repository.name))
} else {
MainApplication.wm.cancelSync(repository.id)
MainApplication.db.cleanUp(Pair(repository.id, false))
NeoApp.wm.cancelSync(repository.id)
NeoApp.db.cleanUp(Pair(repository.id, false))
}
true
}
suspend fun deleteRepo(repoId: Long): Boolean = withContext(Dispatchers.IO) {
val repository = MainApplication.db.getRepositoryDao().get(repoId)
val repository = NeoApp.db.getRepositoryDao().get(repoId)
repository != null && run {
enableRepo(repository, false)
MainApplication.db.getRepositoryDao().deleteById(repoId)
NeoApp.db.getRepositoryDao().deleteById(repoId)
true
}
}

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.work
package com.machiav3lli.fdroid.manager.work
import android.Manifest
import android.app.PendingIntent
@ -11,17 +11,17 @@ import androidx.core.app.NotificationManagerCompat
import androidx.work.Data
import androidx.work.WorkInfo
import com.machiav3lli.fdroid.ARG_PACKAGE_NAME
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.entity.Downloaded
import com.machiav3lli.fdroid.service.ActionReceiver
import com.machiav3lli.fdroid.service.InstallerReceiver
import com.machiav3lli.fdroid.service.worker.DownloadState
import com.machiav3lli.fdroid.service.worker.DownloadWorker
import com.machiav3lli.fdroid.utility.downloadNotificationBuilder
import com.machiav3lli.fdroid.utility.extension.text.formatSize
import com.machiav3lli.fdroid.utility.updateWithError
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.entity.Downloaded
import com.machiav3lli.fdroid.manager.service.ActionReceiver
import com.machiav3lli.fdroid.manager.service.InstallerReceiver
import com.machiav3lli.fdroid.manager.service.worker.DownloadState
import com.machiav3lli.fdroid.manager.service.worker.DownloadWorker
import com.machiav3lli.fdroid.utils.downloadNotificationBuilder
import com.machiav3lli.fdroid.utils.extension.text.formatSize
import com.machiav3lli.fdroid.utils.updateWithError
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.consumeAsFlow
@ -54,7 +54,7 @@ class DownloadStateHandler(
}
private suspend fun handleDownloadState(key: String, state: DownloadState) {
MainApplication.db.getDownloadedDao().upsert(
NeoApp.db.getDownloadedDao().upsert(
Downloaded(
packageName = state.packageName,
version = state.version,
@ -67,7 +67,7 @@ class DownloadStateHandler(
when (state) {
is DownloadState.Success -> scope.launch {
MainApplication.db.getInstallTaskDao()
NeoApp.db.getInstallTaskDao()
.put(state.toInstallTask())
downloadStates.updateState(key, null)
}
@ -98,10 +98,10 @@ class DownloadStateHandler(
}
private fun updateNotification(event: UpdateEvent) {
val appContext = MainApplication.context
val appContext = NeoApp.context
val builder = createNotificationBuilder(event.state)
if (event.state is DownloadState.Success || event.state is DownloadState.Cancel) {
MainApplication.wm.notificationManager.cancel(event.key.hashCode())
NeoApp.wm.notificationManager.cancel(event.key.hashCode())
} else if (ActivityCompat.checkSelfPermission(
appContext,
Manifest.permission.POST_NOTIFICATIONS
@ -110,7 +110,7 @@ class DownloadStateHandler(
}
private fun createNotificationBuilder(state: DownloadState): NotificationCompat.Builder {
val appContext = MainApplication.context
val appContext = NeoApp.context
val notificationBuilder = appContext.downloadNotificationBuilder()
val cancelIntent = Intent(appContext, ActionReceiver::class.java).apply {

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.work
package com.machiav3lli.fdroid.manager.work
import android.Manifest
import android.content.pm.PackageManager
@ -7,12 +7,12 @@ import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.work.Data
import androidx.work.WorkInfo
import com.machiav3lli.fdroid.MainApplication
import com.machiav3lli.fdroid.NeoApp
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.service.worker.SyncState
import com.machiav3lli.fdroid.service.worker.SyncWorker
import com.machiav3lli.fdroid.utility.syncNotificationBuilder
import com.machiav3lli.fdroid.utility.updateProgress
import com.machiav3lli.fdroid.manager.service.worker.SyncState
import com.machiav3lli.fdroid.manager.service.worker.SyncWorker
import com.machiav3lli.fdroid.utils.syncNotificationBuilder
import com.machiav3lli.fdroid.utils.updateProgress
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.consumeAsFlow
@ -56,11 +56,11 @@ class SyncStateHandler(
fun updateState(key: String, state: SyncState?) {
syncStates.updateState(key, state)
if (state == null)
MainApplication.wm.notificationManager.cancel(key.hashCode())
NeoApp.wm.notificationManager.cancel(key.hashCode())
}
private fun updateNotification(event: UpdateEvent) {
val appContext = MainApplication.context
val appContext = NeoApp.context
val builder = createNotificationBuilder(event.state)
if (ActivityCompat.checkSelfPermission(
appContext,
@ -74,7 +74,7 @@ class SyncStateHandler(
}
private fun createNotificationBuilder(state: SyncState): NotificationCompat.Builder {
val appContext = MainApplication.context
val appContext = NeoApp.context
val notificationBuilder = appContext.syncNotificationBuilder()
return when (state) {

View File

@ -1,4 +1,4 @@
package com.machiav3lli.fdroid.work
package com.machiav3lli.fdroid.manager.work
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow

View File

@ -29,8 +29,8 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.machiav3lli.fdroid.entity.ActionState
import com.machiav3lli.fdroid.entity.ComponentState
import com.machiav3lli.fdroid.data.entity.ActionState
import com.machiav3lli.fdroid.data.entity.ComponentState
@Composable
fun ActionButton(

View File

@ -19,13 +19,13 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.database.entity.Downloaded
import com.machiav3lli.fdroid.database.entity.IconDetails
import com.machiav3lli.fdroid.database.entity.Installed
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.entity.ProductItem
import com.machiav3lli.fdroid.network.createIconUri
import com.machiav3lli.fdroid.service.worker.DownloadState
import com.machiav3lli.fdroid.data.database.entity.Downloaded
import com.machiav3lli.fdroid.data.database.entity.IconDetails
import com.machiav3lli.fdroid.data.database.entity.Installed
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.data.entity.ProductItem
import com.machiav3lli.fdroid.manager.network.createIconUri
import com.machiav3lli.fdroid.manager.service.worker.DownloadState
import com.machiav3lli.fdroid.ui.components.appsheet.DownloadProgress
import com.machiav3lli.fdroid.ui.compose.icons.Phosphor
import com.machiav3lli.fdroid.ui.compose.icons.phosphor.Eraser

View File

@ -38,7 +38,7 @@ import com.machiav3lli.fdroid.ui.compose.icons.phosphor.Check
import com.machiav3lli.fdroid.ui.compose.icons.phosphor.CheckCircle
import com.machiav3lli.fdroid.ui.compose.icons.phosphor.Circle
import com.machiav3lli.fdroid.ui.compose.utils.addIf
import com.machiav3lli.fdroid.utility.extension.android.launchView
import com.machiav3lli.fdroid.utils.extension.android.launchView
private enum class SelectionState { Unselected, Selected }

View File

@ -20,8 +20,8 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.entity.Permission
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.entity.Permission
import com.machiav3lli.fdroid.ui.compose.icons.Phosphor
import com.machiav3lli.fdroid.ui.compose.icons.phosphor.X

View File

@ -16,9 +16,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.entity.ProductItem
import com.machiav3lli.fdroid.network.createIconUri
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.data.entity.ProductItem
import com.machiav3lli.fdroid.manager.network.createIconUri
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

View File

@ -33,17 +33,17 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.machiav3lli.fdroid.R
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.entity.Installed
import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.entity.ActionState
import com.machiav3lli.fdroid.entity.ProductItem
import com.machiav3lli.fdroid.network.createIconUri
import com.machiav3lli.fdroid.data.content.Preferences
import com.machiav3lli.fdroid.data.database.entity.Installed
import com.machiav3lli.fdroid.data.database.entity.Repository
import com.machiav3lli.fdroid.data.entity.ActionState
import com.machiav3lli.fdroid.data.entity.ProductItem
import com.machiav3lli.fdroid.manager.network.createIconUri
import com.machiav3lli.fdroid.ui.components.appsheet.ReleaseBadge
import com.machiav3lli.fdroid.ui.compose.icons.Phosphor
import com.machiav3lli.fdroid.ui.compose.icons.phosphor.HeartStraight
import com.machiav3lli.fdroid.ui.compose.icons.phosphor.HeartStraightFill
import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.utils.extension.text.nullIfEmpty
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

Some files were not shown because too many files have changed in this diff Show More