Skip to content

Instantly share code, notes, and snippets.

View ShivamDev31's full-sized avatar

Shivam Chopra ShivamDev31

View GitHub Profile
override fun clear(): Completable {
return prefSubject.firstOrError()
.clearSharedPreferences {
remove(KEY_NAME)
}
}
fun Single<SharedPreferences>.clearSharedPreferences(batch: SharedPreferences.Editor.() -> Unit): Completable =
flatMapCompletable {
Completable.fromAction {
override fun name(): Observable<String> = prefSubject
.map { it.getString(KEY_NAME, "") }
override fun saveName(name: String): Completable = prefSubject
.firstOrError()
.editSharedPreferences {
putString(KEY_NAME, name)
}
fun Single<SharedPreferences>.editSharedPreferences(batch: SharedPreferences.Editor.() -> Unit): Completable =
flatMapCompletable {
Completable.fromAction {
it.edit().also(batch).apply()
private val prefSubject = BehaviorSubject.createDefault(preferences)
private val prefChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, _ ->
prefSubject.onNext(sharedPreferences)
}
init {
preferences.registerOnSharedPreferenceChangeListener(prefChangeListener)
}
companion object {
@JvmStatic
fun create(context: Context): SharedPreferencesNameRepository {
val preferences = context.getSharedPreferences("RxPrefs", Context.MODE_PRIVATE)
return SharedPreferencesNameRepository(preferences)
}
private const val KEY_NAME = "key_name"
@ShivamDev31
ShivamDev31 / NameRepository.kt
Created May 14, 2019 10:04
Core logic of NameRepository
class SharedPreferencesNameRepository(preferences: SharedPreferences) : NameRepository {
private val prefSubject = BehaviorSubject.createDefault(preferences)
private val prefChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, _ ->
prefSubject.onNext(sharedPreferences)
}
companion object {
@JvmStatic
interface NameRepository {
fun saveName(name: String): Completable
fun name(): Observable<String>
fun clear(): Completable
}
@ShivamDev31
ShivamDev31 / MainActivity.kt
Created May 14, 2019 09:59
MainActivity listeners
private fun handleData() {
bSubmit.setOnClickListener {
val name = etName.text.toString()
disposables.add(repository.saveName(name).subscribe())
}
disposables.add(repository.name().subscribe({
tvName.text = it
}, {
Log.e("Error : ", "", it)
@ShivamDev31
ShivamDev31 / MainActivity.kt
Created May 14, 2019 09:55
Create NameRepository instance
private lateinit var repository: NameRepository
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
repository = SharedPreferencesNameRepository.create(this)
handleData()
}
@ShivamDev31
ShivamDev31 / KruxConsentProvider.kt
Last active March 29, 2019 06:34
Implementation of Krux including user consents.
package com.newsuk.analytics
import android.app.Application
import android.os.Bundle
import com.krux.androidsdk.aggregator.KruxEventAggregator
import com.newsuk.rx.SchedulingStrategy
import com.newsuk.thesun.mobile.BuildConfig
import com.newsuk.thesun.mobile.advert.DeviceIdProvider
interface KruxConsentProvider {