Skip to content

Commit 9610732

Browse files
committed
#1305 Coroutine exception (auto fix)
1 parent 3a9e3da commit 9610732

35 files changed

+132
-132
lines changed

app/src/main/java/li/klass/fhem/activities/StartupActivity.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ class StartupActivity : Activity() {
8585

8686

8787
GlobalScope.launch(Dispatchers.Main) {
88-
async(IO) {
88+
withContext(IO) {
8989
deviceListService.resetUpdateProgress(this@StartupActivity)
90-
}.await()
90+
}
9191

9292
loginUiService.doLoginIfRequired(activity, object : LoginUIService.LoginStrategy {
9393
override fun requireLogin(context: Context, checkLogin: suspend (String) -> Unit) {
@@ -141,9 +141,9 @@ class StartupActivity : Activity() {
141141
setCurrentStatus(R.string.currentStatus_loadingFavorites)
142142

143143
coroutineScope {
144-
val hasFavorites = async(IO) {
144+
val hasFavorites = withContext(IO) {
145145
favoritesService.hasFavorites()
146-
}.await()
146+
}
147147
logger.debug("showMainActivity : favorites_present=$hasFavorites")
148148
gotoMainActivity(hasFavorites)
149149
}

app/src/main/java/li/klass/fhem/activities/locale/ConnectionChangeLocaleSettingActivity.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ import android.widget.Button
3333
import android.widget.Spinner
3434
import kotlinx.coroutines.Dispatchers
3535
import kotlinx.coroutines.GlobalScope
36-
import kotlinx.coroutines.async
3736
import kotlinx.coroutines.launch
37+
import kotlinx.coroutines.withContext
3838
import li.klass.fhem.AndFHEMApplication
3939
import li.klass.fhem.R
4040
import li.klass.fhem.adapter.ConnectionListAdapter
@@ -81,9 +81,9 @@ class ConnectionChangeLocaleSettingActivity : Activity() {
8181
}
8282

8383
GlobalScope.launch(Dispatchers.Main) {
84-
val connections = async(Dispatchers.IO) {
84+
val connections = withContext(Dispatchers.IO) {
8585
connectionService.listAll()
86-
}.await()
86+
}
8787
fillConnectionSpinner(connections, connectionListAdapter)
8888
}
8989

app/src/main/java/li/klass/fhem/activities/locale/SendCommandLocaleSettingActivity.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ import android.widget.EditText
3434
import android.widget.Spinner
3535
import kotlinx.coroutines.Dispatchers
3636
import kotlinx.coroutines.GlobalScope
37-
import kotlinx.coroutines.async
3837
import kotlinx.coroutines.launch
38+
import kotlinx.coroutines.withContext
3939
import li.klass.fhem.AndFHEMApplication
4040
import li.klass.fhem.R
4141
import li.klass.fhem.activities.locale.LocaleIntentConstants.EXTRA_BUNDLE
@@ -86,9 +86,9 @@ class SendCommandLocaleSettingActivity : Activity() {
8686
}
8787

8888
GlobalScope.launch(Dispatchers.Main) {
89-
val connections = async(Dispatchers.IO) {
89+
val connections = withContext(Dispatchers.IO) {
9090
connectionService.listAll()
91-
}.await()
91+
}
9292
fillConnectionSpinner(connections, connectionListAdapter)
9393
}
9494

app/src/main/java/li/klass/fhem/adapter/devices/core/cards/ActionsCardProvider.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ import android.content.Context
2828
import androidx.cardview.widget.CardView
2929
import kotlinx.android.synthetic.main.device_detail_card_actions.view.*
3030
import kotlinx.coroutines.Dispatchers
31-
import kotlinx.coroutines.async
3231
import kotlinx.coroutines.coroutineScope
32+
import kotlinx.coroutines.withContext
3333
import li.klass.fhem.R
3434
import li.klass.fhem.adapter.devices.core.generic.detail.actions.GenericDetailActionProviders
3535
import li.klass.fhem.adapter.devices.genericui.AvailableTargetStatesSwitchAction
@@ -55,13 +55,13 @@ class ActionsCardProvider @Inject constructor(
5555
actionsList.addView(AvailableTargetStatesSwitchAction(stateUiService).createView(context, layoutInflater, device, actionsList, connectionId))
5656

5757
coroutineScope {
58-
async(Dispatchers.IO) {
58+
withContext(Dispatchers.IO) {
5959
detailActionProviders.providers
6060
.filter { it.supports(device.xmlListDevice) }
6161
.flatMap { it.actionsFor(context) }
6262
.filter { it.supports(device) }
6363
.map { it.createView(device.xmlListDevice, connectionId, context, layoutInflater, actionsList) }
64-
}.await().forEach { actionsList.addView(it) }
64+
}.forEach { actionsList.addView(it) }
6565
}
6666
return card
6767
}

app/src/main/java/li/klass/fhem/adapter/devices/core/cards/FS20ZdrPlayerCardProvider.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ import androidx.cardview.widget.CardView
3131
import kotlinx.android.synthetic.main.device_detail_card_fs20_zdr_player.view.*
3232
import kotlinx.coroutines.Dispatchers
3333
import kotlinx.coroutines.GlobalScope
34-
import kotlinx.coroutines.async
3534
import kotlinx.coroutines.launch
35+
import kotlinx.coroutines.withContext
3636
import li.klass.fhem.R
3737
import li.klass.fhem.devices.backend.GenericDeviceService
3838
import li.klass.fhem.domain.core.FhemDevice
@@ -74,9 +74,9 @@ class FS20ZdrPlayerCardProvider @Inject constructor(
7474
command ?: return null
7575
return View.OnClickListener {
7676
GlobalScope.launch(Dispatchers.Main) {
77-
async(Dispatchers.IO) {
77+
withContext(Dispatchers.IO) {
7878
genericDeviceService.setState(device.xmlListDevice, command, connectionId)
79-
}.await()
79+
}
8080
}
8181
}
8282
}

app/src/main/java/li/klass/fhem/adapter/devices/core/cards/GcmSendCardProvider.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class GcmSendCardProvider @Inject constructor(
5858

5959
private suspend fun loadCardContent(device: FhemDevice, cardView: CardView) {
6060
coroutineScope {
61-
val isRegistered = async(Dispatchers.IO) { gcmSendDeviceService.isDeviceRegistered(device.xmlListDevice) }.await()
61+
val isRegistered = withContext(Dispatchers.IO) { gcmSendDeviceService.isDeviceRegistered(device.xmlListDevice) }
6262
if (isRegistered) {
6363
cardView.visibility = View.VISIBLE
6464
}
@@ -69,7 +69,7 @@ class GcmSendCardProvider @Inject constructor(
6969
return listOf(object : ActionCardButton(R.string.gcmRegisterThis, context) {
7070
override fun onClick(device: XmlListDevice, connectionId: String?, context: Context) {
7171
GlobalScope.launch(Dispatchers.Main) {
72-
val result = async(Dispatchers.IO) { gcmSendDeviceService.addSelf(device) }.await()
72+
val result = withContext(Dispatchers.IO) { gcmSendDeviceService.addSelf(device) }
7373
Toast.makeText(context, result.resultText, Toast.LENGTH_LONG).show()
7474
}
7575
}

app/src/main/java/li/klass/fhem/adapter/devices/core/cards/PlayerCardProvider.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ import androidx.cardview.widget.CardView
3131
import kotlinx.android.synthetic.main.device_detail_card_player.view.*
3232
import kotlinx.coroutines.Dispatchers
3333
import kotlinx.coroutines.GlobalScope
34-
import kotlinx.coroutines.async
3534
import kotlinx.coroutines.launch
35+
import kotlinx.coroutines.withContext
3636
import li.klass.fhem.R
3737
import li.klass.fhem.devices.backend.GenericDeviceService
3838
import li.klass.fhem.domain.core.FhemDevice
@@ -69,9 +69,9 @@ class PlayerCardProvider @Inject constructor(
6969
command ?: return null
7070
return View.OnClickListener {
7171
GlobalScope.launch(Dispatchers.Main) {
72-
async(Dispatchers.IO) {
72+
withContext(Dispatchers.IO) {
7373
genericDeviceService.setState(device.xmlListDevice, command, connectionId)
74-
}.await()
74+
}
7575
}
7676
}
7777
}

app/src/main/java/li/klass/fhem/adapter/devices/core/cards/PlotsCardProvider.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ import androidx.cardview.widget.CardView
3232
import com.google.common.base.Optional
3333
import kotlinx.android.synthetic.main.device_detail_card_plots.view.*
3434
import kotlinx.coroutines.Dispatchers
35-
import kotlinx.coroutines.async
3635
import kotlinx.coroutines.coroutineScope
36+
import kotlinx.coroutines.withContext
3737
import li.klass.fhem.R
3838
import li.klass.fhem.domain.core.FhemDevice
3939
import li.klass.fhem.graph.backend.GraphDefinitionsForDeviceService
@@ -59,9 +59,9 @@ class PlotsCardProvider @Inject constructor(
5959

6060
private suspend fun loadGraphs(device: FhemDevice, cardView: CardView, connectionId: String?, context: Context) {
6161
coroutineScope {
62-
val graphs = async(Dispatchers.IO) {
62+
val graphs = withContext(Dispatchers.IO) {
6363
graphDefinitionsForDeviceService.graphDefinitionsFor(device.xmlListDevice, Optional.fromNullable(connectionId))
64-
}.await()
64+
}
6565
fillPlotsCard(cardView, device, graphs, connectionId, context)
6666

6767
cardView.invalidate()

app/src/main/java/li/klass/fhem/adapter/devices/core/cards/RemotecontrolDeviceCardProvider.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ class RemotecontrolDeviceCardProvider @Inject constructor(
5858
val view = context.layoutInflater.inflate(R.layout.remote_control_layout, null, false)
5959
val actionProvider = actionProviderFor(device, connectionId)
6060
coroutineScope {
61-
val rows = async {
61+
val rows = withContext(Dispatchers.Default) {
6262
remotecontrolDeviceService.getRowsFor(device)
63-
}.await()
63+
}
6464
updateTableWith(view.content, rows, context, actionProvider)
6565
}
6666

app/src/main/java/li/klass/fhem/adapter/devices/core/cards/WeatherDeviceCardProvider.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ import androidx.recyclerview.widget.RecyclerView
3535
import kotlinx.android.synthetic.main.device_detail_card_weather.view.*
3636
import kotlinx.android.synthetic.main.weather_forecast_item.view.*
3737
import kotlinx.coroutines.Dispatchers
38-
import kotlinx.coroutines.async
3938
import kotlinx.coroutines.coroutineScope
39+
import kotlinx.coroutines.withContext
4040
import li.klass.fhem.GlideApp
4141
import li.klass.fhem.R
4242
import li.klass.fhem.devices.backend.WeatherService
@@ -63,7 +63,7 @@ class WeatherDeviceCardProvider @Inject constructor(
6363
view.forecast.adapter = Adapter()
6464

6565
coroutineScope {
66-
val forecasts = async(Dispatchers.IO) { weatherService.forecastsFor(device) }.await()
66+
val forecasts = withContext(Dispatchers.IO) { weatherService.forecastsFor(device) }
6767
updateListWith(view.forecast, forecasts)
6868
view.invalidate()
6969
}

app/src/main/java/li/klass/fhem/adapter/devices/core/generic/detail/actions/devices/fht/HolidayShort.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ import kotlinx.android.synthetic.main.fht_holiday_short_dialog.view.*
3636
import kotlinx.android.synthetic.main.fht_holiday_short_dialog_android_bug.view.*
3737
import kotlinx.coroutines.Dispatchers
3838
import kotlinx.coroutines.GlobalScope
39-
import kotlinx.coroutines.async
4039
import kotlinx.coroutines.launch
40+
import kotlinx.coroutines.withContext
4141
import li.klass.fhem.R
4242
import li.klass.fhem.adapter.devices.core.generic.detail.actions.devices.FHTDetailActionProvider
4343
import li.klass.fhem.adapter.devices.genericui.SeekBarActionRowFullWidthAndButton
@@ -94,14 +94,14 @@ class HolidayShort @Inject constructor(private val applicationProperties: Applic
9494
val switchDate = holidayShortCalculator.holiday1SwitchTimeFor(model.hour, model.minute)
9595

9696
GlobalScope.launch(Dispatchers.Main) {
97-
async(Dispatchers.IO) {
97+
withContext(Dispatchers.IO) {
9898
genericDeviceService.setSubStates(device, listOf(
9999
StateToSet("desired-temp", "" + model.desiredTemp),
100100
StateToSet("holiday1", "" + holidayShortCalculator.calculateHoliday1ValueFrom(switchDate.hourOfDay, switchDate.minuteOfHour)),
101101
StateToSet("holiday2", "" + switchDate.dayOfMonth),
102102
StateToSet("mode", FHTMode.HOLIDAY_SHORT.name.toLowerCase(Locale.getDefault()))
103103
), connectionId)
104-
}.await()
104+
}
105105
spinnerActionRow.commitSelection()
106106
dialogInterface.dismiss()
107107
}

app/src/main/java/li/klass/fhem/adapter/devices/core/generic/detail/actions/state/FHTModeStateOverwrite.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ import android.widget.TableLayout
3434
import android.widget.TableRow
3535
import kotlinx.coroutines.Dispatchers
3636
import kotlinx.coroutines.GlobalScope
37-
import kotlinx.coroutines.async
3837
import kotlinx.coroutines.launch
38+
import kotlinx.coroutines.withContext
3939
import li.klass.fhem.R
4040
import li.klass.fhem.adapter.devices.core.generic.detail.actions.devices.FHTDetailActionProvider
4141
import li.klass.fhem.adapter.devices.core.generic.detail.actions.devices.fht.HolidayShort
@@ -90,9 +90,9 @@ class FHTModeStateOverwrite @Inject constructor(
9090
}
9191
else -> {
9292
GlobalScope.launch(Dispatchers.Main) {
93-
async(Dispatchers.IO) {
93+
withContext(Dispatchers.IO) {
9494
genericDeviceService.setSubState(device, "mode", mode.name.toLowerCase(Locale.getDefault()), connectionId)
95-
}.await()
95+
}
9696
spinnerActionRow.commitSelection()
9797
context.sendBroadcast(Intent(BundleExtraKeys.DO_REFRESH))
9898
}
@@ -127,14 +127,14 @@ class FHTModeStateOverwrite @Inject constructor(
127127

128128
dialogBuilder.setPositiveButton(R.string.okButton) { dialogInterface, _ ->
129129
GlobalScope.launch(Dispatchers.Main) {
130-
async(Dispatchers.IO) {
130+
withContext(Dispatchers.IO) {
131131
genericDeviceService.setSubStates(device, listOf(
132132
StateToSet("desired-temp", "" + temperatureChangeTableRow.temperature),
133133
StateToSet("holiday1", "" + datePicker.dayOfMonth),
134134
StateToSet("holiday2", "" + (datePicker.month + 1)),
135135
StateToSet("mode", FHTMode.HOLIDAY.name.toLowerCase(Locale.getDefault()))
136136
), connectionId)
137-
}.await()
137+
}
138138
spinnerActionRow.commitSelection()
139139
dialogInterface.dismiss()
140140
}

app/src/main/java/li/klass/fhem/adapter/devices/genericui/ToggleDeviceActionRow.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ import android.widget.TextView
3232
import android.widget.ToggleButton
3333
import kotlinx.coroutines.Dispatchers
3434
import kotlinx.coroutines.GlobalScope
35-
import kotlinx.coroutines.async
3635
import kotlinx.coroutines.launch
36+
import kotlinx.coroutines.withContext
3737
import li.klass.fhem.R
3838
import li.klass.fhem.adapter.devices.toggle.OnOffBehavior
3939
import li.klass.fhem.constants.Actions
@@ -66,9 +66,9 @@ class ToggleDeviceActionRow(context: Context,
6666

6767
private fun onButtonClick(context: Context, device: FhemDevice) {
6868
GlobalScope.launch(Dispatchers.Main) {
69-
async(Dispatchers.IO) {
69+
withContext(Dispatchers.IO) {
7070
toggleableService.toggleState(device, connectionId = null)
71-
}.await()
71+
}
7272
context.sendBroadcast(Intent(Actions.DO_UPDATE))
7373
}
7474
}

app/src/main/java/li/klass/fhem/adapter/devices/strategy/WeatherDeviceViewStrategy.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ import android.view.View
3030
import android.widget.ImageView
3131
import kotlinx.android.synthetic.main.device_overview_weather.view.*
3232
import kotlinx.coroutines.Dispatchers
33-
import kotlinx.coroutines.async
3433
import kotlinx.coroutines.coroutineScope
34+
import kotlinx.coroutines.withContext
3535
import li.klass.fhem.GlideApp
3636
import li.klass.fhem.R
3737
import li.klass.fhem.adapter.devices.core.GenericDeviceOverviewViewHolder
@@ -53,9 +53,9 @@ class WeatherDeviceViewStrategy @Inject constructor(
5353
defaultViewStrategy.fillDeviceOverviewView(view, rawDevice, GenericDeviceOverviewViewHolder(view), deviceItems, layoutInflater)
5454

5555
coroutineScope {
56-
val url = async(Dispatchers.IO) {
56+
val url = withContext(Dispatchers.IO) {
5757
weatherService.iconFor(rawDevice)
58-
}.await()
58+
}
5959
setWeatherIconIn(view.weatherImage, url)
6060
}
6161
return view

app/src/main/java/li/klass/fhem/adapter/rooms/DeviceGroupAdapter.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ class DeviceGroupAdapter(
7474

7575
companion object {
7676
private val LOGGER = LoggerFactory.getLogger(DeviceGroupAdapter::class.java)
77-
private val TYPE_GROUP = 1
78-
private val TYPE_DEVICE = 2
77+
private const val TYPE_GROUP = 1
78+
private const val TYPE_DEVICE = 2
7979
}
8080

8181
data class Configuration(val deviceResourceId: Int,

app/src/main/java/li/klass/fhem/adapter/uiservice/StateUiService.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ package li.klass.fhem.adapter.uiservice
2727
import android.content.Context
2828
import android.content.Intent
2929
import kotlinx.coroutines.Dispatchers
30-
import kotlinx.coroutines.async
3130
import kotlinx.coroutines.coroutineScope
31+
import kotlinx.coroutines.withContext
3232
import li.klass.fhem.constants.Actions
3333
import li.klass.fhem.devices.backend.GenericDeviceService
3434
import li.klass.fhem.domain.core.FhemDevice
@@ -44,9 +44,9 @@ class StateUiService @Inject constructor(
4444
suspend fun setSubState(device: XmlListDevice,
4545
stateName: String, value: String, connectionId: String?, context: Context) {
4646
coroutineScope {
47-
async(Dispatchers.IO) {
47+
withContext(Dispatchers.IO) {
4848
genericDeviceService.setSubState(device, stateName, value, connectionId)
49-
}.await()
49+
}
5050
invokeUpdate(context)
5151
}
5252
}
@@ -56,9 +56,9 @@ class StateUiService @Inject constructor(
5656

5757
suspend fun setState(device: XmlListDevice, value: String, context: Context, connectionId: String?) {
5858
coroutineScope {
59-
async(Dispatchers.IO) {
59+
withContext(Dispatchers.IO) {
6060
genericDeviceService.setState(device, value, connectionId)
61-
}.await()
61+
}
6262
invokeUpdate(context)
6363
}
6464
}

app/src/main/java/li/klass/fhem/appwidget/ui/selection/AppWidgetSelectionActivity.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ abstract class AppWidgetSelectionActivity(private val widgetSize: WidgetSize) :
107107
appWidgetInstanceManager.save(widgetConfiguration)
108108

109109
GlobalScope.launch(Dispatchers.Main) {
110-
async(Dispatchers.IO) {
110+
withContext(Dispatchers.IO) {
111111
appWidgetUpdateService.updateWidget(widgetId)
112-
}.await()
112+
}
113113

114114
setResult(Activity.RESULT_OK, Intent().putExtra(EXTRA_APPWIDGET_ID, widgetId))
115115
finish()

0 commit comments

Comments
 (0)