Parse Folder out of intent
If we had a full Folder object as an extra, but no URI, we opened
the account's default inbox, instead of the desired folder.
Bug: 8526579
Change-Id: I64d1bdecea11e39fde5657910a3b3b2e22cd411a
diff --git a/src/com/android/mail/ConversationListContext.java b/src/com/android/mail/ConversationListContext.java
index 8e8419c..f5885aa 100644
--- a/src/com/android/mail/ConversationListContext.java
+++ b/src/com/android/mail/ConversationListContext.java
@@ -24,6 +24,7 @@
import com.android.mail.providers.Account;
import com.android.mail.providers.Folder;
import com.android.mail.providers.UIProvider;
+import com.android.mail.utils.Utils;
import com.google.common.base.Preconditions;
/**
@@ -37,8 +38,6 @@
* list, etc.
*/
public class ConversationListContext {
- private static final String EXTRA_ACCOUNT = "account";
- public static final String EXTRA_FOLDER = "folder";
public static final String EXTRA_SEARCH_QUERY = "query";
/**
@@ -68,8 +67,8 @@
public static ConversationListContext forBundle(Bundle bundle) {
// The account is created here as a new object. This is probably not the best thing to do.
// We should probably be reading an account instance from our controller.
- Account account = bundle.getParcelable(EXTRA_ACCOUNT);
- Folder folder = bundle.getParcelable(EXTRA_FOLDER);
+ Account account = bundle.getParcelable(Utils.EXTRA_ACCOUNT);
+ Folder folder = bundle.getParcelable(Utils.EXTRA_FOLDER);
return new ConversationListContext(account, bundle.getString(EXTRA_SEARCH_QUERY), folder);
}
@@ -119,9 +118,9 @@
*/
public Bundle toBundle() {
Bundle result = new Bundle();
- result.putParcelable(EXTRA_ACCOUNT, account);
+ result.putParcelable(Utils.EXTRA_ACCOUNT, account);
result.putString(EXTRA_SEARCH_QUERY, searchQuery);
- result.putParcelable(EXTRA_FOLDER, folder);
+ result.putParcelable(Utils.EXTRA_FOLDER, folder);
return result;
}
}
diff --git a/src/com/android/mail/MailIntentService.java b/src/com/android/mail/MailIntentService.java
index bd74c32..3c2625f 100644
--- a/src/com/android/mail/MailIntentService.java
+++ b/src/com/android/mail/MailIntentService.java
@@ -26,6 +26,7 @@
import com.android.mail.utils.LogTag;
import com.android.mail.utils.LogUtils;
import com.android.mail.utils.NotificationUtils;
+import com.android.mail.utils.Utils;
/**
* A service to handle various intents asynchronously.
@@ -41,8 +42,6 @@
public static final String ACTION_BACKUP_DATA_CHANGED =
"com.android.mail.action.BACKUP_DATA_CHANGED";
- public static final String ACCOUNT_EXTRA = "account";
- public static final String FOLDER_EXTRA = "folder";
public static final String CONVERSATION_EXTRA = "conversation";
public MailIntentService() {
@@ -64,14 +63,14 @@
if (Intent.ACTION_LOCALE_CHANGED.equals(action)) {
handleLocaleChanged();
} else if (ACTION_CLEAR_NEW_MAIL_NOTIFICATIONS.equals(action)) {
- final Account account = intent.getParcelableExtra(ACCOUNT_EXTRA);
- final Folder folder = intent.getParcelableExtra(FOLDER_EXTRA);
+ final Account account = intent.getParcelableExtra(Utils.EXTRA_ACCOUNT);
+ final Folder folder = intent.getParcelableExtra(Utils.EXTRA_FOLDER);
NotificationUtils.clearFolderNotification(this, account, folder);
} else if (ACTION_RESEND_NOTIFICATIONS.equals(action)) {
NotificationUtils.resendNotifications(this, false);
} else if (ACTION_MARK_SEEN.equals(action)) {
- final Folder folder = intent.getParcelableExtra(FOLDER_EXTRA);
+ final Folder folder = intent.getParcelableExtra(Utils.EXTRA_FOLDER);
NotificationUtils.markSeen(this, folder);
} else if (Intent.ACTION_DEVICE_STORAGE_LOW.equals(action)) {
diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index 5d5b44f..b4b32a9 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -414,8 +414,8 @@
final Intent clearNotifIntent =
new Intent(MailIntentService.ACTION_CLEAR_NEW_MAIL_NOTIFICATIONS);
clearNotifIntent.setPackage(getPackageName());
- clearNotifIntent.putExtra(MailIntentService.ACCOUNT_EXTRA, account);
- clearNotifIntent.putExtra(MailIntentService.FOLDER_EXTRA, notificationFolder);
+ clearNotifIntent.putExtra(Utils.EXTRA_ACCOUNT, account);
+ clearNotifIntent.putExtra(Utils.EXTRA_FOLDER, notificationFolder);
startService(clearNotifIntent);
}
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 1902670..5145d32 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -1774,9 +1774,18 @@
}
// Put the folder and conversation, and ask the loader to create this folder.
final Bundle args = new Bundle();
- final Uri folderUri = intent.hasExtra(Utils.EXTRA_FOLDER_URI)
- ? (Uri) intent.getParcelableExtra(Utils.EXTRA_FOLDER_URI)
- : mAccount.settings.defaultInbox;
+
+ final Uri folderUri;
+ if (intent.hasExtra(Utils.EXTRA_FOLDER_URI)) {
+ folderUri = (Uri) intent.getParcelableExtra(Utils.EXTRA_FOLDER_URI);
+ } else if (intent.hasExtra(Utils.EXTRA_FOLDER)) {
+ final Folder folder =
+ Folder.fromString(intent.getStringExtra(Utils.EXTRA_FOLDER));
+ folderUri = folder.uri;
+ } else {
+ folderUri = mAccount.settings.defaultInbox;
+ }
+
args.putParcelable(Utils.EXTRA_FOLDER_URI, folderUri);
args.putParcelable(Utils.EXTRA_CONVERSATION,
intent.getParcelableExtra(Utils.EXTRA_CONVERSATION));
diff --git a/src/com/android/mail/utils/NotificationActionUtils.java b/src/com/android/mail/utils/NotificationActionUtils.java
index c033a8b..89e96ad 100644
--- a/src/com/android/mail/utils/NotificationActionUtils.java
+++ b/src/com/android/mail/utils/NotificationActionUtils.java
@@ -704,7 +704,7 @@
final Context context, final Folder folder, final Conversation conversation) {
final Intent intent = new Intent(MailIntentService.ACTION_MARK_SEEN);
intent.setPackage(context.getPackageName());
- intent.putExtra(MailIntentService.FOLDER_EXTRA, folder);
+ intent.putExtra(Utils.EXTRA_FOLDER, folder);
intent.putExtra(MailIntentService.CONVERSATION_EXTRA, conversation);
context.startService(intent);
diff --git a/src/com/android/mail/utils/NotificationUtils.java b/src/com/android/mail/utils/NotificationUtils.java
index 75073d9..764bbe4 100644
--- a/src/com/android/mail/utils/NotificationUtils.java
+++ b/src/com/android/mail/utils/NotificationUtils.java
@@ -489,8 +489,8 @@
cancelNotificationIntent.setPackage(context.getPackageName());
cancelNotificationIntent.setData(Utils.appendVersionQueryParameter(context,
folder.uri));
- cancelNotificationIntent.putExtra(MailIntentService.ACCOUNT_EXTRA, account);
- cancelNotificationIntent.putExtra(MailIntentService.FOLDER_EXTRA, folder);
+ cancelNotificationIntent.putExtra(Utils.EXTRA_ACCOUNT, account);
+ cancelNotificationIntent.putExtra(Utils.EXTRA_FOLDER, folder);
notification.setDeleteIntent(PendingIntent.getService(
context, notificationId, cancelNotificationIntent, 0));
diff --git a/src/com/android/mail/utils/Utils.java b/src/com/android/mail/utils/Utils.java
index f8dca3f..3204258 100644
--- a/src/com/android/mail/utils/Utils.java
+++ b/src/com/android/mail/utils/Utils.java
@@ -95,6 +95,7 @@
public static final String EXTRA_ACCOUNT = "account";
public static final String EXTRA_ACCOUNT_URI = "accountUri";
public static final String EXTRA_FOLDER_URI = "folderUri";
+ public static final String EXTRA_FOLDER = "folder";
public static final String EXTRA_COMPOSE_URI = "composeUri";
public static final String EXTRA_CONVERSATION = "conversationUri";
diff --git a/src/com/android/mail/widget/BaseWidgetProvider.java b/src/com/android/mail/widget/BaseWidgetProvider.java
index fe8c8e8..eb36181 100644
--- a/src/com/android/mail/widget/BaseWidgetProvider.java
+++ b/src/com/android/mail/widget/BaseWidgetProvider.java
@@ -48,7 +48,6 @@
import java.util.Set;
public abstract class BaseWidgetProvider extends AppWidgetProvider {
- public static final String EXTRA_ACCOUNT = "account";
public static final String EXTRA_FOLDER_TYPE = "folder-type";
public static final String EXTRA_FOLDER_URI = "folder-uri";
public static final String EXTRA_FOLDER_CONVERSATION_LIST_URI = "folder-conversation-list-uri";
@@ -122,7 +121,7 @@
final String action = intent.getAction();
if (ACTION_UPDATE_WIDGET.equals(action)) {
final int widgetId = intent.getIntExtra(EXTRA_WIDGET_ID, -1);
- final Account account = Account.newinstance(intent.getStringExtra(EXTRA_ACCOUNT));
+ final Account account = Account.newinstance(intent.getStringExtra(Utils.EXTRA_ACCOUNT));
final int folderType = intent.getIntExtra(EXTRA_FOLDER_TYPE, FolderType.DEFAULT);
final Uri folderUri = intent.getParcelableExtra(EXTRA_FOLDER_URI);
final Uri folderConversationListUri =
@@ -291,7 +290,7 @@
updateWidgetIntent.setType(account.mimeType);
updateWidgetIntent.putExtra(EXTRA_WIDGET_ID, appWidgetId);
- updateWidgetIntent.putExtra(EXTRA_ACCOUNT, account.serialize());
+ updateWidgetIntent.putExtra(Utils.EXTRA_ACCOUNT, account.serialize());
updateWidgetIntent.putExtra(EXTRA_FOLDER_TYPE, folderType);
updateWidgetIntent.putExtra(EXTRA_FOLDER_URI, folderUri);
updateWidgetIntent.putExtra(EXTRA_FOLDER_CONVERSATION_LIST_URI, folderConversationListUri);
diff --git a/src/com/android/mail/widget/WidgetService.java b/src/com/android/mail/widget/WidgetService.java
index 84dc6c0..25c09a4 100644
--- a/src/com/android/mail/widget/WidgetService.java
+++ b/src/com/android/mail/widget/WidgetService.java
@@ -120,7 +120,7 @@
// Launch an intent to avoid ANRs
final Intent intent = new Intent(context, serviceClass);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
- intent.putExtra(BaseWidgetProvider.EXTRA_ACCOUNT, account.serialize());
+ intent.putExtra(Utils.EXTRA_ACCOUNT, account.serialize());
intent.putExtra(BaseWidgetProvider.EXTRA_FOLDER_TYPE, folderType);
intent.putExtra(BaseWidgetProvider.EXTRA_FOLDER_URI, folderUri);
intent.putExtra(BaseWidgetProvider.EXTRA_FOLDER_CONVERSATION_LIST_URI,
@@ -224,7 +224,7 @@
mContext = context;
mAppWidgetId = intent.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
- mAccount = Account.newinstance(intent.getStringExtra(WidgetProvider.EXTRA_ACCOUNT));
+ mAccount = Account.newinstance(intent.getStringExtra(Utils.EXTRA_ACCOUNT));
mFolderType = intent.getIntExtra(WidgetProvider.EXTRA_FOLDER_TYPE, FolderType.DEFAULT);
mFolderDisplayName = intent.getStringExtra(WidgetProvider.EXTRA_FOLDER_DISPLAY_NAME);
@@ -236,7 +236,7 @@
mFolderConversationListUri = folderConversationListUri;
} else {
// This is a old intent created in version UR8 (or earlier).
- String folderString = intent.getStringExtra("folder");
+ String folderString = intent.getStringExtra(Utils.EXTRA_FOLDER);
Folder folder = Folder.fromString(folderString);
mFolderUri = folder.uri;
mFolderConversationListUri = folder.conversationListUri;