|
|
|
|
@ -110,106 +110,73 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
|
|
|
|
|
/**
|
|
|
|
|
* Increase folder's note count when insert new note to the folder
|
|
|
|
|
*/
|
|
|
|
|
private static final String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER increase_folder_count_on_insert " +
|
|
|
|
|
" AFTER INSERT ON " + TABLE.NOTE +
|
|
|
|
|
" BEGIN " +
|
|
|
|
|
" UPDATE " + TABLE.NOTE +
|
|
|
|
|
" SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + " + 1" +
|
|
|
|
|
" WHERE " + NoteColumns.ID + "=new." + NoteColumns.PARENT_ID + ";" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Decrease folder's note count when delete note from the folder
|
|
|
|
|
*/
|
|
|
|
|
private static final String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER decrease_folder_count_on_delete " +
|
|
|
|
|
" AFTER DELETE ON " + TABLE.NOTE +
|
|
|
|
|
" BEGIN " +
|
|
|
|
|
" UPDATE " + TABLE.NOTE +
|
|
|
|
|
" SET " + NoteColumns.NOTES_COUNT + "=" + NoteColumns.NOTES_COUNT + "-1" +
|
|
|
|
|
" WHERE " + NoteColumns.ID + "=old." + NoteColumns.PARENT_ID +
|
|
|
|
|
" AND " + NoteColumns.NOTES_COUNT + ">0;" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update note's content when insert data with type {@link DataConstants#NOTE}
|
|
|
|
|
*/
|
|
|
|
|
private static final String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER update_note_content_on_insert " +
|
|
|
|
|
" AFTER INSERT ON " + TABLE.DATA +
|
|
|
|
|
" WHEN new." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
|
|
|
|
|
" BEGIN" +
|
|
|
|
|
" UPDATE " + TABLE.NOTE +
|
|
|
|
|
" SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT +
|
|
|
|
|
" WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update note's content when data with {@link DataConstants#NOTE} type has changed
|
|
|
|
|
*/
|
|
|
|
|
private static final String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER update_note_content_on_update " +
|
|
|
|
|
" AFTER UPDATE ON " + TABLE.DATA +
|
|
|
|
|
" WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
|
|
|
|
|
" BEGIN" +
|
|
|
|
|
" UPDATE " + TABLE.NOTE +
|
|
|
|
|
" SET " + NoteColumns.SNIPPET + "=new." + DataColumns.CONTENT +
|
|
|
|
|
" WHERE " + NoteColumns.ID + "=new." + DataColumns.NOTE_ID + ";" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update note's content when data with {@link DataConstants#NOTE} type has deleted
|
|
|
|
|
*/
|
|
|
|
|
private static final String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER update_note_content_on_delete " +
|
|
|
|
|
" AFTER delete ON " + TABLE.DATA +
|
|
|
|
|
" WHEN old." + DataColumns.MIME_TYPE + "='" + DataConstants.NOTE + "'" +
|
|
|
|
|
" BEGIN" +
|
|
|
|
|
" UPDATE " + TABLE.NOTE +
|
|
|
|
|
" SET " + NoteColumns.SNIPPET + "=''" +
|
|
|
|
|
" WHERE " + NoteColumns.ID + "=old." + DataColumns.NOTE_ID + ";" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete datas belong to note which has been deleted
|
|
|
|
|
*/
|
|
|
|
|
private static final String NOTE_DELETE_DATA_ON_DELETE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER delete_data_on_delete " +
|
|
|
|
|
" AFTER DELETE ON " + TABLE.NOTE +
|
|
|
|
|
" BEGIN" +
|
|
|
|
|
" DELETE FROM " + TABLE.DATA +
|
|
|
|
|
" WHERE " + DataColumns.NOTE_ID + "=old." + NoteColumns.ID + ";" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete notes belong to folder which has been deleted
|
|
|
|
|
*/
|
|
|
|
|
private static final String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER folder_delete_notes_on_delete " +
|
|
|
|
|
" AFTER DELETE ON " + TABLE.NOTE +
|
|
|
|
|
" BEGIN" +
|
|
|
|
|
" DELETE FROM " + TABLE.NOTE +
|
|
|
|
|
" WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Move notes belong to folder which has been moved to trash folder
|
|
|
|
|
*/
|
|
|
|
|
private static final String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER =
|
|
|
|
|
"CREATE TRIGGER folder_move_notes_on_trash " +
|
|
|
|
|
" AFTER UPDATE ON " + TABLE.NOTE +
|
|
|
|
|
" WHEN new." + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER +
|
|
|
|
|
" BEGIN" +
|
|
|
|
|
" UPDATE " + TABLE.NOTE +
|
|
|
|
|
" SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER +
|
|
|
|
|
" WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" +
|
|
|
|
|
" END";
|
|
|
|
|
|
|
|
|
|
public NotesDatabaseHelper(Context context) {
|
|
|
|
|
super(context, DB_NAME, null, DB_VERSION);
|
|
|
|
|
// 解析通话记录笔记
|
|
|
|
|
// 从传入的 Intent 中获取电话号码
|
|
|
|
|
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
|
|
|
|
|
// 从传入的 Intent 中获取通话日期,若不存在则返回默认值 0
|
|
|
|
|
long callDate = intent.getLongExtra(Notes.INTENT_EXTRA_CALL_DATE, 0);
|
|
|
|
|
// 如果通话日期不为 0 且电话号码不为 null
|
|
|
|
|
if (callDate!= 0 && phoneNumber!= null) {
|
|
|
|
|
// 如果电话号码为空字符串
|
|
|
|
|
if (TextUtils.isEmpty(phoneNumber)) {
|
|
|
|
|
// 打印警告日志,提示通话记录号码为空
|
|
|
|
|
Log.w(TAG, "The call record number is null");
|
|
|
|
|
}
|
|
|
|
|
// 初始化笔记 ID 为 0
|
|
|
|
|
long noteId = 0;
|
|
|
|
|
// 通过电话号码和通话日期从内容解析器中获取笔记 ID
|
|
|
|
|
// 如果获取到的笔记 ID 大于 0
|
|
|
|
|
if ((noteId = DataUtils.getNoteIdByPhoneNumberAndCallDate(getContentResolver(),
|
|
|
|
|
phoneNumber, callDate)) > 0) {
|
|
|
|
|
// 根据笔记 ID 加载工作笔记
|
|
|
|
|
mWorkingNote = WorkingNote.load(this, noteId);
|
|
|
|
|
// 如果加载的工作笔记为 null
|
|
|
|
|
if (mWorkingNote == null) {
|
|
|
|
|
// 打印错误日志,提示加载通话笔记失败
|
|
|
|
|
Log.e(TAG, "load call note failed with note id" + noteId);
|
|
|
|
|
// 结束当前活动
|
|
|
|
|
finish();
|
|
|
|
|
// 返回 false 表示操作失败
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 创建一个空笔记
|
|
|
|
|
mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId,
|
|
|
|
|
widgetType, bgResId);
|
|
|
|
|
// 将空笔记转换为通话笔记
|
|
|
|
|
mWorkingNote.convertToCallNote(phoneNumber, callDate);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 创建一个空笔记
|
|
|
|
|
mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType,
|
|
|
|
|
bgResId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置窗口的软键盘模式,调整布局大小并使其可见
|
|
|
|
|
getWindow().setSoftInputMode(
|
|
|
|
|
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
|
|
|
|
|
| WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
|
|
|
|
} else {
|
|
|
|
|
// 打印错误日志,提示 Intent 未指定支持的操作
|
|
|
|
|
Log.e(TAG, "Intent not specified action, should not support");
|
|
|
|
|
// 结束当前活动
|
|
|
|
|
finish();
|
|
|
|
|
// 返回 false 表示操作失败
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// 为工作笔记设置状态改变监听器
|
|
|
|
|
mWorkingNote.setOnSettingStatusChangedListener(this);
|
|
|
|
|
// 返回 true 表示操作成功
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* onResume 方法在活动恢复时调用,初始化笔记屏幕。
|
|
|
|
|
*/
|
|
|
|
|
// 重写 onResume 方法
|
|
|
|
|
@Override
|
|
|
|
|
protected void onResume() {
|
|
|
|
|
// 调用父类
|
|
|
|
|
public void createNoteTable(SQLiteDatabase db) {
|
|
|
|
|
db.execSQL(CREATE_NOTE_TABLE_SQL);
|
|
|
|
|
reCreateNoteTableTriggers(db);
|
|
|
|
|
|