mirror of
https://github.com/home-assistant/android
synced 2024-09-19 16:11:37 +00:00
Refactor widgets into packages and add previews to interface. (#1000)
This commit is contained in:
parent
1b363e6ea7
commit
bc7182d93b
|
@ -53,7 +53,7 @@
|
|||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".widgets.ButtonWidget" android:label="@string/widget_button_image_description">
|
||||
<receiver android:name=".widgets.button.ButtonWidget" android:label="@string/widget_button_image_description">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
<action android:name="io.homeassistant.companion.android.widgets.ButtonWidget.CALL_SERVICE" />
|
||||
|
@ -65,7 +65,7 @@
|
|||
android:resource="@xml/button_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".widgets.StaticWidget" android:label="@string/widget_static_image_description">
|
||||
<receiver android:name=".widgets.entity.EntityWidget" android:label="@string/widget_static_image_description">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
<action android:name="io.homeassistant.companion.android.widgets.StaticWidget.RECEIVE_DATA" />
|
||||
|
@ -73,7 +73,7 @@
|
|||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/static_widget_info" />
|
||||
android:resource="@xml/entity_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".widgets.template.TemplateWidget" android:label="Template Widget">
|
||||
|
@ -94,13 +94,13 @@
|
|||
android:resource="@xml/template_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<activity android:name=".widgets.ButtonWidgetConfigureActivity">
|
||||
<activity android:name=".widgets.button.ButtonWidgetConfigureActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name=".widgets.StaticWidgetConfigureActivity">
|
||||
<activity android:name=".widgets.entity.EntityWidgetConfigureActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
|
||||
</intent-filter>
|
||||
|
|
|
@ -2,6 +2,10 @@ package io.homeassistant.companion.android.widgets
|
|||
|
||||
import dagger.Component
|
||||
import io.homeassistant.companion.android.common.dagger.AppComponent
|
||||
import io.homeassistant.companion.android.widgets.button.ButtonWidget
|
||||
import io.homeassistant.companion.android.widgets.button.ButtonWidgetConfigureActivity
|
||||
import io.homeassistant.companion.android.widgets.entity.EntityWidget
|
||||
import io.homeassistant.companion.android.widgets.entity.EntityWidgetConfigureActivity
|
||||
import io.homeassistant.companion.android.widgets.template.TemplateWidget
|
||||
import io.homeassistant.companion.android.widgets.template.TemplateWidgetConfigureActivity
|
||||
|
||||
|
@ -12,9 +16,9 @@ interface ProviderComponent {
|
|||
|
||||
fun inject(activity: ButtonWidgetConfigureActivity)
|
||||
|
||||
fun inject(receiver: StaticWidget)
|
||||
fun inject(receiver: EntityWidget)
|
||||
|
||||
fun inject(activity: StaticWidgetConfigureActivity)
|
||||
fun inject(activity: EntityWidgetConfigureActivity)
|
||||
|
||||
fun inject(receiver: TemplateWidget)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.widgets
|
||||
package io.homeassistant.companion.android.widgets.button
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.appwidget.AppWidgetManager
|
||||
|
@ -23,6 +23,7 @@ import io.homeassistant.companion.android.common.data.integration.IntegrationRep
|
|||
import io.homeassistant.companion.android.database.AppDatabase
|
||||
import io.homeassistant.companion.android.database.widget.ButtonWidgetDao
|
||||
import io.homeassistant.companion.android.database.widget.ButtonWidgetEntity
|
||||
import io.homeassistant.companion.android.widgets.DaggerProviderComponent
|
||||
import java.util.regex.Pattern
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -34,9 +35,9 @@ class ButtonWidget : AppWidgetProvider() {
|
|||
companion object {
|
||||
private const val TAG = "ButtonWidget"
|
||||
private const val CALL_SERVICE =
|
||||
"io.homeassistant.companion.android.widgets.ButtonWidget.CALL_SERVICE"
|
||||
"io.homeassistant.companion.android.widgets.button.ButtonWidget.CALL_SERVICE"
|
||||
internal const val RECEIVE_DATA =
|
||||
"io.homeassistant.companion.android.widgets.ButtonWidget.RECEIVE_DATA"
|
||||
"io.homeassistant.companion.android.widgets.button.ButtonWidget.RECEIVE_DATA"
|
||||
|
||||
internal const val EXTRA_DOMAIN = "EXTRA_DOMAIN"
|
||||
internal const val EXTRA_SERVICE = "EXTRA_SERVICE"
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.widgets
|
||||
package io.homeassistant.companion.android.widgets.button
|
||||
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.content.ComponentName
|
||||
|
@ -30,6 +30,10 @@ import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
|||
import io.homeassistant.companion.android.common.data.integration.Entity
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.common.data.integration.Service
|
||||
import io.homeassistant.companion.android.widgets.DaggerProviderComponent
|
||||
import io.homeassistant.companion.android.widgets.common.ServiceFieldBinder
|
||||
import io.homeassistant.companion.android.widgets.common.SingleItemArrayAdapter
|
||||
import io.homeassistant.companion.android.widgets.common.WidgetDynamicFieldAdapter
|
||||
import javax.inject.Inject
|
||||
import kotlinx.android.synthetic.main.widget_button_configure.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -224,8 +228,7 @@ class ButtonWidgetConfigureActivity : AppCompatActivity(), IconDialog.Callback {
|
|||
}
|
||||
|
||||
// Inject components
|
||||
DaggerProviderComponent
|
||||
.builder()
|
||||
DaggerProviderComponent.builder()
|
||||
.appComponent((application as GraphComponentAccessor).appComponent)
|
||||
.build()
|
||||
.inject(this)
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.widgets
|
||||
package io.homeassistant.companion.android.widgets.common
|
||||
|
||||
data class ServiceFieldBinder(
|
||||
val service: String,
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.widgets
|
||||
package io.homeassistant.companion.android.widgets.common
|
||||
|
||||
import android.content.Context
|
||||
import android.view.View
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.widgets
|
||||
package io.homeassistant.companion.android.widgets.common
|
||||
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.widgets
|
||||
package io.homeassistant.companion.android.widgets.entity
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.appwidget.AppWidgetManager
|
||||
|
@ -15,20 +15,21 @@ import io.homeassistant.companion.android.common.data.integration.IntegrationRep
|
|||
import io.homeassistant.companion.android.database.AppDatabase
|
||||
import io.homeassistant.companion.android.database.widget.StaticWidgetDao
|
||||
import io.homeassistant.companion.android.database.widget.StaticWidgetEntity
|
||||
import io.homeassistant.companion.android.widgets.DaggerProviderComponent
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class StaticWidget : AppWidgetProvider() {
|
||||
class EntityWidget : AppWidgetProvider() {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "StaticWidget"
|
||||
internal const val RECEIVE_DATA =
|
||||
"io.homeassistant.companion.android.widgets.StaticWidget.RECEIVE_DATA"
|
||||
"io.homeassistant.companion.android.widgets.entity.StaticWidget.RECEIVE_DATA"
|
||||
internal const val UPDATE_ENTITY =
|
||||
"io.homeassistant.companion.android.widgets.StaticWidget.UPDATE_ENTITY"
|
||||
"io.homeassistant.companion.android.widgets.entity.StaticWidget.UPDATE_ENTITY"
|
||||
|
||||
internal const val EXTRA_ENTITY_ID = "EXTRA_ENTITY_ID"
|
||||
internal const val EXTRA_ATTRIBUTE_IDS = "EXTRA_ATTRIBUTE_IDS"
|
||||
|
@ -73,7 +74,7 @@ class StaticWidget : AppWidgetProvider() {
|
|||
}
|
||||
|
||||
private suspend fun getWidgetRemoteViews(context: Context, appWidgetId: Int): RemoteViews {
|
||||
val intent = Intent(context, StaticWidget::class.java).apply {
|
||||
val intent = Intent(context, EntityWidget::class.java).apply {
|
||||
action = UPDATE_ENTITY
|
||||
putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package io.homeassistant.companion.android.widgets
|
||||
package io.homeassistant.companion.android.widgets.entity
|
||||
|
||||
import android.app.Activity
|
||||
import android.appwidget.AppWidgetManager
|
||||
|
@ -18,6 +18,8 @@ import io.homeassistant.companion.android.R
|
|||
import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor
|
||||
import io.homeassistant.companion.android.common.data.integration.Entity
|
||||
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
|
||||
import io.homeassistant.companion.android.widgets.DaggerProviderComponent
|
||||
import io.homeassistant.companion.android.widgets.common.SingleItemArrayAdapter
|
||||
import javax.inject.Inject
|
||||
import kotlinx.android.synthetic.main.widget_static_configure.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -26,9 +28,11 @@ import kotlinx.coroutines.Job
|
|||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class StaticWidgetConfigureActivity : Activity() {
|
||||
class EntityWidgetConfigureActivity : Activity() {
|
||||
|
||||
private val TAG: String = "StaticWidgetConfigAct"
|
||||
companion object {
|
||||
private const val TAG: String = "StaticWidgetConfigAct"
|
||||
}
|
||||
|
||||
@Inject
|
||||
lateinit var integrationUseCase: IntegrationRepository
|
||||
|
@ -70,8 +74,7 @@ class StaticWidgetConfigureActivity : Activity() {
|
|||
}
|
||||
|
||||
// Inject components
|
||||
DaggerProviderComponent
|
||||
.builder()
|
||||
DaggerProviderComponent.builder()
|
||||
.appComponent((application as GraphComponentAccessor).appComponent)
|
||||
.build()
|
||||
.inject(this)
|
||||
|
@ -96,7 +99,7 @@ class StaticWidgetConfigureActivity : Activity() {
|
|||
try {
|
||||
// Fetch entities
|
||||
val fetchedEntities = integrationUseCase.getEntities()
|
||||
fetchedEntities.sortBy({ e -> e.entityId })
|
||||
fetchedEntities.sortBy { e -> e.entityId }
|
||||
fetchedEntities.forEach {
|
||||
entities[it.entityId] = it
|
||||
}
|
||||
|
@ -145,43 +148,43 @@ class StaticWidgetConfigureActivity : Activity() {
|
|||
private var addWidgetButtonClickListener = View.OnClickListener {
|
||||
try {
|
||||
|
||||
val context = this@StaticWidgetConfigureActivity
|
||||
val context = this@EntityWidgetConfigureActivity
|
||||
|
||||
// Set up a broadcast intent and pass the service call data as extras
|
||||
val intent = Intent()
|
||||
intent.action = StaticWidget.RECEIVE_DATA
|
||||
intent.component = ComponentName(context, StaticWidget::class.java)
|
||||
intent.action = EntityWidget.RECEIVE_DATA
|
||||
intent.component = ComponentName(context, EntityWidget::class.java)
|
||||
|
||||
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
|
||||
|
||||
intent.putExtra(
|
||||
StaticWidget.EXTRA_ENTITY_ID,
|
||||
EntityWidget.EXTRA_ENTITY_ID,
|
||||
selectedEntity!!.entityId
|
||||
)
|
||||
|
||||
intent.putExtra(
|
||||
StaticWidget.EXTRA_LABEL,
|
||||
EntityWidget.EXTRA_LABEL,
|
||||
label.text.toString()
|
||||
)
|
||||
|
||||
intent.putExtra(
|
||||
StaticWidget.EXTRA_TEXT_SIZE,
|
||||
EntityWidget.EXTRA_TEXT_SIZE,
|
||||
textSize.text.toString()
|
||||
)
|
||||
|
||||
intent.putExtra(
|
||||
StaticWidget.EXTRA_STATE_SEPARATOR,
|
||||
EntityWidget.EXTRA_STATE_SEPARATOR,
|
||||
state_separator.text.toString()
|
||||
)
|
||||
|
||||
if (appendAttributes) {
|
||||
intent.putExtra(
|
||||
StaticWidget.EXTRA_ATTRIBUTE_IDS,
|
||||
EntityWidget.EXTRA_ATTRIBUTE_IDS,
|
||||
selectedAttributeIds
|
||||
)
|
||||
|
||||
intent.putExtra(
|
||||
StaticWidget.EXTRA_ATTRIBUTE_SEPARATOR,
|
||||
EntityWidget.EXTRA_ATTRIBUTE_SEPARATOR,
|
||||
attribute_separator.text.toString()
|
||||
)
|
||||
}
|
BIN
app/src/main/res/drawable/widget_example_button.png
Normal file
BIN
app/src/main/res/drawable/widget_example_button.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
BIN
app/src/main/res/drawable/widget_example_entity.png
Normal file
BIN
app/src/main/res/drawable/widget_example_entity.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
BIN
app/src/main/res/drawable/widget_example_template.png
Normal file
BIN
app/src/main/res/drawable/widget_example_template.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:configure="io.homeassistant.companion.android.widgets.ButtonWidgetConfigureActivity"
|
||||
android:configure="io.homeassistant.companion.android.widgets.button.ButtonWidgetConfigureActivity"
|
||||
android:initialKeyguardLayout="@layout/widget_button"
|
||||
android:initialLayout="@layout/widget_button"
|
||||
android:minWidth="40dp"
|
||||
|
@ -9,4 +9,5 @@
|
|||
android:minResizeHeight="40dp"
|
||||
android:resizeMode="vertical|horizontal"
|
||||
android:updatePeriodMillis="86400000"
|
||||
android:widgetCategory="home_screen" />
|
||||
android:widgetCategory="home_screen"
|
||||
android:previewImage="@drawable/widget_example_button" />
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:configure="io.homeassistant.companion.android.widgets.StaticWidgetConfigureActivity"
|
||||
android:configure="io.homeassistant.companion.android.widgets.entity.EntityWidgetConfigureActivity"
|
||||
android:initialKeyguardLayout="@layout/widget_button"
|
||||
android:initialLayout="@layout/widget_button"
|
||||
android:minWidth="40dp"
|
||||
|
@ -9,4 +9,5 @@
|
|||
android:minResizeHeight="40dp"
|
||||
android:resizeMode="vertical|horizontal"
|
||||
android:updatePeriodMillis="1800000"
|
||||
android:widgetCategory="home_screen" />
|
||||
android:widgetCategory="home_screen"
|
||||
android:previewImage="@drawable/widget_example_entity" />
|
|
@ -9,4 +9,5 @@
|
|||
android:minResizeHeight="40dp"
|
||||
android:resizeMode="vertical|horizontal"
|
||||
android:updatePeriodMillis="1800000"
|
||||
android:widgetCategory="home_screen" />
|
||||
android:widgetCategory="home_screen"
|
||||
android:previewImage="@drawable/widget_example_template" />
|
Loading…
Reference in a new issue