• Stars
    star
    128
  • Rank 281,044 (Top 6 %)
  • Language
    Kotlin
  • Created about 6 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Android library to simplify reading and writing to SharedPreferences, never write code like this anymore prefs.edit().putString("someKey","someString").apply()

Bulldog

Please check https://sserra.gitbook.io/bulldog/ for full documentation.

Medium https://medium.com/@Sserra90/announcing-bulldog-never-use-sharedpreferences-anymore-92cd32249314

Why Bulldog?

  • Avoid boilerplate, error prone code, improve productivity.
  • Write less code, avoid bugs.
  • Easily organize your preferences.

Motivation

Android library to simplify reading and writing to SharedPreferences, never write code like this anymore prefs.edit().putString("someKey","someString").apply()

How to use it

Add dependencies to build.gradle

 kapt "com.github.Sserra90.bulldog:bulldog-processor:$bulldog"
 implementation "com.github.Sserra90.bulldog:bulldog-runtime:$bulldog"

Create a spec with wanted properties and default values like the this:

@Bulldog(name = "UserSettings")
object UserModel {
    const val id: Int = 20 // Default value
    const val email: String = "[email protected]"
    const val likes: Long = 20L
    const val isPremium: Boolean = false
    const val minutesLeft: Float = 24.5F
}

Init Bulldog context in your application class.

bullDogCtx = applicationContext

Bulldog will generate a class from this specification with the name UserSettings. Use it like a normal object to access values, under the hood it uses Kotlin delegated properties to read and writes values to SharedPreferences.

UserSettings().apply {
    id = 2
    email = "[email protected]"
}
Log.d("PREFS", UserSettings().id)
Log.d("PREFS", UserSettings().toString())

If no name is specified in @Bulldog annotation, the generated class will have the name of the spec object prefixed with Bulldog.

Read values

Just access object property like a normal object

Log.d("UserId", UserSettings().id)

Write values

UserSettings().apply{
    id = 4
    Log.d("UserId", id)
}

Clear values

Bulldog generates a clear method for each entry

UserSettings().apply{
    clearId()
    Log.d("UserId", id) // Will return the default value
}

Print information

Bulldog also generates a toString() human readable implementation

Log.d("PREFS", UserSettings().toString())
// Ouput
// UserSettings  id=20, [email protected], likes=20, isPremium=false minutesLeft=24.

Enum support

Bulldog supports Enum type using the @Enum annotation.

@Bulldog(name = "UserSettings")
object UserModel {
    @Enum(value = Roles.user)
    val role: Roles = Roles.USER
}

enum class Roles{
  ADMIN, USER;
  
  companion object {
        const val user = "USER"
        const val admin = "ADMIN"
    }
}

You just need annotate the field the enum field and pass a default value.