Merge "Clean up AbstractCursor API."
This commit is contained in:
@@ -9729,12 +9729,9 @@ package android.database {
|
||||
method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
|
||||
method public void unregisterContentObserver(android.database.ContentObserver);
|
||||
method public void unregisterDataSetObserver(android.database.DataSetObserver);
|
||||
field protected boolean mClosed;
|
||||
field protected android.content.ContentResolver mContentResolver;
|
||||
field protected deprecated java.lang.Long mCurrentRowID;
|
||||
field protected int mPos;
|
||||
field protected deprecated int mRowIdColumnIndex;
|
||||
field protected deprecated java.util.HashMap<java.lang.Long, java.util.Map<java.lang.String, java.lang.Object>> mUpdatedRows;
|
||||
field protected deprecated boolean mClosed;
|
||||
field protected deprecated android.content.ContentResolver mContentResolver;
|
||||
field protected deprecated int mPos;
|
||||
}
|
||||
|
||||
protected static class AbstractCursor.SelfContentObserver extends android.database.ContentObserver {
|
||||
@@ -30558,7 +30555,7 @@ package android.test.mock {
|
||||
ctor public MockCursor();
|
||||
method public void close();
|
||||
method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
|
||||
method public void deactivate();
|
||||
method public deprecated void deactivate();
|
||||
method public byte[] getBlob(int);
|
||||
method public int getColumnCount();
|
||||
method public int getColumnIndex(java.lang.String);
|
||||
@@ -30591,8 +30588,9 @@ package android.test.mock {
|
||||
method public boolean moveToPrevious();
|
||||
method public void registerContentObserver(android.database.ContentObserver);
|
||||
method public void registerDataSetObserver(android.database.DataSetObserver);
|
||||
method public boolean requery();
|
||||
method public deprecated boolean requery();
|
||||
method public android.os.Bundle respond(android.os.Bundle);
|
||||
method public void setExtras(android.os.Bundle);
|
||||
method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
|
||||
method public void unregisterContentObserver(android.database.ContentObserver);
|
||||
method public void unregisterDataSetObserver(android.database.DataSetObserver);
|
||||
|
||||
@@ -6,6 +6,16 @@ package android.content.pm {
|
||||
|
||||
}
|
||||
|
||||
package android.database {
|
||||
|
||||
public abstract class AbstractCursor implements android.database.CrossProcessCursor {
|
||||
field protected java.lang.Long mCurrentRowID;
|
||||
field protected int mRowIdColumnIndex;
|
||||
field protected java.util.HashMap<java.lang.Long, java.util.Map<java.lang.String, java.lang.Object>> mUpdatedRows;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package android.media {
|
||||
|
||||
public class AudioFormat {
|
||||
|
||||
@@ -10020,12 +10020,9 @@ package android.database {
|
||||
method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
|
||||
method public void unregisterContentObserver(android.database.ContentObserver);
|
||||
method public void unregisterDataSetObserver(android.database.DataSetObserver);
|
||||
field protected boolean mClosed;
|
||||
field protected android.content.ContentResolver mContentResolver;
|
||||
field protected deprecated java.lang.Long mCurrentRowID;
|
||||
field protected int mPos;
|
||||
field protected deprecated int mRowIdColumnIndex;
|
||||
field protected deprecated java.util.HashMap<java.lang.Long, java.util.Map<java.lang.String, java.lang.Object>> mUpdatedRows;
|
||||
field protected deprecated boolean mClosed;
|
||||
field protected deprecated android.content.ContentResolver mContentResolver;
|
||||
field protected deprecated int mPos;
|
||||
}
|
||||
|
||||
protected static class AbstractCursor.SelfContentObserver extends android.database.ContentObserver {
|
||||
@@ -33161,7 +33158,7 @@ package android.test.mock {
|
||||
ctor public MockCursor();
|
||||
method public void close();
|
||||
method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
|
||||
method public void deactivate();
|
||||
method public deprecated void deactivate();
|
||||
method public byte[] getBlob(int);
|
||||
method public int getColumnCount();
|
||||
method public int getColumnIndex(java.lang.String);
|
||||
@@ -33194,8 +33191,9 @@ package android.test.mock {
|
||||
method public boolean moveToPrevious();
|
||||
method public void registerContentObserver(android.database.ContentObserver);
|
||||
method public void registerDataSetObserver(android.database.DataSetObserver);
|
||||
method public boolean requery();
|
||||
method public deprecated boolean requery();
|
||||
method public android.os.Bundle respond(android.os.Bundle);
|
||||
method public void setExtras(android.os.Bundle);
|
||||
method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
|
||||
method public void unregisterContentObserver(android.database.ContentObserver);
|
||||
method public void unregisterDataSetObserver(android.database.DataSetObserver);
|
||||
|
||||
@@ -6,6 +6,16 @@ package android.content.pm {
|
||||
|
||||
}
|
||||
|
||||
package android.database {
|
||||
|
||||
public abstract class AbstractCursor implements android.database.CrossProcessCursor {
|
||||
field protected java.lang.Long mCurrentRowID;
|
||||
field protected int mRowIdColumnIndex;
|
||||
field protected java.util.HashMap<java.lang.Long, java.util.Map<java.lang.String, java.lang.Object>> mUpdatedRows;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package android.media {
|
||||
|
||||
public class AudioFormat {
|
||||
|
||||
@@ -49,9 +49,24 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
*/
|
||||
protected Long mCurrentRowID;
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #getPosition()} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
protected int mPos;
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #isClosed()} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
protected boolean mClosed;
|
||||
|
||||
/**
|
||||
* @deprecated Do not use.
|
||||
*/
|
||||
@Deprecated
|
||||
protected ContentResolver mContentResolver;
|
||||
|
||||
private Uri mNotifyUri;
|
||||
|
||||
private final Object mSelfObserverLock = new Object();
|
||||
@@ -65,18 +80,28 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
/* These need to be implemented by subclasses */
|
||||
@Override
|
||||
abstract public int getCount();
|
||||
|
||||
@Override
|
||||
abstract public String[] getColumnNames();
|
||||
|
||||
@Override
|
||||
abstract public String getString(int column);
|
||||
@Override
|
||||
abstract public short getShort(int column);
|
||||
@Override
|
||||
abstract public int getInt(int column);
|
||||
@Override
|
||||
abstract public long getLong(int column);
|
||||
@Override
|
||||
abstract public float getFloat(int column);
|
||||
@Override
|
||||
abstract public double getDouble(int column);
|
||||
@Override
|
||||
abstract public boolean isNull(int column);
|
||||
|
||||
@Override
|
||||
public int getType(int column) {
|
||||
// Reflects the assumption that all commonly used field types (meaning everything
|
||||
// but blobs) are convertible to strings so it should be safe to call
|
||||
@@ -85,6 +110,7 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
}
|
||||
|
||||
// TODO implement getBlob in all cursor types
|
||||
@Override
|
||||
public byte[] getBlob(int column) {
|
||||
throw new UnsupportedOperationException("getBlob is not supported");
|
||||
}
|
||||
@@ -97,14 +123,17 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
*
|
||||
* @return The pre-filled window that backs this cursor, or null if none.
|
||||
*/
|
||||
@Override
|
||||
public CursorWindow getWindow() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColumnCount() {
|
||||
return getColumnNames().length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivate() {
|
||||
onDeactivateOrClose();
|
||||
}
|
||||
@@ -118,6 +147,7 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
mDataSetObservable.notifyInvalidated();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean requery() {
|
||||
if (mSelfObserver != null && mSelfObserverRegistered == false) {
|
||||
mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver);
|
||||
@@ -127,10 +157,12 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isClosed() {
|
||||
return mClosed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
mClosed = true;
|
||||
mContentObservable.unregisterAll();
|
||||
@@ -147,11 +179,13 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
* @param newPosition the position that we're moving to
|
||||
* @return true if the move is successful, false otherwise
|
||||
*/
|
||||
@Override
|
||||
public boolean onMove(int oldPosition, int newPosition) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) {
|
||||
// Default implementation, uses getString
|
||||
String result = getString(columnIndex);
|
||||
@@ -174,10 +208,12 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
mPos = -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int getPosition() {
|
||||
return mPos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean moveToPosition(int position) {
|
||||
// Make sure position isn't past the end of the cursor
|
||||
final int count = getCount();
|
||||
@@ -212,35 +248,43 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
DatabaseUtils.cursorFillWindow(this, position, window);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean move(int offset) {
|
||||
return moveToPosition(mPos + offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean moveToFirst() {
|
||||
return moveToPosition(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean moveToLast() {
|
||||
return moveToPosition(getCount() - 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean moveToNext() {
|
||||
return moveToPosition(mPos + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean moveToPrevious() {
|
||||
return moveToPosition(mPos - 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isFirst() {
|
||||
return mPos == 0 && getCount() != 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isLast() {
|
||||
int cnt = getCount();
|
||||
return mPos == (cnt - 1) && cnt != 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isBeforeFirst() {
|
||||
if (getCount() == 0) {
|
||||
return true;
|
||||
@@ -248,6 +292,7 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
return mPos == -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isAfterLast() {
|
||||
if (getCount() == 0) {
|
||||
return true;
|
||||
@@ -255,6 +300,7 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
return mPos == getCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColumnIndex(String columnName) {
|
||||
// Hack according to bug 903852
|
||||
final int periodIndex = columnName.lastIndexOf('.');
|
||||
@@ -280,6 +326,7 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColumnIndexOrThrow(String columnName) {
|
||||
final int index = getColumnIndex(columnName);
|
||||
if (index < 0) {
|
||||
@@ -288,14 +335,17 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
return index;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getColumnName(int columnIndex) {
|
||||
return getColumnNames()[columnIndex];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerContentObserver(ContentObserver observer) {
|
||||
mContentObservable.registerObserver(observer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterContentObserver(ContentObserver observer) {
|
||||
// cursor will unregister all observers when it close
|
||||
if (!mClosed) {
|
||||
@@ -303,10 +353,12 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerDataSetObserver(DataSetObserver observer) {
|
||||
mDataSetObservable.registerObserver(observer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterDataSetObserver(DataSetObserver observer) {
|
||||
mDataSetObservable.unregisterObserver(observer);
|
||||
}
|
||||
@@ -333,6 +385,7 @@ public abstract class AbstractCursor implements CrossProcessCursor {
|
||||
* @param notifyUri The URI to watch for changes. This can be a
|
||||
* specific row URI, or a base URI for a whole class of content.
|
||||
*/
|
||||
@Override
|
||||
public void setNotificationUri(ContentResolver cr, Uri notifyUri) {
|
||||
setNotificationUri(cr, notifyUri, UserHandle.myUserId());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user