11799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal/*
21799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * Copyright (C) 2013 The Android Open Source Project
31799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal *
41799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * Licensed under the Apache License, Version 2.0 (the "License");
51799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * you may not use this file except in compliance with the License.
61799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * You may obtain a copy of the License at
71799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal *
81799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal *      http://www.apache.org/licenses/LICENSE-2.0
91799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal *
101799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * Unless required by applicable law or agreed to in writing, software
111799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * distributed under the License is distributed on an "AS IS" BASIS,
121799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * See the License for the specific language governing permissions and
141799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal * limitations under the License.
151799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal */
161799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
171799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalpackage com.android.mail.adapter;
181799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
1978893c83e9dab75ac9fd5d4e22ceee6b32e87f09Andrew Sappersteinimport android.view.LayoutInflater;
2078893c83e9dab75ac9fd5d4e22ceee6b32e87f09Andrew Sappersteinimport android.view.View;
2178893c83e9dab75ac9fd5d4e22ceee6b32e87f09Andrew Sappersteinimport android.view.ViewGroup;
2278893c83e9dab75ac9fd5d4e22ceee6b32e87f09Andrew Sappersteinimport android.widget.TextView;
2378893c83e9dab75ac9fd5d4e22ceee6b32e87f09Andrew Sapperstein
242b806edc62eb8e83c77edc471fda4652281a15c4James Lemieuximport com.android.bitmap.BitmapCache;
251799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalimport com.android.mail.R;
26c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdonimport com.android.mail.bitmap.ContactResolver;
271799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalimport com.android.mail.providers.Account;
281799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalimport com.android.mail.providers.Folder;
29b958701ff6a98a7d95930e61d91104bb5db3299aRohan Shahimport com.android.mail.ui.AccountItemView;
301799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalimport com.android.mail.ui.ControllableActivity;
311799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalimport com.android.mail.ui.FolderItemView;
3273c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantlerimport com.android.mail.utils.FolderUri;
331799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalimport com.android.mail.utils.LogTag;
341799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalimport com.android.mail.utils.LogUtils;
351799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
36c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon
37f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal/**
38f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal * An element that is shown in the {@link com.android.mail.ui.FolderListFragment}. This class is
39f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal * only used for elements that are shown in the {@link com.android.mail.ui.DrawerFragment}.
40f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal * This class is an enumeration of a few element types: Account, a folder, a recent folder,
41f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal * or a header (a resource string). A {@link DrawerItem} can only be one type and can never
42f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal * switch types. Items are created using methods like
4369086fd48a2e1565806dfd953116d11ab735ab84Tony Mantler * {@link DrawerItem#ofAccount(ControllableActivity, Account, int, boolean, BitmapCache,
4469086fd48a2e1565806dfd953116d11ab735ab84Tony Mantler * ContactResolver)},
4569086fd48a2e1565806dfd953116d11ab735ab84Tony Mantler * {@link DrawerItem#ofWaitView(ControllableActivity)}, etc.
46f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal *
4773c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantler * Once created, the item can create a view using
4873c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantler * {@link #getView(android.view.View, android.view.ViewGroup)}.
49f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal */
501799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwalpublic class DrawerItem {
511799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    private static final String LOG_TAG = LogTag.getLogTag();
521799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public final Folder mFolder;
531799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public final Account mAccount;
54773f2e6e6994f38bf7d2679f2412d2f14f22c424Andrew Sapperstein    private final int mResource;
559860f5ebcd77bce62f76ccf46cee939fe4f2858aRohan Shah    /** True if the drawer item represents the current account, false otherwise */
56773f2e6e6994f38bf7d2679f2412d2f14f22c424Andrew Sapperstein    private final boolean mIsSelected;
571799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** Either {@link #VIEW_ACCOUNT}, {@link #VIEW_FOLDER} or {@link #VIEW_HEADER} */
581799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public final int mType;
591799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** A normal folder, also a child, if a parent is specified. */
601799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public static final int VIEW_FOLDER = 0;
611799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** A text-label which serves as a header in sectioned lists. */
621799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public static final int VIEW_HEADER = 1;
63166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    /** A text-label which serves as a header in sectioned lists. */
64166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    public static final int VIEW_BLANK_HEADER = 2;
651799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** An account object, which allows switching accounts rather than folders. */
66166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    public static final int VIEW_ACCOUNT = 3;
67ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah    /** An expandable object for expanding/collapsing more of the list */
68166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    public static final int VIEW_WAITING_FOR_SYNC = 4;
6910f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal    /** The value (1-indexed) of the last View type.  Useful when returning the number of types. */
7010f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal    private static final int LAST_FIELD = VIEW_WAITING_FOR_SYNC + 1;
7110f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal
72ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah    /** TODO: On adding another type, be sure to change getViewTypes() */
731799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
741799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** The parent activity */
751799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    private final ControllableActivity mActivity;
761799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    private final LayoutInflater mInflater;
771799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
78f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal    // TODO(viki): Put all these constants in an interface.
791799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
80f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal     * Either {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT} or {@link #FOLDER_OTHER} when
811799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * {@link #mType} is {@link #VIEW_FOLDER}, or an {@link #ACCOUNT} in the case of
829860f5ebcd77bce62f76ccf46cee939fe4f2858aRohan Shah     * accounts, and {@link #INERT_HEADER} otherwise.
831799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
841799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public final int mFolderType;
852c17fb1cd5176be06b80b98467b75c67c8d6fa70Rohan Shah    /** Non existent item or folder type not yet set */
862c17fb1cd5176be06b80b98467b75c67c8d6fa70Rohan Shah    public static final int UNSET = 0;
871799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** An unclickable text-header visually separating the different types. */
881799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public static final int INERT_HEADER = 0;
89f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal    /** An inbox folder: Inbox, ...*/
90f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal    public static final int FOLDER_INBOX = 1;
911799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** A folder from whom a conversation was recently viewed */
921799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public static final int FOLDER_RECENT = 2;
93f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal    /** A non-inbox folder that is shown in the "everything else" group. */
94f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal    public static final int FOLDER_OTHER = 3;
951799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** An entry for the accounts the user has on the device. */
961799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    public static final int ACCOUNT = 4;
971799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
981799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /** True if this view is enabled, false otherwise. */
995fb0d88262b03863480b71b67c0a0d2088e7b660Vikram Aggarwal    private final boolean mIsEnabled;
1001799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
101c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon    private BitmapCache mImagesCache;
102c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon    private ContactResolver mContactResolver;
103c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon
1047b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    @Override
1057b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    public String toString() {
1067b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        switch(mType) {
1077b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal            case VIEW_FOLDER:
1087b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal                return folderToString();
1097b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal            case VIEW_HEADER:
1107b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal                return headerToString();
111166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            case VIEW_BLANK_HEADER:
112166a5cfa2d48aca971501e829b65698e50708191Tony Mantler                return blankHeaderToString();
1137b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal            case VIEW_ACCOUNT:
1147b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal                return accountToString();
1157b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal            case VIEW_WAITING_FOR_SYNC:
1167b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal                return waitToString();
1177b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        }
1187b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        // Should never come here.
1197b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        return null;
1207b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    }
1217b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal
1221799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
123f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * Creates a drawer item with every instance variable specified.
1249860f5ebcd77bce62f76ccf46cee939fe4f2858aRohan Shah     *
125f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param type the type of the item. This must be a VIEW_* element
126f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param activity the underlying activity
127f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param folder a non-null folder, if this is a folder type
1289860f5ebcd77bce62f76ccf46cee939fe4f2858aRohan Shah     * @param folderType the type of the folder. For folders this is:
129f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal     *            {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT},
130f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal     *            {@link #FOLDER_OTHER}, or for non-folders this is
1319860f5ebcd77bce62f76ccf46cee939fe4f2858aRohan Shah     *            {@link #ACCOUNT}, or {@link #INERT_HEADER}
132f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param account the account object, for an account drawer element
1339860f5ebcd77bce62f76ccf46cee939fe4f2858aRohan Shah     * @param resource either the string resource for a header, or the unread
1349860f5ebcd77bce62f76ccf46cee939fe4f2858aRohan Shah     *            count for an account.
1359860f5ebcd77bce62f76ccf46cee939fe4f2858aRohan Shah     * @param isCurrentAccount true if this item is the current account
136f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     */
137f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal    private DrawerItem(int type, ControllableActivity activity, Folder folder, int folderType,
138c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon            Account account, int resource, boolean isCurrentAccount, BitmapCache cache,
139c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon            ContactResolver contactResolver) {
140f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal        mActivity = activity;
141f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal        mFolder = folder;
142f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal        mFolderType = folderType;
143f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal        mAccount = account;
144f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal        mResource = resource;
145b905f0ea18ee0dc5774adb29c57cd7c122058c71Rohan Shah        mIsSelected = isCurrentAccount;
146f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal        mInflater = LayoutInflater.from(activity.getActivityContext());
147f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal        mType = type;
1485fb0d88262b03863480b71b67c0a0d2088e7b660Vikram Aggarwal        mIsEnabled = calculateEnabled();
149c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon        mImagesCache = cache;
150c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon        mContactResolver = contactResolver;
151f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal    }
152f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal
153f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal    /**
1541799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * Create a folder item with the given type.
15573c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantler     *
156f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param activity the underlying activity
1571799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @param folder a folder that this item represents
158f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal     * @param folderType one of {@link #FOLDER_INBOX}, {@link #FOLDER_RECENT} or
159f61bf1c68006b023052860bbed4cad78f4a3fc41Vikram Aggarwal     * {@link #FOLDER_OTHER}
160f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @return a drawer item for the folder.
1611799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
162f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal    public static DrawerItem ofFolder(ControllableActivity activity, Folder folder,
163f479bd60d01e5e752620bcb946d079c697a543f6Andrew Sapperstein            int folderType) {
164c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon        return new DrawerItem(VIEW_FOLDER, activity, folder,  folderType, null, -1, false,
165c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon                null, null);
1661799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    }
1671799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
1687b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    private String folderToString() {
1697b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        final StringBuilder sb = new StringBuilder("[DrawerItem ");
1707b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(" VIEW_FOLDER ");
1717b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(", mFolder=");
1727b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(mFolder);
1737b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(", mFolderType=");
1747b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(mFolderType);
1757b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append("]");
1767b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        return sb.toString();
1777b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    }
1787b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal
1791799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
1801799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * Creates an item from an account.
181f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param activity the underlying activity
182f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param account the account to create a drawer item for
183f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param unreadCount the unread count of the account, pass zero if
184f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param isCurrentAccount true if the account is the current account, false otherwise
185f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @return a drawer item for the account.
1861799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
187f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal    public static DrawerItem ofAccount(ControllableActivity activity, Account account,
188c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon            int unreadCount, boolean isCurrentAccount, BitmapCache cache,
189c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon            ContactResolver contactResolver) {
190f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal        return new DrawerItem(VIEW_ACCOUNT, activity, null, ACCOUNT, account, unreadCount,
191c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon                isCurrentAccount, cache, contactResolver);
1921799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    }
1931799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
1947b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    private String accountToString() {
1957b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        final StringBuilder sb = new StringBuilder("[DrawerItem ");
1967b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(" VIEW_ACCOUNT ");
1977b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(", mAccount=");
1987b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(mAccount);
1997b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append("]");
2007b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        return sb.toString();
2017b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    }
2027b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal
2031799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
2041799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * Create a header item with a string resource.
2057e654a970f73e3ebfd6895caa5072c6dcc9e7fb5Rohan Shah     *
206f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @param activity the underlying activity
2071799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @param resource the string resource: R.string.all_folders_heading
208f986f32c19f9394e8564b246655b58088f8760adVikram Aggarwal     * @return a drawer item for the header.
2091799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
210f479bd60d01e5e752620bcb946d079c697a543f6Andrew Sapperstein    public static DrawerItem ofHeader(ControllableActivity activity, int resource) {
211c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon        return new DrawerItem(VIEW_HEADER, activity, null, INERT_HEADER, null, resource, false,
212c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon                null, null);
213ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah    }
214ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah
2157b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    private String headerToString() {
2167b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        final StringBuilder sb = new StringBuilder("[DrawerItem ");
2177b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(" VIEW_HEADER ");
2187b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(", mResource=");
2197b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append(mResource);
2207b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        sb.append("]");
2217b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        return sb.toString();
2227b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    }
2237b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal
224166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    public static DrawerItem ofBlankHeader(ControllableActivity activity) {
225166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        return new DrawerItem(VIEW_BLANK_HEADER, activity, null, INERT_HEADER, null, 0, false, null,
226166a5cfa2d48aca971501e829b65698e50708191Tony Mantler                null);
227166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    }
228166a5cfa2d48aca971501e829b65698e50708191Tony Mantler
229166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    private String blankHeaderToString() {
230166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        return "[DrawerItem VIEW_BLANK_HEADER]";
231166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    }
232166a5cfa2d48aca971501e829b65698e50708191Tony Mantler
233ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah    /**
23410f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     * Create a "waiting for initialization" item.
2357e654a970f73e3ebfd6895caa5072c6dcc9e7fb5Rohan Shah     *
23610f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     * @param activity the underlying activity
23710f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     * @return a drawer item with an indeterminate progress indicator.
23810f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     */
239f479bd60d01e5e752620bcb946d079c697a543f6Andrew Sapperstein    public static DrawerItem ofWaitView(ControllableActivity activity) {
240c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon        return new DrawerItem(VIEW_WAITING_FOR_SYNC, activity, null, INERT_HEADER, null, -1, false,
241c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon                null, null);
24210f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal    }
24310f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal
2443b965d78774a42358ce6bbdcc43b4c8df130a60eScott Kennedy    private static String waitToString() {
2457b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal        return "[DrawerItem VIEW_WAITING_FOR_SYNC ]";
2467b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal    }
2477b34ba1bd4c6e69f52758961619d172bf9bf4021Vikram Aggarwal
248f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal    /**
249f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * Returns a view for the given item. The method signature is identical to that required by a
250f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * {@link android.widget.ListAdapter#getView(int, android.view.View, android.view.ViewGroup)}.
251f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     */
25273c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantler    public View getView(View convertView, ViewGroup parent) {
2531799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        final View result;
2541799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        switch (mType) {
2551799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            case VIEW_FOLDER:
256f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal                result = getFolderView(convertView, parent);
2571799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                break;
2581799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            case VIEW_HEADER:
259f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal                result = getHeaderView(convertView, parent);
2601799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                break;
261166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            case VIEW_BLANK_HEADER:
262166a5cfa2d48aca971501e829b65698e50708191Tony Mantler                result = getBlankHeaderView(convertView, parent);
263166a5cfa2d48aca971501e829b65698e50708191Tony Mantler                break;
2641799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            case VIEW_ACCOUNT:
265f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal                result = getAccountView(convertView, parent);
2661799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                break;
26710f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal            case VIEW_WAITING_FOR_SYNC:
268f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal                result = getEmptyView(convertView, parent);
26910f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal                break;
2701799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            default:
2711799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                LogUtils.wtf(LOG_TAG, "DrawerItem.getView(%d) for an invalid type!", mType);
2721799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                result = null;
2731799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        }
2741799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        return result;
2751799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    }
2761799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
2771799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
278ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah     * Book-keeping for how many different view types there are. Be sure to
279ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah     * increment this appropriately once adding more types as drawer items
280ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah     * @return number of different types of view items
281ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah     */
282ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah    public static int getViewTypes() {
28310f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal        return LAST_FIELD;
284ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah    }
285ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah
286ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah    /**
287f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * Returns whether this view is enabled or not. An enabled view is one that accepts user taps
288f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * and acts upon them.
289f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * @return true if this view is enabled, false otherwise.
2901799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
2915fb0d88262b03863480b71b67c0a0d2088e7b660Vikram Aggarwal    public boolean isItemEnabled() {
2925fb0d88262b03863480b71b67c0a0d2088e7b660Vikram Aggarwal        return mIsEnabled;
2935fb0d88262b03863480b71b67c0a0d2088e7b660Vikram Aggarwal    }
2945fb0d88262b03863480b71b67c0a0d2088e7b660Vikram Aggarwal
2955fb0d88262b03863480b71b67c0a0d2088e7b660Vikram Aggarwal    /** Calculate whether the item is enabled */
2965fb0d88262b03863480b71b67c0a0d2088e7b660Vikram Aggarwal    private boolean calculateEnabled() {
2971799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        switch (mType) {
298166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            case VIEW_HEADER:
299166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            case VIEW_BLANK_HEADER:
3001799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                // Headers are never enabled.
3011799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                return false;
302166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            case VIEW_FOLDER:
3031799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                // Folders are always enabled.
3041799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                return true;
3051799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            case VIEW_ACCOUNT:
3068bcb7c5c37ffd5a1a0c5f4efbcab084830d5e033Rohan Shah                // Accounts are always enabled.
3078bcb7c5c37ffd5a1a0c5f4efbcab084830d5e033Rohan Shah                return true;
30810f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal            case VIEW_WAITING_FOR_SYNC:
30910f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal                // Waiting for sync cannot be tapped, so never enabled.
31010f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal                return false;
3111799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            default:
3121799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                LogUtils.wtf(LOG_TAG, "DrawerItem.isItemEnabled() for invalid type %d", mType);
3131799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                return false;
3141799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        }
3151799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    }
3161799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
3171799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
3181799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * Returns whether this view is highlighted or not.
3191799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     *
32073c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantler     *
321f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * @param currentFolder The current folder, according to the
322f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *                      {@link com.android.mail.ui.FolderListFragment}
323f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * @param currentType The type of the current folder. We want to only highlight a folder once.
324f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *                    A folder might be in two places at once: in "All Folders", and in
325f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *                    "Recent Folder". Valid types of selected folders are :
326f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *                    {@link DrawerItem#FOLDER_INBOX}, {@link DrawerItem#FOLDER_RECENT} or
327f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *                    {@link DrawerItem#FOLDER_OTHER}, or {@link DrawerItem#UNSET}.
328f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal
329f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * @return true if this DrawerItem results in a view that is highlighted (this DrawerItem is
330f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *              the current folder.
3311799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
33273c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantler    public boolean isHighlighted(FolderUri currentFolder, int currentType) {
3331799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        switch (mType) {
334166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            case VIEW_HEADER:
335166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            case VIEW_BLANK_HEADER:
3361799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                // Headers are never highlighted
3371799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                return false;
338e286407580a25914a122480540a2f0be0affcde4Rohan Shah            case VIEW_FOLDER:
339e286407580a25914a122480540a2f0be0affcde4Rohan Shah                // True if folder types and URIs are the same
34073c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantler                if (currentFolder != null && mFolder != null && mFolder.folderUri != null) {
34173c015e14f5f0f729e0c77603d4903bafdf848bfTony Mantler                    return (mFolderType == currentType) && mFolder.folderUri.equals(currentFolder);
342e286407580a25914a122480540a2f0be0affcde4Rohan Shah                }
343e286407580a25914a122480540a2f0be0affcde4Rohan Shah                return false;
3441799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            case VIEW_ACCOUNT:
3451799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                // Accounts are never highlighted
3461799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                return false;
34710f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal            case VIEW_WAITING_FOR_SYNC:
34810f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal                // Waiting for sync cannot be tapped, so never highlighted.
34910f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal                return false;
3501799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            default:
3511799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                LogUtils.wtf(LOG_TAG, "DrawerItem.isHighlighted() for invalid type %d", mType);
3521799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal                return false;
3531799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        }
3541799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    }
3551799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
3561799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
3571799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * Return a view for an account object.
358f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *
3591799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @param convertView a view, possibly null, to be recycled.
3601799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @param parent the parent viewgroup to attach to.
3611799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @return a view to display at this position.
3621799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
363f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal    private View getAccountView(View convertView, ViewGroup parent) {
364b958701ff6a98a7d95930e61d91104bb5db3299aRohan Shah        final AccountItemView accountItemView;
3651799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        if (convertView != null) {
366b958701ff6a98a7d95930e61d91104bb5db3299aRohan Shah            accountItemView = (AccountItemView) convertView;
3671799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        } else {
368b958701ff6a98a7d95930e61d91104bb5db3299aRohan Shah            accountItemView =
36978893c83e9dab75ac9fd5d4e22ceee6b32e87f09Andrew Sapperstein                    (AccountItemView) mInflater.inflate(R.layout.account_item, parent, false);
3701799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        }
371c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon        accountItemView.bind(mActivity.getActivityContext(), mAccount, mIsSelected, mImagesCache,
372c7849b23a73d699b5e7f199f0a3afce5b9dee7a6Martin Hibdon                mContactResolver);
373b958701ff6a98a7d95930e61d91104bb5db3299aRohan Shah        return accountItemView;
3741799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    }
3751799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
3761799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
377f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     * Returns a text divider between divisions.
378f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *
3791799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @param convertView a previous view, perhaps null
3801799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @param parent the parent of this view
3811799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @return a text header at the given position.
3821799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
383f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal    private View getHeaderView(View convertView, ViewGroup parent) {
384166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        final View headerView;
3851799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        if (convertView != null) {
386166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            headerView = convertView;
3871799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        } else {
388166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            headerView = mInflater.inflate(R.layout.folder_list_header, parent, false);
3891799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        }
390166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        final TextView textView = (TextView) headerView.findViewById(R.id.header_text);
391166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        textView.setText(mResource);
3921799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        return headerView;
3931799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    }
3941799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
3951799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    /**
396166a5cfa2d48aca971501e829b65698e50708191Tony Mantler     * Returns a blank divider
397166a5cfa2d48aca971501e829b65698e50708191Tony Mantler     *
398166a5cfa2d48aca971501e829b65698e50708191Tony Mantler     * @param convertView A previous view, perhaps null
399166a5cfa2d48aca971501e829b65698e50708191Tony Mantler     * @param parent the parent of this view
400166a5cfa2d48aca971501e829b65698e50708191Tony Mantler     * @return a blank header
401166a5cfa2d48aca971501e829b65698e50708191Tony Mantler     */
402166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    private View getBlankHeaderView(View convertView, ViewGroup parent) {
403166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        final View blankHeaderView;
404166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        if (convertView != null) {
405166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            blankHeaderView = convertView;
406166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        } else {
407166a5cfa2d48aca971501e829b65698e50708191Tony Mantler            blankHeaderView = mInflater.inflate(R.layout.folder_list_blank_header, parent, false);
408166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        }
409166a5cfa2d48aca971501e829b65698e50708191Tony Mantler        return blankHeaderView;
410166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    }
411166a5cfa2d48aca971501e829b65698e50708191Tony Mantler
412166a5cfa2d48aca971501e829b65698e50708191Tony Mantler    /**
4131799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * Return a folder: either a parent folder or a normal (child or flat)
4141799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * folder.
415f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *
4161799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @param convertView a view, possibly null, to be recycled.
4171799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     * @return a view showing a folder at the given position.
4181799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal     */
419f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal    private View getFolderView(View convertView, ViewGroup parent) {
4201799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        final FolderItemView folderItemView;
4211799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        if (convertView != null) {
4221799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            folderItemView = (FolderItemView) convertView;
4231799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        } else {
4241799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal            folderItemView =
42578893c83e9dab75ac9fd5d4e22ceee6b32e87f09Andrew Sapperstein                    (FolderItemView) mInflater.inflate(R.layout.folder_item, parent, false);
4261799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        }
427f479bd60d01e5e752620bcb946d079c697a543f6Andrew Sapperstein        folderItemView.bind(mFolder, mActivity);
4282ad896272a5739972766d6cce095fae94332f099Rohan Shah        folderItemView.setIcon(mFolder);
4291799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal        return folderItemView;
4301799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal    }
431ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah
432ad4c1856e25ab4edf796c220dd25afcbe823276aRohan Shah    /**
43310f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     * Return a view for the 'Waiting for sync' item with the indeterminate progress indicator.
434f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal     *
43510f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     * @param convertView a view, possibly null, to be recycled.
43610f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     * @param parent the parent hosting this view.
43710f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     * @return a view for "Waiting for sync..." at given position.
43810f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal     */
439f51ce08b103e901883eb4e340ee9ad64766c75a2Vikram Aggarwal    private View getEmptyView(View convertView, ViewGroup parent) {
44010f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal        final ViewGroup emptyView;
44110f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal        if (convertView != null) {
44210f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal            emptyView = (ViewGroup) convertView;
44310f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal        } else {
44410f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal            emptyView = (ViewGroup) mInflater.inflate(R.layout.drawer_empty_view, parent, false);
44510f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal        }
44610f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal        return emptyView;
44710f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal    }
44810f7cd3b693f40aec41dbba572e67ee6184b5a66Vikram Aggarwal
4491799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal}
4501799c1217cb69f1a769285839457d0c05b8a2316Vikram Aggarwal
451