Fix adding widgets on Android 14

Fix #558
This commit is contained in:
MM20
2023-10-06 19:51:13 +02:00
parent 12f88dcb36
commit 59d78f07c5
@@ -1,11 +1,13 @@
package de.mm20.launcher2.ui.launcher.sheets package de.mm20.launcher2.ui.launcher.sheets
import android.app.Activity import android.app.Activity
import android.app.ActivityOptions
import android.appwidget.AppWidgetHost import android.appwidget.AppWidgetHost
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.content.Intent import android.content.Intent
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Process import android.os.Process
import android.util.Log import android.util.Log
@@ -126,19 +128,33 @@ class BindAndConfigureAppWidgetActivity : Activity() {
appWidgetId, appWidgetId,
0, 0,
RequestCodeConfigure, RequestCodeConfigure,
null getConfigurationOptions(),
) )
} else { } else {
finishWithResult(appWidgetId) finishWithResult(appWidgetId)
} }
} }
private fun getConfigurationOptions(): Bundle? {
if (Build.VERSION.SDK_INT < 34) {
return null
}
return ActivityOptions.makeBasic()
.setPendingIntentBackgroundActivityStartMode(
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED
)
.setPendingIntentCreatorBackgroundActivityStartMode(
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED
)
.toBundle()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
when (requestCode) { when (requestCode) {
RequestCodeBind -> { RequestCodeBind -> {
val appWidgetId = val appWidgetId =
data?.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: return data?.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: return cancel()
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
val widget = appWidgetManager.getAppWidgetInfo(appWidgetId) val widget = appWidgetManager.getAppWidgetInfo(appWidgetId)
configureAppWidget(widget, appWidgetId) configureAppWidget(widget, appWidgetId)
@@ -160,6 +176,10 @@ class BindAndConfigureAppWidgetActivity : Activity() {
cancel() cancel()
} }
} }
else -> {
Log.w("MM20", "Unknown request code $requestCode")
cancel()
}
} }
} }