Fix app widget binding when used does not select always allow
This commit is contained in:
parent
3feb339d28
commit
ca4a3840af
@ -19,10 +19,10 @@ import androidx.compose.runtime.livedata.observeAsState
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import de.mm20.launcher2.ui.theme.LauncherTheme
|
|
||||||
import de.mm20.launcher2.ui.R
|
import de.mm20.launcher2.ui.R
|
||||||
import de.mm20.launcher2.ui.base.BaseActivity
|
import de.mm20.launcher2.ui.base.BaseActivity
|
||||||
import de.mm20.launcher2.ui.base.ProvideSettings
|
import de.mm20.launcher2.ui.base.ProvideSettings
|
||||||
|
import de.mm20.launcher2.ui.theme.LauncherTheme
|
||||||
|
|
||||||
class PickAppWidgetActivity : BaseActivity() {
|
class PickAppWidgetActivity : BaseActivity() {
|
||||||
|
|
||||||
@ -39,7 +39,6 @@ class PickAppWidgetActivity : BaseActivity() {
|
|||||||
appWidgetManager = AppWidgetManager.getInstance(this)
|
appWidgetManager = AppWidgetManager.getInstance(this)
|
||||||
|
|
||||||
val availableWidgets = viewModel.getAvailableWidgets(this)
|
val availableWidgets = viewModel.getAvailableWidgets(this)
|
||||||
val selectedAppWidget = viewModel.selectedAppWidget
|
|
||||||
setContent {
|
setContent {
|
||||||
LauncherTheme {
|
LauncherTheme {
|
||||||
ProvideSettings {
|
ProvideSettings {
|
||||||
@ -63,24 +62,25 @@ class PickAppWidgetActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
val available by availableWidgets.observeAsState()
|
val available by availableWidgets.observeAsState()
|
||||||
val selected by selectedAppWidget.observeAsState()
|
|
||||||
val widgets = available
|
val widgets = available
|
||||||
if (selected == null) {
|
if (widgets != null) {
|
||||||
if (widgets != null) {
|
AppWidgetList(
|
||||||
AppWidgetList(
|
modifier = Modifier
|
||||||
modifier = Modifier.fillMaxSize().padding(it),
|
.fillMaxSize()
|
||||||
widgets = widgets,
|
.padding(it),
|
||||||
onWidgetSelected = {
|
widgets = widgets,
|
||||||
selectAppWidget(it)
|
onWidgetSelected = {
|
||||||
}
|
selectAppWidget(it)
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Box(
|
|
||||||
modifier = Modifier.fillMaxSize().padding(it),
|
|
||||||
contentAlignment = Alignment.Center
|
|
||||||
) {
|
|
||||||
CircularProgressIndicator()
|
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(it),
|
||||||
|
contentAlignment = Alignment.Center
|
||||||
|
) {
|
||||||
|
CircularProgressIndicator()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,30 +91,14 @@ class PickAppWidgetActivity : BaseActivity() {
|
|||||||
|
|
||||||
private fun selectAppWidget(widget: AppWidgetProviderInfo) {
|
private fun selectAppWidget(widget: AppWidgetProviderInfo) {
|
||||||
val appWidgetId = widgetHost.allocateAppWidgetId()
|
val appWidgetId = widgetHost.allocateAppWidgetId()
|
||||||
viewModel.selectAppWidget(widget, appWidgetId)
|
bindAppWidget(widget, appWidgetId)
|
||||||
configureWidget()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun configureWidget() {
|
private fun bindAppWidget(widget: AppWidgetProviderInfo, appWidgetId: Int) {
|
||||||
val appWidgetId = viewModel.appWidgetId.value ?: return
|
|
||||||
val widget = viewModel.selectedAppWidget.value ?: return
|
|
||||||
val canBind = appWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, widget.provider)
|
val canBind = appWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, widget.provider)
|
||||||
Log.d("MM20", "Can bind: $canBind")
|
Log.d("MM20", "Can bind: $canBind")
|
||||||
if (canBind) {
|
if (canBind) {
|
||||||
if (widget.configure != null) {
|
configureAppWidget(widget, appWidgetId)
|
||||||
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE)
|
|
||||||
intent.component = widget.configure
|
|
||||||
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
|
|
||||||
widgetHost.startAppWidgetConfigureActivityForResult(
|
|
||||||
this,
|
|
||||||
appWidgetId,
|
|
||||||
0,
|
|
||||||
RequestCodeConfigure,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
finishWithResult(appWidgetId)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
startActivityForResult(
|
startActivityForResult(
|
||||||
Intent(AppWidgetManager.ACTION_APPWIDGET_BIND).apply {
|
Intent(AppWidgetManager.ACTION_APPWIDGET_BIND).apply {
|
||||||
@ -125,24 +109,45 @@ class PickAppWidgetActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun configureAppWidget(widget: AppWidgetProviderInfo, appWidgetId: Int) {
|
||||||
|
if (widget.configure != null) {
|
||||||
|
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE)
|
||||||
|
intent.component = widget.configure
|
||||||
|
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
|
||||||
|
widgetHost.startAppWidgetConfigureActivityForResult(
|
||||||
|
this,
|
||||||
|
appWidgetId,
|
||||||
|
0,
|
||||||
|
RequestCodeConfigure,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
finishWithResult(appWidgetId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated("Deprecated in super class")
|
@Deprecated("Deprecated in super class")
|
||||||
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 =
|
||||||
|
data?.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: return
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
configureWidget()
|
val widget = appWidgetManager.getAppWidgetInfo(appWidgetId)
|
||||||
|
configureAppWidget(widget, appWidgetId)
|
||||||
} else {
|
} else {
|
||||||
viewModel.appWidgetId.value?.let { widgetHost.deleteAppWidgetId(it) }
|
widgetHost.deleteAppWidgetId(appWidgetId)
|
||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RequestCodeConfigure -> {
|
RequestCodeConfigure -> {
|
||||||
val widgetId = viewModel.appWidgetId.value ?: return cancel()
|
val appWidgetId =
|
||||||
|
data?.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: return cancel()
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
finishWithResult(widgetId)
|
finishWithResult(appWidgetId)
|
||||||
} else {
|
} else {
|
||||||
widgetHost.deleteAppWidgetId(widgetId)
|
widgetHost.deleteAppWidgetId(appWidgetId)
|
||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,14 +21,6 @@ inline val AppWidgetGroup.widgets: List<AppWidgetProviderInfo>
|
|||||||
get() = this.second
|
get() = this.second
|
||||||
|
|
||||||
class PickAppWidgetVM : ViewModel() {
|
class PickAppWidgetVM : ViewModel() {
|
||||||
var appWidgetId: MutableLiveData<Int?> = MutableLiveData(null)
|
|
||||||
val selectedAppWidget: MutableLiveData<AppWidgetProviderInfo?> = MutableLiveData(null)
|
|
||||||
|
|
||||||
fun selectAppWidget(appWidget: AppWidgetProviderInfo, appWidgetId: Int) {
|
|
||||||
this.appWidgetId.value = appWidgetId
|
|
||||||
this.selectedAppWidget.value = appWidget
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getAvailableWidgets(context: Context): LiveData<List<AppWidgetGroup>?> = liveData {
|
fun getAvailableWidgets(context: Context): LiveData<List<AppWidgetGroup>?> = liveData {
|
||||||
emit(null)
|
emit(null)
|
||||||
val appWidgetManager = AppWidgetManager.getInstance(context)
|
val appWidgetManager = AppWidgetManager.getInstance(context)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user