Skip to content

Commit

Permalink
refactor: drop unnecessary data dir change listeners
Browse files Browse the repository at this point in the history
fix: null pointer exception with theme changing that trigger by data dir changing (#1483)

Changing data dir and access to data dir will not happen at same time, we can just make the user data dirs as properties with getter so that we can access the newest resources at the appointed time.
  • Loading branch information
WhiredPlanck committed Oct 9, 2024
1 parent ed113a8 commit 3591a2b
Show file tree
Hide file tree
Showing 5 changed files with 3 additions and 73 deletions.
1 change: 0 additions & 1 deletion app/src/main/java/com/osfans/trime/core/Rime.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ class Rime :
RimeDispatcher(
object : RimeDispatcher.RimeLooper {
override fun nativeStartup(fullCheck: Boolean) {
DataManager.dirFireChange()
DataManager.sync()

val sharedDataDir = DataManager.sharedDataDir.absolutePath
Expand Down
24 changes: 1 addition & 23 deletions app/src/main/java/com/osfans/trime/data/base/DataManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import android.os.Environment
import com.osfans.trime.data.prefs.AppPrefs
import com.osfans.trime.util.FileUtils
import com.osfans.trime.util.ResourceUtils
import com.osfans.trime.util.WeakHashSet
import com.osfans.trime.util.appContext
import kotlinx.serialization.json.Json
import timber.log.Timber
Expand Down Expand Up @@ -49,31 +48,10 @@ object DataManager {

val defaultDataDirectory = File(Environment.getExternalStorageDirectory(), "rime")

private val onDataDirChangeListeners = WeakHashSet<OnDataDirChangeListener>()

fun interface OnDataDirChangeListener {
fun onDataDirChange()
}

fun addOnChangedListener(listener: OnDataDirChangeListener) {
onDataDirChangeListeners.add(listener)
}

fun removeOnChangedListener(listener: OnDataDirChangeListener) {
onDataDirChangeListeners.remove(listener)
}

fun dirFireChange() {
onDataDirChangeListeners.forEach { it.onDataDirChange() }
}

val sharedDataDir = File(appContext.getExternalFilesDir(null), "shared").also { it.mkdirs() }

val userDataDir
get() =
File(prefs.profile.userDataDir).also {
if (!it.exists()) it.mkdirs()
}
get() = File(prefs.profile.userDataDir).also { it.mkdirs() }

/**
* Return the absolute path of the compiled config file
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

package com.osfans.trime.data.opencc

import androidx.annotation.Keep
import com.osfans.trime.data.base.DataManager
import com.osfans.trime.data.opencc.dict.Dictionary
import com.osfans.trime.data.opencc.dict.OpenCCDictionary
Expand All @@ -16,23 +15,12 @@ import java.io.InputStream
import kotlin.system.measureTimeMillis

object OpenCCDictManager {
/**
* Update sharedDir and userDir.
*/
@Keep
private val onDataDirChange =
DataManager.OnDataDirChangeListener {
userDir = File(DataManager.userDataDir, "opencc").also { it.mkdirs() }
}

init {
System.loadLibrary("rime_jni")
// register listener
DataManager.addOnChangedListener(onDataDirChange)
}

private val sharedDir = File(DataManager.sharedDataDir, "opencc").also { it.mkdirs() }
private var userDir = File(DataManager.userDataDir, "opencc").also { it.mkdirs() }
private val userDir get() = File(DataManager.userDataDir, "opencc").also { it.mkdirs() }

fun sharedDictionaries(): List<Dictionary> =
sharedDir
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

package com.osfans.trime.data.sound

import androidx.annotation.Keep
import com.charleskorn.kaml.Yaml
import com.charleskorn.kaml.YamlConfiguration
import com.osfans.trime.data.base.DataManager
Expand All @@ -13,16 +12,7 @@ import timber.log.Timber
import java.io.File

object SoundEffectManager {
private var userDir = File(DataManager.userDataDir, "sound")

/**
* Update userDir.
*/
@Keep
private val onDataDirChange =
DataManager.OnDataDirChangeListener {
userDir = File(DataManager.userDataDir, "sound")
}
private val userDir get() = File(DataManager.userDataDir, "sound").also { it.mkdirs() }

private val yaml =
Yaml(
Expand Down Expand Up @@ -66,8 +56,6 @@ object SoundEffectManager {
}

fun init() {
// register listener
DataManager.addOnChangedListener(onDataDirChange)
currentSoundEffect = getSound(AppPrefs.defaultInstance().keyboard.customSoundPackage) ?: return
}

Expand Down
23 changes: 0 additions & 23 deletions app/src/main/java/com/osfans/trime/data/theme/ThemeManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

package com.osfans.trime.data.theme

import androidx.annotation.Keep
import com.osfans.trime.data.base.DataManager
import com.osfans.trime.data.prefs.AppPrefs
import com.osfans.trime.ime.symbol.TabManager
Expand All @@ -16,20 +15,6 @@ object ThemeManager {
fun onThemeChange(theme: Theme)
}

/**
* Update sharedThemes and userThemes.
*/
@Keep
private val onDataDirChange =
DataManager.OnDataDirChangeListener {
refreshThemes()
}

init {
// register listener
DataManager.addOnChangedListener(onDataDirChange)
}

private fun listThemes(path: File): MutableList<String> =
path
.listFiles { _, name -> name.endsWith("trime.yaml") }
Expand All @@ -43,14 +28,6 @@ object ThemeManager {

fun getAllThemes(): List<String> = sharedThemes + userThemes

private fun refreshThemes() {
sharedThemes.clear()
userThemes.clear()
sharedThemes.addAll(listThemes(DataManager.sharedDataDir))
userThemes.addAll(listThemes(DataManager.userDataDir))
setNormalTheme(prefs.selectedTheme)
}

private lateinit var _activeTheme: Theme

var activeTheme: Theme
Expand Down

0 comments on commit 3591a2b

Please sign in to comment.