From 566489dbf6047ce90f3765b4058723dbcd731b30 Mon Sep 17 00:00:00 2001 From: Katie McCormick Date: Mon, 28 Mar 2011 17:08:08 -0700 Subject: [PATCH] Cherrypick from HC--3.0 appwidget features. Change-Id: Idf9e0003db0f45264ca34e513ad132cc089cf62d Change-Id: I7dd7ec732aa3089b4e20d5a859f35e1bbd846c3b --- docs/html/guide/topics/appwidgets/index.jd | 1122 +++++++++++++++++--- docs/html/images/appwidget.png | Bin 17414 -> 11818 bytes docs/html/images/appwidget_collections.png | Bin 0 -> 43765 bytes 3 files changed, 962 insertions(+), 160 deletions(-) create mode 100644 docs/html/images/appwidget_collections.png diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd index 89306a2a80a9f..e589292842e0d 100644 --- a/docs/html/guide/topics/appwidgets/index.jd +++ b/docs/html/guide/topics/appwidgets/index.jd @@ -7,7 +7,8 @@ page.title=App Widgets @@ -19,15 +20,28 @@ Widget lifecycle
  • Creating the App Widget Layout
  • Using the AppWidgetProvider Class
      -
    1. Receiving App Widget broadcast Intents
    2. +
    3. Receiving App Widget broadcast +Intents
  • -
  • Creating an App Widget Configuration Activity +
  • Creating an App Widget Configuration +Activity
      -
    1. Updating the App Widget from +
    2. Updating the App Widget +from the configuration Activity
  • +
  • Setting a Preview Image
  • +
  • Using App Widgets with Collections +
      +
    1. Sample application
    2. +
    3. Implementing app widgets with +collections +
    4. +
    5. Keeping Collection Data Fresh
    6. +
    +
  • Key classes

    @@ -39,25 +53,34 @@ Widget lifecycle

    See also

      -
    1. App Widget Design +
    2. App Widget +Design Guidelines
    3. -
    4. Introducing +
    5. Introducing home screen widgets and the AppWidget framework »
    -

    App Widgets are miniature application views that can be embedded in other applications -(such as the Home screen) and receive periodic updates. These views are referred +

    App Widgets are miniature application views that can be embedded in other +applications +(such as the Home screen) and receive periodic updates. These views are +referred to as Widgets in the user interface, -and you can publish one with an App Widget provider. An application component that is -able to hold other App Widgets is called an App Widget host. The screenshot below shows +and you can publish one with an App Widget provider. An application component +that is +able to hold other App Widgets is called an App Widget host. The screenshot +below shows the Music App Widget.

    -

    This document describes how to publish an App Widget using an App Widget provider.

    +

    This document describes how to publish an App Widget using an App Widget +provider.

    The Basics

    @@ -66,18 +89,23 @@ the Music App Widget.

    {@link android.appwidget.AppWidgetProviderInfo} object
    -
    Describes the metadata for an App Widget, such as the App Widget's layout, update frequency, +
    Describes the metadata for an App Widget, such as the App Widget's layout, +update frequency, and the AppWidgetProvider class. This should be defined in XML.
    {@link android.appwidget.AppWidgetProvider} class implementation
    -
    Defines the basic methods that allow you to programmatically interface with the App Widget, - based on broadcast events. Through it, you will receive broadcasts when the App Widget is updated, +
    Defines the basic methods that allow you to programmatically interface +with the App Widget, + based on broadcast events. Through it, you will receive broadcasts when the +App Widget is updated, enabled, disabled and deleted.
    View layout
    Defines the initial layout for the App Widget, defined in XML.
    -

    Additionally, you can implement an App Widget configuration Activity. This is an optional -{@link android.app.Activity} that launches when the user adds your App Widget and allows him or her +

    Additionally, you can implement an App Widget configuration Activity. This is +an optional +{@link android.app.Activity} that launches when the user adds your App Widget +and allows him or her to modify App Widget settings at create-time.

    The following sections describe how to setup each of these components.

    @@ -85,7 +113,8 @@ to modify App Widget settings at create-time.

    Declaring an App Widget in the Manifest

    -

    First, declare the {@link android.appwidget.AppWidgetProvider} class in your application's +

    First, declare the {@link android.appwidget.AppWidgetProvider} class in your +application's AndroidManifest.xml file. For example:

    @@ -98,24 +127,32 @@ to modify App Widget settings at create-time.

    </receiver>
    -

    The <receiver> element requires the android:name +

    The <receiver> element requires the +android:name attribute, which specifies the {@link android.appwidget.AppWidgetProvider} used by the App Widget.

    -

    The <intent-filter> element must include an <action> +

    The <intent-filter> element must include an +<action> element with the android:name attribute. This attribute specifies that the {@link android.appwidget.AppWidgetProvider} accepts the {@link -android.appwidget.AppWidgetManager#ACTION_APPWIDGET_UPDATE ACTION_APPWIDGET_UPDATE} broadcast. -This is the only broadcast that you must explicitly declare. The {@link android.appwidget.AppWidgetManager} -automatically sends all other App Widget broadcasts to the AppWidgetProvider as necessary.

    +android.appwidget.AppWidgetManager#ACTION_APPWIDGET_UPDATE +ACTION_APPWIDGET_UPDATE} broadcast. +This is the only broadcast that you must explicitly declare. The {@link +android.appwidget.AppWidgetManager} +automatically sends all other App Widget broadcasts to the AppWidgetProvider as +necessary.

    The <meta-data> element specifies the {@link android.appwidget.AppWidgetProviderInfo} resource and requires the following attributes:

    @@ -123,10 +160,13 @@ following attributes:

    Adding the AppWidgetProviderInfo Metadata

    The {@link android.appwidget.AppWidgetProviderInfo} defines the essential -qualities of an App Widget, such as its minimum layout dimensions, its initial layout resource, -how often to update the App Widget, and (optionally) a configuration Activity to launch at create-time. +qualities of an App Widget, such as its minimum layout dimensions, its initial +layout resource, +how often to update the App Widget, and (optionally) a configuration Activity to +launch at create-time. Define the AppWidgetProviderInfo object in an XML resource using a single -<appwidget-provider> element and save it in the project's res/xml/ +<appwidget-provider> element and save it in the project's +res/xml/ folder.

    For example:

    @@ -136,71 +176,131 @@ folder.

    android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" + android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" - android:configure="com.example.android.ExampleAppWidgetConfigure" > + android:configure="com.example.android.ExampleAppWidgetConfigure" + android:resizeMode="horizontal|vertical"> </appwidget-provider>

    Here's a summary of the <appwidget-provider> attributes:

    +
  • The configure attribute defines the {@link +android.app.Activity} to launch when + the user adds the App Widget, in order for him or her to configure App +Widget properties. This is optional + (read Creating an App Widget Configuration +Activity below).
  • + +
  • The previewImage attribute specifies a preview of what the +app widget will look like after it's configured, which the user sees when +selecting the app widget. If not supplied, the user instead sees your +application's launcher icon. This field corresponds to the +android:previewImage attribute in the <receiver> +element in the AndroidManifest.xml file. For more discussion of +using previewImage, see Setting a Preview +Image. Introduced in Android 3.0.
  • -

    See the {@link android.appwidget.AppWidgetProviderInfo} class for more information on the +

  • The autoAdvanceViewId attribute specifies the view ID of the +app widget subview that should be auto-advanced by the widget's host. Introduced in Android 3.0.
  • + +
  • The resizeMode attribute specifies the rules by which a widget +can be resized. You use this attribute to make homescreen widgets +resizeable—horizontally, vertically, or on both axes. Users touch-hold a +widget to show its resize handles, then drag the horizontal and/or vertical +handles to change the size on the layout grid. Values for the +resizeMode attribute include "horizontal", "vertical", and "none". +To declare a widget as resizeable horizontally and vertically, supply the value +"horizontal|vertical". Introduced in Android 3.1.
  • + +

    See the {@link android.appwidget.AppWidgetProviderInfo} class for more +information on the attributes accepted by the <appwidget-provider> element.

    Creating the App Widget Layout

    -

    You must define an initial layout for your App Widget in XML and save it in the project's -res/layout/ directory. You can design your App Widget using the View objects listed -below, but before you begin designing your App Widget, please read and understand the -App Widget Design +

    You must define an initial layout for your App Widget in XML and save it in +the project's +res/layout/ directory. You can design your App Widget using the +View objects listed +below, but before you begin designing your App Widget, please read and +understand the +App Widget +Design Guidelines.

    Creating the App Widget layout is simple if you're -familiar with Declaring Layout in XML. -However, you must be aware that App Widget layouts are based on {@link android.widget.RemoteViews}, +familiar with Declaring Layout in +XML. +However, you must be aware that App Widget layouts are based on {@link +android.widget.RemoteViews}, which do not support every kind of layout or view widget.

    A RemoteViews object (and, consequently, an App Widget) can support the @@ -221,6 +321,7 @@ following layout classes:

  • {@link android.widget.ImageView}
  • {@link android.widget.ProgressBar}
  • {@link android.widget.TextView}
  • +
  • {@link android.widget.ViewFlipper}
  • Descendants of these classes are not supported.

    @@ -230,66 +331,90 @@ following layout classes:

    -

    The {@link android.appwidget.AppWidgetProvider} class extends BroadcastReceiver as a convenience -class to handle the App Widget broadcasts. The AppWidgetProvider receives only the event broadcasts that -are relevant to the App Widget, such as when the App Widget is updated, deleted, enabled, and disabled. -When these broadcast events occur, the AppWidgetProvider receives the following method calls:

    +

    The {@link android.appwidget.AppWidgetProvider} class extends +BroadcastReceiver as a convenience +class to handle the App Widget broadcasts. The AppWidgetProvider receives only +the event broadcasts that +are relevant to the App Widget, such as when the App Widget is updated, deleted, +enabled, and disabled. +When these broadcast events occur, the AppWidgetProvider receives the following +method calls:

    -
    {@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[])}
    -
    This is called to update the App Widget at intervals defined by the updatePeriodMillis +
    + {@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context,android.appwidget.AppWidgetManager,int[]) onUpdate()} +
    +
    This is called to update the App Widget at intervals defined by the +updatePeriodMillis attribute in the AppWidgetProviderInfo (see Adding the AppWidgetProviderInfo Metadata above). This method is also called when the user adds the App Widget, so it should perform the essential setup, such as define event handlers for Views and start a temporary - {@link android.app.Service}, if necessary. However, if you have declared a configuration - Activity, this method is not called when the user adds the App Widget, + {@link android.app.Service}, if necessary. However, if you have declared a +configuration + Activity, this method is not called when the user adds the +App Widget, but is called for the subsequent updates. It is the responsibility of the - configuration Activity to perform the first update when configuration is done. - (See Creating an App Widget Configuration Activity below.)
    + configuration Activity to perform the first update when configuration is +done. + (See Creating an App Widget Configuration +Activity below.)
    {@link android.appwidget.AppWidgetProvider#onDeleted(Context,int[])}
    -
    This is called every time an App Widget is deleted from the App Widget host.
    +
    This is called every time an App Widget is deleted from the App Widget +host.
    {@link android.appwidget.AppWidgetProvider#onEnabled(Context)}
    -
    This is called when an instance the App Widget is created for the first time. For example, if the user +
    This is called when an instance the App Widget is created for the first +time. For example, if the user adds two instances of your App Widget, this is only called the first time. - If you need to open a new database or perform other setup that only needs to occur once + If you need to open a new database or perform other setup that only needs to +occur once for all App Widget instances, then this is a good place to do it.
    {@link android.appwidget.AppWidgetProvider#onDisabled(Context)}
    -
    This is called when the last instance of your App Widget is deleted from the App Widget host. +
    This is called when the last instance of your App Widget is deleted from +the App Widget host. This is where you should clean up any work done in {@link android.appwidget.AppWidgetProvider#onEnabled(Context)}, such as delete a temporary database.
    {@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent)}
    -
    This is called for every broadcast and before each of the above callback methods. - You normally don't need to implement this method because the default AppWidgetProvider +
    This is called for every broadcast and before each of the above callback +methods. + You normally don't need to implement this method because the default +AppWidgetProvider implementation filters all App Widget broadcasts and calls the above methods as appropriate.
    -

    Note: In Android 1.5, there is a known issue in which the -onDeleted() method will not be called when it should be. To work around this issue, -you can implement {@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent) +

    Note: In Android 1.5, there is a known issue +in which the +onDeleted() method will not be called when it should be. To work +around this issue, +you can implement {@link +android.appwidget.AppWidgetProvider#onReceive(Context,Intent) onReceive()} as described in this -Group post + +Group post to receive the onDeleted() callback.

    The most important AppWidgetProvider callback is -{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) -onUpdated()} because it is called when each App Widget is added to a host (unless you use -a configuration Activity). If your App Widget accepts any -user interaction events, then you need to register the event handlers in this callback. -If your App Widget doesn't create temporary -files or databases, or perform other work that requires clean-up, then -{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) -onUpdated()} may be the only callback method you need to define. For example, if you want an App Widget -with a button that launches an Activity when clicked, you could use the following +{@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} +because it is called when +each App Widget is added to a host (unless you use a configuration Activity). If +your App Widget accepts any user interaction events, then you need to register +the event handlers in this callback. If your App Widget doesn't create temporary +files or databases, or perform other work that requires clean-up, then +{@link android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} +may be the only callback +method you need to define. For example, if you want an App Widget with a button +that launches an Activity when clicked, you could use the following implementation of AppWidgetProvider:

    @@ -306,11 +431,12 @@ public class ExampleAppWidgetProvider extends AppWidgetProvider {
                 Intent intent = new Intent(context, ExampleActivity.class);
                 PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
     
    -            // Get the layout for the App Widget and attach an on-click listener to the button
    +            // Get the layout for the App Widget and attach an on-click listener
    +            // to the button
                 RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
                 views.setOnClickPendingIntent(R.id.button, pendingIntent);
     
    -            // Tell the AppWidgetManager to perform an update on the current App Widget
    +            // Tell the AppWidgetManager to perform an update on the current app widget
                 appWidgetManager.updateAppWidget(appWidgetId, views);
             }
         }
    @@ -318,43 +444,51 @@ public class ExampleAppWidgetProvider extends AppWidgetProvider {
     

    This AppWidgetProvider defines only the -{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) -onUpdated()} method for the purpose -of defining a {@link android.app.PendingIntent} that launches an {@link android.app.Activity} -and attaching it to the App Widget's button -with {@link android.widget.RemoteViews#setOnClickPendingIntent(int,PendingIntent)}. -Notice that it includes a loop that iterates through each entry in appWidgetIds, which -is an array of IDs that identify each App Widget created by this provider. -In this way, if the user creates more than one instance of the App Widget, then they are -all updated simultaneously. However, only one updatePeriodMillis schedule will be -managed for all instances of the App Widget. For example, if the update schedule is defined -to be every two hours, and a second instance -of the App Widget is added one hour after the first one, then they will both be updated -on the period defined by the first one and the second update period will be ignored -(they'll both be updated every two hours, not every hour).

    +{@link +android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]) onUpdate()} +method for the purpose of +defining a {@link android.app.PendingIntent} that launches an {@link +android.app.Activity} and attaching it to the App Widget's button with {@link +android.widget.RemoteViews#setOnClickPendingIntent(int,PendingIntent)}. Notice +that it includes a loop that iterates through each entry in +appWidgetIds, which is an array of IDs that identify each App +Widget created by this provider. In this way, if the user creates more than one +instance of the App Widget, then they are all updated simultaneously. However, +only one updatePeriodMillis schedule will be managed for all +instances of the App Widget. For example, if the update schedule is defined to +be every two hours, and a second instance of the App Widget is added one hour +after the first one, then they will both be updated on the period defined by the +first one and the second update period will be ignored (they'll both be updated +every two hours, not every hour).

    -

    Note: Because {@link android.appwidget.AppWidgetProvider} is an -extension of {@link android.content.BroadcastReceiver}, your process is not guaranteed to keep -running after the callback methods return (see {@link android.content.BroadcastReceiver} for -information about the broadcast lifecycle). If your App Widget setup process can take several -seconds (perhaps while performing web requests) and you require that your process continues, -consider starting a {@link android.app.Service} -in the {@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) -onUpdated()} method. From within the Service, you can perform your own updates to the App Widget -without worrying about the AppWidgetProvider closing down due to an -Application Not Responding -(ANR) error. See the -Wiktionary -sample's AppWidgetProvider for an example of an App Widget running a {@link android.app.Service}.

    +

    Note: Because {@link +android.appwidget.AppWidgetProvider} is an extension of {@link +android.content.BroadcastReceiver}, your process is not guaranteed to keep +running after the callback methods return (see {@link +android.content.BroadcastReceiver} for information about the broadcast +lifecycle). If your App Widget setup process can take several seconds (perhaps +while performing web requests) and you require that your process continues, +consider starting a {@link android.app.Service} in the +{@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} +method. From within the Service, you can perform your own updates +to the App Widget without worrying about the AppWidgetProvider closing down due +to an Application +Not Responding (ANR) error. See the Wiktionary sample's +AppWidgetProvider for an example of an App Widget running a {@link +android.app.Service}.

    Also see the +href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/ +appwidget/ExampleAppWidgetProvider.html"> ExampleAppWidgetProvider.java sample class.

    Receiving App Widget broadcast Intents

    -

    {@link android.appwidget.AppWidgetProvider} is just a convenience class. If you would like +

    {@link android.appwidget.AppWidgetProvider} is just a convenience class. If +you would like to receive the App Widget broadcasts directly, you can implement your own {@link android.content.BroadcastReceiver} or override the {@link android.appwidget.AppWidgetProvider#onReceive(Context,Intent)} callback. @@ -370,28 +504,36 @@ The four Intents you need to care about are:

    Creating an App Widget Configuration Activity

    -

    If you would like the user to configure settings when he or she adds a new App Widget, -you can create an App Widget configuration Activity. This {@link android.app.Activity} -will be automatically launched by the App Widget host and allows the user to configure -available settings for the App Widget at create-time, such as the App Widget color, size, +

    If you would like the user to configure settings when he or she adds a new +App Widget, +you can create an App Widget configuration Activity. This {@link +android.app.Activity} +will be automatically launched by the App Widget host and allows the user to +configure +available settings for the App Widget at create-time, such as the App Widget +color, size, update period or other functionality settings.

    -

    The configuration Activity should be declared as a normal Activity in the Android manifest file. +

    The configuration Activity should be declared as a normal Activity in the +Android manifest file. However, it will be launched by the App Widget host with the {@link -android.appwidget.AppWidgetManager#ACTION_APPWIDGET_CONFIGURE ACTION_APPWIDGET_CONFIGURE} action, +android.appwidget.AppWidgetManager#ACTION_APPWIDGET_CONFIGURE +ACTION_APPWIDGET_CONFIGURE} action, so the Activity needs to accept this Intent. For example:

     <activity android:name=".ExampleAppWidgetConfigure">
         <intent-filter>
    -        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
    +        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
         </intent-filter>
     </activity>
     
    -

    Also, the Activity must be declared in the AppWidgetProviderInfo XML file, with the +

    Also, the Activity must be declared in the AppWidgetProviderInfo XML file, +with the android:configure attribute (see Adding -the AppWidgetProviderInfo Metadata above). For example, the configuration Activity +the AppWidgetProviderInfo Metadata above). For example, the configuration +Activity can be declared like this:

    @@ -402,32 +544,45 @@ can be declared like this:

    </appwidget-provider>
    -

    Notice that the Activity is declared with a fully-qualified namespace, because +

    Notice that the Activity is declared with a fully-qualified namespace, +because it will be referenced from outside your package scope.

    -

    That's all you need to get started with a configuration Activity. Now all you need is the actual -Activity. There are, however, two important things to remember when you implement the Activity:

    +

    That's all you need to get started with a configuration Activity. Now all you +need is the actual +Activity. There are, however, two important things to remember when you +implement the Activity:

    -

    See the code snippets in the following section for an example of how to return a result +

    See the code snippets in the following section for an example of how to +return a result from the configuration and update the App Widget.

    -

    Updating the App Widget from the configuration Activity

    +

    Updating the App Widget from the +configuration Activity

    -

    When an App Widget uses a configuration Activity, it is the responsibility of the Activity +

    When an App Widget uses a configuration Activity, it is the responsibility of +the Activity to update the App Widget when configuration is complete. You can do so by requesting an update directly from the {@link android.appwidget.AppWidgetManager}.

    @@ -448,20 +603,24 @@ if (extras != null) {
  • Perform your App Widget configuration.
  • -
  • When the configuration is complete, get an instance of the AppWidgetManager by calling +
  • When the configuration is complete, get an instance of the +AppWidgetManager by calling {@link android.appwidget.AppWidgetManager#getInstance(Context)}:
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
     
  • -
  • Update the App Widget with a {@link android.widget.RemoteViews} layout by calling +
  • Update the App Widget with a {@link android.widget.RemoteViews} layout by +calling {@link android.appwidget.AppWidgetManager#updateAppWidget(int,RemoteViews)}:
    -RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
    +RemoteViews views = new RemoteViews(context.getPackageName(),
    +R.layout.example_appwidget);
     appWidgetManager.updateAppWidget(mAppWidgetId, views);
     
  • -
  • Finally, create the return Intent, set it with the Activity result, and finish the Activity:
  • +
  • Finally, create the return Intent, set it with the Activity result, and +finish the Activity:
  •  Intent resultValue = new Intent();
     resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    @@ -471,14 +630,657 @@ finish();
       
     
     
    -

    Tip: When your configuration Activity first opens, set -the Activity result to RESULT_CANCELED. This way, if the user backs-out of the Activity before -reaching the end, the App Widget host is notified that the configuration was cancelled and the +

    Tip: When your configuration Activity first +opens, set +the Activity result to RESULT_CANCELED. This way, if the user backs-out of the +Activity before +reaching the end, the App Widget host is notified that the configuration was +cancelled and the App Widget will not be added.

    See the +href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/ +appwidget/ExampleAppWidgetConfigure.html"> ExampleAppWidgetConfigure.java sample class in ApiDemos for an example.

    +

    Setting a Preview Image

    + +

    Android 3.0 introduces the {@link + + +android.appwidget.AppWidgetProviderInfo#previewImage} field, which specifies a +preview of what the app widget looks like. This preview is shown to the user from the +widget picker. If this field is not supplied, the app widget's icon is used for +the preview.

    + +

    This is how you specify this setting in XML:

    + +
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    +  ...
    +  android:previewImage="@drawable/preview">
    +</appwidget-provider>
    + +

    To help create a preview image for your app widget (to specify in the {@link +android.appwidget.AppWidgetProviderInfo#previewImage} field), the Android +emulator includes an application called "Widget Preview." To create a +preview image, launch this application, select the app widget for your +application and set it up how you'd like your preview image to appear, then save +it and place it in your application's drawable resources.

    + +

    Using App Widgets with Collections

    + +

    Android 3.0 introduces App Widgets with collections. These kinds of App +Widgets use the {@link android.widget.RemoteViewsService} to display collections +that are backed by remote data, such as from a content +provider. The data provided by the {@link android.widget.RemoteViewsService} +is presented in the App Widget using one of the following view types, which +we’ll refer to as “collection views:”

    + +
    +
    {@link android.widget.ListView}
    +
    A view that shows items in a +vertically scrolling +list. For an example, see the Gmail app widget.
    +
    {@link android.widget.GridView}
    +
    A view that shows items in +two-dimensional scrolling grid. For an example, see the Bookmarks app +widget.
    +
    {@link android.widget.StackView}
    +
    A +stacked card view (kind of like a rolodex), where the user can flick the front +card up/down to see the previous/next card, respectively. Examples include +the YouTube and Books app widgets. 
    +
    {@link android.widget.AdapterViewFlipper}
    +
    An adapter-backed simple +{@link +android.widget.ViewAnimator} that animates between two or more views. Only one +child is shown at a time.
    +
    + +

    As stated above, these collection views display collections backed by remote +data. This means that they use an {@link android.widget.Adapter} to bind their +user interface to their data. An {@link android.widget.Adapter} binds individual +items from a set of data into individual {@link android.view.View} objects. +Because these collection views are backed by adapters, the Android framework +must include extra architecture to support their use in app widgets. In the +context of an app widget, the {@link android.widget.Adapter} is replaced by a +{@link android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory}, +which is simply a thin wrapper around the {@link android.widget.Adapter} +interface. + When +requested for a specific item in the collection, the {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} creates +and returns the item for the collection as a {@link android.widget.RemoteViews} +object. +In order to include a collection view in your app widget, you +must implement {@link android.widget.RemoteViewsService} and {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory}.

    + +

    {@link android.widget.RemoteViewsService} is a service that allows a remote +adapter to request {@link +android.widget.RemoteViews} objects. {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} is an +interface for an adapter between a collection view (such as {@link +android.widget.ListView}, {@link android.widget.GridView}, and so on) and the +underlying data for that view. From the StackView Widget +sample, here is an example of the boilerplate code you use to implement +this service and interface: +

    + +
    +public class StackWidgetService extends RemoteViewsService {
    +    @Override
    +    public RemoteViewsFactory onGetViewFactory(Intent intent) {
    +        return new StackRemoteViewsFactory(this.getApplicationContext(), intent);
    +    }
    +}
    +
    +class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
    +
    +//... include adapter-like methods here. See the StackView Widget sample.
    +
    +}
    +
    + +

    Sample application

    + +

    The code excerpts in this section are drawn from the StackView Widget +sample:

    + +

    +StackView
+Widget +

    + +

    This sample consists of a stack of 10 views, which display the values +"0!" through "9!" The sample +app widget has these primary behaviors:

    + + +

    Implementing app widgets with collections

    + +

    To implement an App Widget with collections, you follow the same basic steps +you would use to implement any app widget. The following sections describe the +additional steps you need to perform to implement an App Widget with +collections.

    + +

    Manifest for app widgets with collections

    + +

    In addition to the requirements listed in Declaring an +App Widget in the Manifest, to make it possible for App Widgets with +collections to bind to your {@link android.widget.RemoteViewsService}, you must +declare the service in your manifest file with the permission {@link +android.Manifest.permission#BIND_REMOTEVIEWS}. This prevents other applications +from freely accessing your app widget's data. For example, when creating an App +Widget that uses {@link android.widget.RemoteViewsService} to populate a +collection view, the manifest entry may look like this:

    + +
    <service android:name="MyWidgetService"
    +...
    +android:permission="android.permission.BIND_REMOTEVIEWS" />
    + +

    The line android:name="MyWidgetService" +refers to your subclass of {@link android.widget.RemoteViewsService}.

    + +

    Layout for app widgets with collections

    + +

    The main requirement for your app widget layout XML file is that it +include one of the collection views: {@link android.widget.ListView}, +{@link android.widget.GridView}, {@link android.widget.StackView}, or +{@link android.widget.AdapterViewFlipper}. Here is the +widget_layout.xml for +the StackView +Widget sample:

    + +
    <?xml version="1.0" encoding="utf-8"?>
    +
    +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    +    android:layout_width="match_parent"
    +    android:layout_height="match_parent">
    +    <StackView xmlns:android="http://schemas.android.com/apk/res/android"
    +        android:id="@+id/stack_view"
    +        android:layout_width="match_parent"
    +        android:layout_height="match_parent"
    +        android:gravity="center"
    +        android:loopViews="true" />
    +    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    +        android:id="@+id/empty_view"
    +        android:layout_width="match_parent"
    +        android:layout_height="match_parent"
    +        android:gravity="center"
    +        android:background="@drawable/widget_item_background"
    +        android:textColor="#ffffff"
    +        android:textStyle="bold"
    +        android:text="@string/empty_view_text"
    +        android:textSize="20sp" />
    +</FrameLayout>
    + +

    Note that empty views must be siblings of the collection view for which the +empty view represents empty state.

    + +

    In addition to the layout file for your entire app widget, you must create +another layout file that defines the layout for each item in the collection (for +example, a layout for each book in a collection of books). For example, the StackView Widget +sample only has one layout file, widget_item.xml, since all +items use the same layout. But the +WeatherListWidget sample has two layout files: +dark_widget_item.xml and light_widget_item.xml.

    + + + +

    AppWidgetProvider class for app widgets with collections

    + +

    As with a regular app widget, the bulk of your code in your {@link +android.appwidget.AppWidgetProvider} subclass typically goes in {@link +android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, +android.appwidget.AppWidgetManager, int[]) onUpdate()}. The major difference in +your implementation for {@link +android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, +android.appwidget.AppWidgetManager, int[]) onUpdate()} when creating an app +widget with collections is that you must call {@link +android.widget.RemoteViews#setRemoteAdapter setRemoteAdapter()}. This tells the +collection view where to get its data. The {@link +android.widget.RemoteViewsService} can then return your implementation of {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory}, and +the widget can serve up the appropriate data. When you call this method, you +must pass an intent that points to your implementation of {@link +android.widget.RemoteViewsService} and the App Widget ID that specifies the app +widget to update.

    + + +

    For example, here's how the StackView Widget sample implements the {@link +android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, +android.appwidget.AppWidgetManager, int[]) onUpdate()} callback method to set +the {@link +android.widget.RemoteViewsService} as the remote adapter for the app widget +collection:

    + +
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    +int[] appWidgetIds) {
    +    // update each of the app widgets with the remote adapter
    +    for (int i = 0; i < appWidgetIds.length; ++i) {
    +        
    +        // Set up the intent that starts the StackViewService, which will
    +        // provide the views for this collection.
    +        Intent intent = new Intent(context, StackWidgetService.class);
    +        // Add the app widget ID to the intent extras.
    +        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
    +        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
    +        // Instantiate the RemoteViews object for the App Widget layout.
    +        RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
    +        // Set up the RemoteViews object to use a RemoteViews adapter. 
    +        // This adapter connects
    +        // to a RemoteViewsService  through the specified intent.
    +        // This is how you populate the data.
    +        rv.setRemoteAdapter(appWidgetIds[i], R.id.stack_view, intent);
    +        
    +        // The empty view is displayed when the collection has no items. 
    +        // It should be in the same layout used to instantiate the RemoteViews
    +        // object above.
    +        rv.setEmptyView(R.id.stack_view, R.id.empty_view);
    +
    +        //
    +        // Do additional processing specific to this app widget...
    +        //
    +        
    +        appWidgetManager.updateAppWidget(appWidgetIds[i], rv);   
    +    }
    +    super.onUpdate(context, appWidgetManager, appWidgetIds);
    +}
    + +

    RemoteViewsService class

    + + + +

    As described above, your {@link android.widget.RemoteViewsService} subclass +provides the {@link android.widget.RemoteViewsService.RemoteViewsFactory +RemoteViewsFactory} used to populate the remote collection view.

    + +

    Specifically, you need to +perform these steps:

    + +
      +
    1. Subclass {@link android.widget.RemoteViewsService}. {@link +android.widget.RemoteViewsService} is the service through which +a remote adapter can request {@link android.widget.RemoteViews}.
    2. + +
    3. In your {@link android.widget.RemoteViewsService} subclass, include a +class that implements the {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} +interface. {@link android.widget.RemoteViewsService.RemoteViewsFactory +RemoteViewsFactory} is an interface for an adapter between a remote collection +view (such as {@link android.widget.ListView}, {@link android.widget.GridView}, +and so on) and the underlying data for that view. Your implementation is +responsible for making a {@link android.widget.RemoteViews} object for each +item in the data set. This interface is a thin wrapper around {@link +android.widget.Adapter}.
    4. +
    + +

    The primary contents of the {@link android.widget.RemoteViewsService} +implementation is its {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory}, +described below.

    + +

    RemoteViewsFactory interface

    + +

    Your custom class that implements the {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} +interface provides the app widget with the data for the items in its collection. +To +do this, it combines your app widget item XML layout file with a source of data. +This source of data could be anything from a database to a simple array. In the +StackView Widget +sample, the data source is an array of WidgetItems. The {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} +functions as an adapter to glue the data to the remote collection view.

    + +

    The two most important methods you need to implement for your + +{@link android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} +subclass are +{@link android.widget.RemoteViewsService.RemoteViewsFactory#onCreate() +onCreate()} and +{@link android.widget.RemoteViewsService.RemoteViewsFactory#getViewAt(int) +getViewAt()} +.

    + +

    The system calls {@link +android.widget.RemoteViewsService.RemoteViewsFactory#onCreate() onCreate()} when +creating your factory for the first time. This is where you set up any +connections and/or cursors to your data source. For example, the StackView Widget +sample uses {@link +android.widget.RemoteViewsService.RemoteViewsFactory#onCreate() onCreate()} to +initialize an array of WidgetItem objects. When your app widget is +active, the system accesses these objects using their index position in the +array and the text they contain is displayed

    + +

    Here is an excerpt from the the StackView Widget +sample's +{@link android.widget.RemoteViewsService.RemoteViewsFactory +RemoteViewsFactory} implementation that shows portions of the {@link +android.widget.RemoteViewsService.RemoteViewsFactory#onCreate() onCreate()} +method:

    + +
    class StackRemoteViewsFactory implements
    +RemoteViewsService.RemoteViewsFactory {
    +    private static final int mCount = 10;
    +    private List<WidgetItem> mWidgetItems = new ArrayList<WidgetItem>();
    +    private Context mContext;
    +    private int mAppWidgetId;
    +
    +    public StackRemoteViewsFactory(Context context, Intent intent) {
    +        mContext = context;
    +        mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
    +                AppWidgetManager.INVALID_APPWIDGET_ID);
    +    }
    +
    +    public void onCreate() {
    +        // In onCreate() you setup any connections / cursors to your data source. Heavy lifting,
    +        // for example downloading or creating content etc, should be deferred to onDataSetChanged()
    +        // or getViewAt(). Taking more than 20 seconds in this call will result in an ANR.
    +        for (int i = 0; i < mCount; i++) {
    +            mWidgetItems.add(new WidgetItem(i + "!"));
    +        }
    +        ...
    +    }
    +...
    + +

    The {@link android.widget.RemoteViewsService.RemoteViewsFactory +RemoteViewsFactory} method {@link +android.widget.RemoteViewsService.RemoteViewsFactory#getViewAt(int) getViewAt()} +returns a {@link android.widget.RemoteViews} object corresponding to the data at +the specified position in the data set. Here is an excerpt from +the +StackView Widget sample's {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} +implementation:

    + +
    public RemoteViews getViewAt(int position) {
    +   
    +    // Construct a remote views item based on the app widget item XML file, 
    +    // and set the text based on the position.
    +    RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);
    +    rv.setTextViewText(R.id.widget_item, mWidgetItems.get(position).text);
    +
    +    ...
    +    // Return the remote views object.
    +    return rv;
    +}
    + +

    Adding behavior to individual items

    + +

    The above sections show you how to bind your data to your app widget +collection. But what if you want to add dynamic behavior to the individual items +in your collection view?

    + +

    As described in Using the AppWidgetProvider +Class, you normally use {@link +android.widget.RemoteViews#setOnClickPendingIntent(int, +android.app.PendingIntent) setOnClickPendingIntent()} to set an object's click +behavior—such as to cause a button to launch an {@link +android.app.Activity}. But this approach is not allowed for child views in an +individual collection item (to clarify, you could use {@link +android.widget.RemoteViews#setOnClickPendingIntent(int, +android.app.PendingIntent) setOnClickPendingIntent()} to set up a global button +in the Gmail app widget that launches the app, for example, but not on the +individual list items). Instead, to add click behavior to individual items in a +collection, you use {@link +android.widget.RemoteViews#setOnClickFillInIntent(int, android.content.Intent) +setOnClickFillInIntent()}. This entails setting up up a pending intent template +for your collection view, and then setting a fill-in intent on each item in the +collection via your {@link android.widget.RemoteViewsService.RemoteViewsFactory +RemoteViewsFactory}.

    +

    This section uses the StackView Widget +sample to describe how to add behavior to individual items. In the StackView Widget +sample, if the user touches the top view, the app widget displays the {@link +android.widget.Toast} message "Touched view n," where +n is the index (position) of the touched view. This is how it +works:

    + + + +

    Note: The StackView Widget +sample uses a broadcast, but typically an app widget would simply launch an +activity in a scenario like this one.

    + +
    Setting up the pending intent template
    + +

    The StackWidgetProvider ({@link +android.appwidget.AppWidgetProvider} subclass) sets up a pending intent. +Individuals items of a collection cannot set up their own pending intents. +Instead, the collection as a whole sets up a pending intent template, and the +individual items set a fill-in intent to create unique behavior on an +item-by-item +basis.

    + +

    This class also receives the broadcast that is sent when the user touches a +view. It processes this event in its {@link +android.appwidget.AppWidgetProvider#onReceive(android.content.Context, +android.content.Intent) onReceive()} method. If the intent's action is +TOAST_ACTION, the app widget displays a {@link +android.widget.Toast} +message for the current view.

    + +
    public class StackWidgetProvider extends AppWidgetProvider {
    +    public static final String TOAST_ACTION = "com.example.android.stackwidget.TOAST_ACTION";
    +    public static final String EXTRA_ITEM = "com.example.android.stackwidget.EXTRA_ITEM";
    +
    +    ...
    +
    +    // Called when the BroadcastReceiver receives an Intent broadcast.
    +    // Checks to see whether the intent's action is TOAST_ACTION. If it is, the app widget 
    +    // displays a Toast message for the current item.
    +    @Override
    +    public void onReceive(Context context, Intent intent) {
    +        AppWidgetManager mgr = AppWidgetManager.getInstance(context);
    +        if (intent.getAction().equals(TOAST_ACTION)) {
    +            int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
    +                AppWidgetManager.INVALID_APPWIDGET_ID);
    +            int viewIndex = intent.getIntExtra(EXTRA_ITEM, 0);
    +            Toast.makeText(context, "Touched view " + viewIndex, Toast.LENGTH_SHORT).show();
    +        }
    +        super.onReceive(context, intent);
    +    }
    +    
    +    @Override
    +    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    +        // update each of the app widgets with the remote adapter
    +        for (int i = 0; i < appWidgetIds.length; ++i) {
    +    
    +            // Sets up the intent that points to the StackViewService that will
    +            // provide the views for this collection.
    +            Intent intent = new Intent(context, StackWidgetService.class);
    +            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
    +            // When intents are compared, the extras are ignored, so we need to embed the extras
    +            // into the data so that the extras will not be ignored.
    +            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
    +            RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
    +            rv.setRemoteAdapter(appWidgetIds[i], R.id.stack_view, intent);
    +    
    +            // The empty view is displayed when the collection has no items. It should be a sibling
    +            // of the collection view.
    +            rv.setEmptyView(R.id.stack_view, R.id.empty_view);
    +
    +            // This section makes it possible for items to have individualized behavior.
    +            // It does this by setting up a pending intent template. Individuals items of a collection
    +            // cannot set up their own pending intents. Instead, the collection as a whole sets
    +            // up a pending intent template, and the individual items set a fillInIntent
    +            // to create unique behavior on an item-by-item basis.
    +            Intent toastIntent = new Intent(context, StackWidgetProvider.class);
    +            // Set the action for the intent.
    +            // When the user touches a particular view, it will have the effect of
    +            // broadcasting TOAST_ACTION.
    +            toastIntent.setAction(StackWidgetProvider.TOAST_ACTION);
    +            toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
    +            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
    +            PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, toastIntent,
    +                PendingIntent.FLAG_UPDATE_CURRENT);
    +            rv.setPendingIntentTemplate(R.id.stack_view, toastPendingIntent);
    +            
    +            appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
    +        }
    +    super.onUpdate(context, appWidgetManager, appWidgetIds);
    +    }
    +}
    + +
    Setting the fill-in Intent
    + +

    Your {@link android.widget.RemoteViewsService.RemoteViewsFactory +RemoteViewsFactory} must set a fill-in intent on each item in the collection. +This makes it possible to distinguish the individual on-click action of a given +item. The fill-in intent is then combined with the {@link +android.app.PendingIntent} template in order to determine the final intent that +will be executed when the item is clicked.

    + +
    +public class StackWidgetService extends RemoteViewsService {
    +    @Override
    +    public RemoteViewsFactory onGetViewFactory(Intent intent) {
    +        return new StackRemoteViewsFactory(this.getApplicationContext(), intent);
    +    }
    +}
    +
    +class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
    +    private static final int mCount = 10;
    +    private List<WidgetItem> mWidgetItems = new ArrayList<WidgetItem>();
    +    private Context mContext;
    +    private int mAppWidgetId;
    +
    +    public StackRemoteViewsFactory(Context context, Intent intent) {
    +        mContext = context;
    +        mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
    +                AppWidgetManager.INVALID_APPWIDGET_ID);
    +    }
    +
    +    // Initialize the data set.
    +        public void onCreate() {
    +            // In onCreate() you set up any connections / cursors to your data source. Heavy lifting,
    +            // for example downloading or creating content etc, should be deferred to onDataSetChanged()
    +            // or getViewAt(). Taking more than 20 seconds in this call will result in an ANR.
    +            for (int i = 0; i < mCount; i++) {
    +                mWidgetItems.add(new WidgetItem(i + "!"));
    +            }
    +           ...
    +        }
    +        ...
    +    
    +        // Given the position (index) of a WidgetItem in the array, use the item's text value in 
    +        // combination with the app widget item XML file to construct a RemoteViews object.
    +        public RemoteViews getViewAt(int position) {
    +            // position will always range from 0 to getCount() - 1.
    +    
    +            // Construct a RemoteViews item based on the app widget item XML file, and set the
    +            // text based on the position.
    +            RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);
    +            rv.setTextViewText(R.id.widget_item, mWidgetItems.get(position).text);
    +    
    +            // Next, set a fill-intent, which will be used to fill in the pending intent template
    +            // that is set on the collection view in StackWidgetProvider.
    +            Bundle extras = new Bundle();
    +            extras.putInt(StackWidgetProvider.EXTRA_ITEM, position);
    +            Intent fillInIntent = new Intent();
    +            fillInIntent.putExtras(extras);
    +            // Make it possible to distinguish the individual on-click
    +            // action of a given item
    +            rv.setOnClickFillInIntent(R.id.widget_item, fillInIntent);
    +        
    +            ...
    +        
    +            // Return the RemoteViews object.
    +            return rv;
    +        }
    +    ...
    +    }
    + +

    Keeping Collection Data Fresh

    + +

    The following figure illustrates the flow that occurs in an App Widget that +uses +collections when updates occur. It shows how the App Widget code interacts with +the {@link android.widget.RemoteViewsService.RemoteViewsFactory +RemoteViewsFactory}, and how you can trigger updates:

    + + + +

    One feature of App Widgets that use collections is the ability to provide +users with up-to-date content. For example, consider the Android 3.0 Gmail +app widget, which provides users with a snapshot of their inbox. To make this +possible, you need to be able to trigger your {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory} and +collection view to fetch and display new data. You achieve this with the {@link +android.appwidget.AppWidgetManager} call {@link +android.appwidget.AppWidgetManager#notifyAppWidgetViewDataChanged(int, int) +notifyAppWidgetViewDataChanged()}. This call results in a callback to your +RemoteViewsFactory’s {@link +android.widget.RemoteViewsService.RemoteViewsFactory#onDataSetChanged() +onDataSetChanged()} method, which gives you the opportunity to fetch any new +data. Note that you can perform +processing-intensive operations synchronously within the {@link +android.widget.RemoteViewsService.RemoteViewsFactory#onDataSetChanged() +onDataSetChanged()} callback. You are guaranteed that this call will be +completed before the metadata or view data is fetched from the {@link +android.widget.RemoteViewsService.RemoteViewsFactory RemoteViewsFactory}. In +addition, you can perform processing-intensive operations within the {@link +android.widget.RemoteViewsService.RemoteViewsFactory#getViewAt(int) getViewAt()} +method. If this call takes a long time, the loading view (specified by the +RemoteViewsFactory’s {@link +android.widget.RemoteViewsService.RemoteViewsFactory#getLoadingView()} method) +will be displayed in the corresponding position of the collection view until it +returns.

    diff --git a/docs/html/images/appwidget.png b/docs/html/images/appwidget.png index b72b80b1d332b305b9ef56ca88b40f82c15459bb..ab6e3de5b808091825ba4e1fa48678ff763d6f0b 100644 GIT binary patch literal 11818 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 JPDHLkV1nt7(7gZv diff --git a/docs/html/images/appwidget_collections.png b/docs/html/images/appwidget_collections.png new file mode 100644 index 0000000000000000000000000000000000000000..4bce4a7cffe98cda31ae616885a0366d229d5bf3 GIT binary patch literal 43765 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 N+QQDf`j8j#zW|WNf&Ksh literal 0 HcmV?d00001