Skip to content

Instantly share code, notes, and snippets.

@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
@MapKey
annotation class ViewModelKey(val value: KClass<out ViewModel>)
@Singleton
class ViewModelFactory @Inject constructor(
private val viewModelProviderMap: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>)
: ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
val viewModelProvider = viewModelProviderMap.get(modelClass)
?: throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}")
return viewModelProvider.get() as T
}
public interface Provider<T> {
T get();
}
public abstract void onBindViewHolder(@NonNull VH holder, int position)
@NonNull
public abstract VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
public abstract int getItemCount()
public int getItemViewType(int position) {
return 0;
}
interface FilterAdapterDelegate {
val viewType: Int
fun isForViewType(filterData: FilterData): Boolean
fun onCreateViewHolder(parent: ViewGroup): RecyclerView.ViewHolder
fun onBindViewHolder(filterData: FilterData, holder: RecyclerView.ViewHolder)
}
@AdrianoCelentano
AdrianoCelentano / Multibindings.kt
Last active March 8, 2019 15:39
Multibindings
@Binds
@IntoMap
@FilterMapKey(RedFilterDelegate.RED_FILTER_VIEW_TYPE)
fun provideRedFilterDelegate(redFilterDelegate: RedFilterDelegate): FilterAdapterDelegate
@Binds
@IntoMap
@FilterMapKey(GreenFilterDelegate.GREEN_FILTER_VIEW_TYPE)
fun provideGreenFilterDelegate(greenFilterDelegate: GreenFilterDelegate): FilterAdapterDelegate
class FilterAdapter @Inject constructor(
private val adapterDelegates: Map<Int, @JvmSuppressWildcards FilterAdapterDelegate>
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
...
}
interface ConnectivityObserver {
fun start(onConnectionAvailable: () -> Unit, onConnectionLost: () -> Unit = {})
fun stop()
}
import androidx.compose.animation.animate
import androidx.compose.animation.core.AnimationSpec
import androidx.compose.animation.core.TweenSpec
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.preferredSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Card
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close