diff options
author | Tony Mantler <nicoya@google.com> | 2013-09-12 20:43:11 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-09-12 20:43:11 -0700 |
commit | d1afa1fe8e17098770f2cbe67a66f008410e7743 (patch) | |
tree | bf5311dd59689f94d95f9766b92fca9e065e4194 /src | |
parent | 87815fac6176baaf773af77e824333f6cf5a02ac (diff) | |
parent | 01d8b440ee0fa3531ba54d5152506f801a809a32 (diff) | |
download | android_packages_apps_UnifiedEmail-d1afa1fe8e17098770f2cbe67a66f008410e7743.tar.gz android_packages_apps_UnifiedEmail-d1afa1fe8e17098770f2cbe67a66f008410e7743.tar.bz2 android_packages_apps_UnifiedEmail-d1afa1fe8e17098770f2cbe67a66f008410e7743.zip |
am 01d8b440: Merge "Add extra checks to widget to make sure it clears when the account goes away" into jb-ub-mail-ur10
* commit '01d8b440ee0fa3531ba54d5152506f801a809a32':
Add extra checks to widget to make sure it clears when the account goes away
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/mail/widget/BaseWidgetProvider.java | 11 | ||||
-rw-r--r-- | src/com/android/mail/widget/WidgetService.java | 29 |
2 files changed, 30 insertions, 10 deletions
diff --git a/src/com/android/mail/widget/BaseWidgetProvider.java b/src/com/android/mail/widget/BaseWidgetProvider.java index 8d0be1155..98a5ad67f 100644 --- a/src/com/android/mail/widget/BaseWidgetProvider.java +++ b/src/com/android/mail/widget/BaseWidgetProvider.java @@ -52,7 +52,6 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { public static final String EXTRA_FOLDER_URI = "folder-uri"; public static final String EXTRA_FOLDER_CONVERSATION_LIST_URI = "folder-conversation-list-uri"; public static final String EXTRA_FOLDER_DISPLAY_NAME = "folder-display-name"; - public static final String EXTRA_UNREAD = "unread"; public static final String EXTRA_UPDATE_ALL_WIDGETS = "update-all-widgets"; public static final String WIDGET_ACCOUNT_PREFIX = "widget-account-"; @@ -139,8 +138,8 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { } else if (Utils.ACTION_NOTIFY_DATASET_CHANGED.equals(action)) { // Receive notification for a certain account. final Bundle extras = intent.getExtras(); - final Uri accountUri = (Uri)extras.getParcelable(Utils.EXTRA_ACCOUNT_URI); - final Uri folderUri = (Uri)extras.getParcelable(Utils.EXTRA_FOLDER_URI); + final Uri accountUri = extras.getParcelable(Utils.EXTRA_ACCOUNT_URI); + final Uri folderUri = extras.getParcelable(Utils.EXTRA_FOLDER_URI); final boolean updateAllWidgets = extras.getBoolean(EXTRA_UPDATE_ALL_WIDGETS, false); if (accountUri == null && Utils.isEmpty(folderUri) && !updateAllWidgets) { @@ -383,12 +382,12 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { WidgetService.class); } - private final void migrateAllLegacyWidgetInformation(Context context) { + private void migrateAllLegacyWidgetInformation(Context context) { final int[] currentWidgetIds = getCurrentWidgetIds(context); migrateLegacyWidgets(context, currentWidgetIds); } - private final void migrateLegacyWidgets(Context context, int[] widgetIds) { + private void migrateLegacyWidgets(Context context, int[] widgetIds) { for (int widgetId : widgetIds) { // We only want to bother to attempt to upgrade a widget if we don't already // have information about. @@ -398,7 +397,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { } } - private final void validateAllWidgetInformation(Context context) { + private void validateAllWidgetInformation(Context context) { final int[] widgetIds = getCurrentWidgetIds(context); for (int widgetId : widgetIds) { final String accountFolder = MailPrefs.get(context).getWidgetConfiguration(widgetId); diff --git a/src/com/android/mail/widget/WidgetService.java b/src/com/android/mail/widget/WidgetService.java index daf57ce03..7ad609580 100644 --- a/src/com/android/mail/widget/WidgetService.java +++ b/src/com/android/mail/widget/WidgetService.java @@ -60,7 +60,7 @@ public class WidgetService extends RemoteViewsService { /** * Lock to avoid race condition between widgets. */ - private static Object sWidgetLock = new Object(); + private static final Object sWidgetLock = new Object(); private static final String LOG_TAG = LogTag.getLogTag(); @@ -202,6 +202,7 @@ public class WidgetService extends RemoteViewsService { private static final int FOLDER_LOADER_ID = 0; private static final int CONVERSATION_CURSOR_LOADER_ID = 1; + private static final int ACCOUNT_LOADER_ID = 2; private final Context mContext; private final int mAppWidgetId; @@ -214,6 +215,7 @@ public class WidgetService extends RemoteViewsService { private CursorLoader mConversationCursorLoader; private Cursor mConversationCursor; private CursorLoader mFolderLoader; + private CursorLoader mAccountLoader; private FolderUpdateHandler mFolderUpdateHandler; private int mFolderCount; private boolean mShouldShowViewMore; @@ -232,8 +234,8 @@ public class WidgetService extends RemoteViewsService { mFolderType = intent.getIntExtra(WidgetProvider.EXTRA_FOLDER_TYPE, FolderType.DEFAULT); mFolderDisplayName = intent.getStringExtra(WidgetProvider.EXTRA_FOLDER_DISPLAY_NAME); - Uri folderUri = intent.getParcelableExtra(WidgetProvider.EXTRA_FOLDER_URI); - Uri folderConversationListUri = + final Uri folderUri = intent.getParcelableExtra(WidgetProvider.EXTRA_FOLDER_URI); + final Uri folderConversationListUri = intent.getParcelableExtra(WidgetProvider.EXTRA_FOLDER_CONVERSATION_LIST_URI); if (folderUri != null && folderConversationListUri != null) { mFolderUri = folderUri; @@ -241,6 +243,7 @@ public class WidgetService extends RemoteViewsService { } else { // This is a old intent created in version UR8 (or earlier). String folderString = intent.getStringExtra(Utils.EXTRA_FOLDER); + //noinspection deprecation Folder folder = Folder.fromString(folderString); if (folder != null) { mFolderUri = folder.folderUri.fullUri; @@ -304,6 +307,10 @@ public class WidgetService extends RemoteViewsService { res.getInteger(R.integer.widget_folder_refresh_delay_ms)); mFolderUpdateHandler.scheduleTask(); + mAccountLoader = new CursorLoader(mContext, mAccount.uri, + UIProvider.ACCOUNTS_PROJECTION_NO_CAPABILITIES, null, null, null); + mAccountLoader.registerListener(ACCOUNT_LOADER_ID, this); + mAccountLoader.startLoading(); } @Override @@ -325,6 +332,12 @@ public class WidgetService extends RemoteViewsService { mFolderLoader.unregisterListener(this); mFolderLoader = null; } + + if (mAccountLoader != null) { + mAccountLoader.reset(); + mAccountLoader.unregisterListener(this); + mAccountLoader = null; + } } @Override @@ -360,7 +373,7 @@ public class WidgetService extends RemoteViewsService { * Returns the number of conversations that should be shown in the widget. This method * doesn't update the boolean that indicates that the "show more" item should be included * in the list. - * @return + * @return count */ private int getConversationCount() { synchronized (sWidgetLock) { @@ -519,6 +532,11 @@ public class WidgetService extends RemoteViewsService { final RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(), R.layout.widget); + if (!mService.isWidgetConfigured(mContext, mAppWidgetId, mAccount)) { + BaseWidgetProvider.updateWidget(mContext, mAppWidgetId, mAccount, mFolderType, + mFolderUri, mFolderConversationListUri, mFolderDisplayName); + } + if (loader == mFolderLoader) { if (!isDataValid(data)) { return; @@ -586,6 +604,9 @@ public class WidgetService extends RemoteViewsService { mContext.getString(R.string.no_conversations)); appWidgetManager.partiallyUpdateAppWidget(mAppWidgetId, remoteViews); } + } else if (loader == mAccountLoader) { + BaseWidgetProvider.updateWidget(mContext, mAppWidgetId, mAccount, mFolderType, + mFolderUri, mFolderConversationListUri, mFolderDisplayName); } } |