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:
Justin Bassett 2020-09-11 15:39:30 -04:00 committed by GitHub
parent e5baf1e64c
commit 6e13b16214
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
129 changed files with 342 additions and 1380 deletions

View file

@ -115,7 +115,6 @@ play {
dependencies { dependencies {
implementation(project(":common")) implementation(project(":common"))
implementation(project(":domain"))
implementation(Config.Dependency.Misc.blurView) implementation(Config.Dependency.Misc.blurView)
implementation(Config.Dependency.Misc.iconDialog) implementation(Config.Dependency.Misc.iconDialog)

View file

@ -1,35 +1,33 @@
package io.homeassistant.companion.android.launch package io.homeassistant.companion.android.launch
import android.os.Build
import android.util.Log import android.util.Log
import com.google.firebase.iid.FirebaseInstanceId import com.google.firebase.iid.FirebaseInstanceId
import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
import java.lang.Exception import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.tasks.await import kotlinx.coroutines.tasks.await
class LaunchPresenterImpl @Inject constructor( class LaunchPresenterImpl @Inject constructor(
view: LaunchView, view: LaunchView,
authenticationUseCase: AuthenticationUseCase, authenticationUseCase: AuthenticationRepository,
integrationUseCase: IntegrationUseCase integrationUseCase: IntegrationRepository
) : LaunchPresenterBase(view, authenticationUseCase, integrationUseCase) { ) : LaunchPresenterBase(view, authenticationUseCase, integrationUseCase) {
override fun resyncRegistration() { override fun resyncRegistration() {
mainScope.launch { mainScope.launch {
try { try {
integrationUseCase.updateRegistration( integrationUseCase.updateRegistration(
DeviceRegistration(
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})",
null, null,
Build.MANUFACTURER ?: "UNKNOWN", FirebaseInstanceId.getInstance().instanceId.await().token
Build.MODEL ?: "UNKNOWN",
Build.VERSION.SDK_INT.toString(),
pushToken = FirebaseInstanceId.getInstance().instanceId.await().token
) )
} catch (e: Exception) { )
Log.e(TAG, "Issue updating Registration", e) } catch (e: Exception) {
} Log.e(TAG, "Issue updating Registration", e)
} }
}
} }
} }

View file

@ -21,10 +21,11 @@ import com.google.firebase.messaging.RemoteMessage
import com.vdurmont.emoji.EmojiParser import com.vdurmont.emoji.EmojiParser
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.authentication.SessionState import io.homeassistant.companion.android.common.data.authentication.SessionState
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
import io.homeassistant.companion.android.domain.url.UrlUseCase 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.sensors.LocationSensorManager
import io.homeassistant.companion.android.util.UrlHandler import io.homeassistant.companion.android.util.UrlHandler
import io.homeassistant.companion.android.util.cancel import io.homeassistant.companion.android.util.cancel
@ -61,13 +62,13 @@ class MessagingService : FirebaseMessagingService() {
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
@Inject @Inject
lateinit var urlUseCase: UrlUseCase lateinit var urlUseCase: UrlRepository
@Inject @Inject
lateinit var authenticationUseCase: AuthenticationUseCase lateinit var authenticationUseCase: AuthenticationRepository
private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job())
@ -274,8 +275,9 @@ class MessagingService : FirebaseMessagingService() {
.setSmallIcon(R.drawable.ic_stat_ic_notification) .setSmallIcon(R.drawable.ic_stat_ic_notification)
.setStyle( .setStyle(
NotificationCompat.BigTextStyle() NotificationCompat.BigTextStyle()
.setSummaryText(prepareText(group.substring(GROUP_PREFIX.length)) .setSummaryText(
) prepareText(group.substring(GROUP_PREFIX.length))
)
) )
.setGroup(group) .setGroup(group)
.setGroupSummary(true) .setGroupSummary(true)
@ -468,23 +470,25 @@ class MessagingService : FirebaseMessagingService() {
} }
} }
private suspend fun getImageBitmap(url: URL?, requiresAuth: Boolean = false): Bitmap? = withContext( private suspend fun getImageBitmap(url: URL?, requiresAuth: Boolean = false): Bitmap? =
Dispatchers.IO) { withContext(
if (url == null) Dispatchers.IO
return@withContext null ) {
if (url == null)
return@withContext null
var image: Bitmap? = null var image: Bitmap? = null
try { try {
val uc = url.openConnection() val uc = url.openConnection()
if (requiresAuth) { if (requiresAuth) {
uc.setRequestProperty("Authorization", authenticationUseCase.buildBearerToken()) uc.setRequestProperty("Authorization", authenticationUseCase.buildBearerToken())
}
image = BitmapFactory.decodeStream(uc.getInputStream())
} catch (e: Exception) {
Log.e(TAG, "Couldn't download image for notification", e)
} }
image = BitmapFactory.decodeStream(uc.getInputStream()) return@withContext image
} catch (e: Exception) {
Log.e(TAG, "Couldn't download image for notification", e)
} }
return@withContext image
}
private fun handleActions( private fun handleActions(
builder: NotificationCompat.Builder, builder: NotificationCompat.Builder,
@ -623,7 +627,9 @@ class MessagingService : FirebaseMessagingService() {
} }
try { try {
integrationUseCase.updateRegistration( integrationUseCase.updateRegistration(
pushToken = token DeviceRegistration(
pushToken = token
)
) )
} catch (e: Exception) { } catch (e: Exception) {
// TODO: Store for update later // TODO: Store for update later

View file

@ -9,7 +9,7 @@ import android.widget.Toast
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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.NotificationActionContentHandler
import io.homeassistant.companion.android.util.cancel import io.homeassistant.companion.android.util.cancel
import javax.inject.Inject import javax.inject.Inject
@ -32,7 +32,7 @@ class NotificationActionReceiver : BroadcastReceiver() {
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO + Job()) private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO + Job())
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
DaggerServiceComponent.builder() DaggerServiceComponent.builder()

View file

@ -2,14 +2,14 @@ package io.homeassistant.companion.android.onboarding.integration
import android.util.Log import android.util.Log
import com.google.firebase.iid.FirebaseInstanceId import com.google.firebase.iid.FirebaseInstanceId
import io.homeassistant.companion.android.domain.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.tasks.await import kotlinx.coroutines.tasks.await
class MobileAppIntegrationPresenterImpl @Inject constructor( class MobileAppIntegrationPresenterImpl @Inject constructor(
view: MobileAppIntegrationView, view: MobileAppIntegrationView,
integrationUseCase: IntegrationUseCase integrationUseCase: IntegrationRepository
) : MobileAppIntegrationPresenterBase( ) : MobileAppIntegrationPresenterBase(
view, integrationUseCase view, integrationUseCase
) { ) {

View file

@ -12,7 +12,7 @@ import com.google.android.gms.location.ActivityRecognitionResult
import com.google.android.gms.location.DetectedActivity import com.google.android.gms.location.DetectedActivity
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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 javax.inject.Inject
class ActivitySensorManager : BroadcastReceiver(), SensorManager { class ActivitySensorManager : BroadcastReceiver(), SensorManager {
@ -33,7 +33,7 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager {
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
ensureInjected(context) ensureInjected(context)

View file

@ -19,10 +19,10 @@ import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationServices import com.google.android.gms.location.LocationServices
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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.AppDatabase
import io.homeassistant.companion.android.database.sensor.Attribute 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 javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -65,7 +65,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO) private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO)

View file

@ -10,7 +10,6 @@ import io.homeassistant.companion.android.onboarding.manual.ManualSetupFragment
import io.homeassistant.companion.android.sensors.SensorsSettingsFragment import io.homeassistant.companion.android.sensors.SensorsSettingsFragment
import io.homeassistant.companion.android.settings.SettingsActivity import io.homeassistant.companion.android.settings.SettingsActivity
import io.homeassistant.companion.android.settings.SettingsFragment 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.settings.ssid.SsidDialogFragment
import io.homeassistant.companion.android.webview.WebViewActivity import io.homeassistant.companion.android.webview.WebViewActivity
@ -31,8 +30,6 @@ interface PresenterComponent {
fun inject(fragment: SettingsFragment) fun inject(fragment: SettingsFragment)
fun inject(fragment: ShortcutsFragment)
fun inject(activity: WebViewActivity) fun inject(activity: WebViewActivity)
fun inject(dialog: SsidDialogFragment) fun inject(dialog: SsidDialogFragment)

View file

@ -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.SettingsPresenter
import io.homeassistant.companion.android.settings.SettingsPresenterImpl import io.homeassistant.companion.android.settings.SettingsPresenterImpl
import io.homeassistant.companion.android.settings.SettingsView 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.WebView
import io.homeassistant.companion.android.webview.WebViewPresenter import io.homeassistant.companion.android.webview.WebViewPresenter
import io.homeassistant.companion.android.webview.WebViewPresenterImpl import io.homeassistant.companion.android.webview.WebViewPresenterImpl
@ -37,7 +34,6 @@ class PresenterModule {
private lateinit var manualSetupView: ManualSetupView private lateinit var manualSetupView: ManualSetupView
private lateinit var mobileAppIntegrationView: MobileAppIntegrationView private lateinit var mobileAppIntegrationView: MobileAppIntegrationView
private lateinit var settingsView: SettingsView private lateinit var settingsView: SettingsView
private lateinit var shortcutsView: ShortcutsView
private lateinit var webView: WebView private lateinit var webView: WebView
constructor(launchView: LaunchView) { constructor(launchView: LaunchView) {
@ -64,10 +60,6 @@ class PresenterModule {
this.settingsView = settingsView this.settingsView = settingsView
} }
constructor(shortcutsView: ShortcutsView) {
this.shortcutsView = shortcutsView
}
constructor(webView: WebView) { constructor(webView: WebView) {
this.webView = webView this.webView = webView
} }
@ -90,9 +82,6 @@ class PresenterModule {
@Provides @Provides
fun provideSettingsView() = settingsView fun provideSettingsView() = settingsView
@Provides
fun provideShortcutsView() = shortcutsView
@Provides @Provides
fun provideWebView() = webView fun provideWebView() = webView
@ -117,9 +106,6 @@ class PresenterModule {
@Binds @Binds
fun bindSettingsPresenter(presenter: SettingsPresenterImpl): SettingsPresenter fun bindSettingsPresenter(presenter: SettingsPresenterImpl): SettingsPresenter
@Binds
fun bindShortcutsPresenter(presenter: ShortcutsPresenterImpl): ShortcutsPresenter
@Binds @Binds
fun bindWebViewPresenterImpl(presenter: WebViewPresenterImpl): WebViewPresenter fun bindWebViewPresenterImpl(presenter: WebViewPresenterImpl): WebViewPresenter
} }

View file

@ -2,7 +2,7 @@ package io.homeassistant.companion.android.database.sensor
import androidx.room.Embedded import androidx.room.Embedded
import androidx.room.Relation import androidx.room.Relation
import io.homeassistant.companion.android.domain.integration.SensorRegistration import io.homeassistant.companion.android.common.data.integration.SensorRegistration
data class SensorWithAttributes( data class SensorWithAttributes(
@Embedded @Embedded

View file

@ -1,8 +1,8 @@
package io.homeassistant.companion.android.launch package io.homeassistant.companion.android.launch
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.authentication.SessionState import io.homeassistant.companion.android.common.data.authentication.SessionState
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@ -11,8 +11,8 @@ import kotlinx.coroutines.launch
abstract class LaunchPresenterBase( abstract class LaunchPresenterBase(
private val view: LaunchView, private val view: LaunchView,
private val authenticationUseCase: AuthenticationUseCase, private val authenticationUseCase: AuthenticationRepository,
internal val integrationUseCase: IntegrationUseCase internal val integrationUseCase: IntegrationRepository
) : LaunchPresenter { ) : LaunchPresenter {
companion object { companion object {

View file

@ -15,7 +15,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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 javax.inject.Inject
import kotlinx.android.synthetic.main.fragment_nfc_edit.* import kotlinx.android.synthetic.main.fragment_nfc_edit.*
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -36,7 +36,7 @@ class NfcEditFragment : Fragment() {
private lateinit var viewModel: NfcViewModel private lateinit var viewModel: NfcViewModel
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,

View file

@ -9,7 +9,7 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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 io.homeassistant.companion.android.util.UrlHandler
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -25,7 +25,7 @@ class TagReaderActivity : AppCompatActivity() {
private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job())
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)

View file

@ -3,7 +3,7 @@ package io.homeassistant.companion.android.onboarding.authentication
import android.net.Uri import android.net.Uri
import android.util.Log import android.util.Log
import io.homeassistant.companion.android.R 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 javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -13,7 +13,7 @@ import kotlinx.coroutines.launch
class AuthenticationPresenterImpl @Inject constructor( class AuthenticationPresenterImpl @Inject constructor(
private val view: AuthenticationView, private val view: AuthenticationView,
private val authenticationUseCase: AuthenticationUseCase private val authenticationUseCase: AuthenticationRepository
) : AuthenticationPresenter { ) : AuthenticationPresenter {
companion object { companion object {

View file

@ -1,6 +1,6 @@
package io.homeassistant.companion.android.onboarding.discovery 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 java.net.URL
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -11,7 +11,7 @@ import kotlinx.coroutines.launch
class DiscoveryPresenterImpl @Inject constructor( class DiscoveryPresenterImpl @Inject constructor(
val view: DiscoveryView, val view: DiscoveryView,
val urlUseCase: UrlUseCase val urlUseCase: UrlRepository
) : DiscoveryPresenter { ) : DiscoveryPresenter {
private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job())

View file

@ -3,8 +3,8 @@ package io.homeassistant.companion.android.onboarding.integration
import android.os.Build import android.os.Build
import android.util.Log import android.util.Log
import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.domain.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@ -13,7 +13,7 @@ import kotlinx.coroutines.launch
open class MobileAppIntegrationPresenterBase constructor( open class MobileAppIntegrationPresenterBase constructor(
private val view: MobileAppIntegrationView, private val view: MobileAppIntegrationView,
private val integrationUseCase: IntegrationUseCase private val integrationUseCase: IntegrationRepository
) : MobileAppIntegrationPresenter { ) : MobileAppIntegrationPresenter {
companion object { companion object {

View file

@ -1,8 +1,8 @@
package io.homeassistant.companion.android.onboarding.manual package io.homeassistant.companion.android.onboarding.manual
import android.util.Log import android.util.Log
import io.homeassistant.companion.android.domain.MalformedHttpUrlException import io.homeassistant.companion.android.common.data.MalformedHttpUrlException
import io.homeassistant.companion.android.domain.url.UrlUseCase import io.homeassistant.companion.android.common.data.url.UrlRepository
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -12,7 +12,7 @@ import kotlinx.coroutines.launch
class ManualSetupPresenterImpl @Inject constructor( class ManualSetupPresenterImpl @Inject constructor(
private val view: ManualSetupView, private val view: ManualSetupView,
private val urlUseCase: UrlUseCase private val urlUseCase: UrlRepository
) : ManualSetupPresenter { ) : ManualSetupPresenter {
companion object { companion object {

View file

@ -3,7 +3,6 @@ package io.homeassistant.companion.android.sensors
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import androidx.core.os.postDelayed
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceCategory import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat

View file

@ -6,9 +6,9 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.util.Log import android.util.Log
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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.database.AppDatabase
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
import io.homeassistant.companion.android.domain.integration.SensorRegistration
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -47,7 +47,7 @@ class SensorReceiver : BroadcastReceiver() {
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO + Job()) private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO + Job())
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private val chargingActions = listOf( private val chargingActions = listOf(
Intent.ACTION_BATTERY_LOW, Intent.ACTION_BATTERY_LOW,
@ -104,7 +104,7 @@ class SensorReceiver : BroadcastReceiver() {
suspend fun updateSensors( suspend fun updateSensors(
context: Context, context: Context,
integrationUseCase: IntegrationUseCase integrationUseCase: IntegrationRepository
) { ) {
val sensorDao = AppDatabase.getInstance(context).sensorDao() val sensorDao = AppDatabase.getInstance(context).sensorDao()
val enabledRegistrations = mutableListOf<SensorRegistration<Any>>() val enabledRegistrations = mutableListOf<SensorRegistration<Any>>()

View file

@ -17,7 +17,7 @@ import androidx.work.WorkManager
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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 java.util.concurrent.TimeUnit
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -48,7 +48,7 @@ class SensorWorker(
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private val notificationManager = appContext.getSystemService(NOTIFICATION_SERVICE) as NotificationManager private val notificationManager = appContext.getSystemService(NOTIFICATION_SERVICE) as NotificationManager

View file

@ -7,14 +7,14 @@ import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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.AppDatabase
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
import javax.inject.Inject import javax.inject.Inject
class SensorsSettingsFragment : PreferenceFragmentCompat() { class SensorsSettingsFragment : PreferenceFragmentCompat() {
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private val handler = Handler() private val handler = Handler()
private val refresh = object : Runnable { private val refresh = object : Runnable {

View file

@ -21,7 +21,6 @@ import io.homeassistant.companion.android.authenticator.Authenticator
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
import io.homeassistant.companion.android.nfc.NfcSetupActivity import io.homeassistant.companion.android.nfc.NfcSetupActivity
import io.homeassistant.companion.android.sensors.SensorsSettingsFragment 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.SsidDialogFragment
import io.homeassistant.companion.android.settings.ssid.SsidPreference import io.homeassistant.companion.android.settings.ssid.SsidPreference
import javax.inject.Inject import javax.inject.Inject
@ -88,15 +87,6 @@ class SettingsFragment : PreferenceFragmentCompat(), SettingsView {
isValid 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 { findPreference<Preference>("nfc_tags")?.let {
it.isVisible = presenter.nfcEnabled() it.isVisible = presenter.nfcEnabled()
it.onPreferenceClickListener = Preference.OnPreferenceClickListener { it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
@ -120,14 +110,6 @@ class SettingsFragment : PreferenceFragmentCompat(), SettingsView {
findPreference<SwitchPreference>("app_lock")?.onPreferenceChangeListener = findPreference<SwitchPreference>("app_lock")?.onPreferenceChangeListener =
onChangeBiometricValidator 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 { findPreference<Preference>("sensors")?.setOnPreferenceClickListener {
parentFragmentManager parentFragmentManager
.beginTransaction() .beginTransaction()

View file

@ -1,14 +1,12 @@
package io.homeassistant.companion.android.settings package io.homeassistant.companion.android.settings
import androidx.preference.PreferenceDataStore import androidx.preference.PreferenceDataStore
import io.homeassistant.companion.android.domain.integration.Panel
interface SettingsPresenter { interface SettingsPresenter {
fun getPreferenceDataStore(): PreferenceDataStore fun getPreferenceDataStore(): PreferenceDataStore
fun onCreate() fun onCreate()
fun onFinish() fun onFinish()
fun nfcEnabled(): Boolean fun nfcEnabled(): Boolean
fun getPanels(): Array<Panel>
fun isLockEnabled(): Boolean fun isLockEnabled(): Boolean
fun sessionTimeOut(): Int fun sessionTimeOut(): Int

View file

@ -2,10 +2,10 @@ package io.homeassistant.companion.android.settings
import android.util.Log import android.util.Log
import androidx.preference.PreferenceDataStore import androidx.preference.PreferenceDataStore
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
import io.homeassistant.companion.android.domain.integration.Panel import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.domain.url.UrlUseCase import io.homeassistant.companion.android.common.data.url.UrlRepository
import io.homeassistant.companion.android.themes.ThemesManager import io.homeassistant.companion.android.themes.ThemesManager
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -17,9 +17,9 @@ import kotlinx.coroutines.runBlocking
class SettingsPresenterImpl @Inject constructor( class SettingsPresenterImpl @Inject constructor(
private val settingsView: SettingsView, private val settingsView: SettingsView,
private val urlUseCase: UrlUseCase, private val urlUseCase: UrlRepository,
private val integrationUseCase: IntegrationUseCase, private val integrationUseCase: IntegrationRepository,
private val authenticationUseCase: AuthenticationUseCase, private val authenticationUseCase: AuthenticationRepository,
private val themesManager: ThemesManager private val themesManager: ThemesManager
) : SettingsPresenter, PreferenceDataStore() { ) : SettingsPresenter, PreferenceDataStore() {
@ -76,7 +76,7 @@ class SettingsPresenterImpl @Inject constructor(
} }
"registration_name" -> { "registration_name" -> {
try { try {
integrationUseCase.updateRegistration(deviceName = value!!) integrationUseCase.updateRegistration(DeviceRegistration(deviceName = value!!))
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Issue updating registration with new device name", e) 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 { override fun isLockEnabled(): Boolean {
return runBlocking { return runBlocking {
authenticationUseCase.isLockEnabled() authenticationUseCase.isLockEnabled()

View file

@ -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
)
}
}
}

View file

@ -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>
}

View file

@ -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
}
}
}

View file

@ -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) }
}
}
}

View file

@ -1,3 +0,0 @@
package io.homeassistant.companion.android.settings.shortcuts
interface ShortcutsView

View file

@ -7,12 +7,12 @@ import android.webkit.WebSettings
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebSettingsCompat
import androidx.webkit.WebViewFeature 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 javax.inject.Inject
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
class ThemesManager @Inject constructor( class ThemesManager @Inject constructor(
private val themesUseCase: ThemesUseCase private val themesUseCase: ThemesRepository
) { ) {
fun getCurrentTheme(): String { fun getCurrentTheme(): String {

View file

@ -5,12 +5,9 @@ import android.app.PictureInPictureParams
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.content.res.Configuration import android.content.res.Configuration
import android.graphics.Color import android.graphics.Color
import android.graphics.Rect import android.graphics.Rect
import android.graphics.drawable.Icon
import android.net.Uri import android.net.Uri
import android.net.http.SslError import android.net.http.SslError
import android.os.Build import android.os.Build
@ -344,7 +341,6 @@ class WebViewActivity : AppCompatActivity(), io.homeassistant.companion.android.
.getString("event") == "connected" .getString("event") == "connected"
if (isConnected) { if (isConnected) {
alertDialog?.cancel() alertDialog?.cancel()
setupPanelShortcuts()
} }
} }
"config/get" -> { "config/get" -> {
@ -843,30 +839,4 @@ class WebViewActivity : AppCompatActivity(), io.homeassistant.companion.android.
} }
}, CONNECTION_DELAY) }, 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()
}
}
}
} }

View file

@ -1,7 +1,5 @@
package io.homeassistant.companion.android.webview package io.homeassistant.companion.android.webview
import io.homeassistant.companion.android.domain.integration.Panel
interface WebViewPresenter { interface WebViewPresenter {
fun onViewReady(path: String?) fun onViewReady(path: String?)
@ -10,8 +8,6 @@ interface WebViewPresenter {
fun onRevokeExternalAuth(callback: String) fun onRevokeExternalAuth(callback: String)
fun getPanels(): Array<Panel>
fun clearKnownUrls() fun clearKnownUrls()
fun isFullScreen(): Boolean fun isFullScreen(): Boolean

View file

@ -3,11 +3,10 @@ package io.homeassistant.companion.android.webview
import android.graphics.Color import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.util.Log import android.util.Log
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.authentication.SessionState import io.homeassistant.companion.android.common.data.authentication.SessionState
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.domain.integration.Panel import io.homeassistant.companion.android.common.data.url.UrlRepository
import io.homeassistant.companion.android.domain.url.UrlUseCase
import io.homeassistant.companion.android.util.UrlHandler import io.homeassistant.companion.android.util.UrlHandler
import java.net.URL import java.net.URL
import java.util.regex.Matcher import java.util.regex.Matcher
@ -22,9 +21,9 @@ import kotlinx.coroutines.runBlocking
class WebViewPresenterImpl @Inject constructor( class WebViewPresenterImpl @Inject constructor(
private val view: WebView, private val view: WebView,
private val urlUseCase: UrlUseCase, private val urlUseCase: UrlRepository,
private val authenticationUseCase: AuthenticationUseCase, private val authenticationUseCase: AuthenticationRepository,
private val integrationUseCase: IntegrationUseCase private val integrationUseCase: IntegrationRepository
) : WebViewPresenter { ) : WebViewPresenter {
companion object { 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() { override fun clearKnownUrls() {
mainScope.launch { mainScope.launch {
urlUseCase.saveUrl("", true) urlUseCase.saveUrl("", true)

View file

@ -19,10 +19,10 @@ import com.maltaisn.icondialog.pack.IconPackLoader
import com.maltaisn.iconpack.mdi.createMaterialDesignIconPack import com.maltaisn.iconpack.mdi.createMaterialDesignIconPack
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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.AppDatabase
import io.homeassistant.companion.android.database.widget.ButtonWidgetDao import io.homeassistant.companion.android.database.widget.ButtonWidgetDao
import io.homeassistant.companion.android.database.widget.ButtonWidgetEntity import io.homeassistant.companion.android.database.widget.ButtonWidgetEntity
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
import java.util.regex.Pattern import java.util.regex.Pattern
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -46,7 +46,7 @@ class ButtonWidget : AppWidgetProvider() {
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
lateinit var buttonWidgetDao: ButtonWidgetDao lateinit var buttonWidgetDao: ButtonWidgetDao

View file

@ -27,9 +27,9 @@ import com.maltaisn.icondialog.pack.IconPackLoader
import com.maltaisn.iconpack.mdi.createMaterialDesignIconPack import com.maltaisn.iconpack.mdi.createMaterialDesignIconPack
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
import io.homeassistant.companion.android.domain.integration.Entity import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.domain.integration.Service import io.homeassistant.companion.android.common.data.integration.Service
import javax.inject.Inject import javax.inject.Inject
import kotlinx.android.synthetic.main.widget_button_configure.* import kotlinx.android.synthetic.main.widget_button_configure.*
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -45,7 +45,7 @@ class ButtonWidgetConfigureActivity : AppCompatActivity(), IconDialog.Callback {
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO) private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO)

View file

@ -11,10 +11,10 @@ import android.util.TypedValue
import android.widget.RemoteViews import android.widget.RemoteViews
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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.AppDatabase
import io.homeassistant.companion.android.database.widget.StaticWidgetDao import io.homeassistant.companion.android.database.widget.StaticWidgetDao
import io.homeassistant.companion.android.database.widget.StaticWidgetEntity import io.homeassistant.companion.android.database.widget.StaticWidgetEntity
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -39,7 +39,7 @@ class StaticWidget : AppWidgetProvider() {
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private lateinit var staticWidgetDao: StaticWidgetDao private lateinit var staticWidgetDao: StaticWidgetDao

View file

@ -16,8 +16,8 @@ import android.widget.MultiAutoCompleteTextView.CommaTokenizer
import android.widget.Toast import android.widget.Toast
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
import io.homeassistant.companion.android.domain.integration.Entity import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import javax.inject.Inject import javax.inject.Inject
import kotlinx.android.synthetic.main.widget_static_configure.* import kotlinx.android.synthetic.main.widget_static_configure.*
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -31,7 +31,7 @@ class StaticWidgetConfigureActivity : Activity() {
private val TAG: String = "StaticWidgetConfigAct" private val TAG: String = "StaticWidgetConfigAct"
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private var entities = LinkedHashMap<String, Entity<Any>>() private var entities = LinkedHashMap<String, Entity<Any>>()

View file

@ -8,8 +8,8 @@ import android.view.ViewGroup
import android.widget.AutoCompleteTextView import android.widget.AutoCompleteTextView
import android.widget.MultiAutoCompleteTextView.CommaTokenizer import android.widget.MultiAutoCompleteTextView.CommaTokenizer
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import io.homeassistant.companion.android.domain.integration.Entity import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.domain.integration.Service import io.homeassistant.companion.android.common.data.integration.Service
import java.lang.Exception import java.lang.Exception
import kotlinx.android.synthetic.main.widget_button_configure_dynamic_field.view.* import kotlinx.android.synthetic.main.widget_button_configure_dynamic_field.view.*

View file

@ -10,10 +10,10 @@ import android.util.Log
import android.widget.RemoteViews import android.widget.RemoteViews
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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.AppDatabase
import io.homeassistant.companion.android.database.widget.TemplateWidgetDao import io.homeassistant.companion.android.database.widget.TemplateWidgetDao
import io.homeassistant.companion.android.database.widget.TemplateWidgetEntity import io.homeassistant.companion.android.database.widget.TemplateWidgetEntity
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
import io.homeassistant.companion.android.widgets.DaggerProviderComponent import io.homeassistant.companion.android.widgets.DaggerProviderComponent
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -33,7 +33,7 @@ class TemplateWidget : AppWidgetProvider() {
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private lateinit var templateWidgetDao: TemplateWidgetDao private lateinit var templateWidgetDao: TemplateWidgetDao
@ -118,7 +118,7 @@ class TemplateWidget : AppWidgetProvider() {
if (widget != null) { if (widget != null) {
var renderedTemplate = "Loading" var renderedTemplate = "Loading"
try { try {
renderedTemplate = integrationUseCase.renderTemplate(widget.template) renderedTemplate = integrationUseCase.renderTemplate(widget.template, mapOf())
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Unable to render template: ${widget.template}", e) Log.e(TAG, "Unable to render template: ${widget.template}", e)
} }

View file

@ -8,7 +8,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.doAfterTextChanged import androidx.core.widget.doAfterTextChanged
import io.homeassistant.companion.android.R import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor 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 io.homeassistant.companion.android.widgets.DaggerProviderComponent
import javax.inject.Inject import javax.inject.Inject
import kotlinx.android.synthetic.main.widget_template_configure.* import kotlinx.android.synthetic.main.widget_template_configure.*
@ -24,7 +24,7 @@ class TemplateWidgetConfigureActivity : AppCompatActivity() {
} }
@Inject @Inject
lateinit var integrationUseCase: IntegrationUseCase lateinit var integrationUseCase: IntegrationRepository
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO) private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.IO)
@ -70,7 +70,7 @@ class TemplateWidgetConfigureActivity : AppCompatActivity() {
var templateText: String? var templateText: String?
var enabled: Boolean var enabled: Boolean
try { try {
templateText = integrationUseCase.renderTemplate(editableText.toString()) templateText = integrationUseCase.renderTemplate(editableText.toString(), mapOf())
enabled = true enabled = true
} catch (e: Exception) { } catch (e: Exception) {
templateText = "Error in template" templateText = "Error in template"

View file

@ -1,27 +1,25 @@
package io.homeassistant.companion.android.launch package io.homeassistant.companion.android.launch
import android.os.Build
import android.util.Log import android.util.Log
import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
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 javax.inject.Inject
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class LaunchPresenterImpl @Inject constructor( class LaunchPresenterImpl @Inject constructor(
view: LaunchView, view: LaunchView,
authenticationUseCase: AuthenticationUseCase, authenticationUseCase: AuthenticationRepository,
integrationUseCase: IntegrationUseCase integrationUseCase: IntegrationRepository
) : LaunchPresenterBase(view, authenticationUseCase, integrationUseCase) { ) : LaunchPresenterBase(view, authenticationUseCase, integrationUseCase) {
override fun resyncRegistration() { override fun resyncRegistration() {
mainScope.launch { mainScope.launch {
try { try {
integrationUseCase.updateRegistration( integrationUseCase.updateRegistration(
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", DeviceRegistration(
null, "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
Build.MANUFACTURER ?: "UNKNOWN", )
Build.MODEL ?: "UNKNOWN",
Build.VERSION.SDK_INT.toString()
) )
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Issue updating Registration", e) Log.e(TAG, "Issue updating Registration", e)

View file

@ -1,9 +1,9 @@
package io.homeassistant.companion.android.onboarding.integration 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 import javax.inject.Inject
class MobileAppIntegrationPresenterImpl @Inject constructor( class MobileAppIntegrationPresenterImpl @Inject constructor(
view: MobileAppIntegrationView, view: MobileAppIntegrationView,
integrationUseCase: IntegrationUseCase integrationUseCase: IntegrationRepository
) : MobileAppIntegrationPresenterBase(view, integrationUseCase) ) : MobileAppIntegrationPresenterBase(view, integrationUseCase)

View file

@ -1,8 +1,8 @@
package io.homeassistant.companion.android.launch package io.homeassistant.companion.android.launch
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.authentication.SessionState import io.homeassistant.companion.android.common.data.authentication.SessionState
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
@ -23,8 +23,8 @@ object LaunchPresenterImplSpec : Spek({
} }
describe("launch presenter") { describe("launch presenter") {
val authenticationUseCase by memoized { mockk<AuthenticationUseCase>() } val authenticationUseCase by memoized { mockk<AuthenticationRepository>() }
val integrationUseCase by memoized { mockk<IntegrationUseCase>() } val integrationUseCase by memoized { mockk<IntegrationRepository>() }
val view by memoized { mockk<LaunchView>(relaxUnitFun = true) } val view by memoized { mockk<LaunchView>(relaxUnitFun = true) }
val presenter by memoized { LaunchPresenterImpl(view, authenticationUseCase, integrationUseCase) } val presenter by memoized { LaunchPresenterImpl(view, authenticationUseCase, integrationUseCase) }

View file

@ -1,7 +1,7 @@
package io.homeassistant.companion.android.onboarding.authentication package io.homeassistant.companion.android.onboarding.authentication
import android.net.Uri 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.Called
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.coVerify import io.mockk.coVerify
@ -28,7 +28,7 @@ object AuthenticationPresenterImplSpec : Spek({
} }
describe("authentication presenter") { 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 view by memoized { mockk<AuthenticationView>(relaxUnitFun = true) }
val presenter by memoized { AuthenticationPresenterImpl(view, authenticationUseCase) } val presenter by memoized { AuthenticationPresenterImpl(view, authenticationUseCase) }

View file

@ -2,8 +2,8 @@ package io.homeassistant.companion.android.onboarding.integration
import android.os.Build import android.os.Build
import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.domain.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.coVerify import io.mockk.coVerify
import io.mockk.coVerifyAll import io.mockk.coVerifyAll
@ -27,7 +27,7 @@ object MobileAppIntegrationPresenterImplSpec : Spek({
} }
describe("presenter") { 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 view by memoized { mockk<MobileAppIntegrationView>(relaxUnitFun = true) }
val presenter by memoized { MobileAppIntegrationPresenterBase(view, integrationUseCase) } val presenter by memoized { MobileAppIntegrationPresenterBase(view, integrationUseCase) }

View file

@ -1,7 +1,7 @@
package io.homeassistant.companion.android.onboarding.manual package io.homeassistant.companion.android.onboarding.manual
import io.homeassistant.companion.android.domain.MalformedHttpUrlException import io.homeassistant.companion.android.common.data.MalformedHttpUrlException
import io.homeassistant.companion.android.domain.url.UrlUseCase import io.homeassistant.companion.android.common.data.url.UrlRepository
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.coVerifyAll import io.mockk.coVerifyAll
import io.mockk.just import io.mockk.just
@ -25,7 +25,7 @@ object ManualSetupPresenterImplSpec : Spek({
} }
describe("presenter") { 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 view by memoized { mockk<ManualSetupView>(relaxUnitFun = true) }
val presenter by memoized { ManualSetupPresenterImpl(view, urlUseCase) } val presenter by memoized { ManualSetupPresenterImpl(view, urlUseCase) }

View file

@ -1,10 +1,10 @@
package io.homeassistant.companion.android.webview package io.homeassistant.companion.android.webview
import android.net.Uri import android.net.Uri
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.domain.themes.ThemesUseCase import io.homeassistant.companion.android.common.data.themes.ThemesRepository
import io.homeassistant.companion.android.domain.url.UrlUseCase import io.homeassistant.companion.android.common.data.url.UrlRepository
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.every import io.mockk.every
import io.mockk.just import io.mockk.just
@ -31,10 +31,10 @@ object WebViewPresenterImplSpec : Spek({
} }
describe("presenter") { describe("presenter") {
val urlUseCase by memoized { mockk<UrlUseCase>(relaxUnitFun = true) } val urlUseCase by memoized { mockk<UrlRepository>(relaxUnitFun = true) }
val authenticationUseCase by memoized { mockk<AuthenticationUseCase>(relaxUnitFun = true) } val authenticationUseCase by memoized { mockk<AuthenticationRepository>(relaxUnitFun = true) }
val integrationUseCase by memoized { mockk<IntegrationUseCase>(relaxUnitFun = true) } val integrationUseCase by memoized { mockk<IntegrationRepository>(relaxUnitFun = true) }
val themesUseCase by memoized { mockk<ThemesUseCase>(relaxUnitFun = true) } val themesUseCase by memoized { mockk<ThemesRepository>(relaxUnitFun = true) }
val view by memoized { mockk<WebView>(relaxUnitFun = true) } val view by memoized { mockk<WebView>(relaxUnitFun = true) }
val presenter by memoized { WebViewPresenterImpl(view, urlUseCase, authenticationUseCase, integrationUseCase) } val presenter by memoized { WebViewPresenterImpl(view, urlUseCase, authenticationUseCase, integrationUseCase) }
@ -58,7 +58,7 @@ object WebViewPresenterImplSpec : Spek({
describe("on get external auth on success") { describe("on get external auth on success") {
beforeEachTest { 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) presenter.onGetExternalAuth("externalAuthSetToken", false)
} }
@ -69,7 +69,7 @@ object WebViewPresenterImplSpec : Spek({
describe("on get external auth on error") { describe("on get external auth on error") {
beforeEachTest { beforeEachTest {
coEvery { authenticationUseCase.retrieveExternalAuthentication() } throws Exception() coEvery { authenticationUseCase.retrieveExternalAuthentication(false) } throws Exception()
presenter.onGetExternalAuth("externalAuthSetToken", false) presenter.onGetExternalAuth("externalAuthSetToken", false)
} }

View file

@ -23,7 +23,6 @@ allprojects {
repositories { repositories {
google() google()
jcenter() jcenter()
maven(url = Config.Repository.lokalize)
} }
apply(plugin = "org.jlleitschuh.gradle.ktlint") apply(plugin = "org.jlleitschuh.gradle.ktlint")

View file

@ -13,9 +13,6 @@ android {
} }
dependencies { dependencies {
implementation(project(":domain"))
implementation(project(":data"))
implementation(Config.Dependency.Kotlin.core) implementation(Config.Dependency.Kotlin.core)
implementation(Config.Dependency.Kotlin.coroutines) implementation(Config.Dependency.Kotlin.coroutines)
@ -23,4 +20,14 @@ dependencies {
kapt(Config.Dependency.Google.daggerCompiler) kapt(Config.Dependency.Google.daggerCompiler)
implementation(Config.Dependency.Square.retrofit) 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)
} }

View file

@ -1,7 +1,7 @@
package io.homeassistant.companion.android.common package io.homeassistant.companion.android.common
import android.content.SharedPreferences 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 { class LocalStorageImpl(private val sharedPreferences: SharedPreferences) : LocalStorage {

View file

@ -1,19 +1,19 @@
package io.homeassistant.companion.android.common.dagger package io.homeassistant.companion.android.common.dagger
import dagger.Component import dagger.Component
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.domain.themes.ThemesUseCase import io.homeassistant.companion.android.common.data.themes.ThemesRepository
import io.homeassistant.companion.android.domain.url.UrlUseCase import io.homeassistant.companion.android.common.data.url.UrlRepository
@Component(dependencies = [DomainComponent::class]) @Component(modules = [DataModule::class])
interface AppComponent { 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
} }

View file

@ -1,10 +1,10 @@
package io.homeassistant.companion.android.common.dagger package io.homeassistant.companion.android.common.dagger
import dagger.Component import dagger.Component
import io.homeassistant.companion.android.domain.authentication.AuthenticationRepository import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.integration.IntegrationRepository import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.domain.themes.ThemesRepository import io.homeassistant.companion.android.common.data.themes.ThemesRepository
import io.homeassistant.companion.android.domain.url.UrlRepository import io.homeassistant.companion.android.common.data.url.UrlRepository
@Component(modules = [DataModule::class]) @Component(modules = [DataModule::class])
interface DataComponent { interface DataComponent {

View file

@ -4,19 +4,19 @@ import android.os.Build
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import io.homeassistant.companion.android.data.HomeAssistantRetrofit import io.homeassistant.companion.android.common.data.HomeAssistantRetrofit
import io.homeassistant.companion.android.data.LocalStorage import io.homeassistant.companion.android.common.data.LocalStorage
import io.homeassistant.companion.android.data.authentication.AuthenticationRepositoryImpl import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.data.authentication.AuthenticationService import io.homeassistant.companion.android.common.data.authentication.impl.AuthenticationRepositoryImpl
import io.homeassistant.companion.android.data.integration.IntegrationRepositoryImpl import io.homeassistant.companion.android.common.data.authentication.impl.AuthenticationService
import io.homeassistant.companion.android.data.integration.IntegrationService import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.data.themes.ThemesRepositoryImpl import io.homeassistant.companion.android.common.data.integration.impl.IntegrationRepositoryImpl
import io.homeassistant.companion.android.data.url.UrlRepositoryImpl import io.homeassistant.companion.android.common.data.integration.impl.IntegrationService
import io.homeassistant.companion.android.data.wifi.WifiHelper import io.homeassistant.companion.android.common.data.themes.ThemesRepository
import io.homeassistant.companion.android.domain.authentication.AuthenticationRepository import io.homeassistant.companion.android.common.data.themes.ThemesRepositoryImpl
import io.homeassistant.companion.android.domain.integration.IntegrationRepository import io.homeassistant.companion.android.common.data.url.UrlRepository
import io.homeassistant.companion.android.domain.themes.ThemesRepository import io.homeassistant.companion.android.common.data.url.UrlRepositoryImpl
import io.homeassistant.companion.android.domain.url.UrlRepository import io.homeassistant.companion.android.common.data.wifi.WifiHelper
import javax.inject.Named import javax.inject.Named
@Module(includes = [DataModule.Declaration::class]) @Module(includes = [DataModule.Declaration::class])

View file

@ -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
}

View file

@ -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
}

View file

@ -1,7 +0,0 @@
package io.homeassistant.companion.android.common.dagger
import javax.inject.Scope
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class DomainScope

View file

@ -6,7 +6,7 @@ import android.content.Context
import android.net.wifi.WifiManager import android.net.wifi.WifiManager
import android.provider.Settings import android.provider.Settings
import io.homeassistant.companion.android.common.LocalStorageImpl 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( class Graph(
private val application: Application, private val application: Application,
@ -14,8 +14,6 @@ class Graph(
) { ) {
lateinit var appComponent: AppComponent lateinit var appComponent: AppComponent
private lateinit var dataComponent: DataComponent
private lateinit var domainComponent: DomainComponent
init { init {
buildComponent() buildComponent()
@ -23,8 +21,7 @@ class Graph(
@SuppressLint("HardwareIds") @SuppressLint("HardwareIds")
private fun buildComponent() { private fun buildComponent() {
dataComponent = DaggerDataComponent appComponent = DaggerAppComponent.builder()
.builder()
.dataModule( .dataModule(
DataModule( DataModule(
LocalStorageImpl( LocalStorageImpl(
@ -52,18 +49,12 @@ class Graph(
) )
), ),
WifiHelperImpl(application.getSystemService(Context.WIFI_SERVICE) as WifiManager), 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() .build()
domainComponent = DaggerDomainComponent
.builder()
.dataComponent(dataComponent)
.build()
appComponent = DaggerAppComponent.builder()
.domainComponent(domainComponent)
.build()
} }
} }

View file

@ -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.DeserializationFeature
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.PropertyNamingStrategy import com.fasterxml.jackson.databind.PropertyNamingStrategy
import com.fasterxml.jackson.module.kotlin.registerKotlinModule 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 java.util.concurrent.TimeUnit
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.data package io.homeassistant.companion.android.common.data
interface LocalStorage { interface LocalStorage {

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain package io.homeassistant.companion.android.common.data
import java.net.MalformedURLException import java.net.MalformedURLException

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.authentication package io.homeassistant.companion.android.common.data.authentication
import java.net.URL import java.net.URL

View file

@ -0,0 +1,3 @@
package io.homeassistant.companion.android.common.data.authentication
class AuthorizationException : Exception()

View file

@ -0,0 +1,6 @@
package io.homeassistant.companion.android.common.data.authentication
enum class SessionState {
ANONYMOUS,
CONNECTED,
}

View file

@ -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 com.fasterxml.jackson.databind.ObjectMapper
import io.homeassistant.companion.android.data.LocalStorage import io.homeassistant.companion.android.common.data.LocalStorage
import io.homeassistant.companion.android.domain.authentication.AuthenticationRepository import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.domain.authentication.SessionState import io.homeassistant.companion.android.common.data.authentication.AuthorizationException
import io.homeassistant.companion.android.domain.url.UrlRepository import io.homeassistant.companion.android.common.data.authentication.SessionState
import io.homeassistant.companion.android.common.data.url.UrlRepository
import java.net.URL import java.net.URL
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.threeten.bp.Instant
class AuthenticationRepositoryImpl @Inject constructor( class AuthenticationRepositoryImpl @Inject constructor(
private val authenticationService: AuthenticationService, private val authenticationService: AuthenticationService,
@ -35,7 +35,7 @@ class AuthenticationRepositoryImpl @Inject constructor(
saveSession( saveSession(
Session( Session(
it.accessToken, it.accessToken,
Instant.now().epochSecond + it.expiresIn, System.currentTimeMillis() / 1000 + it.expiresIn,
it.refreshToken!!, it.refreshToken!!,
it.tokenType it.tokenType
) )
@ -116,7 +116,7 @@ class AuthenticationRepositoryImpl @Inject constructor(
val refreshedToken = it.body() ?: throw AuthorizationException() val refreshedToken = it.body() ?: throw AuthorizationException()
val refreshSession = Session( val refreshSession = Session(
refreshedToken.accessToken, refreshedToken.accessToken,
Instant.now().epochSecond + refreshedToken.expiresIn, System.currentTimeMillis() / 1000 + refreshedToken.expiresIn,
session.refreshToken, session.refreshToken,
refreshedToken.tokenType refreshedToken.tokenType
) )

View file

@ -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.Response
import retrofit2.http.Field import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded import retrofit2.http.FormUrlEncoded

View file

@ -1,6 +1,4 @@
package io.homeassistant.companion.android.data.authentication package io.homeassistant.companion.android.common.data.authentication.impl
import org.threeten.bp.Instant
data class Session( data class Session(
val accessToken: String, val accessToken: String,
@ -11,5 +9,5 @@ data class Session(
fun isExpired() = expiresIn() < 0 fun isExpired() = expiresIn() < 0
fun expiresIn() = expiresTimestamp - Instant.now().epochSecond fun expiresIn() = expiresTimestamp - System.currentTimeMillis() / 1000
} }

View file

@ -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 import com.fasterxml.jackson.annotation.JsonProperty

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
data class DeviceRegistration( data class DeviceRegistration(
val appVersion: String? = null, val appVersion: String? = null,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
import java.util.Calendar import java.util.Calendar

View file

@ -0,0 +1,3 @@
package io.homeassistant.companion.android.common.data.integration
class IntegrationException : Exception()

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
interface IntegrationRepository { interface IntegrationRepository {

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
data class Panel( data class Panel(
val component_name: String, val component_name: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
data class SensorRegistration<T>( data class SensorRegistration<T>(
val uniqueId: String, val uniqueId: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
data class Service( data class Service(
val domain: String, val domain: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
data class ServiceData( data class ServiceData(
val description: String, val description: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
data class ServiceFields( data class ServiceFields(
val description: String, val description: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
data class UpdateLocation( data class UpdateLocation(
val locationName: String, val locationName: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.integration package io.homeassistant.companion.android.common.data.integration
data class ZoneAttributes( data class ZoneAttributes(
val hidden: Boolean, val hidden: Boolean,

View file

@ -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.common.data.LocalStorage
import io.homeassistant.companion.android.data.integration.entities.EntityResponse import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.data.integration.entities.FireEventRequest import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
import io.homeassistant.companion.android.data.integration.entities.GetConfigResponse import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.data.integration.entities.IntegrationRequest import io.homeassistant.companion.android.common.data.integration.IntegrationException
import io.homeassistant.companion.android.data.integration.entities.RegisterDeviceRequest import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.data.integration.entities.SensorRequest import io.homeassistant.companion.android.common.data.integration.Panel
import io.homeassistant.companion.android.data.integration.entities.ServiceCallRequest import io.homeassistant.companion.android.common.data.integration.SensorRegistration
import io.homeassistant.companion.android.data.integration.entities.Template import io.homeassistant.companion.android.common.data.integration.Service
import io.homeassistant.companion.android.data.integration.entities.UpdateLocationRequest import io.homeassistant.companion.android.common.data.integration.UpdateLocation
import io.homeassistant.companion.android.domain.authentication.AuthenticationRepository import io.homeassistant.companion.android.common.data.integration.ZoneAttributes
import io.homeassistant.companion.android.domain.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.integration.impl.entities.EntityResponse
import io.homeassistant.companion.android.domain.integration.Entity import io.homeassistant.companion.android.common.data.integration.impl.entities.FireEventRequest
import io.homeassistant.companion.android.domain.integration.IntegrationRepository import io.homeassistant.companion.android.common.data.integration.impl.entities.GetConfigResponse
import io.homeassistant.companion.android.domain.integration.Panel import io.homeassistant.companion.android.common.data.integration.impl.entities.IntegrationRequest
import io.homeassistant.companion.android.domain.integration.SensorRegistration import io.homeassistant.companion.android.common.data.integration.impl.entities.RegisterDeviceRequest
import io.homeassistant.companion.android.domain.integration.Service import io.homeassistant.companion.android.common.data.integration.impl.entities.SensorRequest
import io.homeassistant.companion.android.domain.integration.UpdateLocation import io.homeassistant.companion.android.common.data.integration.impl.entities.ServiceCallRequest
import io.homeassistant.companion.android.domain.integration.ZoneAttributes import io.homeassistant.companion.android.common.data.integration.impl.entities.Template
import io.homeassistant.companion.android.domain.url.UrlRepository 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.Inject
import javax.inject.Named import javax.inject.Named
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull

View file

@ -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.common.data.integration.Panel
import io.homeassistant.companion.android.data.integration.entities.DomainResponse import io.homeassistant.companion.android.common.data.integration.ZoneAttributes
import io.homeassistant.companion.android.data.integration.entities.EntityResponse import io.homeassistant.companion.android.common.data.integration.impl.entities.DiscoveryInfoResponse
import io.homeassistant.companion.android.data.integration.entities.GetConfigResponse import io.homeassistant.companion.android.common.data.integration.impl.entities.DomainResponse
import io.homeassistant.companion.android.data.integration.entities.IntegrationRequest import io.homeassistant.companion.android.common.data.integration.impl.entities.EntityResponse
import io.homeassistant.companion.android.data.integration.entities.RegisterDeviceRequest import io.homeassistant.companion.android.common.data.integration.impl.entities.GetConfigResponse
import io.homeassistant.companion.android.data.integration.entities.RegisterDeviceResponse import io.homeassistant.companion.android.common.data.integration.impl.entities.IntegrationRequest
import io.homeassistant.companion.android.domain.integration.Panel import io.homeassistant.companion.android.common.data.integration.impl.entities.RegisterDeviceRequest
import io.homeassistant.companion.android.domain.integration.ZoneAttributes import io.homeassistant.companion.android.common.data.integration.impl.entities.RegisterDeviceResponse
import okhttp3.HttpUrl import okhttp3.HttpUrl
import okhttp3.ResponseBody import okhttp3.ResponseBody
import retrofit2.Response import retrofit2.Response

View file

@ -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( data class DiscoveryInfoResponse(
val baseUrl: String, val baseUrl: String,

View file

@ -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>
)

View file

@ -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 import java.util.Calendar

View file

@ -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( data class FireEventRequest(
val eventType: String, val eventType: String,

View file

@ -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( data class GetConfigResponse(
val latitude: Double, val latitude: Double,

View file

@ -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 import com.fasterxml.jackson.annotation.JsonInclude

View file

@ -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 import com.fasterxml.jackson.annotation.JsonInclude

View file

@ -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( data class RegisterDeviceResponse(
var cloudhookUrl: String?, var cloudhookUrl: String?,

View file

@ -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 import com.fasterxml.jackson.annotation.JsonInclude

View file

@ -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( data class ServiceCallRequest(
val domain: String, val domain: String,

View file

@ -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( data class Template(
val template: String, val template: String,

View file

@ -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( data class UpdateLocationRequest(
val locationName: String, val locationName: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.themes package io.homeassistant.companion.android.common.data.themes
interface ThemesRepository { interface ThemesRepository {
suspend fun getCurrentTheme(): String? suspend fun getCurrentTheme(): String?

View file

@ -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.common.data.LocalStorage
import io.homeassistant.companion.android.domain.themes.ThemesRepository
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.domain.url package io.homeassistant.companion.android.common.data.url
import java.net.URL import java.net.URL

View file

@ -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.common.data.LocalStorage
import io.homeassistant.companion.android.data.wifi.WifiHelper import io.homeassistant.companion.android.common.data.MalformedHttpUrlException
import io.homeassistant.companion.android.domain.MalformedHttpUrlException import io.homeassistant.companion.android.common.data.wifi.WifiHelper
import io.homeassistant.companion.android.domain.url.UrlRepository
import java.net.URL import java.net.URL
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named

View file

@ -0,0 +1,5 @@
package io.homeassistant.companion.android.common.data.wifi
interface WifiHelper {
fun getWifiSsid(): String
}

View file

@ -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 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 private val wifiManager: WifiManager
) : WifiHelper { ) : WifiHelper {
override fun getWifiSsid(): String { override fun getWifiSsid(): String {

View file

@ -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.io.IOException
import java.net.URL import java.net.URL
import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockResponse
@ -54,7 +54,7 @@ class HomeAssistantMockService<T>(private val c: Class<T>) {
fun takeRequest() = mockServer.takeRequest() fun takeRequest() = mockServer.takeRequest()
private fun getJsonFromFile(file: String): String { private fun getJsonFromFile(file: String): String {
val inputStreamResponse = this.javaClass.classLoader.getResourceAsStream(file)!! val inputStreamResponse = this.javaClass.classLoader?.getResourceAsStream(file)!!
val size: Int val size: Int
return try { return try {
size = inputStreamResponse.available() size = inputStreamResponse.available()

View file

@ -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.common.data.LocalStorage
import io.homeassistant.companion.android.domain.authentication.SessionState import io.homeassistant.companion.android.common.data.authentication.AuthorizationException
import io.homeassistant.companion.android.domain.url.UrlRepository 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.Called
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.coVerify import io.mockk.coVerify
import io.mockk.coVerifyAll import io.mockk.coVerifyAll
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.verify import io.mockk.verify
import java.net.URL import java.net.URL
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
@ -17,15 +17,9 @@ import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.catchThrowable import org.assertj.core.api.Assertions.catchThrowable
import org.spekframework.spek2.Spek import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.specification.describe import org.spekframework.spek2.style.specification.describe
import org.threeten.bp.Instant
object AuthenticationRepositoryImplSpec : Spek({ object AuthenticationRepositoryImplSpec : Spek({
beforeEachTest {
mockkStatic(Instant::class)
every { Instant.now() } returns Instant.parse("2019-01-16T01:52:00.000Z")
}
describe("a repository") { describe("a repository") {
val localStorage by memoized { mockk<LocalStorage>(relaxUnitFun = true) } val localStorage by memoized { mockk<LocalStorage>(relaxUnitFun = true) }
val authenticationService by memoized { mockk<AuthenticationService>(relaxUnitFun = true) } val authenticationService by memoized { mockk<AuthenticationService>(relaxUnitFun = true) }
@ -183,7 +177,7 @@ object AuthenticationRepositoryImplSpec : Spek({
beforeEachTest { beforeEachTest {
coEvery { localStorage.getString("url") } returns "https://demo.home-assistant.io/" coEvery { localStorage.getString("url") } returns "https://demo.home-assistant.io/"
coEvery { localStorage.getString("access_token") } returns "ABCDEFGH" 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("refresh_token") } returns "IJKLMNOPQRST"
coEvery { localStorage.getString("token_type") } returns "Bearer" coEvery { localStorage.getString("token_type") } returns "Bearer"
coEvery { coEvery {

Some files were not shown because too many files have changed in this diff Show more