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>
|
</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>
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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"
|
|
@ -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)
|
|
@ -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,
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
||||||
}
|
}
|
|
@ -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()
|
||||||
)
|
)
|
||||||
}
|
}
|
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"?>
|
<?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" />
|
|
@ -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" />
|
|
@ -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" />
|
Loading…
Reference in a new issue