Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add local versions of classes CancellationSignal and OperationCanceledExcecption so that this code will work with API level 15. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | api-level-15 |
Files: | files | file ages | folders |
SHA1: |
59f9c6ccd75272f6eae3799cb3ebe5d0 |
User & Date: | dan 2014-05-21 16:54:45.112 |
Context
2014-05-21
| ||
18:17 | Merge documentation updates with this branch. (check-in: 49c7a766e1 user: dan tags: api-level-15) | |
16:54 | Add local versions of classes CancellationSignal and OperationCanceledExcecption so that this code will work with API level 15. (check-in: 59f9c6ccd7 user: dan tags: api-level-15) | |
2014-01-07
| ||
02:22 | Add the "expand" query parameter to the tree-view of the files to be copied into a new project. (check-in: ed5126e673 user: drh tags: trunk) | |
Changes
Changes to AndroidManifest.xml.
︙ | ︙ | |||
8 9 10 11 12 13 14 15 | android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> | > > > > | 8 9 10 11 12 13 14 15 16 17 18 19 | android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="15" android:maxSdkVersion="15" /> </manifest> |
Changes to local.properties.
1 2 3 4 5 6 7 8 9 | # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # location of the SDK. This is only used by Ant # For customization when using a Version Control System, please read the # header note. | | | 1 2 3 4 5 6 7 8 9 10 | # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # location of the SDK. This is only used by Ant # For customization when using a Version Control System, please read the # header note. sdk.dir=/home/dan/adt-bundle-linux-x86-20131030/sdk |
Changes to project.properties.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system edit # "ant.properties", and override values to adapt the script to your # project structure. # # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system edit # "ant.properties", and override values to adapt the script to your # project structure. # # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. target=android-15 |
Changes to src/org/sqlite/database/sqlite/ExtraUtils.java.
︙ | ︙ | |||
32 33 34 35 36 37 38 | import org.sqlite.database.sqlite.SQLiteDatabase; import org.sqlite.database.sqlite.SQLiteDatabaseCorruptException; import org.sqlite.database.sqlite.SQLiteDiskIOException; import org.sqlite.database.sqlite.SQLiteException; import org.sqlite.database.sqlite.SQLiteFullException; import org.sqlite.database.sqlite.SQLiteProgram; import org.sqlite.database.sqlite.SQLiteStatement; | | | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import org.sqlite.database.sqlite.SQLiteDatabase; import org.sqlite.database.sqlite.SQLiteDatabaseCorruptException; import org.sqlite.database.sqlite.SQLiteDiskIOException; import org.sqlite.database.sqlite.SQLiteException; import org.sqlite.database.sqlite.SQLiteFullException; import org.sqlite.database.sqlite.SQLiteProgram; import org.sqlite.database.sqlite.SQLiteStatement; import org.sqlite.os.OperationCanceledException; import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.text.TextUtils; import android.util.Log; import java.io.FileNotFoundException; import java.io.PrintStream; |
︙ | ︙ |
Changes to src/org/sqlite/database/sqlite/SQLiteConnection.java.
︙ | ︙ | |||
24 25 26 27 28 29 30 | import dalvik.system.CloseGuard; import android.database.Cursor; import android.database.CursorWindow; import android.database.DatabaseUtils; import org.sqlite.database.ExtraUtils; import org.sqlite.database.sqlite.SQLiteDebug.DbStats; | | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import dalvik.system.CloseGuard; import android.database.Cursor; import android.database.CursorWindow; import android.database.DatabaseUtils; import org.sqlite.database.ExtraUtils; import org.sqlite.database.sqlite.SQLiteDebug.DbStats; import org.sqlite.os.CancellationSignal; import org.sqlite.os.OperationCanceledException; import android.os.ParcelFileDescriptor; import android.util.Log; import android.util.LruCache; import android.util.Printer; import java.text.SimpleDateFormat; import java.util.ArrayList; |
︙ | ︙ |
Changes to src/org/sqlite/database/sqlite/SQLiteConnectionPool.java.
︙ | ︙ | |||
19 20 21 22 23 24 25 | */ package org.sqlite.database.sqlite; import dalvik.system.CloseGuard; import org.sqlite.database.sqlite.SQLiteDebug.DbStats; | | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | */ package org.sqlite.database.sqlite; import dalvik.system.CloseGuard; import org.sqlite.database.sqlite.SQLiteDebug.DbStats; import org.sqlite.os.CancellationSignal; import org.sqlite.os.OperationCanceledException; import android.os.SystemClock; import android.util.Log; /* import android.util.PrefixPrinter; */ import android.util.Printer; import java.io.Closeable; import java.util.ArrayList; |
︙ | ︙ |
Changes to src/org/sqlite/database/sqlite/SQLiteDatabase.java.
︙ | ︙ | |||
24 25 26 27 28 29 30 | import android.database.Cursor; import org.sqlite.database.DatabaseErrorHandler; import android.database.DatabaseUtils; import org.sqlite.database.ExtraUtils; import org.sqlite.database.DefaultDatabaseErrorHandler; import org.sqlite.database.SQLException; import org.sqlite.database.sqlite.SQLiteDebug.DbStats; | | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import android.database.Cursor; import org.sqlite.database.DatabaseErrorHandler; import android.database.DatabaseUtils; import org.sqlite.database.ExtraUtils; import org.sqlite.database.DefaultDatabaseErrorHandler; import org.sqlite.database.SQLException; import org.sqlite.database.sqlite.SQLiteDebug.DbStats; import org.sqlite.os.CancellationSignal; import android.os.Looper; import org.sqlite.os.OperationCanceledException; import android.text.TextUtils; import android.util.EventLog; import android.util.Log; import android.util.Pair; import android.util.Printer; import dalvik.system.CloseGuard; |
︙ | ︙ |
Changes to src/org/sqlite/database/sqlite/SQLiteDirectCursorDriver.java.
︙ | ︙ | |||
18 19 20 21 22 23 24 | ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.Cursor; import org.sqlite.database.sqlite.SQLiteDatabase.CursorFactory; | | | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.Cursor; import org.sqlite.database.sqlite.SQLiteDatabase.CursorFactory; import org.sqlite.os.CancellationSignal; /** * A cursor driver that uses the given query directly. * * @hide */ public final class SQLiteDirectCursorDriver implements SQLiteCursorDriver { |
︙ | ︙ |
Changes to src/org/sqlite/database/sqlite/SQLiteProgram.java.
︙ | ︙ | |||
17 18 19 20 21 22 23 | ** Modified to support SQLite extensions by the SQLite developers: ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.DatabaseUtils; | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ** Modified to support SQLite extensions by the SQLite developers: ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.DatabaseUtils; import org.sqlite.os.CancellationSignal; import java.util.Arrays; /** * A base class for compiled SQLite programs. * <p> * This class is not thread-safe. |
︙ | ︙ |
Changes to src/org/sqlite/database/sqlite/SQLiteQuery.java.
︙ | ︙ | |||
17 18 19 20 21 22 23 | ** Modified to support SQLite extensions by the SQLite developers: ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.CursorWindow; | | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ** Modified to support SQLite extensions by the SQLite developers: ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.CursorWindow; import org.sqlite.os.CancellationSignal; import org.sqlite.os.OperationCanceledException; import android.util.Log; /** * Represents a query that reads the resulting rows into a {@link SQLiteQuery}. * This class is used by {@link SQLiteCursor} and isn't useful itself. * <p> * This class is not thread-safe. |
︙ | ︙ |
Changes to src/org/sqlite/database/sqlite/SQLiteQueryBuilder.java.
︙ | ︙ | |||
18 19 20 21 22 23 24 | ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.Cursor; import android.database.DatabaseUtils; | | | | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.Cursor; import android.database.DatabaseUtils; import org.sqlite.os.CancellationSignal; import org.sqlite.os.OperationCanceledException; import android.provider.BaseColumns; import android.text.TextUtils; import android.util.Log; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; |
︙ | ︙ |
Changes to src/org/sqlite/database/sqlite/SQLiteSession.java.
︙ | ︙ | |||
18 19 20 21 22 23 24 | ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.CursorWindow; import android.database.DatabaseUtils; | | | | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ** sqlite-dev@sqlite.org. */ package org.sqlite.database.sqlite; import android.database.CursorWindow; import android.database.DatabaseUtils; import org.sqlite.os.CancellationSignal; import org.sqlite.os.OperationCanceledException; import android.os.ParcelFileDescriptor; /** * Provides a single client the ability to use a database. * * <h2>About database sessions</h2> * <p> |
︙ | ︙ |
Added src/org/sqlite/os/CancellationSignal.java.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | /* * Copyright (C) 2012 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. */ /* ** Modified to support SQLite extensions by the SQLite developers: ** sqlite-dev@sqlite.org. */ package org.sqlite.os; import org.sqlite.os.ICancellationSignal; import android.os.RemoteException; /** * Provides the ability to cancel an operation in progress. */ public final class CancellationSignal { private boolean mIsCanceled; private OnCancelListener mOnCancelListener; private ICancellationSignal mRemote; private boolean mCancelInProgress; /** * Creates a cancellation signal, initially not canceled. */ public CancellationSignal() { } /** * Returns true if the operation has been canceled. * * @return True if the operation has been canceled. */ public boolean isCanceled() { synchronized (this) { return mIsCanceled; } } /** * Throws {@link OperationCanceledException} if the operation has been canceled. * * @throws OperationCanceledException if the operation has been canceled. */ public void throwIfCanceled() { if (isCanceled()) { throw new OperationCanceledException(); } } /** * Cancels the operation and signals the cancellation listener. * If the operation has not yet started, then it will be canceled as soon as it does. */ public void cancel() { final OnCancelListener listener; final ICancellationSignal remote; synchronized (this) { if (mIsCanceled) { return; } mIsCanceled = true; mCancelInProgress = true; listener = mOnCancelListener; remote = mRemote; } try { if (listener != null) { listener.onCancel(); } if (remote != null) { try { remote.cancel(); } catch (RemoteException ex) { } } } finally { synchronized (this) { mCancelInProgress = false; notifyAll(); } } } /** * Sets the cancellation listener to be called when canceled. * * This method is intended to be used by the recipient of a cancellation signal * such as a database or a content provider to handle cancellation requests * while performing a long-running operation. This method is not intended to be * used by applications themselves. * * If {@link CancellationSignal#cancel} has already been called, then the provided * listener is invoked immediately. * * This method is guaranteed that the listener will not be called after it * has been removed. * * @param listener The cancellation listener, or null to remove the current listener. */ public void setOnCancelListener(OnCancelListener listener) { synchronized (this) { waitForCancelFinishedLocked(); if (mOnCancelListener == listener) { return; } mOnCancelListener = listener; if (!mIsCanceled || listener == null) { return; } } listener.onCancel(); } /** * Sets the remote transport. * * If {@link CancellationSignal#cancel} has already been called, then the provided * remote transport is canceled immediately. * * This method is guaranteed that the remote transport will not be called after it * has been removed. * * @param remote The remote transport, or null to remove. * * @hide */ public void setRemote(ICancellationSignal remote) { synchronized (this) { waitForCancelFinishedLocked(); if (mRemote == remote) { return; } mRemote = remote; if (!mIsCanceled || remote == null) { return; } } try { remote.cancel(); } catch (RemoteException ex) { } } private void waitForCancelFinishedLocked() { while (mCancelInProgress) { try { wait(); } catch (InterruptedException ex) { } } } /** * Creates a transport that can be returned back to the caller of * a Binder function and subsequently used to dispatch a cancellation signal. * * @return The new cancellation signal transport. * * @hide */ public static ICancellationSignal createTransport() { return new Transport(); } /** * Given a locally created transport, returns its associated cancellation signal. * * @param transport The locally created transport, or null if none. * @return The associated cancellation signal, or null if none. * * @hide */ public static CancellationSignal fromTransport(ICancellationSignal transport) { if (transport instanceof Transport) { return ((Transport)transport).mCancellationSignal; } return null; } /** * Listens for cancellation. */ public interface OnCancelListener { /** * Called when {@link CancellationSignal#cancel} is invoked. */ void onCancel(); } private static final class Transport extends ICancellationSignal.Stub { final CancellationSignal mCancellationSignal = new CancellationSignal(); @Override public void cancel() throws RemoteException { mCancellationSignal.cancel(); } } } |
Added src/org/sqlite/os/ICancellationSignal.aidl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /* * Copyright (C) 2012 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. */ /* ** Modified to support SQLite extensions by the SQLite developers: ** sqlite-dev@sqlite.org. */ package org.sqlite.os; /** * @hide */ interface ICancellationSignal { oneway void cancel(); } |
Added src/org/sqlite/os/OperationCanceledException.java.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | /* * Copyright (C) 2012 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. */ /* ** Modified to support SQLite extensions by the SQLite developers: ** sqlite-dev@sqlite.org. */ package org.sqlite.os; /** * An exception type that is thrown when an operation in progress is canceled. * * @see CancellationSignal */ public class OperationCanceledException extends RuntimeException { public OperationCanceledException() { this(null); } public OperationCanceledException(String message) { super(message != null ? message : "The operation has been canceled."); } } |