1c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project/* 2c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 3c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 4c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * you may not use this file except in compliance with the License. 6c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * You may obtain a copy of the License at 7c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 8c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 10c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * See the License for the specific language governing permissions and 14c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * limitations under the License. 15c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 16c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project 17c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectpackage android.appwidget; 18c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project 19c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectimport android.content.BroadcastReceiver; 20c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectimport android.content.Context; 21c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectimport android.content.Intent; 22c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectimport android.os.Bundle; 23c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project 24c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project/** 2560b88edea7132ddce90f2dced07c6706f1502270Ken Shirriff * A convenience class to aid in implementing an AppWidget provider. 26c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Everything you can do with AppWidgetProvider, you can do with a regular {@link BroadcastReceiver}. 27c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * AppWidgetProvider merely parses the relevant fields out of the Intent that is received in 28c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * {@link #onReceive(Context,Intent) onReceive(Context,Intent)}, and calls hook methods 29c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * with the received extras. 30c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 31c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * <p>Extend this class and override one or more of the {@link #onUpdate}, {@link #onDeleted}, 32c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * {@link #onEnabled} or {@link #onDisabled} methods to implement your own AppWidget functionality. 338a4c53a7c7911b8f4c73a8fcfbbad3ac903b3367Scott Main * </p> 343aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 353aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 363aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 373aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about how to write an app widget provider, read the 383aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <a href="{@docRoot}guide/topics/appwidgets/index.html#AppWidgetProvider">App Widgets</a> 393aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * developer guide.</p> 403aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 41c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 42c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectpublic class AppWidgetProvider extends BroadcastReceiver { 43c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project /** 44c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Constructor to initialize AppWidgetProvider. 45c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 46c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project public AppWidgetProvider() { 47c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 48c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project 49c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project /** 50c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Implements {@link BroadcastReceiver#onReceive} to dispatch calls to the various 51c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * other methods on AppWidgetProvider. 52c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 53c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param context The Context in which the receiver is running. 54c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param intent The Intent being received. 55c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 56c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project // BEGIN_INCLUDE(onReceive) 57c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project public void onReceive(Context context, Intent intent) { 58c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project // Protect against rogue update broadcasts (not really a security issue, 59c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project // just filter bad broacasts out so subclasses are less likely to crash). 60c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project String action = intent.getAction(); 61c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) { 62c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project Bundle extras = intent.getExtras(); 63c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project if (extras != null) { 64c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS); 65c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project if (appWidgetIds != null && appWidgetIds.length > 0) { 66c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds); 67c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 68c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 69adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate } else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) { 70c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project Bundle extras = intent.getExtras(); 71eda4be30a2a3a63093faf052be5d804bf633e6f5Jeff Sharkey if (extras != null && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID)) { 72eda4be30a2a3a63093faf052be5d804bf633e6f5Jeff Sharkey final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); 73eda4be30a2a3a63093faf052be5d804bf633e6f5Jeff Sharkey this.onDeleted(context, new int[] { appWidgetId }); 74c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 75adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate } else if (AppWidgetManager.ACTION_APPWIDGET_OPTIONS_CHANGED.equals(action)) { 76e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen Bundle extras = intent.getExtras(); 77e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen if (extras != null && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID) 78d2097ebacf3a3658624cad10669a4d98e8d7d846Adam Cohen && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS)) { 79e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); 80d2097ebacf3a3658624cad10669a4d98e8d7d846Adam Cohen Bundle widgetExtras = extras.getBundle(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS); 81d2097ebacf3a3658624cad10669a4d98e8d7d846Adam Cohen this.onAppWidgetOptionsChanged(context, AppWidgetManager.getInstance(context), 82e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen appWidgetId, widgetExtras); 83e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen } 84adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate } else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) { 85c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project this.onEnabled(context); 86adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate } else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) { 87c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project this.onDisabled(context); 88adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate } else if (AppWidgetManager.ACTION_APPWIDGET_RESTORED.equals(action)) { 89adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate Bundle extras = intent.getExtras(); 90adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate if (extras != null) { 91adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate int[] oldIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS); 92adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate int[] newIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS); 93adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate if (oldIds != null && oldIds.length > 0) { 94adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate this.onRestored(context, oldIds, newIds); 95adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate this.onUpdate(context, AppWidgetManager.getInstance(context), newIds); 96adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate } 97adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate } 98c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 99c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 100c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project // END_INCLUDE(onReceive) 101e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen 102c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project /** 103adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_UPDATE} and 104adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * {@link AppWidgetManager#ACTION_APPWIDGET_RESTORED} broadcasts when this AppWidget 105adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * provider is being asked to provide {@link android.widget.RemoteViews RemoteViews} 106c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * for a set of AppWidgets. Override this method to implement your own AppWidget functionality. 107c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 108c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * {@more} 109c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 110c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param context The {@link android.content.Context Context} in which this receiver is 111c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * running. 112c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param appWidgetManager A {@link AppWidgetManager} object you can call {@link 113c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * AppWidgetManager#updateAppWidget} on. 114c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param appWidgetIds The appWidgetIds for which an update is needed. Note that this 115c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * may be all of the AppWidget instances for this provider, or just 116c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * a subset of them. 117c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 118c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @see AppWidgetManager#ACTION_APPWIDGET_UPDATE 119c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 120c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 121c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 122e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen 123e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen /** 124d2097ebacf3a3658624cad10669a4d98e8d7d846Adam Cohen * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_OPTIONS_CHANGED} 125e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * broadcast when this widget has been layed out at a new size. 126e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * 127e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * {@more} 128e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * 129e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * @param context The {@link android.content.Context Context} in which this receiver is 130e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * running. 131e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * @param appWidgetManager A {@link AppWidgetManager} object you can call {@link 132e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * AppWidgetManager#updateAppWidget} on. 133adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * @param appWidgetId The appWidgetId of the widget whose size changed. 134adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * @param newOptions The appWidgetId of the widget whose size changed. 135e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen * 136d2097ebacf3a3658624cad10669a4d98e8d7d846Adam Cohen * @see AppWidgetManager#ACTION_APPWIDGET_OPTIONS_CHANGED 137e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen */ 138d2097ebacf3a3658624cad10669a4d98e8d7d846Adam Cohen public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, 139d2097ebacf3a3658624cad10669a4d98e8d7d846Adam Cohen int appWidgetId, Bundle newOptions) { 140e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen } 141e8724c82ab1479f13c85a2c6219841e1fd95f2d2Adam Cohen 142c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project /** 143c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_DELETED} broadcast when 144c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * one or more AppWidget instances have been deleted. Override this method to implement 145c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * your own AppWidget functionality. 146c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 147c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * {@more} 148c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 149c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param context The {@link android.content.Context Context} in which this receiver is 150c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * running. 151c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param appWidgetIds The appWidgetIds that have been deleted from their host. 152c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 153c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @see AppWidgetManager#ACTION_APPWIDGET_DELETED 154c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 155c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project public void onDeleted(Context context, int[] appWidgetIds) { 156c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 157c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project 158c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project /** 159c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_ENABLED} broadcast when 160c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * the a AppWidget for this provider is instantiated. Override this method to implement your 161c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * own AppWidget functionality. 162c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 163c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * {@more} 164c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * When the last AppWidget for this provider is deleted, 165c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * {@link AppWidgetManager#ACTION_APPWIDGET_DISABLED} is sent by the AppWidget manager, and 166c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * {@link #onDisabled} is called. If after that, an AppWidget for this provider is created 167c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * again, onEnabled() will be called again. 168c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 169c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param context The {@link android.content.Context Context} in which this receiver is 170c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * running. 171c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 172c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @see AppWidgetManager#ACTION_APPWIDGET_ENABLED 173c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 174c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project public void onEnabled(Context context) { 175c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 176c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project 177c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project /** 178c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_DISABLED} broadcast, which 179c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * is sent when the last AppWidget instance for this provider is deleted. Override this method 180c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * to implement your own AppWidget functionality. 181c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 182c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * {@more} 183c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 184c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @param context The {@link android.content.Context Context} in which this receiver is 185c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * running. 186c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * 187c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * @see AppWidgetManager#ACTION_APPWIDGET_DISABLED 188c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 189c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project public void onDisabled(Context context) { 190c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 191adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate 192adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate /** 193adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_RESTORED} broadcast 194adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * when instances of this AppWidget provider have been restored from backup. If your 195adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * provider maintains any persistent data about its widget instances, override this method 196adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * to remap the old AppWidgetIds to the new values and update any other app state that may 197adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * be relevant. 198adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * 199adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * <p>This callback will be followed immediately by a call to {@link #onUpdate} so your 200adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * provider can immediately generate new RemoteViews suitable for its newly-restored set 201adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * of instances. 202adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * 203adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * {@more} 204adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * 205adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * @param context 206adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * @param oldWidgetIds 207adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate * @param newWidgetIds 208adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate */ 209adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate public void onRestored(Context context, int[] oldWidgetIds, int[] newWidgetIds) { 210adfe8b86e9178a553b6db9722340fa4ff5201cf1Christopher Tate } 211c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project} 212