mirror of
https://github.com/home-assistant/android
synced 2024-10-06 16:19:38 +00:00
Architecture Simplification (#917)
* Common compiling.... So I guess I have that going for me... * It's very broken... * App builds and tests pass.... * Remove other now extra files.
This commit is contained in:
parent
e5baf1e64c
commit
6e13b16214
|
@ -115,7 +115,6 @@ play {
|
|||
|
||||
dependencies {
|
||||
implementation(project(":common"))
|
||||
implementation(project(":domain"))
|
||||
|
||||
implementation(Config.Dependency.Misc.blurView)
|
||||
implementation(Config.Dependency.Misc.iconDialog)
|
||||
|
|
|
@ -1,31 +1,29 @@
|
|||
package io.homeassistant.companion.android.launch
|
||||
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import com.google.firebase.iid.FirebaseInstanceId
|
||||
import io.homeassistant.companion.android.BuildConfig
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import java.lang.Exception
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.tasks.await
|
||||
|
||||
class LaunchPresenterImpl @Inject constructor(
|
||||
view: LaunchView,
|
||||
authenticationUseCase: AuthenticationUseCase,
|
||||
integrationUseCase: IntegrationUseCase
|
||||
authenticationUseCase: AuthenticationRepository,
|
||||
integrationUseCase: IntegrationRepository
|
||||
) : LaunchPresenterBase(view, authenticationUseCase, integrationUseCase) {
|
||||
override fun resyncRegistration() {
|
||||
mainScope.launch {
|
||||
try {
|
||||
integrationUseCase.updateRegistration(
|
||||
DeviceRegistration(
|
||||
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})",
|
||||
null,
|
||||
Build.MANUFACTURER ?: "UNKNOWN",
|
||||
Build.MODEL ?: "UNKNOWN",
|
||||
Build.VERSION.SDK_INT.toString(),
|
||||
pushToken = FirebaseInstanceId.getInstance().instanceId.await().token
|
||||
FirebaseInstanceId.getInstance().instanceId.await().token
|
||||
)
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Issue updating Registration", e)
|
||||
|
|
|
@ -21,10 +21,11 @@ import com.google.firebase.messaging.RemoteMessage
|
|||
import com.vdurmont.emoji.EmojiParser
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.authentication.SessionState
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.authentication.SessionState
|
||||
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import io.homeassistant.companion.android.sensors.LocationSensorManager
|
||||
import io.homeassistant.companion.android.util.UrlHandler
|
||||
import io.homeassistant.companion.android.util.cancel
|
||||
|
@ -61,13 +62,13 @@ class MessagingService : FirebaseMessagingService() {
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
@Inject
|
||||
lateinit var urlUseCase: UrlUseCase
|
||||
lateinit var urlUseCase: UrlRepository
|
||||
|
||||
@Inject
|
||||
lateinit var authenticationUseCase: AuthenticationUseCase
|
||||
lateinit var authenticationUseCase: AuthenticationRepository
|
||||
|
||||
private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job())
|
||||
|
||||
|
@ -274,7 +275,8 @@ class MessagingService : FirebaseMessagingService() {
|
|||
.setSmallIcon(R.drawable.ic_stat_ic_notification)
|
||||
.setStyle(
|
||||
NotificationCompat.BigTextStyle()
|
||||
.setSummaryText(prepareText(group.substring(GROUP_PREFIX.length))
|
||||
.setSummaryText(
|
||||
prepareText(group.substring(GROUP_PREFIX.length))
|
||||
)
|
||||
)
|
||||
.setGroup(group)
|
||||
|
@ -468,8 +470,10 @@ class MessagingService : FirebaseMessagingService() {
|
|||
}
|
||||
}
|
||||
|
||||
private suspend fun getImageBitmap(url: URL?, requiresAuth: Boolean = false): Bitmap? = withContext(
|
||||
Dispatchers.IO) {
|
||||
private suspend fun getImageBitmap(url: URL?, requiresAuth: Boolean = false): Bitmap? =
|
||||
withContext(
|
||||
Dispatchers.IO
|
||||
) {
|
||||
if (url == null)
|
||||
return@withContext null
|
||||
|
||||
|
@ -623,8 +627,10 @@ class MessagingService : FirebaseMessagingService() {
|
|||
}
|
||||
try {
|
||||
integrationUseCase.updateRegistration(
|
||||
DeviceRegistration(
|
||||
pushToken = token
|
||||
)
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
// TODO: Store for update later
|
||||
Log.e(TAG, "Issue updating token", e)
|
||||
|
|
|
@ -9,7 +9,7 @@ import android.widget.Toast
|
|||
import androidx.core.app.NotificationManagerCompat
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.util.NotificationActionContentHandler
|
||||
import io.homeassistant.companion.android.util.cancel
|
||||
import javax.inject.Inject
|
||||
|
@ -32,7 +32,7 @@ class NotificationActionReceiver : BroadcastReceiver() {
|
|||
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO + Job())
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
DaggerServiceComponent.builder()
|
||||
|
|
|
@ -2,14 +2,14 @@ package io.homeassistant.companion.android.onboarding.integration
|
|||
|
||||
import android.util.Log
|
||||
import com.google.firebase.iid.FirebaseInstanceId
|
||||
import io.homeassistant.companion.android.domain.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.tasks.await
|
||||
|
||||
class MobileAppIntegrationPresenterImpl @Inject constructor(
|
||||
view: MobileAppIntegrationView,
|
||||
integrationUseCase: IntegrationUseCase
|
||||
integrationUseCase: IntegrationRepository
|
||||
) : MobileAppIntegrationPresenterBase(
|
||||
view, integrationUseCase
|
||||
) {
|
||||
|
|
|
@ -12,7 +12,7 @@ import com.google.android.gms.location.ActivityRecognitionResult
|
|||
import com.google.android.gms.location.DetectedActivity
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
class ActivitySensorManager : BroadcastReceiver(), SensorManager {
|
||||
|
@ -33,7 +33,7 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager {
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
ensureInjected(context)
|
||||
|
|
|
@ -19,10 +19,10 @@ import com.google.android.gms.location.LocationResult
|
|||
import com.google.android.gms.location.LocationServices
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.UpdateLocation
|
||||
import io.homeassistant.companion.android.database.AppDatabase
|
||||
import io.homeassistant.companion.android.database.sensor.Attribute
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.UpdateLocation
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -65,7 +65,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO)
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@ import io.homeassistant.companion.android.onboarding.manual.ManualSetupFragment
|
|||
import io.homeassistant.companion.android.sensors.SensorsSettingsFragment
|
||||
import io.homeassistant.companion.android.settings.SettingsActivity
|
||||
import io.homeassistant.companion.android.settings.SettingsFragment
|
||||
import io.homeassistant.companion.android.settings.shortcuts.ShortcutsFragment
|
||||
import io.homeassistant.companion.android.settings.ssid.SsidDialogFragment
|
||||
import io.homeassistant.companion.android.webview.WebViewActivity
|
||||
|
||||
|
@ -31,8 +30,6 @@ interface PresenterComponent {
|
|||
|
||||
fun inject(fragment: SettingsFragment)
|
||||
|
||||
fun inject(fragment: ShortcutsFragment)
|
||||
|
||||
fun inject(activity: WebViewActivity)
|
||||
|
||||
fun inject(dialog: SsidDialogFragment)
|
||||
|
|
|
@ -21,9 +21,6 @@ import io.homeassistant.companion.android.onboarding.manual.ManualSetupView
|
|||
import io.homeassistant.companion.android.settings.SettingsPresenter
|
||||
import io.homeassistant.companion.android.settings.SettingsPresenterImpl
|
||||
import io.homeassistant.companion.android.settings.SettingsView
|
||||
import io.homeassistant.companion.android.settings.shortcuts.ShortcutsPresenter
|
||||
import io.homeassistant.companion.android.settings.shortcuts.ShortcutsPresenterImpl
|
||||
import io.homeassistant.companion.android.settings.shortcuts.ShortcutsView
|
||||
import io.homeassistant.companion.android.webview.WebView
|
||||
import io.homeassistant.companion.android.webview.WebViewPresenter
|
||||
import io.homeassistant.companion.android.webview.WebViewPresenterImpl
|
||||
|
@ -37,7 +34,6 @@ class PresenterModule {
|
|||
private lateinit var manualSetupView: ManualSetupView
|
||||
private lateinit var mobileAppIntegrationView: MobileAppIntegrationView
|
||||
private lateinit var settingsView: SettingsView
|
||||
private lateinit var shortcutsView: ShortcutsView
|
||||
private lateinit var webView: WebView
|
||||
|
||||
constructor(launchView: LaunchView) {
|
||||
|
@ -64,10 +60,6 @@ class PresenterModule {
|
|||
this.settingsView = settingsView
|
||||
}
|
||||
|
||||
constructor(shortcutsView: ShortcutsView) {
|
||||
this.shortcutsView = shortcutsView
|
||||
}
|
||||
|
||||
constructor(webView: WebView) {
|
||||
this.webView = webView
|
||||
}
|
||||
|
@ -90,9 +82,6 @@ class PresenterModule {
|
|||
@Provides
|
||||
fun provideSettingsView() = settingsView
|
||||
|
||||
@Provides
|
||||
fun provideShortcutsView() = shortcutsView
|
||||
|
||||
@Provides
|
||||
fun provideWebView() = webView
|
||||
|
||||
|
@ -117,9 +106,6 @@ class PresenterModule {
|
|||
@Binds
|
||||
fun bindSettingsPresenter(presenter: SettingsPresenterImpl): SettingsPresenter
|
||||
|
||||
@Binds
|
||||
fun bindShortcutsPresenter(presenter: ShortcutsPresenterImpl): ShortcutsPresenter
|
||||
|
||||
@Binds
|
||||
fun bindWebViewPresenterImpl(presenter: WebViewPresenterImpl): WebViewPresenter
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package io.homeassistant.companion.android.database.sensor
|
|||
|
||||
import androidx.room.Embedded
|
||||
import androidx.room.Relation
|
||||
import io.homeassistant.companion.android.domain.integration.SensorRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.SensorRegistration
|
||||
|
||||
data class SensorWithAttributes(
|
||||
@Embedded
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package io.homeassistant.companion.android.launch
|
||||
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.authentication.SessionState
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.authentication.SessionState
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
|
@ -11,8 +11,8 @@ import kotlinx.coroutines.launch
|
|||
|
||||
abstract class LaunchPresenterBase(
|
||||
private val view: LaunchView,
|
||||
private val authenticationUseCase: AuthenticationUseCase,
|
||||
internal val integrationUseCase: IntegrationUseCase
|
||||
private val authenticationUseCase: AuthenticationRepository,
|
||||
internal val integrationUseCase: IntegrationRepository
|
||||
) : LaunchPresenter {
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -15,7 +15,7 @@ import androidx.lifecycle.ViewModelProvider
|
|||
import androidx.navigation.fragment.findNavController
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.android.synthetic.main.fragment_nfc_edit.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -36,7 +36,7 @@ class NfcEditFragment : Fragment() {
|
|||
private lateinit var viewModel: NfcViewModel
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
|
|
|
@ -9,7 +9,7 @@ import android.widget.Toast
|
|||
import androidx.appcompat.app.AppCompatActivity
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.util.UrlHandler
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -25,7 +25,7 @@ class TagReaderActivity : AppCompatActivity() {
|
|||
private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job())
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
|
|
@ -3,7 +3,7 @@ package io.homeassistant.companion.android.onboarding.authentication
|
|||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -13,7 +13,7 @@ import kotlinx.coroutines.launch
|
|||
|
||||
class AuthenticationPresenterImpl @Inject constructor(
|
||||
private val view: AuthenticationView,
|
||||
private val authenticationUseCase: AuthenticationUseCase
|
||||
private val authenticationUseCase: AuthenticationRepository
|
||||
) : AuthenticationPresenter {
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package io.homeassistant.companion.android.onboarding.discovery
|
||||
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import java.net.URL
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -11,7 +11,7 @@ import kotlinx.coroutines.launch
|
|||
|
||||
class DiscoveryPresenterImpl @Inject constructor(
|
||||
val view: DiscoveryView,
|
||||
val urlUseCase: UrlUseCase
|
||||
val urlUseCase: UrlRepository
|
||||
) : DiscoveryPresenter {
|
||||
|
||||
private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job())
|
||||
|
|
|
@ -3,8 +3,8 @@ package io.homeassistant.companion.android.onboarding.integration
|
|||
import android.os.Build
|
||||
import android.util.Log
|
||||
import io.homeassistant.companion.android.BuildConfig
|
||||
import io.homeassistant.companion.android.domain.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
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
|
||||
|
@ -13,7 +13,7 @@ import kotlinx.coroutines.launch
|
|||
|
||||
open class MobileAppIntegrationPresenterBase constructor(
|
||||
private val view: MobileAppIntegrationView,
|
||||
private val integrationUseCase: IntegrationUseCase
|
||||
private val integrationUseCase: IntegrationRepository
|
||||
) : MobileAppIntegrationPresenter {
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package io.homeassistant.companion.android.onboarding.manual
|
||||
|
||||
import android.util.Log
|
||||
import io.homeassistant.companion.android.domain.MalformedHttpUrlException
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.common.data.MalformedHttpUrlException
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -12,7 +12,7 @@ import kotlinx.coroutines.launch
|
|||
|
||||
class ManualSetupPresenterImpl @Inject constructor(
|
||||
private val view: ManualSetupView,
|
||||
private val urlUseCase: UrlUseCase
|
||||
private val urlUseCase: UrlRepository
|
||||
) : ManualSetupPresenter {
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -3,7 +3,6 @@ package io.homeassistant.companion.android.sensors
|
|||
import android.content.pm.PackageManager
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import androidx.core.os.postDelayed
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceCategory
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
|
|
|
@ -6,9 +6,9 @@ import android.content.Context
|
|||
import android.content.Intent
|
||||
import android.util.Log
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.SensorRegistration
|
||||
import io.homeassistant.companion.android.database.AppDatabase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.SensorRegistration
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -47,7 +47,7 @@ class SensorReceiver : BroadcastReceiver() {
|
|||
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO + Job())
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private val chargingActions = listOf(
|
||||
Intent.ACTION_BATTERY_LOW,
|
||||
|
@ -104,7 +104,7 @@ class SensorReceiver : BroadcastReceiver() {
|
|||
|
||||
suspend fun updateSensors(
|
||||
context: Context,
|
||||
integrationUseCase: IntegrationUseCase
|
||||
integrationUseCase: IntegrationRepository
|
||||
) {
|
||||
val sensorDao = AppDatabase.getInstance(context).sensorDao()
|
||||
val enabledRegistrations = mutableListOf<SensorRegistration<Any>>()
|
||||
|
|
|
@ -17,7 +17,7 @@ import androidx.work.WorkManager
|
|||
import androidx.work.WorkerParameters
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -48,7 +48,7 @@ class SensorWorker(
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private val notificationManager = appContext.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
|
||||
|
||||
|
|
|
@ -7,14 +7,14 @@ import androidx.preference.PreferenceCategory
|
|||
import androidx.preference.PreferenceFragmentCompat
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.database.AppDatabase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import javax.inject.Inject
|
||||
|
||||
class SensorsSettingsFragment : PreferenceFragmentCompat() {
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private val handler = Handler()
|
||||
private val refresh = object : Runnable {
|
||||
|
|
|
@ -21,7 +21,6 @@ import io.homeassistant.companion.android.authenticator.Authenticator
|
|||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.nfc.NfcSetupActivity
|
||||
import io.homeassistant.companion.android.sensors.SensorsSettingsFragment
|
||||
import io.homeassistant.companion.android.settings.shortcuts.ShortcutsFragment
|
||||
import io.homeassistant.companion.android.settings.ssid.SsidDialogFragment
|
||||
import io.homeassistant.companion.android.settings.ssid.SsidPreference
|
||||
import javax.inject.Inject
|
||||
|
@ -88,15 +87,6 @@ class SettingsFragment : PreferenceFragmentCompat(), SettingsView {
|
|||
isValid
|
||||
}
|
||||
|
||||
val onClickShortcuts = Preference.OnPreferenceClickListener {
|
||||
parentFragmentManager
|
||||
.beginTransaction()
|
||||
.replace(R.id.content, ShortcutsFragment.newInstance())
|
||||
.addToBackStack(getString(R.string.shortcuts))
|
||||
.commit()
|
||||
true
|
||||
}
|
||||
|
||||
findPreference<Preference>("nfc_tags")?.let {
|
||||
it.isVisible = presenter.nfcEnabled()
|
||||
it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||
|
@ -120,14 +110,6 @@ class SettingsFragment : PreferenceFragmentCompat(), SettingsView {
|
|||
findPreference<SwitchPreference>("app_lock")?.onPreferenceChangeListener =
|
||||
onChangeBiometricValidator
|
||||
|
||||
val shortcuts = findPreference<Preference>("shortcuts")
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && presenter.getPanels().isNotEmpty()) {
|
||||
shortcuts?.onPreferenceClickListener =
|
||||
onClickShortcuts
|
||||
} else {
|
||||
shortcuts?.isVisible = false
|
||||
}
|
||||
|
||||
findPreference<Preference>("sensors")?.setOnPreferenceClickListener {
|
||||
parentFragmentManager
|
||||
.beginTransaction()
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
package io.homeassistant.companion.android.settings
|
||||
|
||||
import androidx.preference.PreferenceDataStore
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
|
||||
interface SettingsPresenter {
|
||||
fun getPreferenceDataStore(): PreferenceDataStore
|
||||
fun onCreate()
|
||||
fun onFinish()
|
||||
fun nfcEnabled(): Boolean
|
||||
fun getPanels(): Array<Panel>
|
||||
fun isLockEnabled(): Boolean
|
||||
fun sessionTimeOut(): Int
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@ package io.homeassistant.companion.android.settings
|
|||
|
||||
import android.util.Log
|
||||
import androidx.preference.PreferenceDataStore
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import io.homeassistant.companion.android.themes.ThemesManager
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -17,9 +17,9 @@ import kotlinx.coroutines.runBlocking
|
|||
|
||||
class SettingsPresenterImpl @Inject constructor(
|
||||
private val settingsView: SettingsView,
|
||||
private val urlUseCase: UrlUseCase,
|
||||
private val integrationUseCase: IntegrationUseCase,
|
||||
private val authenticationUseCase: AuthenticationUseCase,
|
||||
private val urlUseCase: UrlRepository,
|
||||
private val integrationUseCase: IntegrationRepository,
|
||||
private val authenticationUseCase: AuthenticationRepository,
|
||||
private val themesManager: ThemesManager
|
||||
) : SettingsPresenter, PreferenceDataStore() {
|
||||
|
||||
|
@ -76,7 +76,7 @@ class SettingsPresenterImpl @Inject constructor(
|
|||
}
|
||||
"registration_name" -> {
|
||||
try {
|
||||
integrationUseCase.updateRegistration(deviceName = value!!)
|
||||
integrationUseCase.updateRegistration(DeviceRegistration(deviceName = value!!))
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Issue updating registration with new device name", e)
|
||||
}
|
||||
|
@ -149,18 +149,6 @@ class SettingsPresenterImpl @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
override fun getPanels(): Array<Panel> {
|
||||
return runBlocking {
|
||||
var panels = arrayOf<Panel>()
|
||||
try {
|
||||
panels = integrationUseCase.getPanels()
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Issue getting panels.", e)
|
||||
}
|
||||
panels
|
||||
}
|
||||
}
|
||||
|
||||
override fun isLockEnabled(): Boolean {
|
||||
return runBlocking {
|
||||
authenticationUseCase.isLockEnabled()
|
||||
|
|
|
@ -1,126 +0,0 @@
|
|||
package io.homeassistant.companion.android.settings.shortcuts
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.content.Intent
|
||||
import android.content.pm.ShortcutInfo
|
||||
import android.content.pm.ShortcutManager
|
||||
import android.graphics.drawable.Icon
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import io.homeassistant.companion.android.DaggerPresenterComponent
|
||||
import io.homeassistant.companion.android.PresenterModule
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
import io.homeassistant.companion.android.webview.WebViewActivity
|
||||
import javax.inject.Inject
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
class ShortcutsFragment : Fragment(), ShortcutsView {
|
||||
|
||||
companion object {
|
||||
fun newInstance(): ShortcutsFragment {
|
||||
return ShortcutsFragment()
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
lateinit var presenter: ShortcutsPresenter
|
||||
|
||||
private lateinit var recyclerViewAdapter: ShortcutsRecyclerViewAdapter
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
DaggerPresenterComponent
|
||||
.builder()
|
||||
.appComponent((activity?.application as GraphComponentAccessor).appComponent)
|
||||
.presenterModule(PresenterModule(this))
|
||||
.build()
|
||||
.inject(this)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
val panels = presenter.getPanels().filter { panel ->
|
||||
!panel.title.isNullOrEmpty() && panel.title !== "lovelace" && panel.title !== "profile"
|
||||
}.sortedBy { panel -> panel.title }.map { panel ->
|
||||
panel.title_localized = when (panel.title) {
|
||||
"calendar" -> requireContext().getString(R.string.calendar)
|
||||
"config" -> requireContext().getString(R.string.config)
|
||||
"developer_tools" -> requireContext().getString(R.string.developer_tools)
|
||||
"history" -> requireContext().getString(R.string.history)
|
||||
"logbook" -> requireContext().getString(R.string.logbook)
|
||||
"mailbox" -> requireContext().getString(R.string.mailbox)
|
||||
"map" -> requireContext().getString(R.string.map)
|
||||
"profile" -> requireContext().getString(R.string.profile)
|
||||
"shopping_list" -> requireContext().getString(R.string.shopping_list)
|
||||
"states" -> requireContext().getString(R.string.states)
|
||||
else -> panel.title
|
||||
}
|
||||
panel
|
||||
}
|
||||
|
||||
recyclerViewAdapter =
|
||||
ShortcutsRecyclerViewAdapter(panels.toList(), requireContext()) { onCreateShortcut(it) }
|
||||
|
||||
return inflater.inflate(R.layout.fragment_shortcuts, container, false).apply {
|
||||
findViewById<RecyclerView>(R.id.recycler_view_shortcuts)?.apply {
|
||||
adapter = recyclerViewAdapter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun onCreateShortcut(panel: Panel) {
|
||||
val shortcutManager =
|
||||
requireContext().getSystemService(ShortcutManager::class.java)
|
||||
if (shortcutManager!!.isRequestPinShortcutSupported) {
|
||||
val pinShortcutInfo =
|
||||
ShortcutInfo.Builder(
|
||||
context,
|
||||
panel.title
|
||||
)
|
||||
.setShortLabel(panel.title_localized!!)
|
||||
.setLongLabel(panel.title_localized!!)
|
||||
.setIcon(
|
||||
Icon.createWithResource(
|
||||
context,
|
||||
R.drawable.app_icon
|
||||
)
|
||||
)
|
||||
.setIntent(
|
||||
WebViewActivity.newInstance(
|
||||
requireContext(),
|
||||
panel.url_path
|
||||
).apply {
|
||||
this.action = Intent.ACTION_VIEW
|
||||
}
|
||||
)
|
||||
.build()
|
||||
val pinnedShortcutCallbackIntent =
|
||||
shortcutManager.createShortcutResultIntent(
|
||||
pinShortcutInfo
|
||||
)
|
||||
val successCallback =
|
||||
PendingIntent.getBroadcast(
|
||||
context,
|
||||
0,
|
||||
pinnedShortcutCallbackIntent,
|
||||
0
|
||||
)
|
||||
shortcutManager.requestPinShortcut(
|
||||
pinShortcutInfo,
|
||||
successCallback.intentSender
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package io.homeassistant.companion.android.settings.shortcuts
|
||||
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
|
||||
interface ShortcutsPresenter {
|
||||
fun getPanels(): Array<Panel>
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
package io.homeassistant.companion.android.settings.shortcuts
|
||||
|
||||
import android.util.Log
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.runBlocking
|
||||
|
||||
class ShortcutsPresenterImpl @Inject constructor(
|
||||
private val integrationUseCase: IntegrationUseCase
|
||||
) : ShortcutsPresenter {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "ShortcutsPresenter"
|
||||
}
|
||||
|
||||
override fun getPanels(): Array<Panel> {
|
||||
return runBlocking {
|
||||
var panels = arrayOf<Panel>()
|
||||
try {
|
||||
panels = integrationUseCase.getPanels()
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Issue getting panels.", e)
|
||||
}
|
||||
panels
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
package io.homeassistant.companion.android.settings.shortcuts
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import io.homeassistant.companion.android.databinding.ItemShortcutBinding
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
|
||||
class ShortcutsRecyclerViewAdapter(
|
||||
private val panels: List<Panel>,
|
||||
val context: Context,
|
||||
private val onCreateShortcut: (Panel) -> Unit
|
||||
) :
|
||||
RecyclerView.Adapter<ShortcutsRecyclerViewAdapter.ShortcutBindingViewHolder>() {
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return panels.size
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(
|
||||
parent: ViewGroup,
|
||||
viewType: Int
|
||||
): ShortcutBindingViewHolder {
|
||||
val binding =
|
||||
ItemShortcutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
return ShortcutBindingViewHolder(binding) { onCreateShortcut(panels[it]) }
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ShortcutBindingViewHolder, position: Int) {
|
||||
val panel = panels[position]
|
||||
val binding = ItemShortcutBinding.bind(holder.itemView)
|
||||
binding.panelText.text = panel.title_localized
|
||||
}
|
||||
|
||||
class ShortcutBindingViewHolder(
|
||||
binding: ItemShortcutBinding,
|
||||
private val clickListener: (Int) -> Unit
|
||||
) : RecyclerView.ViewHolder(binding.root) {
|
||||
init {
|
||||
binding.actionAdd.setOnClickListener { clickListener(adapterPosition) }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
package io.homeassistant.companion.android.settings.shortcuts
|
||||
|
||||
interface ShortcutsView
|
|
@ -7,12 +7,12 @@ import android.webkit.WebSettings
|
|||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.webkit.WebSettingsCompat
|
||||
import androidx.webkit.WebViewFeature
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCase
|
||||
import io.homeassistant.companion.android.common.data.themes.ThemesRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.runBlocking
|
||||
|
||||
class ThemesManager @Inject constructor(
|
||||
private val themesUseCase: ThemesUseCase
|
||||
private val themesUseCase: ThemesRepository
|
||||
) {
|
||||
|
||||
fun getCurrentTheme(): String {
|
||||
|
|
|
@ -5,12 +5,9 @@ import android.app.PictureInPictureParams
|
|||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.pm.ShortcutInfo
|
||||
import android.content.pm.ShortcutManager
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Color
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.Icon
|
||||
import android.net.Uri
|
||||
import android.net.http.SslError
|
||||
import android.os.Build
|
||||
|
@ -344,7 +341,6 @@ class WebViewActivity : AppCompatActivity(), io.homeassistant.companion.android.
|
|||
.getString("event") == "connected"
|
||||
if (isConnected) {
|
||||
alertDialog?.cancel()
|
||||
setupPanelShortcuts()
|
||||
}
|
||||
}
|
||||
"config/get" -> {
|
||||
|
@ -843,30 +839,4 @@ class WebViewActivity : AppCompatActivity(), io.homeassistant.companion.android.
|
|||
}
|
||||
}, CONNECTION_DELAY)
|
||||
}
|
||||
|
||||
private fun setupPanelShortcuts() {
|
||||
if (Build.VERSION.SDK_INT >= 25) {
|
||||
val panels = presenter.getPanels()
|
||||
|
||||
val shortcutManager = getSystemService(ShortcutManager::class.java)
|
||||
shortcutManager!!.dynamicShortcuts = panels
|
||||
.filter { panel -> !panel.title.isNullOrEmpty() && panel.component_name.contains("lovelace") }
|
||||
.take(5)
|
||||
.map { panel ->
|
||||
ShortcutInfo.Builder(
|
||||
this,
|
||||
panel.component_name
|
||||
)
|
||||
.setShortLabel(panel.title!!)
|
||||
.setLongLabel(panel.title!!)
|
||||
.setIcon(Icon.createWithResource(this, R.drawable.app_icon))
|
||||
.setIntent(
|
||||
newInstance(this, panel.url_path).apply {
|
||||
this.action = Intent.ACTION_VIEW
|
||||
}
|
||||
)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package io.homeassistant.companion.android.webview
|
||||
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
|
||||
interface WebViewPresenter {
|
||||
|
||||
fun onViewReady(path: String?)
|
||||
|
@ -10,8 +8,6 @@ interface WebViewPresenter {
|
|||
|
||||
fun onRevokeExternalAuth(callback: String)
|
||||
|
||||
fun getPanels(): Array<Panel>
|
||||
|
||||
fun clearKnownUrls()
|
||||
|
||||
fun isFullScreen(): Boolean
|
||||
|
|
|
@ -3,11 +3,10 @@ package io.homeassistant.companion.android.webview
|
|||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.authentication.SessionState
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.authentication.SessionState
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import io.homeassistant.companion.android.util.UrlHandler
|
||||
import java.net.URL
|
||||
import java.util.regex.Matcher
|
||||
|
@ -22,9 +21,9 @@ import kotlinx.coroutines.runBlocking
|
|||
|
||||
class WebViewPresenterImpl @Inject constructor(
|
||||
private val view: WebView,
|
||||
private val urlUseCase: UrlUseCase,
|
||||
private val authenticationUseCase: AuthenticationUseCase,
|
||||
private val integrationUseCase: IntegrationUseCase
|
||||
private val urlUseCase: UrlRepository,
|
||||
private val authenticationUseCase: AuthenticationRepository,
|
||||
private val integrationUseCase: IntegrationRepository
|
||||
) : WebViewPresenter {
|
||||
|
||||
companion object {
|
||||
|
@ -105,18 +104,6 @@ class WebViewPresenterImpl @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
override fun getPanels(): Array<Panel> {
|
||||
return runBlocking {
|
||||
var panels = arrayOf<Panel>()
|
||||
try {
|
||||
panels = integrationUseCase.getPanels()
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Issue getting panels.", e)
|
||||
}
|
||||
panels
|
||||
}
|
||||
}
|
||||
|
||||
override fun clearKnownUrls() {
|
||||
mainScope.launch {
|
||||
urlUseCase.saveUrl("", true)
|
||||
|
|
|
@ -19,10 +19,10 @@ import com.maltaisn.icondialog.pack.IconPackLoader
|
|||
import com.maltaisn.iconpack.mdi.createMaterialDesignIconPack
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.database.AppDatabase
|
||||
import io.homeassistant.companion.android.database.widget.ButtonWidgetDao
|
||||
import io.homeassistant.companion.android.database.widget.ButtonWidgetEntity
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import java.util.regex.Pattern
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -46,7 +46,7 @@ class ButtonWidget : AppWidgetProvider() {
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
lateinit var buttonWidgetDao: ButtonWidgetDao
|
||||
|
||||
|
|
|
@ -27,9 +27,9 @@ import com.maltaisn.icondialog.pack.IconPackLoader
|
|||
import com.maltaisn.iconpack.mdi.createMaterialDesignIconPack
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.Entity
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.Service
|
||||
import io.homeassistant.companion.android.common.data.integration.Entity
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.Service
|
||||
import javax.inject.Inject
|
||||
import kotlinx.android.synthetic.main.widget_button_configure.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -45,7 +45,7 @@ class ButtonWidgetConfigureActivity : AppCompatActivity(), IconDialog.Callback {
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO)
|
||||
|
||||
|
|
|
@ -11,10 +11,10 @@ import android.util.TypedValue
|
|||
import android.widget.RemoteViews
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.database.AppDatabase
|
||||
import io.homeassistant.companion.android.database.widget.StaticWidgetDao
|
||||
import io.homeassistant.companion.android.database.widget.StaticWidgetEntity
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -39,7 +39,7 @@ class StaticWidget : AppWidgetProvider() {
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private lateinit var staticWidgetDao: StaticWidgetDao
|
||||
|
||||
|
|
|
@ -16,8 +16,8 @@ import android.widget.MultiAutoCompleteTextView.CommaTokenizer
|
|||
import android.widget.Toast
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.Entity
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.Entity
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.android.synthetic.main.widget_static_configure.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -31,7 +31,7 @@ class StaticWidgetConfigureActivity : Activity() {
|
|||
private val TAG: String = "StaticWidgetConfigAct"
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private var entities = LinkedHashMap<String, Entity<Any>>()
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ import android.view.ViewGroup
|
|||
import android.widget.AutoCompleteTextView
|
||||
import android.widget.MultiAutoCompleteTextView.CommaTokenizer
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import io.homeassistant.companion.android.domain.integration.Entity
|
||||
import io.homeassistant.companion.android.domain.integration.Service
|
||||
import io.homeassistant.companion.android.common.data.integration.Entity
|
||||
import io.homeassistant.companion.android.common.data.integration.Service
|
||||
import java.lang.Exception
|
||||
import kotlinx.android.synthetic.main.widget_button_configure_dynamic_field.view.*
|
||||
|
||||
|
|
|
@ -10,10 +10,10 @@ import android.util.Log
|
|||
import android.widget.RemoteViews
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.database.AppDatabase
|
||||
import io.homeassistant.companion.android.database.widget.TemplateWidgetDao
|
||||
import io.homeassistant.companion.android.database.widget.TemplateWidgetEntity
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.widgets.DaggerProviderComponent
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -33,7 +33,7 @@ class TemplateWidget : AppWidgetProvider() {
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private lateinit var templateWidgetDao: TemplateWidgetDao
|
||||
|
||||
|
@ -118,7 +118,7 @@ class TemplateWidget : AppWidgetProvider() {
|
|||
if (widget != null) {
|
||||
var renderedTemplate = "Loading"
|
||||
try {
|
||||
renderedTemplate = integrationUseCase.renderTemplate(widget.template)
|
||||
renderedTemplate = integrationUseCase.renderTemplate(widget.template, mapOf())
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to render template: ${widget.template}", e)
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ import androidx.appcompat.app.AppCompatActivity
|
|||
import androidx.core.widget.doAfterTextChanged
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.widgets.DaggerProviderComponent
|
||||
import javax.inject.Inject
|
||||
import kotlinx.android.synthetic.main.widget_template_configure.*
|
||||
|
@ -24,7 +24,7 @@ class TemplateWidgetConfigureActivity : AppCompatActivity() {
|
|||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationUseCase
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
||||
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO)
|
||||
|
||||
|
@ -70,7 +70,7 @@ class TemplateWidgetConfigureActivity : AppCompatActivity() {
|
|||
var templateText: String?
|
||||
var enabled: Boolean
|
||||
try {
|
||||
templateText = integrationUseCase.renderTemplate(editableText.toString())
|
||||
templateText = integrationUseCase.renderTemplate(editableText.toString(), mapOf())
|
||||
enabled = true
|
||||
} catch (e: Exception) {
|
||||
templateText = "Error in template"
|
||||
|
|
|
@ -1,27 +1,25 @@
|
|||
package io.homeassistant.companion.android.launch
|
||||
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import io.homeassistant.companion.android.BuildConfig
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class LaunchPresenterImpl @Inject constructor(
|
||||
view: LaunchView,
|
||||
authenticationUseCase: AuthenticationUseCase,
|
||||
integrationUseCase: IntegrationUseCase
|
||||
authenticationUseCase: AuthenticationRepository,
|
||||
integrationUseCase: IntegrationRepository
|
||||
) : LaunchPresenterBase(view, authenticationUseCase, integrationUseCase) {
|
||||
override fun resyncRegistration() {
|
||||
mainScope.launch {
|
||||
try {
|
||||
integrationUseCase.updateRegistration(
|
||||
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})",
|
||||
null,
|
||||
Build.MANUFACTURER ?: "UNKNOWN",
|
||||
Build.MODEL ?: "UNKNOWN",
|
||||
Build.VERSION.SDK_INT.toString()
|
||||
DeviceRegistration(
|
||||
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
|
||||
)
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Issue updating Registration", e)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package io.homeassistant.companion.android.onboarding.integration
|
||||
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
class MobileAppIntegrationPresenterImpl @Inject constructor(
|
||||
view: MobileAppIntegrationView,
|
||||
integrationUseCase: IntegrationUseCase
|
||||
integrationUseCase: IntegrationRepository
|
||||
) : MobileAppIntegrationPresenterBase(view, integrationUseCase)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package io.homeassistant.companion.android.launch
|
||||
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.authentication.SessionState
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.authentication.SessionState
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.mockk
|
||||
import io.mockk.verify
|
||||
|
@ -23,8 +23,8 @@ object LaunchPresenterImplSpec : Spek({
|
|||
}
|
||||
|
||||
describe("launch presenter") {
|
||||
val authenticationUseCase by memoized { mockk<AuthenticationUseCase>() }
|
||||
val integrationUseCase by memoized { mockk<IntegrationUseCase>() }
|
||||
val authenticationUseCase by memoized { mockk<AuthenticationRepository>() }
|
||||
val integrationUseCase by memoized { mockk<IntegrationRepository>() }
|
||||
val view by memoized { mockk<LaunchView>(relaxUnitFun = true) }
|
||||
val presenter by memoized { LaunchPresenterImpl(view, authenticationUseCase, integrationUseCase) }
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package io.homeassistant.companion.android.onboarding.authentication
|
||||
|
||||
import android.net.Uri
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.mockk.Called
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerify
|
||||
|
@ -28,7 +28,7 @@ object AuthenticationPresenterImplSpec : Spek({
|
|||
}
|
||||
|
||||
describe("authentication presenter") {
|
||||
val authenticationUseCase by memoized { mockk<AuthenticationUseCase>(relaxUnitFun = true) }
|
||||
val authenticationUseCase by memoized { mockk<AuthenticationRepository>(relaxUnitFun = true) }
|
||||
val view by memoized { mockk<AuthenticationView>(relaxUnitFun = true) }
|
||||
val presenter by memoized { AuthenticationPresenterImpl(view, authenticationUseCase) }
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@ package io.homeassistant.companion.android.onboarding.integration
|
|||
|
||||
import android.os.Build
|
||||
import io.homeassistant.companion.android.BuildConfig
|
||||
import io.homeassistant.companion.android.domain.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerify
|
||||
import io.mockk.coVerifyAll
|
||||
|
@ -27,7 +27,7 @@ object MobileAppIntegrationPresenterImplSpec : Spek({
|
|||
}
|
||||
|
||||
describe("presenter") {
|
||||
val integrationUseCase by memoized { mockk<IntegrationUseCase>(relaxUnitFun = true) }
|
||||
val integrationUseCase by memoized { mockk<IntegrationRepository>(relaxUnitFun = true) }
|
||||
val view by memoized { mockk<MobileAppIntegrationView>(relaxUnitFun = true) }
|
||||
val presenter by memoized { MobileAppIntegrationPresenterBase(view, integrationUseCase) }
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package io.homeassistant.companion.android.onboarding.manual
|
||||
|
||||
import io.homeassistant.companion.android.domain.MalformedHttpUrlException
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.common.data.MalformedHttpUrlException
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerifyAll
|
||||
import io.mockk.just
|
||||
|
@ -25,7 +25,7 @@ object ManualSetupPresenterImplSpec : Spek({
|
|||
}
|
||||
|
||||
describe("presenter") {
|
||||
val urlUseCase by memoized { mockk<UrlUseCase>(relaxUnitFun = true) }
|
||||
val urlUseCase by memoized { mockk<UrlRepository>(relaxUnitFun = true) }
|
||||
val view by memoized { mockk<ManualSetupView>(relaxUnitFun = true) }
|
||||
val presenter by memoized { ManualSetupPresenterImpl(view, urlUseCase) }
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package io.homeassistant.companion.android.webview
|
||||
|
||||
import android.net.Uri
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCase
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.themes.ThemesRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.every
|
||||
import io.mockk.just
|
||||
|
@ -31,10 +31,10 @@ object WebViewPresenterImplSpec : Spek({
|
|||
}
|
||||
|
||||
describe("presenter") {
|
||||
val urlUseCase by memoized { mockk<UrlUseCase>(relaxUnitFun = true) }
|
||||
val authenticationUseCase by memoized { mockk<AuthenticationUseCase>(relaxUnitFun = true) }
|
||||
val integrationUseCase by memoized { mockk<IntegrationUseCase>(relaxUnitFun = true) }
|
||||
val themesUseCase by memoized { mockk<ThemesUseCase>(relaxUnitFun = true) }
|
||||
val urlUseCase by memoized { mockk<UrlRepository>(relaxUnitFun = true) }
|
||||
val authenticationUseCase by memoized { mockk<AuthenticationRepository>(relaxUnitFun = true) }
|
||||
val integrationUseCase by memoized { mockk<IntegrationRepository>(relaxUnitFun = true) }
|
||||
val themesUseCase by memoized { mockk<ThemesRepository>(relaxUnitFun = true) }
|
||||
val view by memoized { mockk<WebView>(relaxUnitFun = true) }
|
||||
val presenter by memoized { WebViewPresenterImpl(view, urlUseCase, authenticationUseCase, integrationUseCase) }
|
||||
|
||||
|
@ -58,7 +58,7 @@ object WebViewPresenterImplSpec : Spek({
|
|||
|
||||
describe("on get external auth on success") {
|
||||
beforeEachTest {
|
||||
coEvery { authenticationUseCase.retrieveExternalAuthentication() } returns "{\"access_token\":\"ABCDEFGH\",\"expires_in\":1800}"
|
||||
coEvery { authenticationUseCase.retrieveExternalAuthentication(false) } returns "{\"access_token\":\"ABCDEFGH\",\"expires_in\":1800}"
|
||||
presenter.onGetExternalAuth("externalAuthSetToken", false)
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ object WebViewPresenterImplSpec : Spek({
|
|||
|
||||
describe("on get external auth on error") {
|
||||
beforeEachTest {
|
||||
coEvery { authenticationUseCase.retrieveExternalAuthentication() } throws Exception()
|
||||
coEvery { authenticationUseCase.retrieveExternalAuthentication(false) } throws Exception()
|
||||
presenter.onGetExternalAuth("externalAuthSetToken", false)
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@ allprojects {
|
|||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
maven(url = Config.Repository.lokalize)
|
||||
}
|
||||
|
||||
apply(plugin = "org.jlleitschuh.gradle.ktlint")
|
||||
|
|
|
@ -13,9 +13,6 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":domain"))
|
||||
implementation(project(":data"))
|
||||
|
||||
implementation(Config.Dependency.Kotlin.core)
|
||||
implementation(Config.Dependency.Kotlin.coroutines)
|
||||
|
||||
|
@ -23,4 +20,14 @@ dependencies {
|
|||
kapt(Config.Dependency.Google.daggerCompiler)
|
||||
|
||||
implementation(Config.Dependency.Square.retrofit)
|
||||
implementation(Config.Dependency.Square.retrofitJacksonConverter)
|
||||
implementation(Config.Dependency.Square.okhttp)
|
||||
implementation(Config.Dependency.Square.okhttpInterceptor)
|
||||
implementation(Config.Dependency.Misc.jackson)
|
||||
|
||||
testImplementation(Config.Dependency.Square.okhttpMockServer)
|
||||
testImplementation(Config.Dependency.Testing.spek2Jvm)
|
||||
testRuntimeOnly(Config.Dependency.Testing.spek2JUnit)
|
||||
testImplementation(Config.Dependency.Testing.assertJ)
|
||||
testImplementation(Config.Dependency.Testing.mockk)
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package io.homeassistant.companion.android.common
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import io.homeassistant.companion.android.data.LocalStorage
|
||||
import io.homeassistant.companion.android.common.data.LocalStorage
|
||||
|
||||
class LocalStorageImpl(private val sharedPreferences: SharedPreferences) : LocalStorage {
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
package io.homeassistant.companion.android.common.dagger
|
||||
|
||||
import dagger.Component
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCase
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.themes.ThemesRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
|
||||
@Component(dependencies = [DomainComponent::class])
|
||||
@Component(modules = [DataModule::class])
|
||||
interface AppComponent {
|
||||
|
||||
fun urlUseCase(): UrlUseCase
|
||||
fun urlUseCase(): UrlRepository
|
||||
|
||||
fun authenticationUseCase(): AuthenticationUseCase
|
||||
fun authenticationUseCase(): AuthenticationRepository
|
||||
|
||||
fun integrationUseCase(): IntegrationUseCase
|
||||
fun integrationUseCase(): IntegrationRepository
|
||||
|
||||
fun themesUseCase(): ThemesUseCase
|
||||
fun themesUseCase(): ThemesRepository
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package io.homeassistant.companion.android.common.dagger
|
||||
|
||||
import dagger.Component
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesRepository
|
||||
import io.homeassistant.companion.android.domain.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.themes.ThemesRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
|
||||
@Component(modules = [DataModule::class])
|
||||
interface DataComponent {
|
||||
|
|
|
@ -4,19 +4,19 @@ import android.os.Build
|
|||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import io.homeassistant.companion.android.data.HomeAssistantRetrofit
|
||||
import io.homeassistant.companion.android.data.LocalStorage
|
||||
import io.homeassistant.companion.android.data.authentication.AuthenticationRepositoryImpl
|
||||
import io.homeassistant.companion.android.data.authentication.AuthenticationService
|
||||
import io.homeassistant.companion.android.data.integration.IntegrationRepositoryImpl
|
||||
import io.homeassistant.companion.android.data.integration.IntegrationService
|
||||
import io.homeassistant.companion.android.data.themes.ThemesRepositoryImpl
|
||||
import io.homeassistant.companion.android.data.url.UrlRepositoryImpl
|
||||
import io.homeassistant.companion.android.data.wifi.WifiHelper
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesRepository
|
||||
import io.homeassistant.companion.android.domain.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.HomeAssistantRetrofit
|
||||
import io.homeassistant.companion.android.common.data.LocalStorage
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.authentication.impl.AuthenticationRepositoryImpl
|
||||
import io.homeassistant.companion.android.common.data.authentication.impl.AuthenticationService
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.IntegrationRepositoryImpl
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.IntegrationService
|
||||
import io.homeassistant.companion.android.common.data.themes.ThemesRepository
|
||||
import io.homeassistant.companion.android.common.data.themes.ThemesRepositoryImpl
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepositoryImpl
|
||||
import io.homeassistant.companion.android.common.data.wifi.WifiHelper
|
||||
import javax.inject.Named
|
||||
|
||||
@Module(includes = [DataModule.Declaration::class])
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
package io.homeassistant.companion.android.common.dagger
|
||||
|
||||
import dagger.Component
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCase
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
|
||||
@Component(dependencies = [DataComponent::class], modules = [DomainModule::class])
|
||||
interface DomainComponent {
|
||||
|
||||
fun urlUseCase(): UrlUseCase
|
||||
|
||||
fun authenticationUseCase(): AuthenticationUseCase
|
||||
|
||||
fun integrationUseCase(): IntegrationUseCase
|
||||
|
||||
fun themesUseCase(): ThemesUseCase
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
package io.homeassistant.companion.android.common.dagger
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCaseImpl
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCaseImpl
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCase
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCaseImpl
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
||||
import io.homeassistant.companion.android.domain.url.UrlUseCaseImpl
|
||||
|
||||
@Module
|
||||
interface DomainModule {
|
||||
|
||||
@Binds
|
||||
fun bindUrlUseCase(useCaseImpl: UrlUseCaseImpl): UrlUseCase
|
||||
|
||||
@Binds
|
||||
fun bindAuthenticationUseCase(useCaseImpl: AuthenticationUseCaseImpl): AuthenticationUseCase
|
||||
|
||||
@Binds
|
||||
fun bindIntegrationUseCase(useCaseImpl: IntegrationUseCaseImpl): IntegrationUseCase
|
||||
|
||||
@Binds
|
||||
fun bindThemesUseCase(useCaseImpl: ThemesUseCaseImpl): ThemesUseCase
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package io.homeassistant.companion.android.common.dagger
|
||||
|
||||
import javax.inject.Scope
|
||||
|
||||
@Scope
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class DomainScope
|
|
@ -6,7 +6,7 @@ import android.content.Context
|
|||
import android.net.wifi.WifiManager
|
||||
import android.provider.Settings
|
||||
import io.homeassistant.companion.android.common.LocalStorageImpl
|
||||
import io.homeassistant.companion.android.common.wifi.WifiHelperImpl
|
||||
import io.homeassistant.companion.android.common.data.wifi.WifiHelperImpl
|
||||
|
||||
class Graph(
|
||||
private val application: Application,
|
||||
|
@ -14,8 +14,6 @@ class Graph(
|
|||
) {
|
||||
|
||||
lateinit var appComponent: AppComponent
|
||||
private lateinit var dataComponent: DataComponent
|
||||
private lateinit var domainComponent: DomainComponent
|
||||
|
||||
init {
|
||||
buildComponent()
|
||||
|
@ -23,8 +21,7 @@ class Graph(
|
|||
|
||||
@SuppressLint("HardwareIds")
|
||||
private fun buildComponent() {
|
||||
dataComponent = DaggerDataComponent
|
||||
.builder()
|
||||
appComponent = DaggerAppComponent.builder()
|
||||
.dataModule(
|
||||
DataModule(
|
||||
LocalStorageImpl(
|
||||
|
@ -52,18 +49,12 @@ class Graph(
|
|||
)
|
||||
),
|
||||
WifiHelperImpl(application.getSystemService(Context.WIFI_SERVICE) as WifiManager),
|
||||
Settings.Secure.getString(application.contentResolver, Settings.Secure.ANDROID_ID)
|
||||
Settings.Secure.getString(
|
||||
application.contentResolver,
|
||||
Settings.Secure.ANDROID_ID
|
||||
)
|
||||
)
|
||||
)
|
||||
.build()
|
||||
|
||||
domainComponent = DaggerDomainComponent
|
||||
.builder()
|
||||
.dataComponent(dataComponent)
|
||||
.build()
|
||||
|
||||
appComponent = DaggerAppComponent.builder()
|
||||
.domainComponent(domainComponent)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package io.homeassistant.companion.android.data
|
||||
package io.homeassistant.companion.android.common.data
|
||||
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategy
|
||||
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
|
||||
import io.homeassistant.companion.android.domain.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.runBlocking
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data
|
||||
package io.homeassistant.companion.android.common.data
|
||||
|
||||
interface LocalStorage {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain
|
||||
package io.homeassistant.companion.android.common.data
|
||||
|
||||
import java.net.MalformedURLException
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.authentication
|
||||
package io.homeassistant.companion.android.common.data.authentication
|
||||
|
||||
import java.net.URL
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package io.homeassistant.companion.android.common.data.authentication
|
||||
|
||||
class AuthorizationException : Exception()
|
|
@ -0,0 +1,6 @@
|
|||
package io.homeassistant.companion.android.common.data.authentication
|
||||
|
||||
enum class SessionState {
|
||||
ANONYMOUS,
|
||||
CONNECTED,
|
||||
}
|
|
@ -1,15 +1,15 @@
|
|||
package io.homeassistant.companion.android.data.authentication
|
||||
package io.homeassistant.companion.android.common.data.authentication.impl
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import io.homeassistant.companion.android.data.LocalStorage
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.domain.authentication.SessionState
|
||||
import io.homeassistant.companion.android.domain.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.LocalStorage
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthorizationException
|
||||
import io.homeassistant.companion.android.common.data.authentication.SessionState
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import java.net.URL
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import org.threeten.bp.Instant
|
||||
|
||||
class AuthenticationRepositoryImpl @Inject constructor(
|
||||
private val authenticationService: AuthenticationService,
|
||||
|
@ -35,7 +35,7 @@ class AuthenticationRepositoryImpl @Inject constructor(
|
|||
saveSession(
|
||||
Session(
|
||||
it.accessToken,
|
||||
Instant.now().epochSecond + it.expiresIn,
|
||||
System.currentTimeMillis() / 1000 + it.expiresIn,
|
||||
it.refreshToken!!,
|
||||
it.tokenType
|
||||
)
|
||||
|
@ -116,7 +116,7 @@ class AuthenticationRepositoryImpl @Inject constructor(
|
|||
val refreshedToken = it.body() ?: throw AuthorizationException()
|
||||
val refreshSession = Session(
|
||||
refreshedToken.accessToken,
|
||||
Instant.now().epochSecond + refreshedToken.expiresIn,
|
||||
System.currentTimeMillis() / 1000 + refreshedToken.expiresIn,
|
||||
session.refreshToken,
|
||||
refreshedToken.tokenType
|
||||
)
|
|
@ -1,5 +1,6 @@
|
|||
package io.homeassistant.companion.android.data.authentication
|
||||
package io.homeassistant.companion.android.common.data.authentication.impl
|
||||
|
||||
import io.homeassistant.companion.android.common.data.authentication.impl.entities.Token
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.Field
|
||||
import retrofit2.http.FormUrlEncoded
|
|
@ -1,6 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.authentication
|
||||
|
||||
import org.threeten.bp.Instant
|
||||
package io.homeassistant.companion.android.common.data.authentication.impl
|
||||
|
||||
data class Session(
|
||||
val accessToken: String,
|
||||
|
@ -11,5 +9,5 @@ data class Session(
|
|||
|
||||
fun isExpired() = expiresIn() < 0
|
||||
|
||||
fun expiresIn() = expiresTimestamp - Instant.now().epochSecond
|
||||
fun expiresIn() = expiresTimestamp - System.currentTimeMillis() / 1000
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.authentication
|
||||
package io.homeassistant.companion.android.common.data.authentication.impl.entities
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
data class DeviceRegistration(
|
||||
val appVersion: String? = null,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
import java.util.Calendar
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
class IntegrationException : Exception()
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
interface IntegrationRepository {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
data class Panel(
|
||||
val component_name: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
data class SensorRegistration<T>(
|
||||
val uniqueId: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
data class Service(
|
||||
val domain: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
data class ServiceData(
|
||||
val description: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
data class ServiceFields(
|
||||
val description: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
data class UpdateLocation(
|
||||
val locationName: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.integration
|
||||
package io.homeassistant.companion.android.common.data.integration
|
||||
|
||||
data class ZoneAttributes(
|
||||
val hidden: Boolean,
|
|
@ -1,25 +1,26 @@
|
|||
package io.homeassistant.companion.android.data.integration
|
||||
package io.homeassistant.companion.android.common.data.integration.impl
|
||||
|
||||
import io.homeassistant.companion.android.data.LocalStorage
|
||||
import io.homeassistant.companion.android.data.integration.entities.EntityResponse
|
||||
import io.homeassistant.companion.android.data.integration.entities.FireEventRequest
|
||||
import io.homeassistant.companion.android.data.integration.entities.GetConfigResponse
|
||||
import io.homeassistant.companion.android.data.integration.entities.IntegrationRequest
|
||||
import io.homeassistant.companion.android.data.integration.entities.RegisterDeviceRequest
|
||||
import io.homeassistant.companion.android.data.integration.entities.SensorRequest
|
||||
import io.homeassistant.companion.android.data.integration.entities.ServiceCallRequest
|
||||
import io.homeassistant.companion.android.data.integration.entities.Template
|
||||
import io.homeassistant.companion.android.data.integration.entities.UpdateLocationRequest
|
||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.domain.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.domain.integration.Entity
|
||||
import io.homeassistant.companion.android.domain.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
import io.homeassistant.companion.android.domain.integration.SensorRegistration
|
||||
import io.homeassistant.companion.android.domain.integration.Service
|
||||
import io.homeassistant.companion.android.domain.integration.UpdateLocation
|
||||
import io.homeassistant.companion.android.domain.integration.ZoneAttributes
|
||||
import io.homeassistant.companion.android.domain.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.LocalStorage
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.Entity
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationException
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.Panel
|
||||
import io.homeassistant.companion.android.common.data.integration.SensorRegistration
|
||||
import io.homeassistant.companion.android.common.data.integration.Service
|
||||
import io.homeassistant.companion.android.common.data.integration.UpdateLocation
|
||||
import io.homeassistant.companion.android.common.data.integration.ZoneAttributes
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.EntityResponse
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.FireEventRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.GetConfigResponse
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.IntegrationRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.RegisterDeviceRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.SensorRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.ServiceCallRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.Template
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.UpdateLocationRequest
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
|
@ -1,14 +1,14 @@
|
|||
package io.homeassistant.companion.android.data.integration
|
||||
package io.homeassistant.companion.android.common.data.integration.impl
|
||||
|
||||
import io.homeassistant.companion.android.data.integration.entities.DiscoveryInfoResponse
|
||||
import io.homeassistant.companion.android.data.integration.entities.DomainResponse
|
||||
import io.homeassistant.companion.android.data.integration.entities.EntityResponse
|
||||
import io.homeassistant.companion.android.data.integration.entities.GetConfigResponse
|
||||
import io.homeassistant.companion.android.data.integration.entities.IntegrationRequest
|
||||
import io.homeassistant.companion.android.data.integration.entities.RegisterDeviceRequest
|
||||
import io.homeassistant.companion.android.data.integration.entities.RegisterDeviceResponse
|
||||
import io.homeassistant.companion.android.domain.integration.Panel
|
||||
import io.homeassistant.companion.android.domain.integration.ZoneAttributes
|
||||
import io.homeassistant.companion.android.common.data.integration.Panel
|
||||
import io.homeassistant.companion.android.common.data.integration.ZoneAttributes
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.DiscoveryInfoResponse
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.DomainResponse
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.EntityResponse
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.GetConfigResponse
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.IntegrationRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.RegisterDeviceRequest
|
||||
import io.homeassistant.companion.android.common.data.integration.impl.entities.RegisterDeviceResponse
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.ResponseBody
|
||||
import retrofit2.Response
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
data class DiscoveryInfoResponse(
|
||||
val baseUrl: String,
|
|
@ -0,0 +1,8 @@
|
|||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
import io.homeassistant.companion.android.common.data.integration.ServiceData
|
||||
|
||||
data class DomainResponse(
|
||||
val domain: String,
|
||||
val services: Map<String, ServiceData>
|
||||
)
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
import java.util.Calendar
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
data class FireEventRequest(
|
||||
val eventType: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
data class GetConfigResponse(
|
||||
val latitude: Double,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
data class RegisterDeviceResponse(
|
||||
var cloudhookUrl: String?,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
data class ServiceCallRequest(
|
||||
val domain: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
data class Template(
|
||||
val template: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.data.integration.entities
|
||||
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||
|
||||
data class UpdateLocationRequest(
|
||||
val locationName: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.themes
|
||||
package io.homeassistant.companion.android.common.data.themes
|
||||
|
||||
interface ThemesRepository {
|
||||
suspend fun getCurrentTheme(): String?
|
|
@ -1,7 +1,6 @@
|
|||
package io.homeassistant.companion.android.data.themes
|
||||
package io.homeassistant.companion.android.common.data.themes
|
||||
|
||||
import io.homeassistant.companion.android.data.LocalStorage
|
||||
import io.homeassistant.companion.android.domain.themes.ThemesRepository
|
||||
import io.homeassistant.companion.android.common.data.LocalStorage
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.domain.url
|
||||
package io.homeassistant.companion.android.common.data.url
|
||||
|
||||
import java.net.URL
|
||||
|
|
@ -1,9 +1,8 @@
|
|||
package io.homeassistant.companion.android.data.url
|
||||
package io.homeassistant.companion.android.common.data.url
|
||||
|
||||
import io.homeassistant.companion.android.data.LocalStorage
|
||||
import io.homeassistant.companion.android.data.wifi.WifiHelper
|
||||
import io.homeassistant.companion.android.domain.MalformedHttpUrlException
|
||||
import io.homeassistant.companion.android.domain.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.LocalStorage
|
||||
import io.homeassistant.companion.android.common.data.MalformedHttpUrlException
|
||||
import io.homeassistant.companion.android.common.data.wifi.WifiHelper
|
||||
import java.net.URL
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
|
@ -0,0 +1,5 @@
|
|||
package io.homeassistant.companion.android.common.data.wifi
|
||||
|
||||
interface WifiHelper {
|
||||
fun getWifiSsid(): String
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
package io.homeassistant.companion.android.common.wifi
|
||||
package io.homeassistant.companion.android.common.data.wifi
|
||||
|
||||
import android.net.wifi.WifiManager
|
||||
import io.homeassistant.companion.android.data.wifi.WifiHelper
|
||||
import javax.inject.Inject
|
||||
|
||||
class WifiHelperImpl constructor(
|
||||
class WifiHelperImpl @Inject constructor(
|
||||
private val wifiManager: WifiManager
|
||||
) : WifiHelper {
|
||||
override fun getWifiSsid(): String {
|
|
@ -1,6 +1,6 @@
|
|||
package io.homeassistant.companion.android.data
|
||||
package io.homeassistant.companion.android.common.data
|
||||
|
||||
import io.homeassistant.companion.android.domain.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import java.io.IOException
|
||||
import java.net.URL
|
||||
import okhttp3.mockwebserver.MockResponse
|
||||
|
@ -54,7 +54,7 @@ class HomeAssistantMockService<T>(private val c: Class<T>) {
|
|||
fun takeRequest() = mockServer.takeRequest()
|
||||
|
||||
private fun getJsonFromFile(file: String): String {
|
||||
val inputStreamResponse = this.javaClass.classLoader.getResourceAsStream(file)!!
|
||||
val inputStreamResponse = this.javaClass.classLoader?.getResourceAsStream(file)!!
|
||||
val size: Int
|
||||
return try {
|
||||
size = inputStreamResponse.available()
|
|
@ -1,15 +1,15 @@
|
|||
package io.homeassistant.companion.android.data.authentication
|
||||
package io.homeassistant.companion.android.common.data.authentication.impl
|
||||
|
||||
import io.homeassistant.companion.android.data.LocalStorage
|
||||
import io.homeassistant.companion.android.domain.authentication.SessionState
|
||||
import io.homeassistant.companion.android.domain.url.UrlRepository
|
||||
import io.homeassistant.companion.android.common.data.LocalStorage
|
||||
import io.homeassistant.companion.android.common.data.authentication.AuthorizationException
|
||||
import io.homeassistant.companion.android.common.data.authentication.SessionState
|
||||
import io.homeassistant.companion.android.common.data.url.UrlRepository
|
||||
import io.mockk.Called
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerify
|
||||
import io.mockk.coVerifyAll
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import io.mockk.mockkStatic
|
||||
import io.mockk.verify
|
||||
import java.net.URL
|
||||
import kotlinx.coroutines.runBlocking
|
||||
|
@ -17,15 +17,9 @@ import org.assertj.core.api.Assertions.assertThat
|
|||
import org.assertj.core.api.Assertions.catchThrowable
|
||||
import org.spekframework.spek2.Spek
|
||||
import org.spekframework.spek2.style.specification.describe
|
||||
import org.threeten.bp.Instant
|
||||
|
||||
object AuthenticationRepositoryImplSpec : Spek({
|
||||
|
||||
beforeEachTest {
|
||||
mockkStatic(Instant::class)
|
||||
every { Instant.now() } returns Instant.parse("2019-01-16T01:52:00.000Z")
|
||||
}
|
||||
|
||||
describe("a repository") {
|
||||
val localStorage by memoized { mockk<LocalStorage>(relaxUnitFun = true) }
|
||||
val authenticationService by memoized { mockk<AuthenticationService>(relaxUnitFun = true) }
|
||||
|
@ -183,7 +177,7 @@ object AuthenticationRepositoryImplSpec : Spek({
|
|||
beforeEachTest {
|
||||
coEvery { localStorage.getString("url") } returns "https://demo.home-assistant.io/"
|
||||
coEvery { localStorage.getString("access_token") } returns "ABCDEFGH"
|
||||
coEvery { localStorage.getLong("expires_date") } returns Instant.now().epochSecond - 1800
|
||||
coEvery { localStorage.getLong("expires_date") } returns 1599276837 - 1800
|
||||
coEvery { localStorage.getString("refresh_token") } returns "IJKLMNOPQRST"
|
||||
coEvery { localStorage.getString("token_type") } returns "Bearer"
|
||||
coEvery {
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue