Explicitely set widget size constraints

Some widgets are invisible (0px x 0px) if no size is given
This commit is contained in:
MM20 2022-02-16 23:55:12 +01:00
parent 3aa28671a4
commit b40f96d7b5
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -6,10 +6,14 @@ import android.appwidget.AppWidgetHostView
import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProviderInfo import android.appwidget.AppWidgetProviderInfo
import android.content.Context import android.content.Context
import android.os.Bundle
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.core.view.doOnLayout
import androidx.core.view.doOnNextLayout
import androidx.core.view.get import androidx.core.view.get
import androidx.core.view.iterator import androidx.core.view.iterator
import de.mm20.launcher2.ktx.dp import de.mm20.launcher2.ktx.dp
@ -24,10 +28,12 @@ class ExternalWidget(
val widgetInfo: AppWidgetProviderInfo? val widgetInfo: AppWidgetProviderInfo?
val widgetView: View
init { init {
val id = widget.data.toInt() val id = widget.data.toInt()
widgetInfo = AppWidgetManager.getInstance(context.applicationContext).getAppWidgetInfo(id) widgetInfo = AppWidgetManager.getInstance(context.applicationContext).getAppWidgetInfo(id)
val widgetView = host.createView(context.applicationContext, id, widgetInfo) widgetView = host.createView(context.applicationContext, id, widgetInfo)
?: View(context) ?: View(context)
if (widgetView is AppWidgetHostView && widgetView.childCount > 0) { if (widgetView is AppWidgetHostView && widgetView.childCount > 0) {
enableNestedScroll(widgetView[0]) enableNestedScroll(widgetView[0])
@ -40,6 +46,18 @@ class ExternalWidget(
addView(widgetView) addView(widgetView)
} }
override fun setLayoutParams(params: ViewGroup.LayoutParams?) {
super.setLayoutParams(params)
params ?: return
doOnNextLayout {
val width = if (params.width > 0) params.width else it.width
val height = if (params.height > 0) params.height else widgetInfo?.minHeight ?: it.height
if (widgetView is AppWidgetHostView) {
widgetView.updateAppWidgetSize(Bundle(), 0, 0, width, height)
}
}
}
private fun enableNestedScroll(view: View) { private fun enableNestedScroll(view: View) {
if (view is ViewGroup) { if (view is ViewGroup) {
for (child in view.iterator()) { for (child in view.iterator()) {