Add a new FolderUri

This will allow us to add query parameters such that Uris will still
appear to be equal, regardless of differences in the parameters.

Bug: 9780067
Change-Id: Iafe39763b3ee448cf02536df89caa736500dfdaf
diff --git a/src/com/android/mail/utils/NotificationUtils.java b/src/com/android/mail/utils/NotificationUtils.java
index e38a64e..4889651 100644
--- a/src/com/android/mail/utils/NotificationUtils.java
+++ b/src/com/android/mail/utils/NotificationUtils.java
@@ -218,7 +218,7 @@
                 final Integer unseenCount = value.second;
                 if (unreadCount != null && unseenCount != null) {
                     final String[] partValues = new String[] {
-                            key.account.uri.toString(), key.folder.uri.toString(),
+                            key.account.uri.toString(), key.folder.folderUri.fullUri.toString(),
                             unreadCount.toString(), unseenCount.toString()};
                     notificationSet.add(TextUtils.join(NOTIFICATION_PART_SEPARATOR, partValues));
                 }
@@ -291,7 +291,7 @@
      *                  upon which an action occurred.
      */
     public static void resendNotifications(Context context, final boolean cancelExisting,
-            final Uri accountUri, final Uri folderUri) {
+            final Uri accountUri, final FolderUri folderUri) {
         LogUtils.d(LOG_TAG, "NotificationUtils: resendNotifications ");
 
         if (cancelExisting) {
@@ -311,15 +311,15 @@
             // Only resend notifications if the notifications are from the same folder
             // and same account as the undo notification that was previously displayed.
             if (accountUri != null && !Objects.equal(accountUri, notification.account.uri) &&
-                    folderUri != null && !Objects.equal(folderUri, folder.uri)) {
+                    folderUri != null && !Objects.equal(folderUri, folder.folderUri)) {
                 LogUtils.d(LOG_TAG, "NotificationUtils: resendNotifications - not resending %s / %s"
                         + " because it doesn't match %s / %s",
-                        notification.account.uri, folder.uri, accountUri, folderUri);
+                        notification.account.uri, folder.folderUri, accountUri, folderUri);
                 continue;
             }
 
             LogUtils.d(LOG_TAG, "NotificationUtils: resendNotifications - resending %s / %s",
-                    notification.account.uri, folder.uri);
+                    notification.account.uri, folder.folderUri);
 
             final NotificationAction undoableAction =
                     NotificationActionUtils.sUndoNotifications.get(notificationId);
@@ -361,8 +361,8 @@
                     // If notification is not enabled for this label, remember this NotificationKey
                     // to later cancel the notification, and remove the entry from the map
                     final Folder folder = notification.folder;
-                    final boolean isInbox =
-                            notification.account.settings.defaultInbox.equals(folder.uri);
+                    final boolean isInbox = folder.folderUri.equals(
+                            notification.account.settings.defaultInbox);
                     final FolderPreferences folderPreferences = new FolderPreferences(
                             context, notification.account.name, folder, isInbox);
 
@@ -400,7 +400,7 @@
             final boolean getAttention) {
         LogUtils.d(LOG_TAG, "NotificationUtils: setNewEmailIndicator unreadCount = %d, "
             + "unseenCount = %d, account = %s, folder = %s, getAttention = %b", unreadCount,
-            unseenCount, account.name, folder.uri, getAttention);
+            unseenCount, account.name, folder.folderUri, getAttention);
 
         boolean ignoreUnobtrusiveSetting = false;
 
@@ -535,7 +535,7 @@
                     new Intent(MailIntentService.ACTION_CLEAR_NEW_MAIL_NOTIFICATIONS);
             cancelNotificationIntent.setPackage(context.getPackageName());
             cancelNotificationIntent.setData(Utils.appendVersionQueryParameter(context,
-                    folder.uri));
+                    folder.folderUri.fullUri));
             cancelNotificationIntent.putExtra(Utils.EXTRA_ACCOUNT, account);
             cancelNotificationIntent.putExtra(Utils.EXTRA_FOLDER, folder);
 
@@ -547,7 +547,7 @@
 
             boolean eventInfoConfigured = false;
 
-            final boolean isInbox = account.settings.defaultInbox.equals(folder.uri);
+            final boolean isInbox = folder.folderUri.equals(account.settings.defaultInbox);
             final FolderPreferences folderPreferences =
                     new FolderPreferences(context, account.name, folder, isInbox);
 
@@ -659,15 +659,15 @@
         final Intent intent;
 
         if (cursor == null) {
-            intent = Utils.createViewFolderIntent(context, folder.uri, account);
+            intent = Utils.createViewFolderIntent(context, folder.folderUri.fullUri, account);
         } else {
             // A conversation cursor has been specified, so this intent is intended to be go
             // directly to the one new conversation
 
             // Get the Conversation object
             final Conversation conversation = new Conversation(cursor);
-            intent = Utils.createViewConversationIntent(context, conversation, folder.uri,
-                    account);
+            intent = Utils.createViewConversationIntent(context, conversation,
+                    folder.folderUri.fullUri, account);
         }
 
         return intent;
@@ -719,7 +719,7 @@
         String notificationTicker = null;
 
         // Boolean indicating that this notification is for a non-inbox label.
-        final boolean isInbox = account.settings.defaultInbox.equals(folder.uri);
+        final boolean isInbox = folder.folderUri.fullUri.equals(account.settings.defaultInbox);
 
         // Notification label name for user label notifications.
         final String notificationLabelName = isInbox ? null : folder.name;
@@ -1376,7 +1376,7 @@
     }
 
     public static void markSeen(final Context context, final Folder folder) {
-        final Uri uri = folder.uri;
+        final Uri uri = folder.folderUri.fullUri;
 
         final ContentValues values = new ContentValues(1);
         values.put(UIProvider.ConversationColumns.SEEN, 1);