diff options
| -rw-r--r-- | api/current.xml | 75 | ||||
| -rw-r--r-- | core/java/android/app/ContextImpl.java | 10 | ||||
| -rw-r--r-- | core/java/android/content/Context.java | 28 | ||||
| -rw-r--r-- | core/java/android/content/ContextWrapper.java | 7 | ||||
| -rw-r--r-- | core/java/android/database/sqlite/SQLiteDatabase.java | 21 | ||||
| -rw-r--r-- | core/java/android/database/sqlite/SQLiteOpenHelper.java | 33 | ||||
| -rw-r--r-- | test-runner/src/android/test/mock/MockContext.java | 7 | ||||
| -rw-r--r-- | tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java | 8 |
8 files changed, 183 insertions, 6 deletions
diff --git a/api/current.xml b/api/current.xml index 1852782..d79fab6 100644 --- a/api/current.xml +++ b/api/current.xml @@ -39461,6 +39461,25 @@ <parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory"> </parameter> </method> +<method name="openOrCreateDatabase" + return="android.database.sqlite.SQLiteDatabase" + abstract="true" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="name" type="java.lang.String"> +</parameter> +<parameter name="mode" type="int"> +</parameter> +<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory"> +</parameter> +<parameter name="errorHandler" type="android.database.DatabaseErrorHandler"> +</parameter> +</method> <method name="peekWallpaper" return="android.graphics.drawable.Drawable" abstract="true" @@ -40888,6 +40907,25 @@ <parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory"> </parameter> </method> +<method name="openOrCreateDatabase" + return="android.database.sqlite.SQLiteDatabase" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="name" type="java.lang.String"> +</parameter> +<parameter name="mode" type="int"> +</parameter> +<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory"> +</parameter> +<parameter name="errorHandler" type="android.database.DatabaseErrorHandler"> +</parameter> +</method> <method name="peekWallpaper" return="android.graphics.drawable.Drawable" abstract="false" @@ -61029,6 +61067,24 @@ <parameter name="version" type="int"> </parameter> </constructor> +<constructor name="SQLiteOpenHelper" + type="android.database.sqlite.SQLiteOpenHelper" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="context" type="android.content.Context"> +</parameter> +<parameter name="name" type="java.lang.String"> +</parameter> +<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory"> +</parameter> +<parameter name="version" type="int"> +</parameter> +<parameter name="errorHandler" type="android.database.DatabaseErrorHandler"> +</parameter> +</constructor> <method name="close" return="void" abstract="false" @@ -155111,6 +155167,25 @@ <parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory"> </parameter> </method> +<method name="openOrCreateDatabase" + return="android.database.sqlite.SQLiteDatabase" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="file" type="java.lang.String"> +</parameter> +<parameter name="mode" type="int"> +</parameter> +<parameter name="factory" type="android.database.sqlite.SQLiteDatabase.CursorFactory"> +</parameter> +<parameter name="errorHandler" type="android.database.DatabaseErrorHandler"> +</parameter> +</method> <method name="peekWallpaper" return="android.graphics.drawable.Drawable" abstract="false" diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 5217f5e..1be05b2 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -57,6 +57,7 @@ import android.content.pm.PackageParser.Package; import android.content.res.AssetManager; import android.content.res.Resources; import android.content.res.XmlResourceParser; +import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.graphics.Bitmap; @@ -543,6 +544,15 @@ class ContextImpl extends Context { } @Override + public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory, + DatabaseErrorHandler errorHandler) { + File f = validateFilePath(name, true); + SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(f.getPath(), factory, errorHandler); + setFilePermissionsFromMode(f.getPath(), mode, 0); + return db; + } + + @Override public boolean deleteDatabase(String name) { try { File f = validateFilePath(name, false); diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 0afd6d2..0615267 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -21,6 +21,8 @@ import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.Resources; import android.content.res.TypedArray; +import android.database.DatabaseErrorHandler; +import android.database.DefaultDatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.graphics.Bitmap; @@ -588,6 +590,32 @@ public abstract class Context { int mode, CursorFactory factory); /** + * Open a new private SQLiteDatabase associated with this Context's + * application package. Creates the database file if it doesn't exist. + * + * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be + * used to handle corruption when sqlite reports database corruption.</p> + * + * @param name The name (unique in the application package) of the database. + * @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the + * default operation, {@link #MODE_WORLD_READABLE} + * and {@link #MODE_WORLD_WRITEABLE} to control permissions. + * @param factory An optional factory class that is called to instantiate a + * cursor when query is called. + * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database + * corruption. if null, {@link DefaultDatabaseErrorHandler} is assumed. + * @return The contents of a newly created database with the given name. + * @throws android.database.sqlite.SQLiteException if the database file could not be opened. + * + * @see #MODE_PRIVATE + * @see #MODE_WORLD_READABLE + * @see #MODE_WORLD_WRITEABLE + * @see #deleteDatabase + */ + public abstract SQLiteDatabase openOrCreateDatabase(String name, + int mode, CursorFactory factory, DatabaseErrorHandler errorHandler); + + /** * Delete an existing private SQLiteDatabase associated with this Context's * application package. * diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index a447108..3f5d215 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -20,6 +20,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.Resources; +import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.graphics.Bitmap; @@ -204,6 +205,12 @@ public class ContextWrapper extends Context { } @Override + public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory, + DatabaseErrorHandler errorHandler) { + return mBase.openOrCreateDatabase(name, mode, factory, errorHandler); + } + + @Override public boolean deleteDatabase(String name) { return mBase.deleteDatabase(name); } diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index a8583aa..f095daa 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -837,10 +837,23 @@ public class SQLiteDatabase extends SQLiteClosable { } /** - * same as {@link #openDatabase(String, CursorFactory, int)} except for an additional param - * errorHandler. - * @param errorHandler the {@link DatabaseErrorHandler} obj to be used when database - * corruption is detected on the database. + * Open the database according to the flags {@link #OPEN_READWRITE} + * {@link #OPEN_READONLY} {@link #CREATE_IF_NECESSARY} and/or {@link #NO_LOCALIZED_COLLATORS}. + * + * <p>Sets the locale of the database to the the system's current locale. + * Call {@link #setLocale} if you would like something else.</p> + * + * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be + * used to handle corruption when sqlite reports database corruption.</p> + * + * @param path to database file to open and/or create + * @param factory an optional factory class that is called to instantiate a + * cursor when query is called, or null for default + * @param flags to control database access mode + * @param errorHandler the {@link DatabaseErrorHandler} obj to be used to handle corruption + * when sqlite reports database corruption + * @return the newly opened database + * @throws SQLiteException if the database cannot be opened */ public static SQLiteDatabase openDatabase(String path, CursorFactory factory, int flags, DatabaseErrorHandler errorHandler) { diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java index d4907d9..851f5ea 100644 --- a/core/java/android/database/sqlite/SQLiteOpenHelper.java +++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java @@ -17,6 +17,8 @@ package android.database.sqlite; import android.content.Context; +import android.database.DatabaseErrorHandler; +import android.database.DefaultDatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.util.Log; @@ -39,6 +41,7 @@ public abstract class SQLiteOpenHelper { private SQLiteDatabase mDatabase = null; private boolean mIsInitializing = false; + private final DatabaseErrorHandler mErrorHandler; /** * Create a helper object to create, open, and/or manage a database. @@ -52,12 +55,37 @@ public abstract class SQLiteOpenHelper { * {@link #onUpgrade} will be used to upgrade the database */ public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { + this(context, name, factory, version, new DefaultDatabaseErrorHandler()); + } + + /** + * Create a helper object to create, open, and/or manage a database. + * The database is not actually created or opened until one of + * {@link #getWritableDatabase} or {@link #getReadableDatabase} is called. + * + * <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be + * used to handle corruption when sqlite reports database corruption.</p> + * + * @param context to use to open or create the database + * @param name of the database file, or null for an in-memory database + * @param factory to use for creating cursor objects, or null for the default + * @param version number of the database (starting at 1); if the database is older, + * {@link #onUpgrade} will be used to upgrade the database + * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database + * corruption. + */ + public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version, + DatabaseErrorHandler errorHandler) { if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version); + if (errorHandler == null) { + throw new IllegalArgumentException("DatabaseErrorHandler param value can't be null."); + } mContext = context; mName = name; mFactory = factory; mNewVersion = version; + mErrorHandler = errorHandler; } /** @@ -95,7 +123,7 @@ public abstract class SQLiteOpenHelper { if (mName == null) { db = SQLiteDatabase.create(null); } else { - db = mContext.openOrCreateDatabase(mName, 0, mFactory); + db = mContext.openOrCreateDatabase(mName, 0, mFactory, mErrorHandler); } int version = db.getVersion(); @@ -169,7 +197,8 @@ public abstract class SQLiteOpenHelper { try { mIsInitializing = true; String path = mContext.getDatabasePath(mName).getPath(); - db = SQLiteDatabase.openDatabase(path, mFactory, SQLiteDatabase.OPEN_READONLY); + db = SQLiteDatabase.openDatabase(path, mFactory, SQLiteDatabase.OPEN_READONLY, + mErrorHandler); if (db.getVersion() != mNewVersion) { throw new SQLiteException("Can't upgrade read-only database from version " + db.getVersion() + " to " + mNewVersion + ": " + path); diff --git a/test-runner/src/android/test/mock/MockContext.java b/test-runner/src/android/test/mock/MockContext.java index ffd757c..c31c9cc 100644 --- a/test-runner/src/android/test/mock/MockContext.java +++ b/test-runner/src/android/test/mock/MockContext.java @@ -29,6 +29,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.Resources; +import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; @@ -184,6 +185,12 @@ public class MockContext extends Context { } @Override + public SQLiteDatabase openOrCreateDatabase(String file, int mode, + SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) { + throw new UnsupportedOperationException(); + } + + @Override public File getDatabasePath(String name) { throw new UnsupportedOperationException(); } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java index 744bfbe..58b1b6c 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeContext.java @@ -37,6 +37,7 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.Resources.Theme; +import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.graphics.Bitmap; @@ -1059,6 +1060,13 @@ public final class BridgeContext extends Context { } @Override + public SQLiteDatabase openOrCreateDatabase(String arg0, int arg1, + CursorFactory arg2, DatabaseErrorHandler arg3) { + // TODO Auto-generated method stub + return null; + } + + @Override public Drawable peekWallpaper() { // TODO Auto-generated method stub return null; |
