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>
</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>

View file

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

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.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"

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

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.widgets
package io.homeassistant.companion.android.widgets.common
data class ServiceFieldBinder(
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.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.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.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)
}

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.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()
)
}

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"?>
<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" />

View file

@ -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" />

View file

@ -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" />