Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BaseWidgetProvider Refactor #4640

Draft
wants to merge 13 commits into
base: master
Choose a base branch
from
Draft
10 changes: 5 additions & 5 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="io.homeassistant.companion.android.widgets.ButtonWidget.CALL_SERVICE" />
<action android:name="io.homeassistant.companion.android.widgets.ButtonWidget.CALL_SERVICE_AUTH" />
<action android:name="io.homeassistant.companion.android.widgets.ButtonWidget.RECEIVE_DATA" />
<action android:name="io.homeassistant.companion.android.widgets.RECEIVE_DATA" />
</intent-filter>

<meta-data
Expand All @@ -124,7 +124,7 @@
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="io.homeassistant.companion.android.widgets.camera.CameraWidget.RECEIVE_DATA" />
<action android:name="io.homeassistant.companion.android.widgets.RECEIVE_DATA" />
<action android:name="io.homeassistant.companion.android.widgets.camera.CameraWidget.UPDATE_IMAGE" />
</intent-filter>

Expand All @@ -137,7 +137,7 @@
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="io.homeassistant.companion.android.widgets.StaticWidget.RECEIVE_DATA" />
<action android:name="io.homeassistant.companion.android.widgets.RECEIVE_DATA" />
</intent-filter>

<meta-data
Expand All @@ -149,7 +149,7 @@
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.RECEIVE_DATA" />
<action android:name="io.homeassistant.companion.android.widgets.RECEIVE_DATA" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.UPDATE_MEDIA_IMAGE" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.CALL_PREV_TRACK" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.CALL_REWIND" />
Expand All @@ -174,7 +174,7 @@
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
<action android:name="io.homeassistant.companion.android.background.REQUEST_SENSORS_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="io.homeassistant.companion.android.widgets.template.TemplateWidget.RECEIVE_DATA" />
<action android:name="io.homeassistant.companion.android.widgets.RECEIVE_DATA" />
</intent-filter>

