package jp.juggler.subwaytooter.pref import android.annotation.SuppressLint import android.content.Context import android.content.SharedPreferences import androidx.startup.Initializer import jp.juggler.subwaytooter.push.FcmFlavor import jp.juggler.util.os.applicationContextSafe import java.util.concurrent.atomic.AtomicReference var lazyContextOverride = AtomicReference() var lazyPrefOverride = AtomicReference() val lazyContext get() = lazyContextOverride.get() ?: LazyContextHolder.contextNullable ?: error("LazyContextHolder not initialized") val lazyPref get() = lazyPrefOverride.get() ?: LazyContextHolder.prefNullable ?: error("LazyContextHolder not initialized") const val FILE_PROVIDER_AUTHORITY = "${FcmFlavor.APPLICATION_ID}.FileProvider" @SuppressLint("StaticFieldLeak") object LazyContextHolder { var contextNullable: Context? = null var prefNullable: SharedPreferences? = null fun init(context: Context) { contextNullable = context prefNullable = context.getSharedPreferences( "${context.packageName}_preferences", Context.MODE_PRIVATE ) } } class LazyContextInitializer : Initializer { override fun dependencies(): List>> = emptyList() override fun create(context: Context): LazyContextHolder { LazyContextHolder.init(context.applicationContextSafe) return LazyContextHolder } }