From bc7182d93b072bf38664e2d574fd1431123ba0d7 Mon Sep 17 00:00:00 2001 From: Justin Bassett Date: Fri, 2 Oct 2020 08:48:47 -0400 Subject: [PATCH] Refactor widgets into packages and add previews to interface. (#1000) --- app/src/main/AndroidManifest.xml | 10 +++--- .../android/widgets/ProviderComponent.kt | 8 +++-- .../widgets/{ => button}/ButtonWidget.kt | 7 ++-- .../ButtonWidgetConfigureActivity.kt | 9 +++-- .../{ => common}/ServiceFieldBinder.kt | 2 +- .../{ => common}/SingleItemArrayAdapter.kt | 2 +- .../{ => common}/WidgetDynamicFieldAdapter.kt | 2 +- .../EntityWidget.kt} | 11 +++--- .../EntityWidgetConfigureActivity.kt} | 33 ++++++++++-------- .../res/drawable/widget_example_button.png | Bin 0 -> 10904 bytes .../res/drawable/widget_example_entity.png | Bin 0 -> 13041 bytes .../res/drawable/widget_example_template.png | Bin 0 -> 11052 bytes app/src/main/res/xml/button_widget_info.xml | 5 +-- ...widget_info.xml => entity_widget_info.xml} | 5 +-- app/src/main/res/xml/template_widget_info.xml | 3 +- 15 files changed, 56 insertions(+), 41 deletions(-) rename app/src/main/java/io/homeassistant/companion/android/widgets/{ => button}/ButtonWidget.kt (97%) rename app/src/main/java/io/homeassistant/companion/android/widgets/{ => button}/ButtonWidgetConfigureActivity.kt (96%) rename app/src/main/java/io/homeassistant/companion/android/widgets/{ => common}/ServiceFieldBinder.kt (65%) rename app/src/main/java/io/homeassistant/companion/android/widgets/{ => common}/SingleItemArrayAdapter.kt (97%) rename app/src/main/java/io/homeassistant/companion/android/widgets/{ => common}/WidgetDynamicFieldAdapter.kt (99%) rename app/src/main/java/io/homeassistant/companion/android/widgets/{StaticWidget.kt => entity/EntityWidget.kt} (95%) rename app/src/main/java/io/homeassistant/companion/android/widgets/{StaticWidgetConfigureActivity.kt => entity/EntityWidgetConfigureActivity.kt} (87%) create mode 100644 app/src/main/res/drawable/widget_example_button.png create mode 100644 app/src/main/res/drawable/widget_example_entity.png create mode 100644 app/src/main/res/drawable/widget_example_template.png rename app/src/main/res/xml/{static_widget_info.xml => entity_widget_info.xml} (77%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bbf50fb14..2c3e1d1c5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,7 +53,7 @@ - + @@ -65,7 +65,7 @@ android:resource="@xml/button_widget_info" /> - + @@ -73,7 +73,7 @@ + android:resource="@xml/entity_widget_info" /> @@ -94,13 +94,13 @@ android:resource="@xml/template_widget_info" /> - + - + diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/ProviderComponent.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/ProviderComponent.kt index b0fd2be48..6edd191bd 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/ProviderComponent.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/ProviderComponent.kt @@ -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) diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/ButtonWidget.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidget.kt similarity index 97% rename from app/src/main/java/io/homeassistant/companion/android/widgets/ButtonWidget.kt rename to app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidget.kt index a6f524008..ce153b8fa 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/ButtonWidget.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidget.kt @@ -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" diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/ButtonWidgetConfigureActivity.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidgetConfigureActivity.kt similarity index 96% rename from app/src/main/java/io/homeassistant/companion/android/widgets/ButtonWidgetConfigureActivity.kt rename to app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidgetConfigureActivity.kt index b6b3523ac..27bdc75c7 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/ButtonWidgetConfigureActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/button/ButtonWidgetConfigureActivity.kt @@ -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) diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/ServiceFieldBinder.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/common/ServiceFieldBinder.kt similarity index 65% rename from app/src/main/java/io/homeassistant/companion/android/widgets/ServiceFieldBinder.kt rename to app/src/main/java/io/homeassistant/companion/android/widgets/common/ServiceFieldBinder.kt index c1c4d9e43..563d40f62 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/ServiceFieldBinder.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/common/ServiceFieldBinder.kt @@ -1,4 +1,4 @@ -package io.homeassistant.companion.android.widgets +package io.homeassistant.companion.android.widgets.common data class ServiceFieldBinder( val service: String, diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/SingleItemArrayAdapter.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/common/SingleItemArrayAdapter.kt similarity index 97% rename from app/src/main/java/io/homeassistant/companion/android/widgets/SingleItemArrayAdapter.kt rename to app/src/main/java/io/homeassistant/companion/android/widgets/common/SingleItemArrayAdapter.kt index cd63a63d4..c65767e24 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/SingleItemArrayAdapter.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/common/SingleItemArrayAdapter.kt @@ -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 diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/WidgetDynamicFieldAdapter.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/common/WidgetDynamicFieldAdapter.kt similarity index 99% rename from app/src/main/java/io/homeassistant/companion/android/widgets/WidgetDynamicFieldAdapter.kt rename to app/src/main/java/io/homeassistant/companion/android/widgets/common/WidgetDynamicFieldAdapter.kt index 064b045f0..a970d05ea 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/WidgetDynamicFieldAdapter.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/common/WidgetDynamicFieldAdapter.kt @@ -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 diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/StaticWidget.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/entity/EntityWidget.kt similarity index 95% rename from app/src/main/java/io/homeassistant/companion/android/widgets/StaticWidget.kt rename to app/src/main/java/io/homeassistant/companion/android/widgets/entity/EntityWidget.kt index a3fe54ef9..5ee743c77 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/StaticWidget.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/entity/EntityWidget.kt @@ -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) } diff --git a/app/src/main/java/io/homeassistant/companion/android/widgets/StaticWidgetConfigureActivity.kt b/app/src/main/java/io/homeassistant/companion/android/widgets/entity/EntityWidgetConfigureActivity.kt similarity index 87% rename from app/src/main/java/io/homeassistant/companion/android/widgets/StaticWidgetConfigureActivity.kt rename to app/src/main/java/io/homeassistant/companion/android/widgets/entity/EntityWidgetConfigureActivity.kt index 7e218836f..db4f2e74d 100644 --- a/app/src/main/java/io/homeassistant/companion/android/widgets/StaticWidgetConfigureActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/widgets/entity/EntityWidgetConfigureActivity.kt @@ -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() ) } diff --git a/app/src/main/res/drawable/widget_example_button.png b/app/src/main/res/drawable/widget_example_button.png new file mode 100644 index 0000000000000000000000000000000000000000..e808c561efd86f304d1639302b050c3f2f04fb4d GIT binary patch literal 10904 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/widget_example_entity.png b/app/src/main/res/drawable/widget_example_entity.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d335652afa4880144c9c1874281827dd8b7ccf GIT binary patch literal 13041 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 MF*(u7_xk?-2Rrj5YXATM literal 0 HcmV?d00001 diff --git a/app/src/main/res/xml/button_widget_info.xml b/app/src/main/res/xml/button_widget_info.xml index 9465e0c7b..44cf21c5e 100644 --- a/app/src/main/res/xml/button_widget_info.xml +++ b/app/src/main/res/xml/button_widget_info.xml @@ -1,6 +1,6 @@ \ No newline at end of file + android:widgetCategory="home_screen" + android:previewImage="@drawable/widget_example_button" /> \ No newline at end of file diff --git a/app/src/main/res/xml/static_widget_info.xml b/app/src/main/res/xml/entity_widget_info.xml similarity index 77% rename from app/src/main/res/xml/static_widget_info.xml rename to app/src/main/res/xml/entity_widget_info.xml index eb2ac3dc3..896e925cb 100644 --- a/app/src/main/res/xml/static_widget_info.xml +++ b/app/src/main/res/xml/entity_widget_info.xml @@ -1,6 +1,6 @@ \ No newline at end of file + android:widgetCategory="home_screen" + android:previewImage="@drawable/widget_example_entity" /> \ No newline at end of file diff --git a/app/src/main/res/xml/template_widget_info.xml b/app/src/main/res/xml/template_widget_info.xml index 9db8f53cb..408d68bc0 100644 --- a/app/src/main/res/xml/template_widget_info.xml +++ b/app/src/main/res/xml/template_widget_info.xml @@ -9,4 +9,5 @@ android:minResizeHeight="40dp" android:resizeMode="vertical|horizontal" android:updatePeriodMillis="1800000" - android:widgetCategory="home_screen" /> \ No newline at end of file + android:widgetCategory="home_screen" + android:previewImage="@drawable/widget_example_template" /> \ No newline at end of file