ParseApplication/ExternalLibs/Parse-SDK-Android/Parse/src/main/java/com/parse/ParseSQLiteCursor.java

267 lines
5.7 KiB
Java

/*
* Copyright (c) 2015-present, Parse, LLC.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.parse;
import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.database.CharArrayBuffer;
import android.database.ContentObserver;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
import bolts.Task;
/**
* Wrapper class to invoke {@link Cursor#close()} on a specific thread on Android versions below
* android-14 as they require {@link Cursor#close()} to be called on the same thread the cursor
* was created in
*
* https://github.com/android/platform_frameworks_base/commit/6f37f83a4802a0d411395f3abc5f24a2cfec025d
*/
/** package */ class ParseSQLiteCursor implements Cursor {
public static Cursor create(Cursor cursor, Executor executor) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
return cursor;
}
return new ParseSQLiteCursor(cursor, executor);
}
private Cursor cursor;
private Executor executor;
private ParseSQLiteCursor(Cursor cursor, Executor executor) {
this.cursor = cursor;
this.executor = executor;
}
@Override
public int getCount() {
return cursor.getCount();
}
@Override
public int getPosition() {
return cursor.getPosition();
}
@Override
public boolean move(int offset) {
return cursor.move(offset);
}
@Override
public boolean moveToPosition(int position) {
return cursor.moveToPosition(position);
}
@Override
public boolean moveToFirst() {
return cursor.moveToFirst();
}
@Override
public boolean moveToLast() {
return cursor.moveToLast();
}
@Override
public boolean moveToNext() {
return cursor.moveToNext();
}
@Override
public boolean moveToPrevious() {
return cursor.moveToPrevious();
}
@Override
public boolean isFirst() {
return cursor.isFirst();
}
@Override
public boolean isLast() {
return cursor.isLast();
}
@Override
public boolean isBeforeFirst() {
return cursor.isBeforeFirst();
}
@Override
public boolean isAfterLast() {
return cursor.isAfterLast();
}
@Override
public int getColumnIndex(String columnName) {
return cursor.getColumnIndex(columnName);
}
@Override
public int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException {
return cursor.getColumnIndexOrThrow(columnName);
}
@Override
public String getColumnName(int columnIndex) {
return cursor.getColumnName(columnIndex);
}
@Override
public String[] getColumnNames() {
return cursor.getColumnNames();
}
@Override
public int getColumnCount() {
return cursor.getColumnCount();
}
@Override
public byte[] getBlob(int columnIndex) {
return cursor.getBlob(columnIndex);
}
@Override
public String getString(int columnIndex) {
return cursor.getString(columnIndex);
}
@Override
public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) {
cursor.copyStringToBuffer(columnIndex, buffer);
}
@Override
public short getShort(int columnIndex) {
return cursor.getShort(columnIndex);
}
@Override
public int getInt(int columnIndex) {
return cursor.getInt(columnIndex);
}
@Override
public long getLong(int columnIndex) {
return cursor.getLong(columnIndex);
}
@Override
public float getFloat(int columnIndex) {
return cursor.getFloat(columnIndex);
}
@Override
public double getDouble(int columnIndex) {
return cursor.getDouble(columnIndex);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public int getType(int columnIndex) {
return cursor.getType(columnIndex);
}
@Override
public boolean isNull(int columnIndex) {
return cursor.isNull(columnIndex);
}
@Override
@Deprecated
public void deactivate() {
cursor.deactivate();
}
@Override
@Deprecated
public boolean requery() {
return cursor.requery();
}
@Override
public void close() {
// Basically close _eventually_.
Task.call(new Callable<Void>() {
@Override
public Void call() throws Exception {
cursor.close();
return null;
}
}, executor);
}
@Override
public boolean isClosed() {
return cursor.isClosed();
}
@Override
public void registerContentObserver(ContentObserver observer) {
cursor.registerContentObserver(observer);
}
@Override
public void unregisterContentObserver(ContentObserver observer) {
cursor.unregisterContentObserver(observer);
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
cursor.registerDataSetObserver(observer);
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
cursor.unregisterDataSetObserver(observer);
}
@Override
public void setNotificationUri(ContentResolver cr, Uri uri) {
cursor.setNotificationUri(cr, uri);
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public Uri getNotificationUri() {
return cursor.getNotificationUri();
}
@Override
public boolean getWantsAllOnMoveCalls() {
return cursor.getWantsAllOnMoveCalls();
}
@Override
public Bundle getExtras() {
return cursor.getExtras();
}
@Override
public Bundle respond(Bundle extras) {
return cursor.respond(extras);
}
@TargetApi(Build.VERSION_CODES.M)
@Override
public void setExtras(Bundle bundle) {
cursor.setExtras(bundle);
}
}