Skip to content

Commit

Permalink
try to abstract and later possible replace BuildConfig (must be furth…
Browse files Browse the repository at this point in the history
…er improved, switching build variant does not switch package name in caches [or so, seems like clear cache doesn't always help?], as a result dontStop does not work and NB hangs, so always build fresh if switching package name, e.g. neo to release or hg42 to neo)
  • Loading branch information
hg42 committed Sep 18, 2024
1 parent c938455 commit 8b59ad8
Show file tree
Hide file tree
Showing 14 changed files with 28 additions and 35 deletions.
2 changes: 1 addition & 1 deletion src/androidTest/kotlin/tests/Test_ignoredPackages.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class Test_ignoredPackages {

@Test
fun test_doNotStop_matchesOwnPackage() {
val packageName = com.machiav3lli.backup.BuildConfig.APPLICATION_ID // use explicit BuildConfig
val packageName = com.machiav3lli.backup.SystemUtils.packageName // use explicit BuildConfig
assertTrue(
"does not match: $packageName",
packageName.matches(doNotStop)
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/machiav3lli/backup/OABX.kt
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ import com.machiav3lli.backup.services.PackageUnInstalledReceiver
import com.machiav3lli.backup.services.ScheduleService
import com.machiav3lli.backup.ui.item.BooleanPref
import com.machiav3lli.backup.ui.item.IntPref
import com.machiav3lli.backup.utils.SystemUtils
import com.machiav3lli.backup.utils.TraceUtils
import com.machiav3lli.backup.utils.TraceUtils.beginNanoTimer
import com.machiav3lli.backup.utils.TraceUtils.classAndId
Expand All @@ -85,7 +86,6 @@ import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin
import timber.log.Timber
import java.lang.Integer.max
import java.lang.ref.WeakReference
import java.util.concurrent.ConcurrentLinkedQueue
import java.util.concurrent.atomic.AtomicInteger
Expand Down Expand Up @@ -663,10 +663,10 @@ class OABX : Application() {
return Build.VERSION.SDK_INT >= sdk
}

val isRelease = BuildConfig.APPLICATION_ID.endsWith(".backup")
val isDebug = BuildConfig.DEBUG
val isNeo = BuildConfig.APPLICATION_ID.contains("neo")
val isHg42 = BuildConfig.APPLICATION_ID.contains("hg42")
val isRelease = SystemUtils.packageName.endsWith(".backup")
val isDebug = com.machiav3lli.backup.BuildConfig.DEBUG
val isNeo = SystemUtils.packageName.contains("neo")
val isHg42 = SystemUtils.packageName.contains("hg42")

//------------------------------------------------------------------------------------------ infoText

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.machiav3lli.backup.plugins.InternalShellScriptPlugin
import com.machiav3lli.backup.preferences.pref_backupSuspendApps
import com.machiav3lli.backup.preferences.pref_restoreKillApps
import com.machiav3lli.backup.tasks.AppActionWork
import com.machiav3lli.backup.utils.SystemUtils
import com.machiav3lli.backup.utils.TraceUtils.traceBold
import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.ShellUtils
Expand Down Expand Up @@ -159,7 +160,7 @@ abstract class BaseAppAction protected constructor(
const val BACKUP_DIR_MEDIA_FILES = "media_files"

val replacements = mapOf(
"<ownPackage>" to com.machiav3lli.backup.BuildConfig.APPLICATION_ID.replace(
"<ownPackage>" to SystemUtils.packageName.replace(
".",
"""\."""
)
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/com/machiav3lli/backup/dbs/entity/Backup.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,13 @@ import androidx.room.Entity
import androidx.room.Ignore
import com.machiav3lli.backup.BACKUP_INSTANCE_PROPERTIES_INDIR
import com.machiav3lli.backup.BACKUP_INSTANCE_REGEX_PATTERN
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.OABX
import com.machiav3lli.backup.PROP_NAME
import com.machiav3lli.backup.handler.LogsHandler.Companion.logException
import com.machiav3lli.backup.handler.regexPackageFolder
import com.machiav3lli.backup.items.StorageFile
import com.machiav3lli.backup.utils.LocalDateTimeSerializer
import com.machiav3lli.backup.utils.getBackupRoot
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import java.io.FileNotFoundException
Expand All @@ -39,7 +37,7 @@ import java.time.LocalDateTime

@Entity(primaryKeys = ["packageName", "backupDate"])
@Serializable
data class Backup @OptIn(ExperimentalSerializationApi::class) constructor(
data class Backup @OptIn(kotlinx.serialization.ExperimentalSerializationApi::class) constructor(
var backupVersionCode: Int = 0,
var packageName: String,
var packageLabel: String,
Expand Down Expand Up @@ -86,7 +84,7 @@ data class Backup @OptIn(ExperimentalSerializationApi::class) constructor(
persistent: Boolean = false,
note: String = "",
) : this(
backupVersionCode = BuildConfig.MAJOR * 1000 + BuildConfig.MINOR,
backupVersionCode = com.machiav3lli.backup.BuildConfig.MAJOR * 1000 + com.machiav3lli.backup.BuildConfig.MINOR,
packageName = base.packageName,
packageLabel = base.packageLabel,
versionName = base.versionName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package com.machiav3lli.backup.handler

import android.content.Context
import android.content.pm.PackageManager
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.MODE_APK
import com.machiav3lli.backup.MODE_DATA
import com.machiav3lli.backup.actions.BackupAppAction
Expand Down Expand Up @@ -103,13 +102,13 @@ object BackupRestoreHelper {

@Throws(IOException::class)
fun copySelfApk(context: Context, shell: ShellHandler): Boolean {
val filename = BuildConfig.APPLICATION_ID + '-' + SystemUtils.versionName + ".apk"
val filename = SystemUtils.packageName + '-' + SystemUtils.versionName + ".apk"
try {
val backupRoot = context.getBackupRoot()
val apkFile = backupRoot.findFile(filename)
apkFile?.delete()
try {
val myInfo = context.packageManager.getPackageInfo(BuildConfig.APPLICATION_ID, 0) // TODO 'getPackageInfo(String, Int): PackageInfo!' is deprecated
val myInfo = context.packageManager.getPackageInfo(SystemUtils.packageName, 0) // TODO 'getPackageInfo(String, Int): PackageInfo!' is deprecated
val fileInfos =
shell.suGetDetailedDirectoryContents(myInfo.applicationInfo.sourceDir, false)
if (fileInfos.size != 1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ import android.content.Context
import android.content.Intent
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.R
import com.machiav3lli.backup.activities.BaseActivity
import com.machiav3lli.backup.classAddress
import com.machiav3lli.backup.utils.SystemUtils

fun showNotification(
context: Context?,
Expand Down Expand Up @@ -59,7 +59,7 @@ fun showNotification(
val notificationManager = NotificationManagerCompat.from(context!!)
notificationManager.createNotificationChannel(notificationChannel)
val notification = NotificationCompat.Builder(context, classAddress("NotificationHandler"))
.setGroup(BuildConfig.APPLICATION_ID)
.setGroup(SystemUtils.packageName)
.setSortKey("9")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setSmallIcon(R.drawable.ic_launcher_foreground)
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/machiav3lli/backup/handler/WorkHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.work.WorkInfo
import androidx.work.WorkManager
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.OABX
import com.machiav3lli.backup.R
import com.machiav3lli.backup.activities.MainActivityX
Expand All @@ -24,6 +23,7 @@ import com.machiav3lli.backup.preferences.pref_fakeScheduleDups
import com.machiav3lli.backup.preferences.pref_maxRetriesPerPackage
import com.machiav3lli.backup.services.CommandReceiver
import com.machiav3lli.backup.tasks.AppActionWork
import com.machiav3lli.backup.utils.SystemUtils
import com.machiav3lli.backup.utils.TraceUtils.traceBold
import org.koin.dsl.module
import timber.log.Timber
Expand Down Expand Up @@ -452,7 +452,7 @@ class WorkHandler(appContext: Context) {
appContext,
classAddress("NotificationHandler")
)
.setGroup(BuildConfig.APPLICATION_ID)
.setGroup(SystemUtils.packageName)
.setSortKey("1-$batchName")
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(title)
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/com/machiav3lli/backup/pages/SplashPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.OABX
import com.machiav3lli.backup.R
import com.machiav3lli.backup.dialogs.BaseDialog
Expand Down Expand Up @@ -66,7 +65,7 @@ fun SplashPage() {
Spacer(modifier = Modifier.weight(1f))
Text(
text = listOf(
BuildConfig.APPLICATION_ID,
SystemUtils.packageName,
SystemUtils.versionName,
SystemUtils.applicationIssuer?.let { "signed by $it" } ?: "",
).joinToString("\n"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.COMPRESSION_TYPES
import com.machiav3lli.backup.OABX
import com.machiav3lli.backup.R
Expand Down Expand Up @@ -54,6 +53,7 @@ import com.machiav3lli.backup.ui.item.ListPref
import com.machiav3lli.backup.ui.item.PasswordPref
import com.machiav3lli.backup.ui.item.Pref
import com.machiav3lli.backup.ui.item.StringPref
import com.machiav3lli.backup.utils.SystemUtils
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList

Expand Down Expand Up @@ -320,5 +320,5 @@ val pref_installationPackage = StringPref(
titleId = R.string.prefs_installerpackagename,
icon = Phosphor.Textbox,
iconTint = ColorOBB,
defaultValue = BuildConfig.APPLICATION_ID
defaultValue = SystemUtils.packageName
)
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.machiav3lli.backup.BACKUP_DATE_TIME_FORMATTER
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.ICON_SIZE_SMALL
import com.machiav3lli.backup.OABX
import com.machiav3lli.backup.handler.LogsHandler
Expand Down Expand Up @@ -159,7 +158,7 @@ fun shell(command: String, silent: Boolean = false): List<String> {
fun appInfo(): List<String> {
return listOf(
"------ application",
"package = ${BuildConfig.APPLICATION_ID}",
"package = ${SystemUtils.packageName}",
"version = ${SystemUtils.versionName} : ${SystemUtils.versionCode}",
SystemUtils.applicationIssuer.let { "signed by = $it" },
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.machiav3lli.backup.BACKUP_DIRECTORY_INTENT
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.OABX
import com.machiav3lli.backup.PREFS_LANGUAGES_SYSTEM
import com.machiav3lli.backup.R
Expand Down Expand Up @@ -59,6 +58,7 @@ import com.machiav3lli.backup.ui.item.ListPref
import com.machiav3lli.backup.ui.item.Pref
import com.machiav3lli.backup.ui.item.StringPref
import com.machiav3lli.backup.utils.StorageLocationNotConfiguredException
import com.machiav3lli.backup.utils.SystemUtils
import com.machiav3lli.backup.utils.backupDirConfigured
import com.machiav3lli.backup.utils.getLanguageList
import com.machiav3lli.backup.utils.isBiometricLockAvailable
Expand Down Expand Up @@ -186,7 +186,7 @@ val pref_appAccentColor = EnumPref(
icon = Phosphor.EyedropperSample,
//iconTint = MaterialTheme.colorScheme.primary,
entries = accentColorItems,
defaultValue = with(BuildConfig.APPLICATION_ID) {
defaultValue = with(SystemUtils.packageName) {
when {
contains("hg42") -> 8
contains("debug") -> 4
Expand All @@ -202,7 +202,7 @@ val pref_appSecondaryColor = EnumPref(
icon = Phosphor.EyedropperSample,
//iconTint = MaterialTheme.colorScheme.secondary,
entries = secondaryColorItems,
defaultValue = with(BuildConfig.APPLICATION_ID) {
defaultValue = with(SystemUtils.packageName) {
when {
contains(".rel") -> 0
contains("debug") -> 4
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/machiav3lli/backup/sheets/HelpSheet.kt
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.core.text.HtmlCompat
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.R
import com.machiav3lli.backup.legendList
import com.machiav3lli.backup.linksList
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/com/machiav3lli/backup/utils/PrefUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import androidx.biometric.BiometricManager
import androidx.preference.PreferenceManager
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.OABX
import com.machiav3lli.backup.PREFS_LANGUAGES_SYSTEM
import com.machiav3lli.backup.PREFS_SHARED_PRIVATE
Expand All @@ -44,8 +43,8 @@ import com.machiav3lli.backup.preferences.pref_backupExternalData
import com.machiav3lli.backup.preferences.pref_backupMediaData
import com.machiav3lli.backup.preferences.pref_backupObbData
import com.machiav3lli.backup.preferences.pref_biometricLock
import com.machiav3lli.backup.preferences.pref_compressionType
import com.machiav3lli.backup.preferences.pref_compressionLevel
import com.machiav3lli.backup.preferences.pref_compressionType
import com.machiav3lli.backup.preferences.pref_deviceLock
import com.machiav3lli.backup.preferences.pref_disableVerification
import com.machiav3lli.backup.preferences.pref_enableSpecialBackups
Expand Down Expand Up @@ -248,7 +247,7 @@ fun Context.getLocaleOfCode(localeCode: String): Locale = when {

fun Context.getLanguageList() =
mapOf(PREFS_LANGUAGES_SYSTEM to resources.getString(R.string.prefs_language_system)) +
BuildConfig.DETECTED_LOCALES
com.machiav3lli.backup.BuildConfig.DETECTED_LOCALES
.sorted()
.associateWith { translateLocale(getLocaleOfCode(it)) }

Expand Down
7 changes: 3 additions & 4 deletions src/main/java/com/machiav3lli/backup/utils/SystemUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import android.content.Context
import android.content.Intent
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import com.machiav3lli.backup.BuildConfig
import com.machiav3lli.backup.OABX
import com.machiav3lli.backup.handler.LogsHandler
import com.machiav3lli.backup.handler.ShellCommands
Expand All @@ -31,7 +30,6 @@ object SystemUtils {

fun Context.getApplicationInfos(what: Int = 0): PackageInfo? {
val packageManager: PackageManager = getPackageManager()
val packageName = BuildConfig.APPLICATION_ID
return packageManager.getPackageInfo(packageName, what)
}

Expand Down Expand Up @@ -65,13 +63,14 @@ object SystemUtils {
return null
}

val packageName = com.machiav3lli.backup.BuildConfig.APPLICATION_ID
@Suppress("DEPRECATION")
val versionCode = if (OABX.minSDK(28)) {
OABX.context.getApplicationInfos()?.longVersionCode
} else {
OABX.context.getApplicationInfos()?.versionCode
} ?: 0
val versionName = OABX.context.getApplicationInfos()?.versionName ?: "?"
} ?: com.machiav3lli.backup.BuildConfig.VERSION_CODE
val versionName = OABX.context.getApplicationInfos()?.versionName ?: com.machiav3lli.backup.BuildConfig.VERSION_NAME
val updateId = "${OABX.context.getApplicationInfos()?.lastUpdateTime?.toString()}-${versionName}"

val applicationIssuer = OABX.context.getApplicationIssuer() ?: "UNKNOWN ISSUER"
Expand Down

3 comments on commit 8b59ad8

@machiav3lli
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This (planning to replace BuildConfig) is useless overengineering act, that would only cause more problems than solve.

@hg42
Copy link
Collaborator Author

@hg42 hg42 commented on 8b59ad8 Sep 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the intention at the time of writing this (it's not new) was to replace it with other better available information.
At that time it solved the problem.

Currently, the reason for further changes was a failure when copying of the asset files.
Unfortunately, later one of the current root causes boiled down to the APPLICATION_ID, which is also used for getApplicationInfos.
So currently for this part it does not help. You need to clear the cache when switching the build variant (at least in some cases).

The other problem was the usage of VERSION_NAME, which only changes with hg42 builds, but not with normal builds (there is no build number part that changes with each build).
So I added the update time from the package manager.

@hg42
Copy link
Collaborator Author

@hg42 hg42 commented on 8b59ad8 Sep 27, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, and BuildConfig exists in multiple namespaces.
I had several occasions, where it was imported from the wrong module (which is hidden, so you don't notice) and the values were completely non-sense.
I don't want to always give the qualified name. So an alias would be the minimum.
But why not use a wrapper, that allows to do more if necessary.
Which implementation is best will be shown in future.

Please sign in to comment.