-
Notifications
You must be signed in to change notification settings - Fork 590
/
MobileAppIntegrationPresenterBase.kt
62 lines (55 loc) · 2.19 KB
/
MobileAppIntegrationPresenterBase.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package io.homeassistant.companion.android.onboarding.integration
import android.util.Log
import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
open class MobileAppIntegrationPresenterBase constructor(
private val view: MobileAppIntegrationView,
private val integrationUseCase: IntegrationRepository
) : MobileAppIntegrationPresenter {
companion object {
internal const val TAG = "IntegrationPresenter"
}
private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job())
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO)
internal open suspend fun createRegistration(simple: Boolean, deviceName: String): DeviceRegistration {
return DeviceRegistration(
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})",
deviceName
)
}
override fun onRegistrationAttempt(simple: Boolean, deviceName: String) {
view.showLoading()
ioScope.launch {
val deviceRegistration: DeviceRegistration
try {
deviceRegistration = createRegistration(simple, deviceName)
} catch (e: Exception) {
Log.e(TAG, "Unable to create registration.", e)
withContext(mainScope.coroutineContext) {
view.showWarning()
}
return@launch
}
try {
integrationUseCase.registerDevice(deviceRegistration)
} catch (e: Exception) {
Log.e(TAG, "Unable to register with Home Assistant", e)
withContext(mainScope.coroutineContext) {
view.showError()
}
return@launch
}
view.deviceRegistered()
}
}
override fun onFinish() {
mainScope.cancel()
}
}