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 000000000..e808c561e Binary files /dev/null and b/app/src/main/res/drawable/widget_example_button.png differ 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 000000000..b6d335652 Binary files /dev/null and b/app/src/main/res/drawable/widget_example_entity.png differ diff --git a/app/src/main/res/drawable/widget_example_template.png b/app/src/main/res/drawable/widget_example_template.png new file mode 100644 index 000000000..e52728d36 Binary files /dev/null and b/app/src/main/res/drawable/widget_example_template.png differ 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