Fix 3rd party widget sizing

This commit is contained in:
MM20 2022-09-02 16:41:20 +02:00
parent 69c8be89b6
commit 1ec7d97ea1
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -3,11 +3,13 @@ package de.mm20.launcher2.ui.launcher.widgets.external
import android.appwidget.AppWidgetHost import android.appwidget.AppWidgetHost
import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetManager
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ListView import android.widget.ListView
import android.widget.ScrollView import android.widget.ScrollView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -15,11 +17,13 @@ import androidx.compose.runtime.key
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.view.doOnNextLayout import androidx.core.view.doOnNextLayout
import androidx.core.view.iterator import androidx.core.view.iterator
import de.mm20.launcher2.ui.ktx.toPixels import de.mm20.launcher2.ui.ktx.toPixels
import kotlin.math.roundToInt
@Composable @Composable
fun ExternalWidget( fun ExternalWidget(
@ -32,19 +36,29 @@ fun ExternalWidget(
val widgetInfo = remember(widgetId) { val widgetInfo = remember(widgetId) {
AppWidgetManager.getInstance(context).getAppWidgetInfo(widgetId) AppWidgetManager.getInstance(context).getAppWidgetInfo(widgetId)
} }
val viewHeightPx = height.dp.toPixels() BoxWithConstraints {
key(widgetId) { val maxWidth = maxWidth
AndroidView( key(widgetId) {
modifier = modifier.fillMaxWidth().height(height.dp), AndroidView(
factory = { modifier = modifier
val view = appWidgetHost.createView(it.applicationContext, widgetId, widgetInfo) .fillMaxWidth()
enableNestedScroll(view) .height(height.dp),
return@AndroidView view factory = {
}, val view = appWidgetHost.createView(it.applicationContext, widgetId, widgetInfo)
update = { enableNestedScroll(view)
it.updateAppWidgetSize(null, 0, 0, it.width, height) return@AndroidView view
} },
) update = {
it.updateAppWidgetSize(
null,
maxWidth.value.roundToInt(),
height,
maxWidth.value.roundToInt(),
height,
)
}
)
}
} }
} }