Skip to content

Instantly share code, notes, and snippets.

@ergofriend
Created October 10, 2022 12:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ergofriend/5cb531f24abd3264d846ae6518d1030f to your computer and use it in GitHub Desktop.
Save ergofriend/5cb531f24abd3264d846ae6518d1030f to your computer and use it in GitHub Desktop.
Custom GlanceAppWidgetHostPreview for ExperimentalPagerApi
import android.appwidget.AppWidgetProviderInfo
import androidx.compose.foundation.clickable
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.DpSize
import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
import androidx.glance.appwidget.GlanceAppWidget
import com.google.android.glance.appwidget.host.AppWidgetHost
import com.google.android.glance.appwidget.host.glance.compose
import com.google.android.glance.appwidget.host.rememberAppWidgetHostState
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@ExperimentalGlanceRemoteViewsApi
@Composable
fun GlanceAppWidgetHostPreview(
glanceAppWidget: GlanceAppWidget,
modifier: Modifier = Modifier,
state: Any? = null,
displaySize: DpSize = DpSize.Unspecified,
provider: AppWidgetProviderInfo? = null
) {
val hostState = rememberAppWidgetHostState(provider)
val scope = rememberCoroutineScope()
val context = LocalContext.current
suspend fun updateContent() {
hostState.updateAppWidget(glanceAppWidget.compose(context, displaySize, state, provider))
}
if (hostState.isReady) {
LaunchedEffect(hostState.value) {
delay(100)
updateContent()
}
}
AppWidgetHost(
modifier = Modifier.clickable {
scope.launch {
updateContent()
}
}.then(modifier),
displaySize = displaySize,
state = hostState
)
}
@ergofriend
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment