Skip to content

A reactive SharedPreferences library for Kotlin

License

Notifications You must be signed in to change notification settings

GediminasZukas/preferx

 
 

Repository files navigation

PrefeRx

This is a reactive SharedPreferences library for Kotlin

  • allows to integrate & manage your preferences with RxJava
  • easily stores primitives, enums and other serializable objects

Download

dependencies {
  implementation 'com.vinted:preferx:1.2.0'
}

Supported types

Library supports default SharedPreferences types with default fallback values when preference was not yet set or was cleared.

  sharedPreferences.intPreference("counter", 0)

  sharedPreferences.stringPreference("string", "")

  sharedPreferences.booleanPreference("seen", false)

  sharedPreferences.longPreference("timestamp", 0L)

It also allows easy storing of enums and objects.

  sharedPreferences.enumPreference("notifications", Frequency.ALL)

  sharedPreferences.objectPreference(
    name = "current_user"
    defaultValue = User.ANONYMOUS,
    serializer = someSerializer,
    clazz = User::class
  )

Basic example

class ExampleActivity : Activity {

  private val sharedPreferences by lazy {
    getSharedPreferences("app-pref", Context.MODE_PRIVATE)
  }

  private val sessionCounter : IntPreference by lazy {
    sharedPreferences.intPreference("counter", 0)
  }

  @Override
  public fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity)

    val incrementedCount = sessionCounter.get() + 1
    sessionCounter.set(incrementedCount)

    counter_view.text = "Application was started $incrementedCount times"
  }
}

RxJava example

class ExampleActivity : Activity {

  ...

  private var disposable: Disposable? = null

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    Observable.just(stringPreference.get())
      .concatWith(stringPreference.onChangeObservable)
      .subscribe {
          text_view.text = it
      }
    }.apply { disposable = this }
  }

  override fun onDestroy() {
    disposable?.dispose()
    super.onDestroy()
  }

  ...
}

For more usage examples see:

Caveats

  • When EnumSerializer fails to resolve enum value for any reason it will fallback to default value
  • When using EntitySerializer one must ensure that it returns value. In case of null it will fallback to default value.

About

A reactive SharedPreferences library for Kotlin

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Kotlin 100.0%