This workflow uses the GitHub CLI to keep a forked repo in sync with the upstream repo. Add it to your repo as .github/workflows/sync-fork.yaml.
It runs daily to sync the default branch and can be triggered manually for any branch.
| sealed interface UserProfileEvent { | |
| data object DeleteAccount : UserProfileEvent | |
| data object ConsumeEffect : UserProfileEvent | |
| } | |
| sealed interface UserProfileEffect { | |
| data class ShowError(val message: String) : UserProfileEffect | |
| data object NavigateToLogin : UserProfileEffect | |
| } |
| fun <T, B> createJsonRpcService(service: Class<T>, | |
| client: JsonRpcClient<B>, | |
| resultDeserializer: Deserializer<B>, | |
| logger: (String) -> Unit = {}): T { | |
| val classLoader = service.classLoader | |
| val interfaces = arrayOf<Class<*>>(service) | |
| val invocationHandler = createInvocationHandler(service, client, resultDeserializer, logger) | |
| @Suppress("UNCHECKED_CAST") |
| import androidx.compose.animation.core.RepeatMode | |
| import androidx.compose.animation.core.VectorConverter | |
| import androidx.compose.animation.core.animateValue | |
| import androidx.compose.animation.core.infiniteRepeatable | |
| import androidx.compose.animation.core.keyframesWithSpline | |
| import androidx.compose.animation.core.rememberInfiniteTransition | |
| import androidx.compose.foundation.Image | |
| import androidx.compose.foundation.layout.Box | |
| import androidx.compose.foundation.layout.BoxWithConstraints |
| package de.halfbit.seventysix | |
| import androidx.compose.foundation.layout.Column | |
| import androidx.compose.foundation.layout.fillMaxWidth | |
| import androidx.compose.material.Button | |
| import androidx.compose.material.MaterialTheme | |
| import androidx.compose.material.Text | |
| import androidx.compose.runtime.* | |
| import androidx.compose.ui.Alignment | |
| import androidx.compose.ui.Modifier |
| import androidx.compose.runtime.* | |
| import androidx.compose.ui.platform.LocalLifecycleOwner | |
| import androidx.lifecycle.* | |
| import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner | |
| import androidx.lifecycle.viewmodel.compose.viewModel | |
| import kotlinx.coroutines.* | |
| import kotlinx.coroutines.flow.* | |
| @Composable | |
| fun rememberViewModelStoreOwner( |
| import android.os.Bundle | |
| import androidx.compose.runtime.Composable | |
| import androidx.compose.runtime.RememberObserver | |
| import androidx.compose.runtime.remember | |
| import androidx.lifecycle.* | |
| import androidx.lifecycle.viewmodel.CreationExtras | |
| import androidx.lifecycle.viewmodel.MutableCreationExtras | |
| import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner | |
| import androidx.lifecycle.viewmodel.compose.viewModel |
| package io.github.darvld.utils | |
| import androidx.compose.animation.* | |
| import androidx.compose.animation.core.ExperimentalTransitionApi | |
| import androidx.compose.animation.core.MutableTransitionState | |
| import androidx.compose.foundation.lazy.LazyListScope | |
| import androidx.compose.foundation.lazy.items | |
| import androidx.compose.runtime.* | |
| import androidx.recyclerview.widget.AsyncListDiffer | |
| import androidx.recyclerview.widget.DiffUtil |
| @Composable | |
| fun SweepGradientImage( | |
| imgResId: Int, | |
| maxImgSize: Dp = 250.dp, | |
| maxImgRotation: Float = -10f | |
| ) { | |
| var animationPlayed by remember { mutableStateOf(false) } | |
| val lineOffset by animateFloatAsState( |
| data class Place( | |
| val name: String, | |
| val resId: Int | |
| ) |