diff --git a/src/main/java/com/machiav3lli/backup/activities/MainActivityX.kt b/src/main/java/com/machiav3lli/backup/activities/MainActivityX.kt index d04a8ab18f..e977c92276 100644 --- a/src/main/java/com/machiav3lli/backup/activities/MainActivityX.kt +++ b/src/main/java/com/machiav3lli/backup/activities/MainActivityX.kt @@ -29,7 +29,6 @@ import androidx.biometric.BiometricPrompt import androidx.compose.foundation.layout.Box import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold -import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect @@ -100,7 +99,6 @@ import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.dsl.module import timber.log.Timber - @Composable fun Rescue() { AppTheme { @@ -109,7 +107,6 @@ fun Rescue() { } } -@OptIn(ExperimentalMaterial3AdaptiveApi::class) class MainActivityX : BaseActivity() { private val mScope: CoroutineScope = MainScope() diff --git a/src/main/java/com/machiav3lli/backup/dbs/ODatabase.kt b/src/main/java/com/machiav3lli/backup/dbs/ODatabase.kt index 81c5bfa89b..40486dd003 100644 --- a/src/main/java/com/machiav3lli/backup/dbs/ODatabase.kt +++ b/src/main/java/com/machiav3lli/backup/dbs/ODatabase.kt @@ -105,10 +105,10 @@ abstract class ODatabase : RoomDatabase() { val databaseModule = module { single { ODatabase.getInstance(androidContext()) } - factory { get().getScheduleDao() } - factory { get().getBlocklistDao() } - factory { get().getAppExtrasDao() } - factory { get().getBackupDao() } - factory { get().getAppInfoDao() } - factory { get().getSpecialInfoDao() } + single { get().getScheduleDao() } + single { get().getBlocklistDao() } + single { get().getAppExtrasDao() } + single { get().getBackupDao() } + single { get().getAppInfoDao() } + single { get().getSpecialInfoDao() } } diff --git a/src/main/java/com/machiav3lli/backup/items/StorageFile.kt b/src/main/java/com/machiav3lli/backup/items/StorageFile.kt index 327de7814a..7104cb979f 100644 --- a/src/main/java/com/machiav3lli/backup/items/StorageFile.kt +++ b/src/main/java/com/machiav3lli/backup/items/StorageFile.kt @@ -285,7 +285,7 @@ open class StorageFile { if (pref_shadowRootFile.value && allowShadowing) { try { val last = - //uri.lastPathSegment // docs say: last segment of the decoded(!) path, not the encoded one + //uri.lastPathSegment // docs say: last segment of the decoded(!) path, not the encoded one // so make it explicit: URLDecoder.decode(uri.encodedPath?.split("/")?.last() ?: "", "UTF-8") Timber.i("SAF: last=$last uri=$uri") diff --git a/src/main/java/com/machiav3lli/backup/plugins/InternalRegexPlugin.kt b/src/main/java/com/machiav3lli/backup/plugins/InternalRegexPlugin.kt index d3a44cf354..c70d7257e9 100644 --- a/src/main/java/com/machiav3lli/backup/plugins/InternalRegexPlugin.kt +++ b/src/main/java/com/machiav3lli/backup/plugins/InternalRegexPlugin.kt @@ -28,7 +28,7 @@ class InternalRegexPlugin(file: File) : TextPlugin(file) { Regex("T-h-I-s--S-h-O-u-L-d--N-e-V-e-R--m-A-t-C-h") } - fun replaceVars(text: String, replacements: Map = mapOf()) : String { + fun replaceVars(text: String, replacements: Map = mapOf()): String { var result = text replacements.forEach { replacement -> result = result.replace(replacement.key, replacement.value) diff --git a/src/main/java/com/machiav3lli/backup/plugins/SpecialFilesPlugin.kt b/src/main/java/com/machiav3lli/backup/plugins/SpecialFilesPlugin.kt index cc5d2f3db9..b65b52226c 100644 --- a/src/main/java/com/machiav3lli/backup/plugins/SpecialFilesPlugin.kt +++ b/src/main/java/com/machiav3lli/backup/plugins/SpecialFilesPlugin.kt @@ -16,7 +16,11 @@ class SpecialFilesPlugin(file: File) : TextPlugin(file) { .map { replaceVars(it, userId) } init { - tracePlugin { (listOf("${this.javaClass.simpleName} $name <- ${file.name}") + getFiles("")).joinToString("\n ") } + tracePlugin { + (listOf("${this.javaClass.simpleName} $name <- ${file.name}") + getFiles("")).joinToString( + "\n " + ) + } } companion object : PluginCompanion { @@ -25,7 +29,7 @@ class SpecialFilesPlugin(file: File) : TextPlugin(file) { override fun register() = registerType(name(), Companion, listOf("special_files")) override fun create(file: File): Plugin? = SpecialFilesPlugin(file) - fun specialInfos(userId: String) : List { + fun specialInfos(userId: String): List { ensureScanned() @@ -45,19 +49,19 @@ class SpecialFilesPlugin(file: File) : TextPlugin(file) { } @SuppressLint("SdCardPath") - fun replaceVars(text: String, userId: String) : String { + fun replaceVars(text: String, userId: String): String { val replacements = mapOf( - "userId" to userId.toString(), - "miscData" to "/data/misc", - "systemData" to "/data/system", - "systemUserData" to "/data/system/users/$userId", - "systemCeUserData" to "/data/system_ce/$userId", - "vendorDeUserData" to "/data/vendor_de/$userId", - "userData" to "/data/user/$userId", - "userDeData" to "/data/user_de/$userId", - "extUserData" to "/storage/emulated/$userId/Android/data", - "extUserMedia" to "/storage/emulated/$userId/Android/media", - "extUserObb" to "/storage/emulated/$userId/Android/obb", + "userId" to userId.toString(), + "miscData" to "/data/misc", + "systemData" to "/data/system", + "systemUserData" to "/data/system/users/$userId", + "systemCeUserData" to "/data/system_ce/$userId", + "vendorDeUserData" to "/data/vendor_de/$userId", + "userData" to "/data/user/$userId", + "userDeData" to "/data/user_de/$userId", + "extUserData" to "/storage/emulated/$userId/Android/data", + "extUserMedia" to "/storage/emulated/$userId/Android/media", + "extUserObb" to "/storage/emulated/$userId/Android/obb", ) var result = text replacements.forEach { replacement -> diff --git a/src/main/java/com/machiav3lli/backup/services/CommandReceiver.kt b/src/main/java/com/machiav3lli/backup/services/CommandReceiver.kt index 800fd03d69..a8302b0119 100644 --- a/src/main/java/com/machiav3lli/backup/services/CommandReceiver.kt +++ b/src/main/java/com/machiav3lli/backup/services/CommandReceiver.kt @@ -31,6 +31,7 @@ class CommandReceiver : //TODO hg42 how to maintain security? OABX.addInfoLogText("$command $batchName") OABX.work.cancel(batchName) } + ACTION_SCHEDULE -> { intent.getStringExtra("name")?.let { name -> OABX.addInfoLogText("$command $name") @@ -47,6 +48,7 @@ class CommandReceiver : //TODO hg42 how to maintain security? }.start() } } + ACTION_RESCHEDULE -> { intent.getStringExtra("name")?.let { name -> val now = SystemUtils.now @@ -70,9 +72,11 @@ class CommandReceiver : //TODO hg42 how to maintain security? }.start() } } + ACTION_CRASH -> { throw Exception("this is a crash via command intent") } + null -> {} else -> { OABX.addInfoLogText("Command: command '$command'") diff --git a/src/main/java/com/machiav3lli/backup/services/PackageUnInstalledReceiver.kt b/src/main/java/com/machiav3lli/backup/services/PackageUnInstalledReceiver.kt index 882d1fec6d..452aa5b7eb 100644 --- a/src/main/java/com/machiav3lli/backup/services/PackageUnInstalledReceiver.kt +++ b/src/main/java/com/machiav3lli/backup/services/PackageUnInstalledReceiver.kt @@ -45,7 +45,7 @@ class PackageUnInstalledReceiver : BroadcastReceiver() { when (intent.action.orEmpty()) { Intent.ACTION_PACKAGE_ADDED, Intent.ACTION_PACKAGE_REPLACED, - -> { + -> { context.packageManager.getPackageInfo( packageName, PackageManager.GET_PERMISSIONS @@ -58,7 +58,7 @@ class PackageUnInstalledReceiver : BroadcastReceiver() { } Intent.ACTION_PACKAGE_REMOVED, - -> { + -> { GlobalScope.launch(Dispatchers.IO) { val backups = db.getBackupDao().get(packageName) if (backups.isEmpty()) diff --git a/src/main/java/com/machiav3lli/backup/services/ScheduleService.kt b/src/main/java/com/machiav3lli/backup/services/ScheduleService.kt index a052a20656..872eb59348 100644 --- a/src/main/java/com/machiav3lli/backup/services/ScheduleService.kt +++ b/src/main/java/com/machiav3lli/backup/services/ScheduleService.kt @@ -221,7 +221,7 @@ open class ScheduleService : Service() { WorkInfo.State.SUCCEEDED, WorkInfo.State.FAILED, WorkInfo.State.CANCELLED, - -> { + -> { finished += 1 val succeeded = value.outputData.getBoolean( @@ -252,6 +252,7 @@ open class ScheduleService : Service() { intent ) } + else -> {} } } diff --git a/src/main/java/com/machiav3lli/backup/ui/compose/item/Components.kt b/src/main/java/com/machiav3lli/backup/ui/compose/item/Components.kt index 9f5d717969..13645a8aee 100644 --- a/src/main/java/com/machiav3lli/backup/ui/compose/item/Components.kt +++ b/src/main/java/com/machiav3lli/backup/ui/compose/item/Components.kt @@ -33,7 +33,6 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.requiredWidth import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn @@ -98,7 +97,6 @@ import coil.request.ImageRequest import coil.size.Size import com.machiav3lli.backup.ENABLED_FILTER_DISABLED import com.machiav3lli.backup.ICON_SIZE_LARGE -import com.machiav3lli.backup.ICON_SIZE_MEDIUM import com.machiav3lli.backup.ICON_SIZE_SMALL import com.machiav3lli.backup.LATEST_FILTER_NEW import com.machiav3lli.backup.LAUNCHABLE_FILTER_NOT @@ -531,7 +529,7 @@ fun RefreshButton( @Composable fun RefreshButtonPreview() { OABX.fakeContext = LocalContext.current.applicationContext - + val level by remember { OABX.busyLevel } val factor = 1.0 / max(1, level) diff --git a/src/main/java/com/machiav3lli/backup/ui/compose/item/DevTools.kt b/src/main/java/com/machiav3lli/backup/ui/compose/item/DevTools.kt index d2f6c21d23..11261efac5 100644 --- a/src/main/java/com/machiav3lli/backup/ui/compose/item/DevTools.kt +++ b/src/main/java/com/machiav3lli/backup/ui/compose/item/DevTools.kt @@ -125,8 +125,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.yield import java.io.File - - @Composable fun SimpleButton( text: String, diff --git a/src/main/java/com/machiav3lli/backup/ui/navigation/Item.kt b/src/main/java/com/machiav3lli/backup/ui/navigation/Item.kt index 9ce4ed2236..093d4e69ee 100644 --- a/src/main/java/com/machiav3lli/backup/ui/navigation/Item.kt +++ b/src/main/java/com/machiav3lli/backup/ui/navigation/Item.kt @@ -52,10 +52,10 @@ sealed class NavItem( NavItem( R.string.home, when { - isNeo -> Phosphor.Infinity + isNeo -> Phosphor.Infinity isDebug -> Phosphor.Bug - isHg42 -> Phosphor.Detective - else -> Phosphor.House + isHg42 -> Phosphor.Detective + else -> Phosphor.House }, "home", { HomePage() } @@ -88,18 +88,18 @@ sealed class NavItem( }) data object ServicePrefs : - NavItem(R.string.prefs_service_short, Phosphor.SlidersHorizontal, "prefs_service",{ + NavItem(R.string.prefs_service_short, Phosphor.SlidersHorizontal, "prefs_service", { ServicePrefsPage() }) data object AdvancedPrefs : - NavItem(R.string.prefs_advanced_short, Phosphor.Flask, "prefs_advanced",{ + NavItem(R.string.prefs_advanced_short, Phosphor.Flask, "prefs_advanced", { AdvancedPrefsPage() }) data object ToolsPrefs : NavItem(R.string.prefs_tools_short, Phosphor.Wrench, "prefs_tools", { - ToolsPrefsPage() - }) + ToolsPrefsPage() + }) data object Terminal : NavItem(R.string.prefs_tools_terminal, Phosphor.Bug, "prefs_tools/terminal") diff --git a/src/main/java/com/machiav3lli/backup/utils/UIUtils.kt b/src/main/java/com/machiav3lli/backup/utils/UIUtils.kt index 2dfa302553..c7f9f30f0a 100644 --- a/src/main/java/com/machiav3lli/backup/utils/UIUtils.kt +++ b/src/main/java/com/machiav3lli/backup/utils/UIUtils.kt @@ -278,7 +278,7 @@ val secondaryColor fun Context.restartApp(data: String? = null) { Timber.w( "restarting application${ - data?.let { " at $data" } ?: { "" } + data?.let { " at $data" } ?: { "" } }" ) val context = this.applicationContext diff --git a/src/main/java/com/machiav3lli/backup/viewmodels/HomeViewModel.kt b/src/main/java/com/machiav3lli/backup/viewmodels/HomeViewModel.kt deleted file mode 100644 index 66dde0d62a..0000000000 --- a/src/main/java/com/machiav3lli/backup/viewmodels/HomeViewModel.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * OAndBackupX: open-source apps backup and restore app. - * Copyright (C) 2020 Antonios Hazim - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero 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 Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package com.machiav3lli.backup.viewmodels - -import android.app.Application -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider - -class HomeViewModel(appContext: Application) : AndroidViewModel(appContext) { - - class Factory(private val application: Application) : - ViewModelProvider.Factory { - @Suppress("unchecked_cast") - override fun create(modelClass: Class): T { - if (modelClass.isAssignableFrom(HomeViewModel::class.java)) { - return HomeViewModel(application) as T - } - throw IllegalArgumentException("Unknown ViewModel class") - } - } -} diff --git a/src/main/java/com/machiav3lli/backup/viewmodels/ScheduleViewModel.kt b/src/main/java/com/machiav3lli/backup/viewmodels/ScheduleViewModel.kt index 734e18f071..ac4318a1d2 100644 --- a/src/main/java/com/machiav3lli/backup/viewmodels/ScheduleViewModel.kt +++ b/src/main/java/com/machiav3lli/backup/viewmodels/ScheduleViewModel.kt @@ -19,8 +19,6 @@ package com.machiav3lli.backup.viewmodels import android.app.Application import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import com.machiav3lli.backup.OABX import com.machiav3lli.backup.dbs.dao.ScheduleDao @@ -101,16 +99,4 @@ class ScheduleViewModel( scheduleDB.deleteById(id) } } - - class Factory( - private val id: Long, private val scheduleDB: ScheduleDao, - ) : ViewModelProvider.Factory { - @Suppress("unchecked_cast") - override fun create(modelClass: Class): T { - if (modelClass.isAssignableFrom(ScheduleViewModel::class.java)) { - return ScheduleViewModel(id, scheduleDB) as T - } - throw IllegalArgumentException("Unknown ViewModel class") - } - } } \ No newline at end of file