Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@lookashc
lookashc / MarkAccountAsBetaFeature FeatureToggleCompanion.kt
Last active December 21, 2020 12:15
medium-feature-toggles-gist7
class MarkAccountAsBetaFeatureToggleCompanion @Inject constructor(
featureToggleSet: Set<@JvmSuppressWildcards FeatureToggle<*>>,
private val accountRepository: AccountRepository
) : FeatureToggleCompanion<Boolean>(featureToggleSet, MarkAccountAsBetaFeature) {
override fun executeUpdate(value: Boolean): Completable =
accountRepository.markAccountAsBeta(value)
.ignoreElement()
}
@lookashc
lookashc / FeatureToggleCompanion.kt
Created December 21, 2020 11:45
medium-feature-toggles-gist6
abstract class FeatureToggleCompanion<T : Any>(
featureToggleSet: Set<@JvmSuppressWildcards FeatureToggle<*>>,
associatedFeature: Feature<T>
) {
protected val toggle = featureToggleSet.first { it.feature == associatedFeature }
val feature = toggle.feature
val featureValue = toggle.value
@lookashc
lookashc / AveragesCardViewModel.kt
Last active December 21, 2020 11:08
medium-feature-toggles-gist5
class AveragesCardViewModel(
private val showAveragesCardFeatureToggle: ShowAveragesCardFeatureToggle
) {
val isVisible: Boolean = showAveragesCardFeatureToggle.value
class Factory @Inject constructor(
private val showAveragesCardFeatureToggle: ShowAveragesCardFeatureToggle
) : ViewModelProvider.Factory() {
@lookashc
lookashc / ShowAveragesCardToggleModule.kt
Created December 21, 2020 11:01
medium-feature-toggles-gist4
@Module
class ShowAveragesCardToggleModule {
@Provides
fun provideShowAveragesCardFeatureToggle(context: Context) =
ShowAveragesCardFeatureToggle(context)
@Provides
@IntoSet
fun addShowAveragesCardFeatureToggleIntoSet(
@lookashc
lookashc / ShowAveragesCardFeature.kt
Last active December 21, 2020 10:59
medium-feature-toggles-gist3
object ShowAveragesCardFeature : Feature<Boolean> {
override val initialValue = false
override val name = "Show Averages Card"
}
class ShowAveragesCardFeatureToggle(context: Context) :
PersistentFeatureToggle(context, ShowAveragesCardFeature)
@lookashc
lookashc / FeatureToggle.kt
Created December 21, 2020 10:47
medium-feature-toggle-gist2
interface FeatureToggle<T : Any> {
val feature: Feature<T>
var value: T
}
@lookashc
lookashc / Feature.kt
Last active December 21, 2020 10:47
medium-feature-toggles-gist1
interface Feature<T : Any> {
val initialValue: T
val name: String
fun validate(newValue: T): Boolean = true
fun type(): KClass<out T> = initialValue::class
}
### Keybase proof
I hereby claim:
* I am lookashc on github.
* I am lookashc (https://keybase.io/lookashc) on keybase.
* I have a public key ASDgSVReUo1hxm2WGfzp5ExrTzJBeazfcdhnT7aHBJnI3Qo
To claim this, I am signing this object:
@lookashc
lookashc / DependantLiveData.kt
Last active December 19, 2018 11:28
Simple wrapper over MediatorLiveData to build relations between LiveDatas in Android ViewModels
inline fun <T> dependantLiveData(vararg dependencies: LiveData<*>, crossinline mapper: () -> T?) =
MediatorLiveData<T>().also { mediatorLiveData ->
val observer = Observer<Any> { mediatorLiveData.value = mapper() }
dependencies.forEach { dependencyLiveData ->
mediatorLiveData.addSource(dependencyLiveData, observer)
}
}
//Example usage