Виджеты для EPD

Процесс разработки виджетов для EPD аналогичен процессу разработки виджетов для цветного экрана, так как в обоих случаях используются одни и те же компоненты.

Подробную информацию о разработке виджетов в Android можно найти здесь: App Widgets.

Как создать виджет для EPD?

Виджеты для EPD аналогичны виджетам для цветного экрана, но есть некоторые особенности:

1. Необходимо создать XML файл и прописать там настройки виджета: размер и макеты для предварительного просмотра.

2. Необходимо учитывать следующие события:

   – смена темы виджета (белая/черная темы);

   – изменение видимости виджета (видимый ли виджет для пользователя или нет).

Метод onAppWidgetOptionsChanged отслеживает эти события и получает новые параметры и значения виджета. Далее вам нужно лишь обновить виджет в соответствии с этими изменениями.

Объявление виджетов для EPD

Процесс объявления виджетов для EPD аналогичен процессу объявления виджетов для цветного экрана. Чтобы виджет отобразился на EPD, необходимо включить в com.yotadevices.epd_provider EPD-мета-данные, как показано ниже.

AndroidManifest.xml

    <receiver
         android:name="com.yotadevices.api.sample.epd.widgetprovider" >
         <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
         </intent-filter>
         <!-- Front screen widget settings -->
         <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/fs_widget_info" />
         <!-- Epd widget settings -->
         <meta-data
            android:name="com.yotadevices.epd_provider"        
            android:resource="@xml/epd_widget_info" />
    </receiver>

Размеры виджетов

Различают следующие размеры виджетов:

– Полноэкранные (Fullscreen full_screen) - 540x960

– XL (extra_large) - 476x672

– L (large) - 476×448

– M (medium) - 168×476

– S (small) - 112×476

Отступы между виджетами регулируются в YotaHub и не могут быть изменены.

В файле EPD виджета (к примеру, в @xml/epd_widget_info) необходимо указать поддерживаемые размеры виджета. Можно указать несколько размеров сразу.

    <epd-widget-provider
        xmlns:sdk="http://schemas.android.com/apk/com.yotadevices.sdk"
        sdk:size="medium"/>

Конфигурации цветного экрана должны быть указаны в соответствующем файле (к примеру, в fs_widget_info.xml):

    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/fs_widget"
        android:minHeight="10dp"
        android:minWidth="10dp"
        android:resizeMode="vertical|horizontal"
        android:updatePeriodMillis="60000"
        android:widgetCategory="home_screen">
    </appwidget-provider>

Важное замечание: если необходимо скрыть виджет, укажите android:widgetCategory=“”.

Предпросмотр виджетов

Предварительный просмотр виджетов доступен, если открыть список виджетов в YotaHub.

https://yotaphone.com/media/5_widgets+on+epd_1.png

Чтобы создать эскиз для предпросмотра виджета (preview), используйте стандартный Android макет (Android layout). При этом будут применены все ресурсы, например, локализованный ресурсы (values-ru/, values-en/...).

В XML файле виджета также могут быть определены макеты (layouts) с атрибутами previewBlack и previewWhite для черной и белой темы соответственно.

Пример:

    <?xml version="1.0" encoding="utf-8"?>
    <epd-widget-provider
            xmlns:sdk="http://schemas.android.com/apk/com.yotadevices.sdk"
            sdk:size="medium"
            sdk:previewBlack="@layout/preview_layout_black"
            sdk:previewWhite="@layout/preview_layout_white"/>

Эскиз для предпросмотра виджета (preview) будет взят из @layout/preview_layout_black или @layout/preview_layout_white в соответствии с выбранной темой.

Белая и черная темы

Если виджет изначально не поддерживает белую тему, можно сделать его инвертируемым. В этом случае YotaHub инвертирует цвета для белой темы.

    <epd-widget-provider
        xmlns:sdk="http://schemas.android.com/apk/com.yotadevices.sdk"
        sdk:size="medium"
        sdk:invertable="medium" 
        sdk:previewBlack="@layout/preview_layout_black"
        sdk:previewWhite="@layout/preview_layout_white"/>

Реализуйте метод onAppWidgetOptionsChanged и выполните обновления вручную:

    // we have to make manual invert for this size
    int size = appWidgetOptions.getInt(EpdConstants.EpdLauncherConstants.OPTION_WIDGET_SIZE, -1);
    int display = appWidgetOptions.getInt(EpdConstants.EpdLauncherConstants.OPTION_WIDGET_THEME, -1);
    if (size == EpdConstants.EpdLauncherConstants.WIDGET_SIZE_LARGE) {
        if (display == EpdConstants.EpdLauncherConstants.WIDGET_THEME_WHITE) {
            remoteViews.setTextColor(R.id.textView, context.getResources().getColor(android.R.color.black));
        }
            }