/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.database;
/**
* A cross process cursor is an extension of a {@link Cursor} that also supports
* usage from remote processes.
* <p>
* The contents of a cross process cursor are marshalled to the remote process by
* filling {@link CursorWindow} objects using {@link #fillWindow}. As an optimization,
* the cursor can provide a pre-filled window to use via {@link #getWindow} thereby
* obviating the need to copy the data to yet another cursor window.
*/
public interface CrossProcessCursor extends Cursor {
/**
* Returns a pre-filled window that contains the data within this cursor.
* <p>
* In particular, the window contains the row indicated by {@link Cursor#getPosition}.
* The window's contents are automatically scrolled whenever the current
* row moved outside the range covered by the window.
* </p>
*
* @return The pre-filled window, or null if none.
*/
CursorWindow getWindow();
/**
* Copies cursor data into the window.
* <p>
* Clears the window and fills it with data beginning at the requested
* row position until all of the data in the cursor is exhausted
* or the window runs out of space.
* </p><p>
* The filled window uses the same row indices as the original cursor.
* For example, if you fill a window starting from row 5 from the cursor,
* you can query the contents of row 5 from the window just by asking it
* for row 5 because there is a direct correspondence between the row indices
* used by the cursor and the window.
* </p><p>
* The current position of the cursor, as returned by {@link #getPosition},
* is not changed by this method.
* </p>
*
* @param position The zero-based index of the first row to copy into the window.
* @param window The window to fill.
*/
void fillWindow(int position, CursorWindow window);
/**
* This function is called every time the cursor is successfully scrolled
* to a new position, giving the subclass a chance to update any state it
* may have. If it returns false the move function will also do so and the
* cursor will scroll to the beforeFirst position.
* <p>
* This function should be called by methods such as {@link #moveToPosition(int)},
* so it will typically not be called from outside of the cursor class itself.
* </p>
*
* @param oldPosition The position that we're moving from.
* @param newPosition The position that we're moving to.
* @return True if the move is successful, false otherwise.
*/
boolean onMove(int oldPosition, int newPosition);
}
|