/** * Constructor. * * @param context * The current context. * @param cursor * The data cursor. * @param dateIndex * The date index ? */ public HistoryExpandableListAdapter(Context context, Cursor cursor, int dateIndex, int faviconSize) { mContext = context; mCursor = cursor; mDateIndex = dateIndex; mFaviconSize = faviconSize; mDateSorter = new DateSorter(mContext); mIdIndex = cursor.getColumnIndexOrThrow(BaseColumns._ID); mInflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); buildMap(); }
/** * Translates from a group position in the ExpandableList to a bin. This is * necessary because some groups have no history items, so we do not include * those in the ExpandableList. * * @param groupPosition * Position in the ExpandableList's set of groups * @return The corresponding bin that holds that group. */ private int groupPositionToBin(int groupPosition) { if (groupPosition < 0 || groupPosition >= DateSorter.DAY_COUNT) { throw new AssertionError("group position out of range"); } if (DateSorter.DAY_COUNT == mNumberOfBins || 0 == mNumberOfBins) { // In the first case, we have exactly the same number of bins // as our maximum possible, so there is no need to do a // conversion // The second statement is in case this method gets called when // the array is empty, in which case the provided groupPosition // will do fine. return groupPosition; } int arrayPosition = -1; while (groupPosition > -1) { arrayPosition++; if (mItemMap[arrayPosition] != 0) { groupPosition--; } } return arrayPosition; }
/** * Translates from a group position in the ExpandableList to a bin. This is * necessary because some groups have no history items, so we do not include * those in the ExpandableList. * @param groupPosition Position in the ExpandableList's set of groups * @return The corresponding bin that holds that group. */ private int groupPositionToBin(int groupPosition) { if (groupPosition < 0 || groupPosition >= DateSorter.DAY_COUNT) { throw new AssertionError("group position out of range"); } if (DateSorter.DAY_COUNT == mNumberOfBins || 0 == mNumberOfBins) { // In the first case, we have exactly the same number of bins // as our maximum possible, so there is no need to do a // conversion // The second statement is in case this method gets called when // the array is empty, in which case the provided groupPosition // will do fine. return groupPosition; } int arrayPosition = -1; while (groupPosition > -1) { arrayPosition++; if (mItemMap[arrayPosition] != 0) { groupPosition--; } } return arrayPosition; }
/** * Determine which group an item belongs to. * @param childId ID of the child view in question. * @return int Group position of the containing group. /* package */ int groupFromChildId(long childId) { int group = -1; for (mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext()) { if (getLong(mIdIndex) == childId) { int bin = mDateSorter.getIndex(getLong(mDateIndex)); // bin is the same as the group if the number of bins is the // same as DateSorter if (DateSorter.DAY_COUNT == mNumberOfBins) return bin; // There are some empty bins. Find the corresponding group. group = 0; for (int i = 0; i < bin; i++) { if (mItemMap[i] != 0) group++; } break; } } return group; }
/** * Split the data in the cursor into several "bins": today, yesterday, last * 7 days, last month, older. */ private void buildMap() { int[] array = new int[DateSorter.DAY_COUNT]; // Zero out the array. for (int j = 0; j < DateSorter.DAY_COUNT; j++) { array[j] = 0; } mNumberOfBins = 0; int dateIndex = -1; if (mCursor.moveToFirst() && mCursor.getCount() > 0) { while (!mCursor.isAfterLast()) { long date = getLong(mDateIndex); int index = mDateSorter.getIndex(date); if (index > dateIndex) { mNumberOfBins++; if (index == DateSorter.DAY_COUNT - 1) { // We are already in the last bin, so it will // include all the remaining items array[index] = mCursor.getCount() - mCursor.getPosition(); break; } dateIndex = index; } array[dateIndex]++; mCursor.moveToNext(); } } mItemMap = array; }
/** * Constructor. * @param context The current context. * @param cursor The data cursor. * @param dateIndex The date index ? */ public HistoryExpandableListAdapter(Context context, OnCheckedChangeListener bookmarksChangeListener, Cursor cursor, int dateIndex, int faviconSize) { mContext = context; mBookmarkStarChangeListener = bookmarksChangeListener; mCursor = cursor; mDateIndex = dateIndex; mFaviconSize = faviconSize; mDateSorter = new DateSorter(mContext); mIdIndex = cursor.getColumnIndexOrThrow(BaseColumns._ID); mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); buildMap(); }
/** * Split the data in the cursor into several "bins": today, yesterday, last 7 days, last month, older. */ private void buildMap() { int[] array = new int[DateSorter.DAY_COUNT]; // Zero out the array. for (int j = 0; j < DateSorter.DAY_COUNT; j++) { array[j] = 0; } mNumberOfBins = 0; int dateIndex = -1; if (mCursor.moveToFirst() && mCursor.getCount() > 0) { while (!mCursor.isAfterLast()) { long date = getLong(mDateIndex); int index = mDateSorter.getIndex(date); if (index > dateIndex) { mNumberOfBins++; if (index == DateSorter.DAY_COUNT - 1) { // We are already in the last bin, so it will // include all the remaining items array[index] = mCursor.getCount() - mCursor.getPosition(); break; } dateIndex = index; } array[dateIndex]++; mCursor.moveToNext(); } } mItemMap = array; }
public DateSortedExpandableListAdapter(Context context, Cursor cursor, int dateIndex) { mContext = context; mDateSorter = new DateSorter(context); mObservers = new Vector<DataSetObserver>(); mCursor = cursor; mIdIndex = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_ID); cursor.registerContentObserver(new ChangeObserver()); cursor.registerDataSetObserver(new MyDataSetObserver()); mDateIndex = dateIndex; buildMap(); }
/** * Set up the bins for determining which items belong to which groups. */ private void buildMap() { // The cursor is sorted by date // The ItemMap will store the number of items in each bin. int array[] = new int[DateSorter.DAY_COUNT]; // Zero out the array. for (int j = 0; j < DateSorter.DAY_COUNT; j++) { array[j] = 0; } mNumberOfBins = 0; int dateIndex = -1; if (mCursor.moveToFirst() && mCursor.getCount() > 0) { while (!mCursor.isAfterLast()) { long date = getLong(mDateIndex); int index = mDateSorter.getIndex(date); if (index > dateIndex) { mNumberOfBins++; if (index == DateSorter.DAY_COUNT - 1) { // We are already in the last bin, so it will // include all the remaining items array[index] = mCursor.getCount() - mCursor.getPosition(); break; } dateIndex = index; } array[dateIndex]++; mCursor.moveToNext(); } } mItemMap = array; }