mirror of
https://github.com/home-assistant/android
synced 2024-10-15 12:32:54 +00:00
Architecture Simplification (#917)
* Common compiling.... So I guess I have that going for me... * It's very broken... * App builds and tests pass.... * Remove other now extra files.
This commit is contained in:
parent
e5baf1e64c
commit
6e13b16214
|
@ -115,7 +115,6 @@ play {
|
||||||
|
|
||||||
dependencies {
|
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)
|
||||||
|
|
|
@ -1,31 +1,29 @@
|
||||||
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) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Issue updating Registration", e)
|
Log.e(TAG, "Issue updating Registration", e)
|
||||||
|
|
|
@ -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,7 +275,8 @@ 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)
|
||||||
|
@ -468,8 +470,10 @@ 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(
|
||||||
|
Dispatchers.IO
|
||||||
|
) {
|
||||||
if (url == null)
|
if (url == null)
|
||||||
return@withContext null
|
return@withContext null
|
||||||
|
|
||||||
|
@ -623,8 +627,10 @@ class MessagingService : FirebaseMessagingService() {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
integrationUseCase.updateRegistration(
|
integrationUseCase.updateRegistration(
|
||||||
|
DeviceRegistration(
|
||||||
pushToken = token
|
pushToken = token
|
||||||
)
|
)
|
||||||
|
)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
// TODO: Store for update later
|
// TODO: Store for update later
|
||||||
Log.e(TAG, "Issue updating token", e)
|
Log.e(TAG, "Issue updating token", e)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>>()
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -1,126 +0,0 @@
|
||||||
package io.homeassistant.companion.android.settings.shortcuts
|
|
||||||
|
|
||||||
import android.app.PendingIntent
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.pm.ShortcutInfo
|
|
||||||
import android.content.pm.ShortcutManager
|
|
||||||
import android.graphics.drawable.Icon
|
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.annotation.RequiresApi
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import io.homeassistant.companion.android.DaggerPresenterComponent
|
|
||||||
import io.homeassistant.companion.android.PresenterModule
|
|
||||||
import io.homeassistant.companion.android.R
|
|
||||||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
|
||||||
import io.homeassistant.companion.android.domain.integration.Panel
|
|
||||||
import io.homeassistant.companion.android.webview.WebViewActivity
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.O)
|
|
||||||
class ShortcutsFragment : Fragment(), ShortcutsView {
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun newInstance(): ShortcutsFragment {
|
|
||||||
return ShortcutsFragment()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var presenter: ShortcutsPresenter
|
|
||||||
|
|
||||||
private lateinit var recyclerViewAdapter: ShortcutsRecyclerViewAdapter
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
|
|
||||||
DaggerPresenterComponent
|
|
||||||
.builder()
|
|
||||||
.appComponent((activity?.application as GraphComponentAccessor).appComponent)
|
|
||||||
.presenterModule(PresenterModule(this))
|
|
||||||
.build()
|
|
||||||
.inject(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
val panels = presenter.getPanels().filter { panel ->
|
|
||||||
!panel.title.isNullOrEmpty() && panel.title !== "lovelace" && panel.title !== "profile"
|
|
||||||
}.sortedBy { panel -> panel.title }.map { panel ->
|
|
||||||
panel.title_localized = when (panel.title) {
|
|
||||||
"calendar" -> requireContext().getString(R.string.calendar)
|
|
||||||
"config" -> requireContext().getString(R.string.config)
|
|
||||||
"developer_tools" -> requireContext().getString(R.string.developer_tools)
|
|
||||||
"history" -> requireContext().getString(R.string.history)
|
|
||||||
"logbook" -> requireContext().getString(R.string.logbook)
|
|
||||||
"mailbox" -> requireContext().getString(R.string.mailbox)
|
|
||||||
"map" -> requireContext().getString(R.string.map)
|
|
||||||
"profile" -> requireContext().getString(R.string.profile)
|
|
||||||
"shopping_list" -> requireContext().getString(R.string.shopping_list)
|
|
||||||
"states" -> requireContext().getString(R.string.states)
|
|
||||||
else -> panel.title
|
|
||||||
}
|
|
||||||
panel
|
|
||||||
}
|
|
||||||
|
|
||||||
recyclerViewAdapter =
|
|
||||||
ShortcutsRecyclerViewAdapter(panels.toList(), requireContext()) { onCreateShortcut(it) }
|
|
||||||
|
|
||||||
return inflater.inflate(R.layout.fragment_shortcuts, container, false).apply {
|
|
||||||
findViewById<RecyclerView>(R.id.recycler_view_shortcuts)?.apply {
|
|
||||||
adapter = recyclerViewAdapter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun onCreateShortcut(panel: Panel) {
|
|
||||||
val shortcutManager =
|
|
||||||
requireContext().getSystemService(ShortcutManager::class.java)
|
|
||||||
if (shortcutManager!!.isRequestPinShortcutSupported) {
|
|
||||||
val pinShortcutInfo =
|
|
||||||
ShortcutInfo.Builder(
|
|
||||||
context,
|
|
||||||
panel.title
|
|
||||||
)
|
|
||||||
.setShortLabel(panel.title_localized!!)
|
|
||||||
.setLongLabel(panel.title_localized!!)
|
|
||||||
.setIcon(
|
|
||||||
Icon.createWithResource(
|
|
||||||
context,
|
|
||||||
R.drawable.app_icon
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.setIntent(
|
|
||||||
WebViewActivity.newInstance(
|
|
||||||
requireContext(),
|
|
||||||
panel.url_path
|
|
||||||
).apply {
|
|
||||||
this.action = Intent.ACTION_VIEW
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
val pinnedShortcutCallbackIntent =
|
|
||||||
shortcutManager.createShortcutResultIntent(
|
|
||||||
pinShortcutInfo
|
|
||||||
)
|
|
||||||
val successCallback =
|
|
||||||
PendingIntent.getBroadcast(
|
|
||||||
context,
|
|
||||||
0,
|
|
||||||
pinnedShortcutCallbackIntent,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
shortcutManager.requestPinShortcut(
|
|
||||||
pinShortcutInfo,
|
|
||||||
successCallback.intentSender
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
package io.homeassistant.companion.android.settings.shortcuts
|
|
||||||
|
|
||||||
import io.homeassistant.companion.android.domain.integration.Panel
|
|
||||||
|
|
||||||
interface ShortcutsPresenter {
|
|
||||||
fun getPanels(): Array<Panel>
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package io.homeassistant.companion.android.settings.shortcuts
|
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
|
||||||
import io.homeassistant.companion.android.domain.integration.Panel
|
|
||||||
import javax.inject.Inject
|
|
||||||
import kotlinx.coroutines.runBlocking
|
|
||||||
|
|
||||||
class ShortcutsPresenterImpl @Inject constructor(
|
|
||||||
private val integrationUseCase: IntegrationUseCase
|
|
||||||
) : ShortcutsPresenter {
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private const val TAG = "ShortcutsPresenter"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getPanels(): Array<Panel> {
|
|
||||||
return runBlocking {
|
|
||||||
var panels = arrayOf<Panel>()
|
|
||||||
try {
|
|
||||||
panels = integrationUseCase.getPanels()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "Issue getting panels.", e)
|
|
||||||
}
|
|
||||||
panels
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
package io.homeassistant.companion.android.settings.shortcuts
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import io.homeassistant.companion.android.databinding.ItemShortcutBinding
|
|
||||||
import io.homeassistant.companion.android.domain.integration.Panel
|
|
||||||
|
|
||||||
class ShortcutsRecyclerViewAdapter(
|
|
||||||
private val panels: List<Panel>,
|
|
||||||
val context: Context,
|
|
||||||
private val onCreateShortcut: (Panel) -> Unit
|
|
||||||
) :
|
|
||||||
RecyclerView.Adapter<ShortcutsRecyclerViewAdapter.ShortcutBindingViewHolder>() {
|
|
||||||
|
|
||||||
override fun getItemCount(): Int {
|
|
||||||
return panels.size
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(
|
|
||||||
parent: ViewGroup,
|
|
||||||
viewType: Int
|
|
||||||
): ShortcutBindingViewHolder {
|
|
||||||
val binding =
|
|
||||||
ItemShortcutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
|
||||||
return ShortcutBindingViewHolder(binding) { onCreateShortcut(panels[it]) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ShortcutBindingViewHolder, position: Int) {
|
|
||||||
val panel = panels[position]
|
|
||||||
val binding = ItemShortcutBinding.bind(holder.itemView)
|
|
||||||
binding.panelText.text = panel.title_localized
|
|
||||||
}
|
|
||||||
|
|
||||||
class ShortcutBindingViewHolder(
|
|
||||||
binding: ItemShortcutBinding,
|
|
||||||
private val clickListener: (Int) -> Unit
|
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
|
||||||
init {
|
|
||||||
binding.actionAdd.setOnClickListener { clickListener(adapterPosition) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
package io.homeassistant.companion.android.settings.shortcuts
|
|
||||||
|
|
||||||
interface ShortcutsView
|
|
|
@ -7,12 +7,12 @@ import android.webkit.WebSettings
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.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 {
|
||||||
|
|
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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>>()
|
||||||
|
|
||||||
|
|
|
@ -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.*
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
package io.homeassistant.companion.android.common.dagger
|
|
||||||
|
|
||||||
import dagger.Component
|
|
||||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
|
||||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
|
||||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCase
|
|
||||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
|
||||||
|
|
||||||
@Component(dependencies = [DataComponent::class], modules = [DomainModule::class])
|
|
||||||
interface DomainComponent {
|
|
||||||
|
|
||||||
fun urlUseCase(): UrlUseCase
|
|
||||||
|
|
||||||
fun authenticationUseCase(): AuthenticationUseCase
|
|
||||||
|
|
||||||
fun integrationUseCase(): IntegrationUseCase
|
|
||||||
|
|
||||||
fun themesUseCase(): ThemesUseCase
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package io.homeassistant.companion.android.common.dagger
|
|
||||||
|
|
||||||
import dagger.Binds
|
|
||||||
import dagger.Module
|
|
||||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCase
|
|
||||||
import io.homeassistant.companion.android.domain.authentication.AuthenticationUseCaseImpl
|
|
||||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCase
|
|
||||||
import io.homeassistant.companion.android.domain.integration.IntegrationUseCaseImpl
|
|
||||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCase
|
|
||||||
import io.homeassistant.companion.android.domain.themes.ThemesUseCaseImpl
|
|
||||||
import io.homeassistant.companion.android.domain.url.UrlUseCase
|
|
||||||
import io.homeassistant.companion.android.domain.url.UrlUseCaseImpl
|
|
||||||
|
|
||||||
@Module
|
|
||||||
interface DomainModule {
|
|
||||||
|
|
||||||
@Binds
|
|
||||||
fun bindUrlUseCase(useCaseImpl: UrlUseCaseImpl): UrlUseCase
|
|
||||||
|
|
||||||
@Binds
|
|
||||||
fun bindAuthenticationUseCase(useCaseImpl: AuthenticationUseCaseImpl): AuthenticationUseCase
|
|
||||||
|
|
||||||
@Binds
|
|
||||||
fun bindIntegrationUseCase(useCaseImpl: IntegrationUseCaseImpl): IntegrationUseCase
|
|
||||||
|
|
||||||
@Binds
|
|
||||||
fun bindThemesUseCase(useCaseImpl: ThemesUseCaseImpl): ThemesUseCase
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
package io.homeassistant.companion.android.common.dagger
|
|
||||||
|
|
||||||
import javax.inject.Scope
|
|
||||||
|
|
||||||
@Scope
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
annotation class DomainScope
|
|
|
@ -6,7 +6,7 @@ import android.content.Context
|
||||||
import android.net.wifi.WifiManager
|
import android.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()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data
|
package io.homeassistant.companion.android.common.data
|
||||||
|
|
||||||
interface LocalStorage {
|
interface LocalStorage {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
package io.homeassistant.companion.android.common.data.authentication
|
||||||
|
|
||||||
|
class AuthorizationException : Exception()
|
|
@ -0,0 +1,6 @@
|
||||||
|
package io.homeassistant.companion.android.common.data.authentication
|
||||||
|
|
||||||
|
enum class SessionState {
|
||||||
|
ANONYMOUS,
|
||||||
|
CONNECTED,
|
||||||
|
}
|
|
@ -1,15 +1,15 @@
|
||||||
package io.homeassistant.companion.android.data.authentication
|
package io.homeassistant.companion.android.common.data.authentication.impl
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import 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
|
||||||
)
|
)
|
|
@ -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
|
|
@ -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
|
||||||
}
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
package io.homeassistant.companion.android.common.data.integration
|
||||||
|
|
||||||
|
class IntegrationException : Exception()
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.domain.integration
|
package io.homeassistant.companion.android.common.data.integration
|
||||||
|
|
||||||
interface IntegrationRepository {
|
interface IntegrationRepository {
|
||||||
|
|
|
@ -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,
|
|
@ -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,
|
|
@ -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,
|
|
@ -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,
|
|
@ -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,
|
|
@ -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,
|
|
@ -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,
|
|
@ -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
|
|
@ -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
|
|
@ -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,
|
|
@ -0,0 +1,8 @@
|
||||||
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
|
import io.homeassistant.companion.android.common.data.integration.ServiceData
|
||||||
|
|
||||||
|
data class DomainResponse(
|
||||||
|
val domain: String,
|
||||||
|
val services: Map<String, ServiceData>
|
||||||
|
)
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
data class FireEventRequest(
|
data class FireEventRequest(
|
||||||
val eventType: String,
|
val eventType: String,
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
data class GetConfigResponse(
|
data class GetConfigResponse(
|
||||||
val latitude: Double,
|
val latitude: Double,
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude
|
import com.fasterxml.jackson.annotation.JsonInclude
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude
|
import com.fasterxml.jackson.annotation.JsonInclude
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
data class RegisterDeviceResponse(
|
data class RegisterDeviceResponse(
|
||||||
var cloudhookUrl: String?,
|
var cloudhookUrl: String?,
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude
|
import com.fasterxml.jackson.annotation.JsonInclude
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
data class ServiceCallRequest(
|
data class ServiceCallRequest(
|
||||||
val domain: String,
|
val domain: String,
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
data class Template(
|
data class Template(
|
||||||
val template: String,
|
val template: String,
|
|
@ -1,4 +1,4 @@
|
||||||
package io.homeassistant.companion.android.data.integration.entities
|
package io.homeassistant.companion.android.common.data.integration.impl.entities
|
||||||
|
|
||||||
data class UpdateLocationRequest(
|
data class UpdateLocationRequest(
|
||||||
val locationName: String,
|
val locationName: String,
|
|
@ -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?
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -0,0 +1,5 @@
|
||||||
|
package io.homeassistant.companion.android.common.data.wifi
|
||||||
|
|
||||||
|
interface WifiHelper {
|
||||||
|
fun getWifiSsid(): String
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
package io.homeassistant.companion.android.common.wifi
|
package io.homeassistant.companion.android.common.data.wifi
|
||||||
|
|
||||||
import android.net.wifi.WifiManager
|
import 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 {
|
|
@ -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()
|
|
@ -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
Loading…
Reference in a new issue