1251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey/* 2251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * Copyright (C) 2013 The Android Open Source Project 3251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * 4251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * you may not use this file except in compliance with the License. 6251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * You may obtain a copy of the License at 7251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * 8251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * 10251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * See the License for the specific language governing permissions and 14251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * limitations under the License. 15251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey */ 16251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 17251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkeypackage com.android.documentsui; 18251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 19251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkeyimport android.database.AbstractCursor; 20251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkeyimport android.database.Cursor; 21954be0232655d316bc5decbbd35579af902c75c2Jeff Sharkeyimport android.os.Bundle; 22251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 23251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey/** 24251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey * Cursor wrapper that adds columns to identify which root a document came from. 25251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey */ 26251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkeypublic class RootCursorWrapper extends AbstractCursor { 27251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey private final String mAuthority; 28251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey private final String mRootId; 29251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 30251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey private final Cursor mCursor; 31251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey private final int mCount; 32251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 33251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey private final String[] mColumnNames; 34251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 35251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey private final int mAuthorityIndex; 36251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey private final int mRootIdIndex; 37251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 38251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public static final String COLUMN_AUTHORITY = "android:authority"; 39251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public static final String COLUMN_ROOT_ID = "android:rootId"; 40251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 41251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public RootCursorWrapper(String authority, String rootId, Cursor cursor, int maxCount) { 42251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mAuthority = authority; 43251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mRootId = rootId; 44251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mCursor = cursor; 45251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 46251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey final int count = cursor.getCount(); 47251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey if (maxCount > 0 && count > maxCount) { 48251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mCount = maxCount; 49251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } else { 50251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mCount = count; 51251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 52251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 53251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey if (cursor.getColumnIndex(COLUMN_AUTHORITY) != -1 54251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey || cursor.getColumnIndex(COLUMN_ROOT_ID) != -1) { 55251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey throw new IllegalArgumentException("Cursor contains internal columns!"); 56251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 57251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey final String[] before = cursor.getColumnNames(); 58251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mColumnNames = new String[before.length + 2]; 59251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey System.arraycopy(before, 0, mColumnNames, 0, before.length); 60251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mAuthorityIndex = before.length; 61251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mRootIdIndex = before.length + 1; 62251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mColumnNames[mAuthorityIndex] = COLUMN_AUTHORITY; 63251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mColumnNames[mRootIdIndex] = COLUMN_ROOT_ID; 64251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 65251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 66251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 67954be0232655d316bc5decbbd35579af902c75c2Jeff Sharkey public Bundle getExtras() { 68954be0232655d316bc5decbbd35579af902c75c2Jeff Sharkey return mCursor.getExtras(); 69954be0232655d316bc5decbbd35579af902c75c2Jeff Sharkey } 70954be0232655d316bc5decbbd35579af902c75c2Jeff Sharkey 71954be0232655d316bc5decbbd35579af902c75c2Jeff Sharkey @Override 72251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public void close() { 73251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey super.close(); 74251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey mCursor.close(); 75251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 76251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 77251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 78251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public boolean onMove(int oldPosition, int newPosition) { 79251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.moveToPosition(newPosition); 80251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 81251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 82251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 83251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public String[] getColumnNames() { 84251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mColumnNames; 85251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 86251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 87251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 88251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public int getCount() { 89251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCount; 90251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 91251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 92251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 93251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public double getDouble(int column) { 94251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.getDouble(column); 95251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 96251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 97251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 98251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public float getFloat(int column) { 99251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.getFloat(column); 100251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 101251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 102251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 103251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public int getInt(int column) { 104251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.getInt(column); 105251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 106251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 107251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 108251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public long getLong(int column) { 109251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.getLong(column); 110251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 111251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 112251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 113251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public short getShort(int column) { 114251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.getShort(column); 115251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 116251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 117251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 118251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public String getString(int column) { 119251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey if (column == mAuthorityIndex) { 120251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mAuthority; 121251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } else if (column == mRootIdIndex) { 122251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mRootId; 123251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } else { 124251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.getString(column); 125251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 126251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 127251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 128251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 129251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public int getType(int column) { 130251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.getType(column); 131251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 132251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 133251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey @Override 134251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public boolean isNull(int column) { 135251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey return mCursor.isNull(column); 136251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey } 137251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey} 138