133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 244ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams 37b5e903f71127867950ba87f363a491ba5e8306dDiego Garciaimport java.util.HashMap; 47b5e903f71127867950ba87f363a491ba5e8306dDiego Garciaimport java.util.Map; 57b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia 67b5e903f71127867950ba87f363a491ba5e8306dDiego Garciaimport android.content.ContentResolver; 744ade170c5bc611222ed25d5b1f8e7745104057dChristian Williamsimport android.database.AbstractCursor; 8b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vrankenimport android.database.CursorWindow; 97b5e903f71127867950ba87f363a491ba5e8306dDiego Garciaimport android.net.Uri; 107b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia 1122c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 1222c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 1322c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject; 1444ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams 15b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken 160b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisher@Implements(AbstractCursor.class) 17afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowAbstractCursor { 18e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz @RealObject 19e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz private AbstractCursor realAbstractCursor; 20e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 21b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken protected Map<String, Object> currentRow; 22b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken protected int currentRowNumber = -1; 23b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken protected Map<String, Integer> columnNames = new HashMap<String, Integer>(); 24b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken protected String[] columnNameArray; 25b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken protected Map<Integer, Map<String, Object>> rows = new HashMap<Integer, Map<String, Object>>(); 26b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken protected int rowCount; 277b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia protected Uri notificationUri; 28605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis protected boolean mClosed; 29e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 30b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken @Implementation 31e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz public int getCount() { 32b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken return rowCount; 33b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken } 34088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel 35de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 36b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public boolean moveToFirst() { 37e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz setPosition(0); 384a7b7902404d0c3743f96c043e3cc6b9069cf438Christian Williams return realAbstractCursor.getCount() > 0; 3944ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams } 40088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel 410b1cf2dae9f688eaf17eee6ba853ebf5f9b21689adriancowham @Implementation 420b1cf2dae9f688eaf17eee6ba853ebf5f9b21689adriancowham public boolean moveToLast() { 430b1cf2dae9f688eaf17eee6ba853ebf5f9b21689adriancowham if( realAbstractCursor.getCount() == 0 ) { 440b1cf2dae9f688eaf17eee6ba853ebf5f9b21689adriancowham return false; 450b1cf2dae9f688eaf17eee6ba853ebf5f9b21689adriancowham } 460b1cf2dae9f688eaf17eee6ba853ebf5f9b21689adriancowham setPosition( realAbstractCursor.getCount() - 1 ); 470b1cf2dae9f688eaf17eee6ba853ebf5f9b21689adriancowham return true; 480b1cf2dae9f688eaf17eee6ba853ebf5f9b21689adriancowham } 4940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 50595a0c838d8e59d44d8aab3d468b71e3dbf43e52Michael Portuesi @Implementation 51595a0c838d8e59d44d8aab3d468b71e3dbf43e52Michael Portuesi public int getPosition() { 5240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return currentRowNumber; 53595a0c838d8e59d44d8aab3d468b71e3dbf43e52Michael Portuesi } 54b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken 55b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken 565c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi @Implementation 57e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz public boolean moveToPosition(int pos) { 585c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi if (pos >= realAbstractCursor.getCount()) { 595c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi return false; 605c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi } 61e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 62b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken setPosition(pos); 635c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi return true; 645c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi } 65e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 66b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken /** 67b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken * Set currentRowNumber(Int) and currentRow (Map) 68e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz * 69b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken * @param pos = the position to set 70b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken */ 71b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken private void setPosition(int pos) { 72e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz currentRowNumber = pos; 73e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz if ((-1 == currentRowNumber) || (rowCount == currentRowNumber)) { 74e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz currentRow = null; 75e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz } else { 76e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz currentRow = rows.get(currentRowNumber); 77e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz } 78b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken } 79e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 80595a0c838d8e59d44d8aab3d468b71e3dbf43e52Michael Portuesi @Implementation 81b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public boolean moveToNext() { 82bf6a1c2145b187c23b06243ceaa6f85c24498643Lenny Turetsky & Phil Plante if (currentRowNumber + 1 >= realAbstractCursor.getCount()) { 83bf6a1c2145b187c23b06243ceaa6f85c24498643Lenny Turetsky & Phil Plante currentRowNumber = realAbstractCursor.getCount(); 8440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return false; 8540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams } 86b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken setPosition(++currentRowNumber); 8740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return true; 88595a0c838d8e59d44d8aab3d468b71e3dbf43e52Michael Portuesi } 89e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 90a18b850f368f1d491b024561e2087569d3c636a8Chris Van Vranken @Implementation 91a18b850f368f1d491b024561e2087569d3c636a8Chris Van Vranken public boolean moveToPrevious() { 92a18b850f368f1d491b024561e2087569d3c636a8Chris Van Vranken if (currentRowNumber < 0 || realAbstractCursor.getCount() == 0) { 93a18b850f368f1d491b024561e2087569d3c636a8Chris Van Vranken return false; 94a18b850f368f1d491b024561e2087569d3c636a8Chris Van Vranken } 95a18b850f368f1d491b024561e2087569d3c636a8Chris Van Vranken setPosition(--currentRowNumber); 96a18b850f368f1d491b024561e2087569d3c636a8Chris Van Vranken return true; 97a18b850f368f1d491b024561e2087569d3c636a8Chris Van Vranken } 98e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 99b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken @Implementation 100b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken public CursorWindow getWindow() { 101b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken return null; 102b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken } 103e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 104b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken @Implementation 105b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken public String[] getColumnNames() { 106e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz return columnNameArray; 107b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken } 108e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 109b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken @Implementation 110088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel public String getColumnName(int column) { 111088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel return columnNameArray[column]; 112088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel } 113088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel 114088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel @Implementation 115088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel public int getColumnIndex(String columnName) { 116088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel for (int i=0; i<columnNameArray.length; i++) { 117088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel if (columnName.equals(columnNameArray[i])) return i; 118088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel } 119088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel return -1; 120088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel } 121088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel 122088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel @Implementation 123088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel public int getColumnIndexOrThrow(String columnName) { 124088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel int idx = getColumnIndex(columnName); 125088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel if (idx >= 0) return idx; else throw new IllegalArgumentException("column does not exist"); 126088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel } 127088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel 128088872bfbd8b60074e647dacaa2804a87bf6d604Jan Berkel @Implementation 129b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken public int getColumnCount() { 130b970da24960c184335a2aba413e3f5bfbbed7825Chris Van Vranken return getColumnNames().length; 131e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz } 132e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 1337bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi @Implementation 1347bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi public boolean isFirst() { 135e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz return currentRowNumber == 0; 1367bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi } 137e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 1387bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi @Implementation 1397bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi public boolean isLast() { 140e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz return currentRowNumber == realAbstractCursor.getCount() - 1; 1417bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi } 142e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 1437bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi @Implementation 1447bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi public boolean isBeforeFirst() { 145e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz return currentRowNumber < 0; 1467bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi } 147e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz 1487bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi @Implementation 1497bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi public boolean isAfterLast() { 150e2623f9312670f0df22c6e6c5f7969bd01d18130Joe Moore & Tyler Schultz return currentRowNumber >= realAbstractCursor.getCount(); 1517bf3f1f842b448cd4a422fa0d7e4469d50deb279Michael Portuesi } 1527b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia 1537b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia @Implementation 1547b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia public void setNotificationUri(ContentResolver cr, Uri notifyUri) { 1557b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia notificationUri = notifyUri; 1567b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia } 1577b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia 158605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis @Implementation 159605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis public boolean isClosed() { 160605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis return mClosed; 161605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis } 162605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis 163605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis @Implementation 164605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis public void close() { 165605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis mClosed = true; 166605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis } 167605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis 168605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis /** 1697b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia * Returns the Uri set by {@code setNotificationUri()}. Method included for testing 1707b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia * pre-API 11 projects. 1717b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia */ 1727b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia public Uri getNotificationUri_Compatibility() { 1737b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia return notificationUri; 1747b5e903f71127867950ba87f363a491ba5e8306dDiego Garcia } 175605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis 176605fe2e0d79665282551b03424c4552bf9157060Savvas Dalkitsis 17709e5078f4b638fae60c67b2e6b8f43cc796574a3Chris Van Vranken}