Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8faab36f authored by Jeff Brown's avatar Jeff Brown
Browse files

Clean up AbstractCursor API.

Deprecated three protected fields that should not have been
exposed in the API.

Bug: 6353797
Change-Id: Ic6710f880a452dd1508abf0613907a1d2b1fb557
parent 4670513e
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -9743,12 +9743,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 {
@@ -30582,7 +30579,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);
@@ -30615,8 +30612,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);
+10 −0
Original line number Diff line number Diff line
@@ -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 {
+6 −8
Original line number Diff line number Diff line
@@ -10033,12 +10033,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 {
@@ -33129,7 +33126,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);
@@ -33162,8 +33159,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);
+10 −0
Original line number Diff line number Diff line
@@ -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 {
+53 −0
Original line number Diff line number Diff line
@@ -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());
    }