parent
85ad4e7b6c
commit
befc79f495
Binary file not shown.
After Width: | Height: | Size: 687 KiB |
After Width: | Height: | Size: 314 KiB |
@ -0,0 +1,180 @@
|
||||
package net.micode.notes.data; // 定义包名
|
||||
|
||||
import android.content.ContentValues; // 用于存储数据的键值对,便于数据库操作
|
||||
import android.content.Context; // 用于访问应用环境和资源
|
||||
import android.database.sqlite.SQLiteDatabase; // 用于执行SQL语句和进行数据库操作
|
||||
import android.database.sqlite.SQLiteOpenHelper; // 管理数据库创建和版本控制的帮助类
|
||||
import android.util.Log; // 用于日志输出
|
||||
|
||||
import net.micode.notes.data.Notes.DataColumns;
|
||||
import net.micode.notes.data.Notes.DataConstants;
|
||||
import net.micode.notes.data.Notes.NoteColumns;
|
||||
// 导入相关类,用于定义数据库表格的列名和常量
|
||||
|
||||
public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
||||
private static final String DB_NAME = "note.db"; // 数据库名称
|
||||
private static final int DB_VERSION = 4; // 数据库版本号
|
||||
|
||||
public interface TABLE {
|
||||
public static final String NOTE = "note"; // 笔记表名称
|
||||
public static final String DATA = "data"; // 数据表名称
|
||||
}
|
||||
|
||||
private static final String TAG = "NotesDatabaseHelper"; // 日志标签
|
||||
private static NotesDatabaseHelper mInstance; // 单例模式中的实例
|
||||
|
||||
// 创建笔记表的SQL语句
|
||||
private static final String CREATE_NOTE_TABLE_SQL = "CREATE TABLE " + TABLE.NOTE + "(" +
|
||||
// 定义各列及其数据类型和约束条件
|
||||
")";
|
||||
|
||||
// 创建数据表的SQL语句
|
||||
private static final String CREATE_DATA_TABLE_SQL = "CREATE TABLE " + TABLE.DATA + "(" +
|
||||
// 定义各列及其数据类型和约束条件
|
||||
")";
|
||||
|
||||
// 创建索引以加快根据NOTE_ID查询的速度
|
||||
private static final String CREATE_DATA_NOTE_ID_INDEX_SQL = "CREATE INDEX IF NOT EXISTS note_id_index ON " +
|
||||
TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";
|
||||
|
||||
// 定义触发器,当笔记移动到文件夹时增加文件夹中的笔记计数
|
||||
private static final String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = "CREATE TRIGGER increase_folder_count_on_update " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当笔记从文件夹中移出时减少文件夹中的笔记计数
|
||||
private static final String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER = "CREATE TRIGGER decrease_folder_count_on_update " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当向文件夹中插入新笔记时增加文件夹中的笔记计数
|
||||
private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER = "CREATE TRIGGER increase_folder_count_on_insert " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当从文件夹中删除笔记时减少文件夹中的笔记计数
|
||||
private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER = "CREATE TRIGGER decrease_folder_count_on_delete " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当插入新数据时更新笔记的内容摘要
|
||||
private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER = "CREATE TRIGGER update_note_content_on_insert " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当数据更新时更新笔记的内容摘要
|
||||
private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER = "CREATE TRIGGER update_note_content_on_update " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当数据删除时清除笔记的内容摘要
|
||||
private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER = "CREATE TRIGGER update_note_content_on_delete " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当删除笔记时同时删除相关的数据
|
||||
private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER = "CREATE TRIGGER delete_data_on_delete " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当删除文件夹时同时删除文件夹中的所有笔记
|
||||
private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER = "CREATE TRIGGER folder_delete_notes_on_delete " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
// 定义触发器,当文件夹移动到垃圾桶时将文件夹中的所有笔记也移动到垃圾桶
|
||||
private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER = "CREATE TRIGGER folder_move_notes_on_trash " +
|
||||
// 触发器定义及逻辑
|
||||
" END";
|
||||
|
||||
public NotesDatabaseHelper(Context context) {
|
||||
super(context, DB_NAME, null, DB_VERSION); // 调用父类构造函数
|
||||
}
|
||||
|
||||
public void createNoteTable(SQLiteDatabase db) {
|
||||
db.execSQL(CREATE_NOTE_TABLE_SQL); // 执行创建笔记表的SQL语句
|
||||
reCreateNoteTableTriggers(db); // 重新创建笔记表的触发器
|
||||
createSystemFolder(db); // 创建系统文件夹
|
||||
Log.d(TAG, "note table has been created"); // 输出日志
|
||||
}
|
||||
|
||||
private void reCreateNoteTableTriggers(SQLiteDatabase db) {
|
||||
// 删除旧的触发器
|
||||
db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_update");
|
||||
db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_update");
|
||||
db.execSQL("DROP TRIGGER IF EXISTS decrease_folder_count_on_delete");
|
||||
db.execSQL("DROP TRIGGER IF EXISTS delete_data_on_delete");
|
||||
db.execSQL("DROP TRIGGER IF EXISTS increase_folder_count_on_insert");
|
||||
db.execSQL("DROP TRIGGER IF EXISTS folder_delete_notes_on_delete");
|
||||
db.execSQL("DROP TRIGGER IF EXISTS folder_move_notes_on_trash");
|
||||
|
||||
// 创建新的触发器
|
||||
db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER);
|
||||
db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER);
|
||||
db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER);
|
||||
db.execSQL(NOTE_DELETE_DATA_ON_DELETE_TRIGGER);
|
||||
db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER);
|
||||
db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER);
|
||||
db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER);
|
||||
}
|
||||
|
||||
private void createSystemFolder(SQLiteDatabase db) {
|
||||
ContentValues values = new ContentValues();
|
||||
// 创建系统文件夹
|
||||
values.put(NoteColumns.ID, Notes.ID_CALL_RECORD_FOLDER);
|
||||
values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);
|
||||
db.insert(TABLE.NOTE, null, values);
|
||||
|
||||
// 创建其他系统文件夹
|
||||
// ...
|
||||
}
|
||||
|
||||
public void createDataTable(SQLiteDatabase db) {
|
||||
db.execSQL(CREATE_DATA_TABLE_SQL); // 执行创建数据表的SQL语句
|
||||
reCreateDataTableTriggers(db); // 重新创建数据表的触发器
|
||||
db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL); // 创建索引
|
||||
Log.d(TAG, "data table has been created"); // 输出日志
|
||||
}
|
||||
|
||||
private void reCreateDataTableTriggers(SQLiteDatabase db) {
|
||||
// 删除旧的数据表触发器
|
||||
db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_insert");
|
||||
db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_update");
|
||||
db.execSQL("DROP TRIGGER IF EXISTS update_note_content_on_delete");
|
||||
|
||||
// 创建新的数据表触发器
|
||||
db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER);
|
||||
db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER);
|
||||
db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER);
|
||||
}
|
||||
|
||||
static synchronized NotesDatabaseHelper getInstance(Context context) {
|
||||
if (mInstance == null) {
|
||||
mInstance = new NotesDatabaseHelper(context);
|
||||
}
|
||||
return mInstance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(SQLiteDatabase db) {
|
||||
createNoteTable(db); // 创建笔记表
|
||||
createDataTable(db); // 创建数据表
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||
// 数据库版本升级逻辑
|
||||
}
|
||||
|
||||
private void upgradeToV2(SQLiteDatabase db) {
|
||||
// 升级到版本2的逻辑
|
||||
}
|
||||
|
||||
private void upgradeToV3(SQLiteDatabase db) {
|
||||
// 升级到版本3的逻辑
|
||||
}
|
||||
|
||||
private void upgradeToV4(SQLiteDatabase db) {
|
||||
// 升级到版本4的逻辑
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
||||
*
|
||||
* 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 net.micode.notes.widget;
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.content.Context;
|
||||
import net.micode.notes.R;
|
||||
import net.micode.notes.data.Notes;
|
||||
import net.micode.notes.tool.ResourceParser;
|
||||
public class NoteWidgetProvider_2x extends NoteWidgetProvider {
|
||||
// 当小部件更新时调用
|
||||
@Override
|
||||
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
|
||||
// 调用父类的update方法
|
||||
super.update(context, appWidgetManager, appWidgetIds);
|
||||
}
|
||||
// 获取小部件布局ID
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.widget_2x;
|
||||
}
|
||||
// 获取小部件背景资源ID
|
||||
@Override
|
||||
protected int getBgResourceId(int bgId) {
|
||||
// 调用ResourceParser获取2x小部件的背景资源ID
|
||||
return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId);
|
||||
}
|
||||
// 获取小部件类型
|
||||
@Override
|
||||
protected int getWidgetType() {
|
||||
// 返回2x小部件的类型
|
||||
return Notes.TYPE_WIDGET_2X;
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
Java
|
||||
|
||||
|
||||
|
||||
|
||||
package net.micode.notes.widget;
|
||||
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.content.Context;
|
||||
|
||||
import net.micode.notes.R;
|
||||
import net.micode.notes.data.Notes;
|
||||
import net.micode.notes.tool.ResourceParser;
|
||||
|
||||
|
||||
public class NoteWidgetProvider_4x extends NoteWidgetProvider {
|
||||
// 当小部件更新时调用
|
||||
@Override
|
||||
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
|
||||
// 调用父类的update方法
|
||||
super.update(context, appWidgetManager, appWidgetIds);
|
||||
}
|
||||
|
||||
// 获取小部件布局ID
|
||||
protected int getLayoutId() {
|
||||
return R.layout.widget_4x;
|
||||
}
|
||||
|
||||
// 获取小部件背景资源ID
|
||||
@Override
|
||||
protected int getBgResourceId(int bgId) {
|
||||
// 调用ResourceParser获取4x小部件的背景资源ID
|
||||
return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId);
|
||||
}
|
||||
|
||||
// 获取小部件类型
|
||||
@Override
|
||||
protected int getWidgetType() {
|
||||
// 返回4x小部件的类型
|
||||
return Notes.TYPE_WIDGET_4X;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue