Refactor widgets into packages and add previews to interface. (#1000)

This commit is contained in:
Justin Bassett 2020-10-02 08:48:47 -04:00 committed by GitHub
parent 1b363e6ea7
commit bc7182d93b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 56 additions and 41 deletions

View file

@ -53,7 +53,7 @@
</intent-filter> </intent-filter>
</receiver> </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> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <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" />
@ -65,7 +65,7 @@
android:resource="@xml/button_widget_info" /> android:resource="@xml/button_widget_info" />
</receiver> </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> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <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.StaticWidget.RECEIVE_DATA" />
@ -73,7 +73,7 @@
<meta-data <meta-data
android:name="android.appwidget.provider" android:name="android.appwidget.provider"
android:resource="@xml/static_widget_info" /> android:resource="@xml/entity_widget_info" />
</receiver> </receiver>
<receiver android:name=".widgets.template.TemplateWidget" android:label="Template Widget"> <receiver android:name=".widgets.template.TemplateWidget" android:label="Template Widget">
@ -94,13 +94,13 @@
android:resource="@xml/template_widget_info" /> android:resource="@xml/template_widget_info" />
</receiver> </receiver>
<activity android:name=".widgets.ButtonWidgetConfigureActivity"> <activity android:name=".widgets.button.ButtonWidgetConfigureActivity">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".widgets.StaticWidgetConfigureActivity"> <activity android:name=".widgets.entity.EntityWidgetConfigureActivity">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter> </intent-filter>

View file

@ -2,6 +2,10 @@ package io.homeassistant.companion.android.widgets
import dagger.Component import dagger.Component
import io.homeassistant.companion.android.common.dagger.AppComponent 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.TemplateWidget
import io.homeassistant.companion.android.widgets.template.TemplateWidgetConfigureActivity import io.homeassistant.companion.android.widgets.template.TemplateWidgetConfigureActivity
@ -12,9 +16,9 @@ interface ProviderComponent {
fun inject(activity: ButtonWidgetConfigureActivity) fun inject(activity: ButtonWidgetConfigureActivity)
fun inject(receiver: StaticWidget) fun inject(receiver: EntityWidget)
fun inject(activity: StaticWidgetConfigureActivity) fun inject(activity: EntityWidgetConfigureActivity)
fun inject(receiver: TemplateWidget) fun inject(receiver: TemplateWidget)

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.widgets package io.homeassistant.companion.android.widgets.button
import android.app.PendingIntent import android.app.PendingIntent
import android.appwidget.AppWidgetManager 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.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.widgets.DaggerProviderComponent
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
@ -34,9 +35,9 @@ class ButtonWidget : AppWidgetProvider() {
companion object { companion object {
private const val TAG = "ButtonWidget" private const val TAG = "ButtonWidget"
private const val CALL_SERVICE = 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 = 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_DOMAIN = "EXTRA_DOMAIN"
internal const val EXTRA_SERVICE = "EXTRA_SERVICE" internal const val EXTRA_SERVICE = "EXTRA_SERVICE"

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.widgets package io.homeassistant.companion.android.widgets.button
import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetManager
import android.content.ComponentName 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.Entity
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.common.data.integration.Service 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 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
@ -224,8 +228,7 @@ class ButtonWidgetConfigureActivity : AppCompatActivity(), IconDialog.Callback {
} }
// Inject components // Inject components
DaggerProviderComponent DaggerProviderComponent.builder()
.builder()
.appComponent((application as GraphComponentAccessor).appComponent) .appComponent((application as GraphComponentAccessor).appComponent)
.build() .build()
.inject(this) .inject(this)

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.widgets package io.homeassistant.companion.android.widgets.common
data class ServiceFieldBinder( data class ServiceFieldBinder(
val service: String, val service: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.widgets package io.homeassistant.companion.android.widgets.common
import android.content.Context import android.content.Context
import android.view.View import android.view.View

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.widgets package io.homeassistant.companion.android.widgets.common
import android.text.Editable import android.text.Editable
import android.text.TextWatcher import android.text.TextWatcher

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.widgets package io.homeassistant.companion.android.widgets.entity
import android.app.PendingIntent import android.app.PendingIntent
import android.appwidget.AppWidgetManager 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.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.widgets.DaggerProviderComponent
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class StaticWidget : AppWidgetProvider() { class EntityWidget : AppWidgetProvider() {
companion object { companion object {
private const val TAG = "StaticWidget" private const val TAG = "StaticWidget"
internal const val RECEIVE_DATA = 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 = 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_ENTITY_ID = "EXTRA_ENTITY_ID"
internal const val EXTRA_ATTRIBUTE_IDS = "EXTRA_ATTRIBUTE_IDS" 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 { 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 action = UPDATE_ENTITY
putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
} }

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.widgets package io.homeassistant.companion.android.widgets.entity
import android.app.Activity import android.app.Activity
import android.appwidget.AppWidgetManager 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.dagger.GraphComponentAccessor
import io.homeassistant.companion.android.common.data.integration.Entity 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.IntegrationRepository
import io.homeassistant.companion.android.widgets.DaggerProviderComponent
import io.homeassistant.companion.android.widgets.common.SingleItemArrayAdapter
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
@ -26,9 +28,11 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class StaticWidgetConfigureActivity : Activity() { class EntityWidgetConfigureActivity : Activity() {
private val TAG: String = "StaticWidgetConfigAct" companion object {
private const val TAG: String = "StaticWidgetConfigAct"
}
@Inject @Inject
lateinit var integrationUseCase: IntegrationRepository lateinit var integrationUseCase: IntegrationRepository
@ -70,8 +74,7 @@ class StaticWidgetConfigureActivity : Activity() {
} }
// Inject components // Inject components
DaggerProviderComponent DaggerProviderComponent.builder()
.builder()
.appComponent((application as GraphComponentAccessor).appComponent) .appComponent((application as GraphComponentAccessor).appComponent)
.build() .build()
.inject(this) .inject(this)
@ -96,7 +99,7 @@ class StaticWidgetConfigureActivity : Activity() {
try { try {
// Fetch entities // Fetch entities
val fetchedEntities = integrationUseCase.getEntities() val fetchedEntities = integrationUseCase.getEntities()
fetchedEntities.sortBy({ e -> e.entityId }) fetchedEntities.sortBy { e -> e.entityId }
fetchedEntities.forEach { fetchedEntities.forEach {
entities[it.entityId] = it entities[it.entityId] = it
} }
@ -145,43 +148,43 @@ class StaticWidgetConfigureActivity : Activity() {
private var addWidgetButtonClickListener = View.OnClickListener { private var addWidgetButtonClickListener = View.OnClickListener {
try { try {
val context = this@StaticWidgetConfigureActivity val context = this@EntityWidgetConfigureActivity
// Set up a broadcast intent and pass the service call data as extras // Set up a broadcast intent and pass the service call data as extras
val intent = Intent() val intent = Intent()
intent.action = StaticWidget.RECEIVE_DATA intent.action = EntityWidget.RECEIVE_DATA
intent.component = ComponentName(context, StaticWidget::class.java) intent.component = ComponentName(context, EntityWidget::class.java)
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
intent.putExtra( intent.putExtra(
StaticWidget.EXTRA_ENTITY_ID, EntityWidget.EXTRA_ENTITY_ID,
selectedEntity!!.entityId selectedEntity!!.entityId
) )
intent.putExtra( intent.putExtra(
StaticWidget.EXTRA_LABEL, EntityWidget.EXTRA_LABEL,
label.text.toString() label.text.toString()
) )
intent.putExtra( intent.putExtra(
StaticWidget.EXTRA_TEXT_SIZE, EntityWidget.EXTRA_TEXT_SIZE,
textSize.text.toString() textSize.text.toString()
) )
intent.putExtra( intent.putExtra(
StaticWidget.EXTRA_STATE_SEPARATOR, EntityWidget.EXTRA_STATE_SEPARATOR,
state_separator.text.toString() state_separator.text.toString()
) )
if (appendAttributes) { if (appendAttributes) {
intent.putExtra( intent.putExtra(
StaticWidget.EXTRA_ATTRIBUTE_IDS, EntityWidget.EXTRA_ATTRIBUTE_IDS,
selectedAttributeIds selectedAttributeIds
) )
intent.putExtra( intent.putExtra(
StaticWidget.EXTRA_ATTRIBUTE_SEPARATOR, EntityWidget.EXTRA_ATTRIBUTE_SEPARATOR,
attribute_separator.text.toString() attribute_separator.text.toString()
) )
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" <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:initialKeyguardLayout="@layout/widget_button"
android:initialLayout="@layout/widget_button" android:initialLayout="@layout/widget_button"
android:minWidth="40dp" android:minWidth="40dp"
@ -9,4 +9,5 @@
android:minResizeHeight="40dp" android:minResizeHeight="40dp"
android:resizeMode="vertical|horizontal" android:resizeMode="vertical|horizontal"
android:updatePeriodMillis="86400000" android:updatePeriodMillis="86400000"
android:widgetCategory="home_screen" /> android:widgetCategory="home_screen"
android:previewImage="@drawable/widget_example_button" />

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" <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:initialKeyguardLayout="@layout/widget_button"
android:initialLayout="@layout/widget_button" android:initialLayout="@layout/widget_button"
android:minWidth="40dp" android:minWidth="40dp"
@ -9,4 +9,5 @@
android:minResizeHeight="40dp" android:minResizeHeight="40dp"
android:resizeMode="vertical|horizontal" android:resizeMode="vertical|horizontal"
android:updatePeriodMillis="1800000" android:updatePeriodMillis="1800000"
android:widgetCategory="home_screen" /> android:widgetCategory="home_screen"
android:previewImage="@drawable/widget_example_entity" />

View file

@ -9,4 +9,5 @@
android:minResizeHeight="40dp" android:minResizeHeight="40dp"
android:resizeMode="vertical|horizontal" android:resizeMode="vertical|horizontal"
android:updatePeriodMillis="1800000" android:updatePeriodMillis="1800000"
android:widgetCategory="home_screen" /> android:widgetCategory="home_screen"
android:previewImage="@drawable/widget_example_template" />