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