From 94b6d06899ddb3f97cd0171bce5de1cb60602d01 Mon Sep 17 00:00:00 2001 From: Tom O'Neill Date: Wed, 9 Dec 2009 15:41:05 -0800 Subject: [PATCH] Extract and check in NotepadCodeLab.zip for change tracking The 3-part Notepad tutorial is currently only available in the zip archive frameworks/base/docs/html/guide/tutorials/notepad/codelab/NotepadCodeLab.zip. This CL adds the uncompressed code to the repository so that there is a paper trail of future changes to the code. --- .../Notepadv1/AndroidManifest.xml | 11 + .../Notepadv1/res/drawable/icon.png | Bin 0 -> 6094 bytes .../Notepadv1/res/layout/notepad_list.xml | 6 + .../Notepadv1/res/values/strings.xml | 5 + .../com/android/demo/notepad1/Notepadv1.java | 44 ++++ .../android/demo/notepad1/NotesDbAdapter.java | 188 ++++++++++++++++++ .../Notepadv1Solution/AndroidManifest.xml | 12 ++ .../Notepadv1Solution/res/drawable/icon.png | Bin 0 -> 6094 bytes .../res/layout/notepad_list.xml | 14 ++ .../res/layout/notes_row.xml | 5 + .../Notepadv1Solution/res/values/strings.xml | 6 + .../com/android/demo/notepad1/Notepadv1.java | 78 ++++++++ .../android/demo/notepad1/NotesDbAdapter.java | 188 ++++++++++++++++++ .../Notepadv2/AndroidManifest.xml | 12 ++ .../Notepadv2/res/drawable/icon.png | Bin 0 -> 6094 bytes .../Notepadv2/res/layout/note_edit.xml | 33 +++ .../Notepadv2/res/layout/notes_list.xml | 13 ++ .../Notepadv2/res/layout/notes_row.xml | 4 + .../Notepadv2/res/values/strings.xml | 11 + .../com/android/demo/notepad2/Notepadv2.java | 120 +++++++++++ .../android/demo/notepad2/NotesDbAdapter.java | 188 ++++++++++++++++++ .../Notepadv2Solution/AndroidManifest.xml | 12 ++ .../Notepadv2Solution/res/drawable/icon.png | Bin 0 -> 6094 bytes .../res/layout/note_edit.xml | 33 +++ .../res/layout/notes_list.xml | 13 ++ .../res/layout/notes_row.xml | 4 + .../Notepadv2Solution/res/values/strings.xml | 11 + .../com/android/demo/notepad2/NoteEdit.java | 76 +++++++ .../com/android/demo/notepad2/Notepadv2.java | 147 ++++++++++++++ .../android/demo/notepad2/NotesDbAdapter.java | 188 ++++++++++++++++++ .../Notepadv3/AndroidManifest.xml | 12 ++ .../Notepadv3/res/drawable/icon.png | Bin 0 -> 6094 bytes .../Notepadv3/res/layout/note_edit.xml | 33 +++ .../Notepadv3/res/layout/notes_list.xml | 13 ++ .../Notepadv3/res/layout/notes_row.xml | 4 + .../Notepadv3/res/values/strings.xml | 11 + .../com/android/demo/notepad3/NoteEdit.java | 76 +++++++ .../com/android/demo/notepad3/Notepadv3.java | 148 ++++++++++++++ .../android/demo/notepad3/NotesDbAdapter.java | 188 ++++++++++++++++++ .../Notepadv3Solution/AndroidManifest.xml | 12 ++ .../Notepadv3Solution/res/drawable/icon.png | Bin 0 -> 6094 bytes .../res/layout/note_edit.xml | 33 +++ .../res/layout/notes_list.xml | 13 ++ .../res/layout/notes_row.xml | 4 + .../Notepadv3Solution/res/values/strings.xml | 11 + .../com/android/demo/notepad3/NoteEdit.java | 109 ++++++++++ .../com/android/demo/notepad3/Notepadv3.java | 124 ++++++++++++ .../android/demo/notepad3/NotesDbAdapter.java | 188 ++++++++++++++++++ 48 files changed, 2401 insertions(+) create mode 100755 tutorials/NotepadCodeLab/Notepadv1/AndroidManifest.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv1/res/drawable/icon.png create mode 100755 tutorials/NotepadCodeLab/Notepadv1/res/layout/notepad_list.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv1/res/values/strings.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv1/src/com/android/demo/notepad1/Notepadv1.java create mode 100755 tutorials/NotepadCodeLab/Notepadv1/src/com/android/demo/notepad1/NotesDbAdapter.java create mode 100755 tutorials/NotepadCodeLab/Notepadv1Solution/AndroidManifest.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv1Solution/res/drawable/icon.png create mode 100755 tutorials/NotepadCodeLab/Notepadv1Solution/res/layout/notepad_list.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv1Solution/res/layout/notes_row.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv1Solution/res/values/strings.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv1Solution/src/com/android/demo/notepad1/Notepadv1.java create mode 100755 tutorials/NotepadCodeLab/Notepadv1Solution/src/com/android/demo/notepad1/NotesDbAdapter.java create mode 100755 tutorials/NotepadCodeLab/Notepadv2/AndroidManifest.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2/res/drawable/icon.png create mode 100755 tutorials/NotepadCodeLab/Notepadv2/res/layout/note_edit.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2/res/layout/notes_list.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2/res/layout/notes_row.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2/res/values/strings.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2/src/com/android/demo/notepad2/Notepadv2.java create mode 100755 tutorials/NotepadCodeLab/Notepadv2/src/com/android/demo/notepad2/NotesDbAdapter.java create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/AndroidManifest.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/res/drawable/icon.png create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/res/layout/note_edit.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/res/layout/notes_list.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/res/layout/notes_row.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/res/values/strings.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/src/com/android/demo/notepad2/NoteEdit.java create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/src/com/android/demo/notepad2/Notepadv2.java create mode 100755 tutorials/NotepadCodeLab/Notepadv2Solution/src/com/android/demo/notepad2/NotesDbAdapter.java create mode 100755 tutorials/NotepadCodeLab/Notepadv3/AndroidManifest.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3/res/drawable/icon.png create mode 100755 tutorials/NotepadCodeLab/Notepadv3/res/layout/note_edit.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3/res/layout/notes_list.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3/res/layout/notes_row.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3/res/values/strings.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3/src/com/android/demo/notepad3/NoteEdit.java create mode 100755 tutorials/NotepadCodeLab/Notepadv3/src/com/android/demo/notepad3/Notepadv3.java create mode 100755 tutorials/NotepadCodeLab/Notepadv3/src/com/android/demo/notepad3/NotesDbAdapter.java create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/AndroidManifest.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/res/drawable/icon.png create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/res/layout/note_edit.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/res/layout/notes_list.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/res/layout/notes_row.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/res/values/strings.xml create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/src/com/android/demo/notepad3/NoteEdit.java create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/src/com/android/demo/notepad3/Notepadv3.java create mode 100755 tutorials/NotepadCodeLab/Notepadv3Solution/src/com/android/demo/notepad3/NotesDbAdapter.java diff --git a/tutorials/NotepadCodeLab/Notepadv1/AndroidManifest.xml b/tutorials/NotepadCodeLab/Notepadv1/AndroidManifest.xml new file mode 100755 index 000000000..33f30da3c --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/NotepadCodeLab/Notepadv1/res/drawable/icon.png b/tutorials/NotepadCodeLab/Notepadv1/res/drawable/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..64e3601c234d3818409fb5daad54b099b76e9a04 GIT binary patch literal 6094 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 U$@ynO6#xJL07*qoM6N<$f@Zv%aR2}S literal 0 HcmV?d00001 diff --git a/tutorials/NotepadCodeLab/Notepadv1/res/layout/notepad_list.xml b/tutorials/NotepadCodeLab/Notepadv1/res/layout/notepad_list.xml new file mode 100755 index 000000000..154888dd3 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1/res/layout/notepad_list.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/tutorials/NotepadCodeLab/Notepadv1/res/values/strings.xml b/tutorials/NotepadCodeLab/Notepadv1/res/values/strings.xml new file mode 100755 index 000000000..5698961a6 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1/res/values/strings.xml @@ -0,0 +1,5 @@ + + + Notepad v1 + No Notes Yet + diff --git a/tutorials/NotepadCodeLab/Notepadv1/src/com/android/demo/notepad1/Notepadv1.java b/tutorials/NotepadCodeLab/Notepadv1/src/com/android/demo/notepad1/Notepadv1.java new file mode 100755 index 000000000..43e7a7733 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1/src/com/android/demo/notepad1/Notepadv1.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2008 Google Inc. + * + * 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 com.android.demo.notepad1; + +import android.app.Activity; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +public class Notepadv1 extends Activity { + private int mNoteNumber = 1; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // TODO Auto-generated method stub + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // TODO Auto-generated method stub + return super.onOptionsItemSelected(item); + } +} diff --git a/tutorials/NotepadCodeLab/Notepadv1/src/com/android/demo/notepad1/NotesDbAdapter.java b/tutorials/NotepadCodeLab/Notepadv1/src/com/android/demo/notepad1/NotesDbAdapter.java new file mode 100755 index 000000000..6f85bbd20 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1/src/com/android/demo/notepad1/NotesDbAdapter.java @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2008 Google Inc. + * + * 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 com.android.demo.notepad1; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.SQLException; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +/** + * Simple notes database access helper class. Defines the basic CRUD operations + * for the notepad example, and gives the ability to list all notes as well as + * retrieve or modify a specific note. + * + * This has been improved from the first version of this tutorial through the + * addition of better error handling and also using returning a Cursor instead + * of using a collection of inner classes (which is less scalable and not + * recommended). + */ +public class NotesDbAdapter { + + public static final String KEY_TITLE = "title"; + public static final String KEY_BODY = "body"; + public static final String KEY_ROWID = "_id"; + + private static final String TAG = "NotesDbAdapter"; + private DatabaseHelper mDbHelper; + private SQLiteDatabase mDb; + + /** + * Database creation sql statement + */ + private static final String DATABASE_CREATE = + "create table notes (_id integer primary key autoincrement, " + + "title text not null, body text not null);"; + + private static final String DATABASE_NAME = "data"; + private static final String DATABASE_TABLE = "notes"; + private static final int DATABASE_VERSION = 2; + + private final Context mCtx; + + private static class DatabaseHelper extends SQLiteOpenHelper { + + DatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + + db.execSQL(DATABASE_CREATE); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + + newVersion + ", which will destroy all old data"); + db.execSQL("DROP TABLE IF EXISTS notes"); + onCreate(db); + } + } + + /** + * Constructor - takes the context to allow the database to be + * opened/created + * + * @param ctx the Context within which to work + */ + public NotesDbAdapter(Context ctx) { + this.mCtx = ctx; + } + + /** + * Open the notes database. If it cannot be opened, try to create a new + * instance of the database. If it cannot be created, throw an exception to + * signal the failure + * + * @return this (self reference, allowing this to be chained in an + * initialization call) + * @throws SQLException if the database could be neither opened or created + */ + public NotesDbAdapter open() throws SQLException { + mDbHelper = new DatabaseHelper(mCtx); + mDb = mDbHelper.getWritableDatabase(); + return this; + } + + public void close() { + mDbHelper.close(); + } + + + /** + * Create a new note using the title and body provided. If the note is + * successfully created return the new rowId for that note, otherwise return + * a -1 to indicate failure. + * + * @param title the title of the note + * @param body the body of the note + * @return rowId or -1 if failed + */ + public long createNote(String title, String body) { + ContentValues initialValues = new ContentValues(); + initialValues.put(KEY_TITLE, title); + initialValues.put(KEY_BODY, body); + + return mDb.insert(DATABASE_TABLE, null, initialValues); + } + + /** + * Delete the note with the given rowId + * + * @param rowId id of note to delete + * @return true if deleted, false otherwise + */ + public boolean deleteNote(long rowId) { + + return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; + } + + /** + * Return a Cursor over the list of all notes in the database + * + * @return Cursor over all notes + */ + public Cursor fetchAllNotes() { + + return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, + KEY_BODY}, null, null, null, null, null); + } + + /** + * Return a Cursor positioned at the note that matches the given rowId + * + * @param rowId id of note to retrieve + * @return Cursor positioned to matching note, if found + * @throws SQLException if note could not be found/retrieved + */ + public Cursor fetchNote(long rowId) throws SQLException { + + Cursor mCursor = + + mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, + KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null, + null, null, null, null); + if (mCursor != null) { + mCursor.moveToFirst(); + } + return mCursor; + + } + + /** + * Update the note using the details provided. The note to be updated is + * specified using the rowId, and it is altered to use the title and body + * values passed in + * + * @param rowId id of note to update + * @param title value to set note title to + * @param body value to set note body to + * @return true if the note was successfully updated, false otherwise + */ + public boolean updateNote(long rowId, String title, String body) { + ContentValues args = new ContentValues(); + args.put(KEY_TITLE, title); + args.put(KEY_BODY, body); + + return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; + } +} diff --git a/tutorials/NotepadCodeLab/Notepadv1Solution/AndroidManifest.xml b/tutorials/NotepadCodeLab/Notepadv1Solution/AndroidManifest.xml new file mode 100755 index 000000000..99023fe78 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1Solution/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/NotepadCodeLab/Notepadv1Solution/res/drawable/icon.png b/tutorials/NotepadCodeLab/Notepadv1Solution/res/drawable/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..64e3601c234d3818409fb5daad54b099b76e9a04 GIT binary patch literal 6094 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 U$@ynO6#xJL07*qoM6N<$f@Zv%aR2}S literal 0 HcmV?d00001 diff --git a/tutorials/NotepadCodeLab/Notepadv1Solution/res/layout/notepad_list.xml b/tutorials/NotepadCodeLab/Notepadv1Solution/res/layout/notepad_list.xml new file mode 100755 index 000000000..0c8dbabee --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1Solution/res/layout/notepad_list.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/tutorials/NotepadCodeLab/Notepadv1Solution/res/layout/notes_row.xml b/tutorials/NotepadCodeLab/Notepadv1Solution/res/layout/notes_row.xml new file mode 100755 index 000000000..6b1a65b05 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1Solution/res/layout/notes_row.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/tutorials/NotepadCodeLab/Notepadv1Solution/res/values/strings.xml b/tutorials/NotepadCodeLab/Notepadv1Solution/res/values/strings.xml new file mode 100755 index 000000000..265bc62e3 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1Solution/res/values/strings.xml @@ -0,0 +1,6 @@ + + + Notepad v1 + No Notes Yet + Add Item + diff --git a/tutorials/NotepadCodeLab/Notepadv1Solution/src/com/android/demo/notepad1/Notepadv1.java b/tutorials/NotepadCodeLab/Notepadv1Solution/src/com/android/demo/notepad1/Notepadv1.java new file mode 100755 index 000000000..a1819ed0f --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1Solution/src/com/android/demo/notepad1/Notepadv1.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2008 Google Inc. + * + * 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 com.android.demo.notepad1; + +import android.app.ListActivity; +import android.database.Cursor; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.SimpleCursorAdapter; + +public class Notepadv1 extends ListActivity { + public static final int INSERT_ID = Menu.FIRST; + + private int mNoteNumber = 1; + private NotesDbAdapter mDbHelper; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.notepad_list); + mDbHelper = new NotesDbAdapter(this); + mDbHelper.open(); + fillData(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + boolean result = super.onCreateOptionsMenu(menu); + menu.add(0, INSERT_ID, 0, R.string.menu_insert); + return result; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case INSERT_ID: + createNote(); + return true; + } + return super.onOptionsItemSelected(item); + } + + private void createNote() { + String noteName = "Note " + mNoteNumber++; + mDbHelper.createNote(noteName, ""); + fillData(); + } + + private void fillData() { + // Get all of the notes from the database and create the item list + Cursor c = mDbHelper.fetchAllNotes(); + startManagingCursor(c); + + String[] from = new String[] { NotesDbAdapter.KEY_TITLE }; + int[] to = new int[] { R.id.text1 }; + + // Now create an array adapter and set it to display using our row + SimpleCursorAdapter notes = + new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to); + setListAdapter(notes); + } +} diff --git a/tutorials/NotepadCodeLab/Notepadv1Solution/src/com/android/demo/notepad1/NotesDbAdapter.java b/tutorials/NotepadCodeLab/Notepadv1Solution/src/com/android/demo/notepad1/NotesDbAdapter.java new file mode 100755 index 000000000..6f85bbd20 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv1Solution/src/com/android/demo/notepad1/NotesDbAdapter.java @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2008 Google Inc. + * + * 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 com.android.demo.notepad1; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.SQLException; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +/** + * Simple notes database access helper class. Defines the basic CRUD operations + * for the notepad example, and gives the ability to list all notes as well as + * retrieve or modify a specific note. + * + * This has been improved from the first version of this tutorial through the + * addition of better error handling and also using returning a Cursor instead + * of using a collection of inner classes (which is less scalable and not + * recommended). + */ +public class NotesDbAdapter { + + public static final String KEY_TITLE = "title"; + public static final String KEY_BODY = "body"; + public static final String KEY_ROWID = "_id"; + + private static final String TAG = "NotesDbAdapter"; + private DatabaseHelper mDbHelper; + private SQLiteDatabase mDb; + + /** + * Database creation sql statement + */ + private static final String DATABASE_CREATE = + "create table notes (_id integer primary key autoincrement, " + + "title text not null, body text not null);"; + + private static final String DATABASE_NAME = "data"; + private static final String DATABASE_TABLE = "notes"; + private static final int DATABASE_VERSION = 2; + + private final Context mCtx; + + private static class DatabaseHelper extends SQLiteOpenHelper { + + DatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + + db.execSQL(DATABASE_CREATE); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + + newVersion + ", which will destroy all old data"); + db.execSQL("DROP TABLE IF EXISTS notes"); + onCreate(db); + } + } + + /** + * Constructor - takes the context to allow the database to be + * opened/created + * + * @param ctx the Context within which to work + */ + public NotesDbAdapter(Context ctx) { + this.mCtx = ctx; + } + + /** + * Open the notes database. If it cannot be opened, try to create a new + * instance of the database. If it cannot be created, throw an exception to + * signal the failure + * + * @return this (self reference, allowing this to be chained in an + * initialization call) + * @throws SQLException if the database could be neither opened or created + */ + public NotesDbAdapter open() throws SQLException { + mDbHelper = new DatabaseHelper(mCtx); + mDb = mDbHelper.getWritableDatabase(); + return this; + } + + public void close() { + mDbHelper.close(); + } + + + /** + * Create a new note using the title and body provided. If the note is + * successfully created return the new rowId for that note, otherwise return + * a -1 to indicate failure. + * + * @param title the title of the note + * @param body the body of the note + * @return rowId or -1 if failed + */ + public long createNote(String title, String body) { + ContentValues initialValues = new ContentValues(); + initialValues.put(KEY_TITLE, title); + initialValues.put(KEY_BODY, body); + + return mDb.insert(DATABASE_TABLE, null, initialValues); + } + + /** + * Delete the note with the given rowId + * + * @param rowId id of note to delete + * @return true if deleted, false otherwise + */ + public boolean deleteNote(long rowId) { + + return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; + } + + /** + * Return a Cursor over the list of all notes in the database + * + * @return Cursor over all notes + */ + public Cursor fetchAllNotes() { + + return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, + KEY_BODY}, null, null, null, null, null); + } + + /** + * Return a Cursor positioned at the note that matches the given rowId + * + * @param rowId id of note to retrieve + * @return Cursor positioned to matching note, if found + * @throws SQLException if note could not be found/retrieved + */ + public Cursor fetchNote(long rowId) throws SQLException { + + Cursor mCursor = + + mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, + KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null, + null, null, null, null); + if (mCursor != null) { + mCursor.moveToFirst(); + } + return mCursor; + + } + + /** + * Update the note using the details provided. The note to be updated is + * specified using the rowId, and it is altered to use the title and body + * values passed in + * + * @param rowId id of note to update + * @param title value to set note title to + * @param body value to set note body to + * @return true if the note was successfully updated, false otherwise + */ + public boolean updateNote(long rowId, String title, String body) { + ContentValues args = new ContentValues(); + args.put(KEY_TITLE, title); + args.put(KEY_BODY, body); + + return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; + } +} diff --git a/tutorials/NotepadCodeLab/Notepadv2/AndroidManifest.xml b/tutorials/NotepadCodeLab/Notepadv2/AndroidManifest.xml new file mode 100755 index 000000000..738fb2afc --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv2/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/NotepadCodeLab/Notepadv2/res/drawable/icon.png b/tutorials/NotepadCodeLab/Notepadv2/res/drawable/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..64e3601c234d3818409fb5daad54b099b76e9a04 GIT binary patch literal 6094 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 U$@ynO6#xJL07*qoM6N<$f@Zv%aR2}S literal 0 HcmV?d00001 diff --git a/tutorials/NotepadCodeLab/Notepadv2/res/layout/note_edit.xml b/tutorials/NotepadCodeLab/Notepadv2/res/layout/note_edit.xml new file mode 100755 index 000000000..b254552c3 --- /dev/null +++ b/tutorials/NotepadCodeLab/Notepadv2/res/layout/note_edit.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + +