summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/mail/providers/Folder.java22
-rw-r--r--src/com/android/mail/providers/UIProvider.java9
-rw-r--r--src/com/android/mail/ui/AddableFolderSelectorAdapter.java2
-rw-r--r--src/com/android/mail/ui/FolderListFragment.java9
-rw-r--r--src/com/android/mail/ui/OnePaneController.java24
-rw-r--r--src/com/android/mail/ui/TwoPaneController.java13
6 files changed, 43 insertions, 36 deletions
diff --git a/src/com/android/mail/providers/Folder.java b/src/com/android/mail/providers/Folder.java
index 867d4b8cb..77c69ae2d 100644
--- a/src/com/android/mail/providers/Folder.java
+++ b/src/com/android/mail/providers/Folder.java
@@ -180,11 +180,9 @@ public class Folder implements Parcelable, Comparable<Folder> {
public String hierarchicalDesc;
/**
- * Parent folder of this folder, or null if there is none. This is set as
- * part of the execution of the application and not obtained or stored via
- * the provider.
+ * Parent folder of this folder, or null if there is none.
*/
- public Folder parent;
+ public Uri parent;
/**
* The time at which the last message was received.
@@ -199,7 +197,7 @@ public class Folder implements Parcelable, Comparable<Folder> {
boolean hasChildren, int syncWindow, Uri conversationListUri, Uri childFoldersListUri,
int unseenCount, int unreadCount, int totalCount, Uri refreshUri, int syncStatus,
int lastSyncResult, int type, int iconResId, int notificationIconResId, String bgColor,
- String fgColor, Uri loadMoreUri, String hierarchicalDesc, Folder parent,
+ String fgColor, Uri loadMoreUri, String hierarchicalDesc, Uri parent,
final long lastMessageTimestamp) {
this.id = id;
this.persistentId = persistentId;
@@ -229,8 +227,8 @@ public class Folder implements Parcelable, Comparable<Folder> {
}
this.loadMoreUri = loadMoreUri;
this.hierarchicalDesc = hierarchicalDesc;
- this.parent = parent;
this.lastMessageTimestamp = lastMessageTimestamp;
+ this.parent = parent;
}
public Folder(Cursor cursor) {
@@ -268,8 +266,10 @@ public class Folder implements Parcelable, Comparable<Folder> {
String loadMore = cursor.getString(UIProvider.FOLDER_LOAD_MORE_URI_COLUMN);
loadMoreUri = !TextUtils.isEmpty(loadMore) ? Uri.parse(loadMore) : null;
hierarchicalDesc = cursor.getString(UIProvider.FOLDER_HIERARCHICAL_DESC_COLUMN);
- parent = null;
lastMessageTimestamp = cursor.getLong(UIProvider.FOLDER_LAST_MESSAGE_TIMESTAMP_COLUMN);
+ // A null parent URI means that this is a top-level folder.
+ final String parentString = cursor.getString(UIProvider.FOLDER_PARENT_URI_COLUMN);
+ parent = parentString == null ? Uri.EMPTY : Uri.parse(parentString);
}
/**
@@ -319,6 +319,7 @@ public class Folder implements Parcelable, Comparable<Folder> {
hierarchicalDesc = in.readString();
parent = in.readParcelable(loader);
lastMessageTimestamp = in.readLong();
+ parent = in.readParcelable(loader);
}
@Override
@@ -348,6 +349,7 @@ public class Folder implements Parcelable, Comparable<Folder> {
dest.writeString(hierarchicalDesc);
dest.writeParcelable(parent, 0);
dest.writeLong(lastMessageTimestamp);
+ dest.writeParcelable(parent, 0);
}
/**
@@ -512,11 +514,11 @@ public class Folder implements Parcelable, Comparable<Folder> {
/**
* Get just the uri's from an arraylist of folders.
*/
- public final static String[] getUriArray(List<Folder> folders) {
+ public static String[] getUriArray(List<Folder> folders) {
if (folders == null || folders.size() == 0) {
return new String[0];
}
- String[] folderUris = new String[folders.size()];
+ final String[] folderUris = new String[folders.size()];
int i = 0;
for (Folder folder : folders) {
folderUris[i] = folder.uri.toString();
@@ -643,7 +645,7 @@ public class Folder implements Parcelable, Comparable<Folder> {
}
f.loadMoreUri = getValidUri(split[index++]);
f.hierarchicalDesc = split[index++];
- f.parent = Folder.fromString(split[index++]);
+ f.parent = Folder.getValidUri(split[index++]);
return f;
}
diff --git a/src/com/android/mail/providers/UIProvider.java b/src/com/android/mail/providers/UIProvider.java
index 32465826a..0d530bd6d 100644
--- a/src/com/android/mail/providers/UIProvider.java
+++ b/src/com/android/mail/providers/UIProvider.java
@@ -636,7 +636,8 @@ public class UIProvider {
FolderColumns.FG_COLOR,
FolderColumns.LOAD_MORE_URI,
FolderColumns.HIERARCHICAL_DESC,
- FolderColumns.LAST_MESSAGE_TIMESTAMP
+ FolderColumns.LAST_MESSAGE_TIMESTAMP,
+ FolderColumns.PARENT_URI
};
public static final int FOLDER_ID_COLUMN = 0;
@@ -662,6 +663,7 @@ public class UIProvider {
public static final int FOLDER_LOAD_MORE_URI_COLUMN = 20;
public static final int FOLDER_HIERARCHICAL_DESC_COLUMN = 21;
public static final int FOLDER_LAST_MESSAGE_TIMESTAMP_COLUMN = 22;
+ public static final int FOLDER_PARENT_URI_COLUMN = 23;
public static final class FolderType {
/** A user defined label. */
@@ -871,6 +873,11 @@ public class UIProvider {
*/
public static final String LAST_MESSAGE_TIMESTAMP = "lastMessageTimestamp";
+ /**
+ * The URI, possibly null, of the parent folder.
+ */
+ public static final String PARENT_URI = "parentUri";
+
public FolderColumns() {}
}
diff --git a/src/com/android/mail/ui/AddableFolderSelectorAdapter.java b/src/com/android/mail/ui/AddableFolderSelectorAdapter.java
index fd76eaf58..350abfcc5 100644
--- a/src/com/android/mail/ui/AddableFolderSelectorAdapter.java
+++ b/src/com/android/mail/ui/AddableFolderSelectorAdapter.java
@@ -106,6 +106,8 @@ public class AddableFolderSelectorAdapter extends FolderSelectorAdapter {
.getString(UIProvider.FOLDER_HIERARCHICAL_DESC_COLUMN);
folder[UIProvider.FOLDER_LAST_MESSAGE_TIMESTAMP_COLUMN] = folderCursor
.getLong(UIProvider.FOLDER_LAST_MESSAGE_TIMESTAMP_COLUMN);
+ folder[UIProvider.FOLDER_PARENT_URI_COLUMN] = folderCursor
+ .getString(UIProvider.FOLDER_PARENT_URI_COLUMN);
cursor.addRow(folder);
}
} while (folderCursor.moveToNext());
diff --git a/src/com/android/mail/ui/FolderListFragment.java b/src/com/android/mail/ui/FolderListFragment.java
index dc4c5ec00..55a0924f8 100644
--- a/src/com/android/mail/ui/FolderListFragment.java
+++ b/src/com/android/mail/ui/FolderListFragment.java
@@ -485,11 +485,6 @@ public class FolderListFragment extends ListFragment implements
if (folder != null) {
// Not changing the account.
final Account nextAccount = null;
- // Since we may be looking at hierarchical views, if we can
- // determine the parent of the folder we have tapped, set it here.
- // If we are looking at the folder we are already viewing, don't
- // update its parent!
- folder.parent = folder.equals(mParentFolder) ? null : mParentFolder;
// Go to the conversation list for this folder.
if (!folder.uri.equals(mSelectedFolderUri)) {
mNextFolder = folder;
@@ -1008,9 +1003,7 @@ public class FolderListFragment extends ListFragment implements
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
do {
- Folder f = cursor.getModel();
- f.parent = mParent;
- add(f);
+ add(cursor.getModel());
} while (cursor.moveToNext());
}
}
diff --git a/src/com/android/mail/ui/OnePaneController.java b/src/com/android/mail/ui/OnePaneController.java
index 1ab18f35f..b18ddb6d8 100644
--- a/src/com/android/mail/ui/OnePaneController.java
+++ b/src/com/android/mail/ui/OnePaneController.java
@@ -361,7 +361,7 @@ public final class OnePaneController extends AbstractActivityController {
final FolderListFragment folderListFragment = getFolderListFragment();
final boolean parentHasChildren = folderListFragment != null &&
folderListFragment.showingHierarchy() && hierarchyFolder != null
- && hierarchyFolder.parent != null;
+ && hierarchyFolder.parent != Uri.EMPTY;
if (parentHasChildren) {
// If we are showing the folder list and the user is exploring
// the children of a single parent folder,
@@ -377,10 +377,13 @@ public final class OnePaneController extends AbstractActivityController {
} else if (mViewMode.isListMode() && !inInbox(mAccount, mConvListContext)) {
if (mLastFolderListTransactionId != INVALID_ID) {
// Set the hierarchy folder to what it will be once we go up
- final Folder hierarchyFolder = getHierarchyFolder();
- if (hierarchyFolder != null && hierarchyFolder.parent != null) {
- setHierarchyFolder(hierarchyFolder.parent);
- }
+
+ // The hierarchy folder stuff is not required. We need to clean this stuff up.
+ // TODO: http://b/9694899
+// final Folder hierarchyFolder = getHierarchyFolder();
+// if (hierarchyFolder != null && hierarchyFolder.parent != null) {
+// setHierarchyFolder(hierarchyFolder.parent);
+// }
// If the user got here by navigating via the folder list, back
// should bring them back to the folder list.
@@ -399,12 +402,9 @@ public final class OnePaneController extends AbstractActivityController {
}
private void goUpFolderHierarchy(Folder current) {
- final Folder top = current.parent;
- if (top != null) {
- // FIXME: This is silly. we worked so hard to add folder fragments to the back stack.
- // it should either just pop back, or should not use the back stack at all.
- onFolderSelected(top);
- }
+ // This code is currently never called. Now that we have the URI, load the parent, if
+ // required. http://b/9694899
+ // onFolderSelected(current.parent);
}
/**
@@ -465,7 +465,7 @@ public final class OnePaneController extends AbstractActivityController {
final FolderListFragment folderListFragment = getFolderListFragment();
if (folderListFragment != null) {
final Folder parentFolder = folderListFragment.getParentFolder();
- if (parentFolder == null || parentFolder.parent == null) {
+ if (parentFolder == null || parentFolder.parent == Uri.EMPTY) {
toggleFolderListState();
return true;
}
diff --git a/src/com/android/mail/ui/TwoPaneController.java b/src/com/android/mail/ui/TwoPaneController.java
index f80072d26..e57929279 100644
--- a/src/com/android/mail/ui/TwoPaneController.java
+++ b/src/com/android/mail/ui/TwoPaneController.java
@@ -20,6 +20,7 @@ package com.android.mail.ui;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.view.Gravity;
@@ -155,10 +156,11 @@ public final class TwoPaneController extends AbstractActivityController {
private void goUpFolderHierarchy(Folder current) {
// If the current folder is a child, up should show the parent folder.
- final Folder parent = current.parent;
- if (parent != null) {
- onFolderSelected(parent);
- }
+ // Fix this to load the parent folder: http://b/9694899
+// final Folder parent = current.parent;
+// if (parent != null) {
+// onFolderSelected(parent);
+// }
}
@Override
@@ -392,8 +394,9 @@ public final class TwoPaneController extends AbstractActivityController {
&& folderList.showingHierarchy()) {
// If the user navigated via the left folders list into a child folder,
// back should take the user up to the parent folder's conversation list.
+ // TODO: Clean this code up: http://b/9694899
final Folder hierarchyFolder = getHierarchyFolder();
- if (hierarchyFolder.parent != null) {
+ if (hierarchyFolder.parent != Uri.EMPTY) {
goUpFolderHierarchy(hierarchyFolder);
} else {
// Show inbox; we are at the top of the hierarchy we were