From 55078ad93a7f0d12bb0bfbce1ffb427599c5502f Mon Sep 17 00:00:00 2001 From: amwatson Date: Sun, 28 Jan 2024 16:47:30 -0600 Subject: [PATCH] delete config.ini if version below 0.4.0 -- use release version as visible version name in About section --- src/android/app/build.gradle.kts | 22 ++++++---- .../org/citra/citra_emu/CitraApplication.kt | 16 ++++++++ .../features/settings/model/Settings.kt | 6 ++- .../citra/citra_emu/ui/main/MainActivity.kt | 14 ++++++- .../java/org/citra/citra_emu/vr/VRUtils.kt | 40 +++++++++++++++++++ 5 files changed, 88 insertions(+), 10 deletions(-) diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index e4d9603b5..242c770a3 100644 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -221,25 +221,31 @@ fun getGitVersion(): String { var versionName = "0.0" try { - versionName = ProcessBuilder("git", "describe", "--always", "--long") + // First, try to get the most recent tag associated with the current commit + versionName = ProcessBuilder("git", "describe", "--tags", "--abbrev=0") .directory(project.rootDir) .redirectOutput(ProcessBuilder.Redirect.PIPE) .redirectError(ProcessBuilder.Redirect.PIPE) .start().inputStream.bufferedReader().use { it.readText() } .trim() - .replace(Regex("(-0)?-[^-]+$"), "") + + // If no tags are found, use commit hash + if (versionName.isEmpty()) { + versionName = ProcessBuilder("git", "describe", "--always", "--long") + .directory(project.rootDir) + .redirectOutput(ProcessBuilder.Redirect.PIPE) + .redirectError(ProcessBuilder.Redirect.PIPE) + .start().inputStream.bufferedReader().use { it.readText() } + .trim() + .replace(Regex("(-0)?-[^-]+$"), "") + } } catch (e: Exception) { logger.error("Cannot find git, defaulting to dummy version number") } - - if (System.getenv("GITHUB_ACTIONS") != null) { - val gitTag = System.getenv("GIT_TAG_NAME") - versionName = gitTag ?: versionName - } - return versionName } + fun getGitHash(): String = runGitCommand(ProcessBuilder("git", "rev-parse", "--short", "HEAD")) ?: "dummy-hash" diff --git a/src/android/app/src/main/java/org/citra/citra_emu/CitraApplication.kt b/src/android/app/src/main/java/org/citra/citra_emu/CitraApplication.kt index c414d4246..64ff3eb72 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/CitraApplication.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/CitraApplication.kt @@ -9,10 +9,13 @@ import android.app.Application import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context +import androidx.preference.PreferenceManager import org.citra.citra_emu.utils.DirectoryInitialization import org.citra.citra_emu.utils.DocumentsTree import org.citra.citra_emu.utils.GpuDriverHelper +import org.citra.citra_emu.utils.Log import org.citra.citra_emu.utils.PermissionsHandler +import org.citra.citra_emu.vr.VRUtils class CitraApplication : Application() { private fun createNotificationChannel() { @@ -44,8 +47,21 @@ class CitraApplication : Application() { } } + private fun updateLaunchVersionPrefs() { + val preferences = PreferenceManager.getDefaultSharedPreferences(applicationContext) + val releaseVersionPrev : String = preferences.getString(VRUtils.PREF_RELEASE_VERSION_NAME_LAUNCH_CURRENT, "")!! + val releaseVersionCur : String = BuildConfig.VERSION_NAME + preferences.edit() + .putString(VRUtils.PREF_RELEASE_VERSION_NAME_LAUNCH_PREV, releaseVersionPrev) + .putString(VRUtils.PREF_RELEASE_VERSION_NAME_LAUNCH_CURRENT, releaseVersionCur) + .apply() + Log.info("Version: \"${preferences.getString(VRUtils.PREF_RELEASE_VERSION_NAME_LAUNCH_PREV, "")}\" (prev) -> \"${preferences.getString( + VRUtils.PREF_RELEASE_VERSION_NAME_LAUNCH_CURRENT, "")}\" (current)") + } + override fun onCreate() { super.onCreate() + updateLaunchVersionPrefs() application = this documentsTree = DocumentsTree() if (PermissionsHandler.hasWriteAccess(applicationContext)) { diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt index 038156608..b45a7aa6b 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt @@ -197,7 +197,11 @@ class Settings { R.string.emulation_toggle_pause ) - const val PREF_FIRST_APP_LAUNCH = "FirstApplicationLaunch" + // VR-SPECIFIC: + // For CitraVR, change the name of the FirstApplicationLaunch param + // so setup is still prompted if user switches from mainline Citra to CitraVR + // (preferences are reused) + const val PREF_FIRST_APP_LAUNCH = "VR_FirstApplicationLaunch" const val PREF_MATERIAL_YOU = "MaterialYouTheme" const val PREF_THEME_MODE = "ThemeMode" const val PREF_BLACK_BACKGROUNDS = "BlackBackgrounds" diff --git a/src/android/app/src/main/java/org/citra/citra_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/citra/citra_emu/ui/main/MainActivity.kt index 1eda5ee4e..4149e5932 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/ui/main/MainActivity.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/ui/main/MainActivity.kt @@ -35,7 +35,6 @@ import androidx.work.WorkManager import com.google.android.material.color.MaterialColors import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.navigation.NavigationBarView -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import org.citra.citra_emu.R import org.citra.citra_emu.activities.EmulationActivity @@ -56,6 +55,7 @@ import org.citra.citra_emu.utils.PermissionsHandler import org.citra.citra_emu.utils.ThemeUtil import org.citra.citra_emu.viewmodel.GamesViewModel import org.citra.citra_emu.viewmodel.HomeViewModel +import org.citra.citra_emu.vr.VRUtils import org.citra.citra_emu.vr.VrActivity class MainActivity : AppCompatActivity(), ThemeProvider { @@ -82,6 +82,18 @@ class MainActivity : AppCompatActivity(), ThemeProvider { ThemeUtil.setTheme(this) super.onCreate(savedInstanceState) + val preferences = PreferenceManager.getDefaultSharedPreferences(applicationContext) + val releaseVersionPrev : String = preferences.getString(VRUtils.PREF_RELEASE_VERSION_NAME_LAUNCH_PREV, "")!! + val releaseVersionCur : String = preferences.getString(VRUtils.PREF_RELEASE_VERSION_NAME_LAUNCH_CURRENT, "")!! + // This means this is a first-time install, an app reinstall wiped app data, or the last app version was below + // V0.4.0. In all these cases, we want to wipe the previous config Because the earlier versions may have introduced input issues. + if (VRUtils.isReleaseVersion(releaseVersionCur) && VRUtils.hasLowerVersionThan(releaseVersionPrev, VRUtils.createVersionString(0, 4, 0))) { + Log.info("New install from prev version \"${releaseVersionPrev}\" needs update. Wiping config.ini") + SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_CONFIG)?.delete() + } + // If this is the first time installing CitraVR s + SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_CONFIG)?.delete() + binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/vr/VRUtils.kt b/src/android/app/src/main/java/org/citra/citra_emu/vr/VRUtils.kt index 45d4f0e32..f99463a04 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/vr/VRUtils.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/vr/VRUtils.kt @@ -67,4 +67,44 @@ object VRUtils { else -> -1 } } + + const val PREF_RELEASE_VERSION_NAME_LAUNCH_CURRENT = "VR_ReleaseVersionName_LaunchCurrent" + const val PREF_RELEASE_VERSION_NAME_LAUNCH_PREV = "VR_ReleaseVersionName_LaunchPrev" + + // release versions are in the form "v\d+\.\d+\.\d+". All other values are build versions + fun isReleaseVersion(version: String): Boolean { + return version.startsWith("v") + } + fun getVersionMajor(version: String): Int { + return if (isReleaseVersion(version)) version.split(".")[0].removePrefix("v").toInt() else -1 + } + fun getVersionMinor(version: String): Int { + return if (isReleaseVersion(version)) version.split(".")[1].toInt() else -1 + } + fun getVersionPatch(version: String): Int { + return if (isReleaseVersion(version)) version.split(".")[2].toInt() else -1 + } + + fun hasLowerVersionThan(versionOrig: String, versionComp: String): Boolean { + val majorOrig = getVersionMajor(versionOrig) + val majorComp = getVersionMajor(versionComp) + if (majorOrig < majorComp) return true + if (majorOrig > majorComp) return false + + val minorOrig = getVersionMinor(versionOrig) + val minorComp = getVersionMinor(versionComp) + if (minorOrig < minorComp) return true + if (minorOrig > minorComp) return false + + val patchOrig = getVersionPatch(versionOrig) + val patchComp = getVersionPatch(versionComp) + if (patchOrig < patchComp) return true + if (patchOrig > patchComp) return false + + return false + } + + fun createVersionString(major: Int, minor: Int, patch: Int): String { + return "v$major.$minor.$patch" + } }