0

Where do I get benefits from usage App Startup library?
The documentation only tells us how to create an object and not how to use it

class MyPreferences : Initializer<SharedPreferences> {
    override fun create(context: Context): SharedPreferences {
        val myPreferences = context.getSharedPreferences("my_preferences", MODE_PRIVATE)
        return myPreferences
    }

    override fun dependencies(): MutableList<Class<out Initializer<*>>> {
        return mutableListOf()
    }
}

Then I want to use myPreferences instance somewhere

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val myPreferences = howToUseInstanceOfMyPreferencesThatAlreadyCreated()
    }
}
Smekalisty
  • 194
  • 1
  • 1
  • 14

1 Answers1

0

You could create a Config class to manage preferences and have a single instance of it.


class Config(context: Context) {

    val myPreferences = context.getSharedPreferences("my_preferences", MODE_PRIVATE)

    init {
        println("Config class is initialized")
    }
    
    companion object {

        @Volatile
        private var INSTANCE : Config? = null

        fun newInstance(context: Context) : Config {
            return INSTANCE ?: synchronized(this) {
                INSTANCE ?: Config(context).also { INSTANCE = it }
            }
        }

        fun getInstance() : Config {
            return INSTANCE ?: throw IllegalStateException("Config is not initialized")
        }
    }
}

You can create a single instance in the initializer class:


class ConfigInitializer : Initializer<Config> {
    override fun create(context: Context): Config {
        return Config.newInstance(context)
    }

    override fun dependencies(): MutableList<Class<out Initializer<*>>> {
        return mutableListOf()
    }
}


Than in your app you can use the shared pref as:


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val pref = Config.getInstance().myPreferences
    }
}