<meta-data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import io.homeassistant.companion.android.settings.language.LanguagesManager
import io.homeassistant.companion.android.util.LifecycleHandler
import io.homeassistant.companion.android.websocket.WebsocketBroadcastReceiver
import io.homeassistant.companion.android.widgets.button.ButtonWidget
import io.homeassistant.companion.android.widgets.camera.CameraWidget
import io.homeassistant.companion.android.widgets.entity.EntityWidget
import io.homeassistant.companion.android.widgets.mediaplayer.MediaPlayerControlsWidget
import io.homeassistant.companion.android.widgets.template.TemplateWidget
Expand Down Expand Up @@ -277,6 +278,7 @@ open class HomeAssistantApplication : Application() {
// Update widgets when the screen turns on, updates are skipped if widgets were not added
val buttonWidget = ButtonWidget()
val entityWidget = EntityWidget()
val cameraWidget = CameraWidget()
val mediaPlayerWidget = MediaPlayerControlsWidget()
val templateWidget = TemplateWidget()

Expand All @@ -286,6 +288,7 @@ open class HomeAssistantApplication : Application() {

ContextCompat.registerReceiver(this, buttonWidget, screenIntentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
ContextCompat.registerReceiver(this, entityWidget, screenIntentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
ContextCompat.registerReceiver(this, cameraWidget, screenIntentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
ivorsmorenburg marked this conversation as resolved.
Show resolved Hide resolved
ContextCompat.registerReceiver(this, mediaPlayerWidget, screenIntentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
ContextCompat.registerReceiver(this, templateWidget, screenIntentFilter, ContextCompat.RECEIVER_NOT_EXPORTED)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.WidgetEntity
import kotlinx.coroutines.flow.Flow

interface BaseDaoWidgetRepository<T : WidgetEntity> {

fun get(id: Int): T?

fun exist(appWidgetId: Int): Boolean {
return get(appWidgetId) != null
}

suspend fun add(entity: T)

suspend fun delete(id: Int)

suspend fun deleteAll(ids: IntArray)

suspend fun getAll(): List<T>

suspend fun getAllFlow(): Flow<List<T>>

suspend fun updateWidgetLastUpdate(widgetId: Int, lastUpdate: String)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.ButtonWidgetEntity

interface ButtonWidgetRepository : BaseDaoWidgetRepository<ButtonWidgetEntity>
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.ButtonWidgetDao
import io.homeassistant.companion.android.database.widget.ButtonWidgetEntity
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOn

class ButtonWidgetRepositoryImpl @Inject constructor(
private val dao: ButtonWidgetDao
) : ButtonWidgetRepository {

override fun get(id: Int): ButtonWidgetEntity? {
return dao.get(id)
}

override suspend fun add(entity: ButtonWidgetEntity) = dao.add(entity)

override suspend fun delete(id: Int) = dao.delete(id)

override suspend fun deleteAll(ids: IntArray) = dao.deleteAll(ids)

override suspend fun getAll(): List<ButtonWidgetEntity> = dao.getAll()

override suspend fun getAllFlow(): Flow<List<ButtonWidgetEntity>> = dao.getAllFlow().flowOn(Dispatchers.IO)

override suspend fun updateWidgetLastUpdate(widgetId: Int, lastUpdate: String) = error("Not Implemented")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.CameraWidgetEntity

interface CameraWidgetRepository : BaseDaoWidgetRepository<CameraWidgetEntity>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.CameraWidgetDao
import io.homeassistant.companion.android.database.widget.CameraWidgetEntity
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow

class CameraWidgetRepositoryImpl @Inject constructor(
private val dao: CameraWidgetDao
) : CameraWidgetRepository {

override suspend fun add(entity: CameraWidgetEntity) = dao.add(entity)

override suspend fun delete(id: Int) = dao.delete(id)

override suspend fun deleteAll(ids: IntArray) = dao.deleteAll(ids)

override suspend fun getAll(): List<CameraWidgetEntity> = dao.getAll()

override suspend fun getAllFlow(): Flow<List<CameraWidgetEntity>> = dao.getAllFlow()

override suspend fun updateWidgetLastUpdate(widgetId: Int, lastUpdate: String) = error("Not Implemented")

override fun get(id: Int): CameraWidgetEntity? = dao.get(id)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.MediaPlayerControlsWidgetEntity

interface MediaPlayerControlsWidgetRepository :
BaseDaoWidgetRepository<MediaPlayerControlsWidgetEntity>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.MediaPlayerControlsWidgetDao
import io.homeassistant.companion.android.database.widget.MediaPlayerControlsWidgetEntity
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOn

class MediaPlayerControlsWidgetRepositoryImpl @Inject constructor(
private val dao: MediaPlayerControlsWidgetDao
) : MediaPlayerControlsWidgetRepository {

override fun get(id: Int): MediaPlayerControlsWidgetEntity? = dao.get(id)

override suspend fun add(entity: MediaPlayerControlsWidgetEntity) = dao.add(entity)

override suspend fun delete(id: Int) = dao.delete(id)

override suspend fun deleteAll(ids: IntArray) = dao.deleteAll(ids)

override suspend fun getAll(): List<MediaPlayerControlsWidgetEntity> = dao.getAll()

override suspend fun getAllFlow(): Flow<List<MediaPlayerControlsWidgetEntity>> = dao.getAllFlow().flowOn(Dispatchers.IO)

override suspend fun updateWidgetLastUpdate(widgetId: Int, lastUpdate: String) = error("Not Implemented")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package io.homeassistant.companion.android.repositories

import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
abstract class RepositoryModule {

@Binds
abstract fun bindMediaPlayerWidgetRepository(
impl: MediaPlayerControlsWidgetRepositoryImpl
): MediaPlayerControlsWidgetRepository

@Binds
abstract fun bindTemplateWidgetRepository(
impl: TemplateWidgetRepositoryImpl
): TemplateWidgetRepository

@Binds
abstract fun bindEntityWidgetRepository(
impl: StaticWidgetRepositoryImpl
): StaticWidgetRepository

@Binds
abstract fun bindCameraWidgetRepository(
impl: CameraWidgetRepositoryImpl
): CameraWidgetRepository

@Binds
abstract fun bindButtonWidgetRepository(
impl: ButtonWidgetRepositoryImpl
): ButtonWidgetRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.StaticWidgetEntity

interface StaticWidgetRepository : BaseDaoWidgetRepository<StaticWidgetEntity>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.StaticWidgetDao
import io.homeassistant.companion.android.database.widget.StaticWidgetEntity
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOn

class StaticWidgetRepositoryImpl @Inject constructor(
private val dao: StaticWidgetDao
) : StaticWidgetRepository {

override fun get(id: Int): StaticWidgetEntity? = dao.get(id)

override suspend fun updateWidgetLastUpdate(widgetId: Int, lastUpdate: String) = dao.updateWidgetLastUpdate(widgetId, lastUpdate)

override suspend fun add(entity: StaticWidgetEntity) = dao.add(entity)

override suspend fun delete(id: Int) = dao.delete(id)

override suspend fun deleteAll(ids: IntArray) = dao.deleteAll(ids)

override suspend fun getAll(): List<StaticWidgetEntity> = dao.getAll()

override suspend fun getAllFlow(): Flow<List<StaticWidgetEntity>> = dao.getAllFlow().flowOn(Dispatchers.IO)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.TemplateWidgetEntity

interface TemplateWidgetRepository : BaseDaoWidgetRepository<TemplateWidgetEntity>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.homeassistant.companion.android.repositories

import io.homeassistant.companion.android.database.widget.TemplateWidgetDao
import io.homeassistant.companion.android.database.widget.TemplateWidgetEntity
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOn

class TemplateWidgetRepositoryImpl @Inject constructor(
private val dao: TemplateWidgetDao
) : TemplateWidgetRepository {

override fun get(id: Int): TemplateWidgetEntity? = dao.get(id)

override suspend fun delete(id: Int) = dao.delete(id)

override suspend fun deleteAll(ids: IntArray) = dao.deleteAll(ids)

override suspend fun getAll(): List<TemplateWidgetEntity> = dao.getAll()

override suspend fun getAllFlow(): Flow<List<TemplateWidgetEntity>> = dao.getAllFlow().flowOn(Dispatchers.IO)

override suspend fun updateWidgetLastUpdate(widgetId: Int, lastUpdate: String) = dao.updateTemplateWidgetLastUpdate(widgetId, lastUpdate)

override suspend fun add(entity: TemplateWidgetEntity) = dao.add(entity)
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,18 @@ import android.widget.Toast
import io.homeassistant.companion.android.BaseActivity
import io.homeassistant.companion.android.common.R
import io.homeassistant.companion.android.common.data.servers.ServerManager
import io.homeassistant.companion.android.database.widget.WidgetDao
import io.homeassistant.companion.android.repositories.BaseDaoWidgetRepository
import javax.inject.Inject

abstract class BaseWidgetConfigureActivity : BaseActivity() {
abstract class BaseWidgetConfigureActivity<T : BaseDaoWidgetRepository<*>> : BaseActivity() {

@Inject
lateinit var serverManager: ServerManager

protected var appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID

abstract val dao: WidgetDao
@Inject
lateinit var repository: T

abstract val serverSelect: View
abstract val serverSelectList: Spinner
Expand Down
Loading