Created
February 4, 2021 04:35
-
-
Save shihabmi7/d2dced293cb6ccebfb962a56e001a9ce to your computer and use it in GitHub Desktop.
Singleton Shared Preference
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object AppPreferences { | |
private const val NAME = "SpinKotlin" | |
private const val MODE = Context.MODE_PRIVATE | |
private lateinit var preferences: SharedPreferences | |
// list of app specific preferences | |
private val IS_FIRST_RUN_PREF = Pair("is_first_run", false) | |
fun init(context: Context) { | |
preferences = context.getSharedPreferences(NAME, MODE) | |
} | |
/** | |
* SharedPreferences extension function, so we won't need to call edit() and apply() | |
* ourselves on every SharedPreferences operation. | |
*/ | |
private inline fun SharedPreferences.edit(operation: (SharedPreferences.Editor) -> Unit) { | |
val editor = edit() | |
operation(editor) | |
editor.apply() | |
} | |
var firstRun: Boolean | |
// custom getter to get a preference of a desired type, with a predefined default value | |
get() = preferences.getBoolean(IS_FIRST_RUN_PREF.first, IS_FIRST_RUN_PREF.second) | |
// custom setter to save a preference back to preferences file | |
set(value) = preferences.edit { | |
it.putBoolean(IS_FIRST_RUN_PREF.first, value) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SpInKotlinApp : Application() { | |
override fun onCreate() { | |
super.onCreate() | |
AppPreferences.init(this) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MainActivity : AppCompatActivity() { | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
if (!AppPreferences.firstRun) { | |
AppPreferences.firstRun = true | |
Log.d("SpinKotlin", "The value of our pref is: ${AppPreferences.firstRun}") | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment