28
28
29
29
import android .database .CharArrayBuffer ;
30
30
import android .database .ContentObserver ;
31
+ import android .database .CrossProcessCursor ;
31
32
import android .os .Handler ;
32
33
import android .os .Message ;
33
34
import android .os .Process ;
42
43
* SQLiteCursor is not internally synchronized so code using a SQLiteCursor from multiple
43
44
* threads should perform its own synchronization when using the SQLiteCursor.
44
45
*/
45
- public class SQLiteCursor extends AbstractWindowedCursor {
46
+ public class SQLiteCursor extends AbstractWindowedCursor implements CrossProcessCursor {
46
47
static final String TAG = "Cursor" ;
47
48
static final int NO_COUNT = -1 ;
48
49
@@ -608,14 +609,14 @@ protected void finalize() {
608
609
609
610
@ Override
610
611
public void copyStringToBuffer (int columnIndex , CharArrayBuffer buffer ) {
611
- // TODO Auto-generated method stub
612
+
612
613
613
614
}
614
615
615
616
@ Override
616
617
public void registerContentObserver (ContentObserver observer ) {
617
618
// TODO Auto-generated method stub
618
-
619
+
619
620
}
620
621
621
622
@ Override
@@ -638,4 +639,20 @@ public void unregisterDataSetObserver(
638
639
639
640
}
640
641
642
+ @ Override
643
+ public void fillWindow (int startPos , android .database .CursorWindow window ) {
644
+
645
+
646
+ window .setStartPosition (startPos );
647
+ mCount = mQuery .fillWindow ((info<
703A
/span>.guardianproject .database .CursorWindow )window , mInitialRead , 0 );
648
+ // return -1 means not finished
649
+ if (mCount == NO_COUNT ){
650
+ mCount = startPos + mInitialRead ;
651
+ Thread t = new Thread (new QueryThread (mCursorState ), "query thread" );
652
+ t .start ();
653
+ }
654
+
655
+ }
656
+
657
+
641
658
}
0 commit comments