ZhengLiJie_branch
zlj 3 months ago
parent 1490924c8c
commit 120dc034e5

@ -15,19 +15,34 @@
*/
package net.micode.notes.gtask.exception;
/**
* ActionFailureException
*
*/
public class ActionFailureException extends RuntimeException {
private static final long serialVersionUID = 4425249765923293627L;
public ActionFailureException() {
super();
}
public ActionFailureException(String paramString) {
super(paramString);
}
public ActionFailureException(String paramString, Throwable paramThrowable) {
super(paramString, paramThrowable);
}
/** 用于序列化版本控制的唯一标识符 */
private static final long serialVersionUID = 4425249765923293627L;
/**
* ActionFailureException
*/
public ActionFailureException() {
super();
}
/**
* ActionFailureException
*
* @param paramString
*/
public ActionFailureException(String paramString) {
super(paramString);
}
/**
* ActionFailureException
*
* @param paramString
* @param paramThrowable
*/
public ActionFailureException(String paramString, Throwable paramThrowable) {
super(paramString, paramThrowable);
}
}

@ -15,19 +15,36 @@
*/
package net.micode.notes.gtask.exception;
/**
* NetworkFailureException
*
*/
public class NetworkFailureException extends Exception {
private static final long serialVersionUID = 2107610287180234136L;
public NetworkFailureException() {
super();
}
/** 用于序列化版本控制的唯一标识符 */
private static final long serialVersionUID = 2107610287180234136L;
/**
* NetworkFailureException
*/
public NetworkFailureException() {
super();
}
public NetworkFailureException(String paramString) {
super(paramString);
}
/**
* NetworkFailureException
*
* @param paramString
*/
public NetworkFailureException(String paramString) {
super(paramString);
}
public NetworkFailureException(String paramString, Throwable paramThrowable) {
super(paramString, paramThrowable);
}
/**
* NetworkFailureException
*
* @param paramString
* @param paramThrowable
*/
public NetworkFailureException(String paramString, Throwable paramThrowable) {
super(paramString, paramThrowable);
}
}

@ -32,15 +32,26 @@ import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.data.Notes.TextNote;
import java.util.ArrayList;
/**
* Note
* ContentProvider
*/
public class Note {
/** 存储笔记主信息的差异值(如标题、修改时间等) */
private ContentValues mNoteDiffValues;
/** 封装笔记数据内容(如文本、通话记录)的对象 */
private NoteData mNoteData;
public class Note {
private ContentValues mNoteDiffValues;
private NoteData mNoteData;
private static final String TAG = "Note";
/**
* Create a new note id for adding a new note to databases
*/
/** 日志标签 */
private static final String TAG = "Note";
/**
* ID
*
* @param context
* @param folderId ID
* @return ID
*/
public static synchronized long getNewNoteId(Context context, long folderId) {
// Create a new note in the database
ContentValues values = new ContentValues();
@ -64,18 +75,29 @@ public class Note {
}
return noteId;
}
public Note() {
mNoteDiffValues = new ContentValues();
mNoteData = new NoteData();
}
/**
* Note
*/
public Note() {
mNoteDiffValues = new ContentValues();
mNoteData = new NoteData();
}/**
*
*
* @param key
* @param value
*/
public void setNoteValue(String key, String value) {
mNoteDiffValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
}
/**
*
*
* @param key
* @param value
*/
public void setTextData(String key, String value) {
mNoteData.setTextData(key, value);
}
@ -88,6 +110,12 @@ public class Note {
return mNoteData.mTextDataId;
}
/**
*
*
* @param key
* @param value
*/
public void setCallDataId(long id) {
mNoteData.setCallDataId(id);
}
@ -121,7 +149,11 @@ public class Note {
// Do not return, fall through
}
mNoteDiffValues.clear();
/**
*
*
* @return
*/
if (mNoteData.isLocalModified()
&& (mNoteData.pushIntoContentResolver(context, noteId) == null)) {
return false;
@ -177,7 +209,13 @@ public class Note {
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
}
/**
* ContentResolver
*
* @param context
* @param noteId ID
* @return Uri null
*/
Uri pushIntoContentResolver(Context context, long noteId) {
/**
* Check for safety

@ -31,77 +31,91 @@ import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.data.Notes.TextNote;
import net.micode.notes.tool.ResourceParser.NoteBgResources;
/**
* WorkingNote
* ContentProvider
*/
public class WorkingNote {
// Note for the working note
private Note mNote;
// Note Id
private long mNoteId;
// Note content
private String mContent;
// Note mode
private int mMode;
private long mAlertDate;
private long mModifiedDate;
private int mBgColorId;
private int mWidgetId;
private int mWidgetType;
private long mFolderId;
private Context mContext;
private static final String TAG = "WorkingNote";
private boolean mIsDeleted;
private NoteSettingChangedListener mNoteSettingStatusListener;
public static final String[] DATA_PROJECTION = new String[] {
DataColumns.ID,
DataColumns.CONTENT,
DataColumns.MIME_TYPE,
DataColumns.DATA1,
DataColumns.DATA2,
DataColumns.DATA3,
DataColumns.DATA4,
};
public static final String[] NOTE_PROJECTION = new String[] {
NoteColumns.PARENT_ID,
NoteColumns.ALERTED_DATE,
NoteColumns.BG_COLOR_ID,
NoteColumns.WIDGET_ID,
NoteColumns.WIDGET_TYPE,
NoteColumns.MODIFIED_DATE
};
private static final int DATA_ID_COLUMN = 0;
private static final int DATA_CONTENT_COLUMN = 1;
private static final int DATA_MIME_TYPE_COLUMN = 2;
private static final int DATA_MODE_COLUMN = 3;
private static final int NOTE_PARENT_ID_COLUMN = 0;
private static final int NOTE_ALERTED_DATE_COLUMN = 1;
private static final int NOTE_BG_COLOR_ID_COLUMN = 2;
private static final int NOTE_WIDGET_ID_COLUMN = 3;
private static final int NOTE_WIDGET_TYPE_COLUMN = 4;
private static final int NOTE_MODIFIED_DATE_COLUMN = 5;
// New note construct
/** 笔记对象,用于管理主表和内容数据 */
private Note mNote;
/** 当前笔记的 ID */
private long mNoteId;
/** 笔记内容文本 */
private String mContent;
/** 编辑模式(如普通笔记、清单等) */
private int mMode;
/** 警告时间 */
private long mAlertDate;
/** 最后修改时间 */
private long mModifiedDate;
/** 背景颜色 ID */
private int mBgColorId;
/** 小部件 ID */
private int mWidgetId;
/** 小部件类型 */
private int mWidgetType;
/** 所属文件夹 ID */
private long mFolderId;
/** 上下文对象 */
private Context mContext;
/** 日志标签 */
private static final String TAG = "WorkingNote";
/** 是否标记为删除 */
private boolean mIsDeleted;
/** 笔记设置更改监听器 */
private NoteSettingChangedListener mNoteSettingStatusListener;
/** 查询数据表时使用的列投影数组 */
public static final String[] DATA_PROJECTION = new String[] {
DataColumns.ID,
DataColumns.CONTENT,
DataColumns.MIME_TYPE,
DataColumns.DATA1,
DataColumns.DATA2,
DataColumns.DATA3,
DataColumns.DATA4,
};
/** 查询笔记表时使用的列投影数组 */
public static final String[] NOTE_PROJECTION = new String[] {
NoteColumns.PARENT_ID,
NoteColumns.ALERTED_DATE,
NoteColumns.BG_COLOR_ID,
NoteColumns.WIDGET_ID,
NoteColumns.WIDGET_TYPE,
NoteColumns.MODIFIED_DATE
};
/** 列索引定义 */
private static final int DATA_ID_COLUMN = 0;
private static final int DATA_CONTENT_COLUMN = 1;
private static final int DATA_MIME_TYPE_COLUMN = 2;
private static final int DATA_MODE_COLUMN = 3;
private static final int NOTE_PARENT_ID_COLUMN = 0;
private static final int NOTE_ALERTED_DATE_COLUMN = 1;
private static final int NOTE_BG_COLOR_ID_COLUMN = 2;
private static final int NOTE_WIDGET_ID_COLUMN = 3;
private static final int NOTE_WIDGET_TYPE_COLUMN = 4;
private static final int NOTE_MODIFIED_DATE_COLUMN = 5;
/**
*
*
* @param context
* @param folderId ID
*/
private WorkingNote(Context context, long folderId) {
mContext = context;
mAlertDate = 0;
@ -113,8 +127,13 @@ public class WorkingNote {
mMode = 0;
mWidgetType = Notes.TYPE_WIDGET_INVALIDE;
}
// Existing note construct
/**
*
*
* @param context
* @param noteId ID
* @param folderId ID
*/
private WorkingNote(Context context, long noteId, long folderId) {
mContext = context;
mNoteId = noteId;
@ -123,7 +142,9 @@ public class WorkingNote {
mNote = new Note();
loadNote();
}
/**
*
*/
private void loadNote() {
Cursor cursor = mContext.getContentResolver().query(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null,
@ -145,7 +166,9 @@ public class WorkingNote {
}
loadNoteData();
}
/**
*
*/
private void loadNoteData() {
Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION,
DataColumns.NOTE_ID + "=?", new String[] {
@ -173,7 +196,16 @@ public class WorkingNote {
throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId);
}
}
/**
*
*
* @param context
* @param folderId ID
* @param widgetId ID
* @param widgetType
* @param defaultBgColorId ID
* @return WorkingNote
*/
public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId,
int widgetType, int defaultBgColorId) {
WorkingNote note = new WorkingNote(context, folderId);
@ -182,11 +214,21 @@ public class WorkingNote {
note.setWidgetType(widgetType);
return note;
}
/**
* ID
*
* @param context
* @param id ID
* @return WorkingNote
*/
public static WorkingNote load(Context context, long id) {
return new WorkingNote(context, id, 0);
}
/**
*
*
* @return
*/
public synchronized boolean saveNote() {
if (isWorthSaving()) {
if (!existInDatabase()) {
@ -224,11 +266,20 @@ public class WorkingNote {
return true;
}
}
/**
*
*
* @param l
*/
public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) {
mNoteSettingStatusListener = l;
}
/**
*
*
* @param date
* @param set
*/
public void setAlertDate(long date, boolean set) {
if (date != mAlertDate) {
mAlertDate = date;
@ -238,7 +289,11 @@ public class WorkingNote {
mNoteSettingStatusListener.onClockAlertChanged(date, set);
}
}
/**
*
*
* @param mark
*/
public void markDeleted(boolean mark) {
mIsDeleted = mark;
if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID
@ -246,7 +301,11 @@ public class WorkingNote {
mNoteSettingStatusListener.onWidgetChanged();
}
}
/**
* ID
*
* @param id ID
*/
public void setBgColorId(int id) {
if (id != mBgColorId) {
mBgColorId = id;
@ -256,7 +315,11 @@ public class WorkingNote {
mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id));
}
}
/**
*
*
* @param mode
*/
public void setCheckListMode(int mode) {
if (mMode != mode) {
if (mNoteSettingStatusListener != null) {
@ -266,28 +329,45 @@ public class WorkingNote {
mNote.setTextData(TextNote.MODE, String.valueOf(mMode));
}
}
/**
*
*
* @param type
*/
public void setWidgetType(int type) {
if (type != mWidgetType) {
mWidgetType = type;
mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType));
}
}
/**
* ID
*
* @param id ID
*/
public void setWidgetId(int id) {
if (id != mWidgetId) {
mWidgetId = id;
mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId));
}
}
/**
*
*
* @param text
*/
public void setWorkingText(String text) {
if (!TextUtils.equals(mContent, text)) {
mContent = text;
mNote.setTextData(DataColumns.CONTENT, mContent);
}
}
/**
*
*
* @param phoneNumber
* @param callDate
*/
public void convertToCallNote(String phoneNumber, long callDate) {
mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate));
mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber);
@ -297,23 +377,43 @@ public class WorkingNote {
public boolean hasClockAlert() {
return (mAlertDate > 0 ? true : false);
}
/**
*
*
* @return
*/
public String getContent() {
return mContent;
}
/**
*
*
* @return
*/
public long getAlertDate() {
return mAlertDate;
}
/**
*
*
* @return
*/
public long getModifiedDate() {
return mModifiedDate;
}
/**
* ID
*
* @return ID
*/
public int getBgColorResId() {
return NoteBgResources.getNoteBgResource(mBgColorId);
}
/**
* ID
*
* @return ID
*/
public int getBgColorId() {
return mBgColorId;
}
@ -341,28 +441,32 @@ public class WorkingNote {
public int getWidgetType() {
return mWidgetType;
}
public interface NoteSettingChangedListener {
/**
* Called when the background color of current note has just changed
*/
void onBackgroundColorChanged();
/**
* Called when user set clock
*/
/**
* UI
*/
public interface NoteSettingChangedListener {
/**
*
*/
void onBackgroundColorChanged();
/**
*
*
* @param date
* @param set
*/
void onClockAlertChanged(long date, boolean set);
/**
* Call when user create note from widget
*/
void onWidgetChanged();
/**
* Call when switch between check list mode and normal mode
* @param oldMode is previous mode before change
* @param newMode is new mode
*/
/**
*
*/
void onWidgetChanged();
/**
*
*
* @param oldMode
* @param newMode
*/
void onCheckListModeChanged(int oldMode, int newMode);
}
}

@ -35,9 +35,14 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
/**
* BackupUtils 便
* 访
*/
public class BackupUtils {
private static final String TAG = "BackupUtils";
/** 日志标签 */
private static final String TAG = "BackupUtils";
// Singleton stuff
private static BackupUtils sInstance;
@ -52,7 +57,8 @@ public class BackupUtils {
* Following states are signs to represents backup or restore
* status
*/
// Currently, the sdcard is not mounted
/** 导出/恢复状态码 */
public static final int STATE_SD_CARD_UNMOUONTED = 0;
// The backup file not exist
public static final int STATE_BACKUP_FILE_NOT_EXIST = 1;
@ -84,7 +90,10 @@ public class BackupUtils {
public String getExportedTextFileDir() {
return mTextExport.mFileDirectory;
}
/**
* TextExport BackupUtils
*
*/
private static class TextExport {
private static final String[] NOTE_PROJECTION = {
NoteColumns.ID,
@ -124,21 +133,33 @@ public class BackupUtils {
private Context mContext;
private String mFileName;
private String mFileDirectory;
/**
* TextExport
*
* @param context
*/
public TextExport(Context context) {
TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note);
mContext = context;
mFileName = "";
mFileDirectory = "";
}
/**
*
*
* @param id ID
* @return
*/
private String getFormat(int id) {
return TEXT_FORMAT[id];
}
/**
* Export the folder identified by folder id to text
*/
/**
*
*
* @param folderId ID
* @param ps
*/
private void exportFolderToText(String folderId, PrintStream ps) {
// Query notes belong to this folder
Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI,
@ -162,9 +183,12 @@ public class BackupUtils {
}
}
/**
* Export note identified by id to a print stream
*/
/**
*
*
* @param noteId ID
* @param ps
*/
private void exportNoteToText(String noteId, PrintStream ps) {
Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,
DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] {
@ -215,9 +239,11 @@ public class BackupUtils {
}
}
/**
* Note will be exported as text which is user readable
*/
/**
*
*
* @return STATE_XXX
*/
public int exportToText() {
if (!externalStorageAvailable()) {
Log.d(TAG, "Media was not mounted");
@ -282,9 +308,11 @@ public class BackupUtils {
return STATE_SUCCESS;
}
/**
* Get a print stream pointed to the file {@generateExportedTextFile}
*/
/**
* PrintStream
*
* @return PrintStream null
*/
private PrintStream getExportToTextPrintStream() {
File file = generateFileMountedOnSDcard(mContext, R.string.file_path,
R.string.file_name_txt_format);
@ -308,10 +336,14 @@ public class BackupUtils {
return ps;
}
}
/**
* Generate the text file to store imported data
*/
/**
* SD
*
* @param context
* @param filePathResId ID
* @param fileNameFormatResId ID
* @return File null
*/
private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) {
StringBuilder sb = new StringBuilder();
sb.append(Environment.getExternalStorageDirectory());

@ -34,10 +34,20 @@ import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute;
import java.util.ArrayList;
import java.util.HashSet;
/**
* DataUtils
*
*/
public class DataUtils {
public static final String TAG = "DataUtils";
public static boolean batchDeleteNotes(ContentResolver resolver, HashSet<Long> ids) {
/** 日志标签 */
public static final String TAG = "DataUtils";
/**
* ID
*
* @param resolver ContentResolver
* @param ids ID
* @return
*/ public static boolean batchDeleteNotes(ContentResolver resolver, HashSet<Long> ids) {
if (ids == null) {
Log.d(TAG, "the ids is null");
return true;
@ -71,7 +81,14 @@ public class DataUtils {
}
return false;
}
/**
*
*
* @param resolver ContentResolver
* @param id ID
* @param srcFolderId ID
* @param desFolderId ID
*/
public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) {
ContentValues values = new ContentValues();
values.put(NoteColumns.PARENT_ID, desFolderId);
@ -79,7 +96,14 @@ public class DataUtils {
values.put(NoteColumns.LOCAL_MODIFIED, 1);
resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null);
}
/**
*
*
* @param resolver ContentResolver
* @param ids ID
* @param folderId ID
* @return
*/
public static boolean batchMoveToFolder(ContentResolver resolver, HashSet<Long> ids,
long folderId) {
if (ids == null) {
@ -135,7 +159,14 @@ public class DataUtils {
}
return count;
}
/**
*
*
* @param resolver ContentResolver
* @param noteId ID
* @param type
* @return
*/
public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) {
Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
null,
@ -152,7 +183,13 @@ public class DataUtils {
}
return exist;
}
/**
* ID
*
* @param resolver ContentResolver
* @param noteId ID
* @return
*/
public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) {
Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
null, null, null, null);
@ -166,7 +203,13 @@ public class DataUtils {
}
return exist;
}
/**
* ID
*
* @param resolver ContentResolver
* @param dataId ID
* @return
*/
public static boolean existInDataDatabase(ContentResolver resolver, long dataId) {
Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId),
null, null, null, null);
@ -180,7 +223,13 @@ public class DataUtils {
}
return exist;
}
/**
*
*
* @param resolver ContentResolver
* @param name
* @return
*/
public static boolean checkVisibleFolderName(ContentResolver resolver, String name) {
Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null,
NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER +
@ -196,7 +245,13 @@ public class DataUtils {
}
return exist;
}
/**
*
*
* @param resolver ContentResolver
* @param folderId ID
* @return
*/
public static HashSet<AppWidgetAttribute> getFolderNoteWidget(ContentResolver resolver, long folderId) {
Cursor c = resolver.query(Notes.CONTENT_NOTE_URI,
new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE },
@ -223,7 +278,13 @@ public class DataUtils {
}
return set;
}
/**
* ID
*
* @param resolver ContentResolver
* @param noteId ID
* @return
*/
public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) {
Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
new String [] { CallNote.PHONE_NUMBER },
@ -242,7 +303,14 @@ public class DataUtils {
}
return "";
}
/**
* ID
*
* @param resolver ContentResolver
* @param phoneNumber
* @param callDate
* @return ID 0
*/
public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) {
Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI,
new String [] { CallNote.NOTE_ID },
@ -263,7 +331,14 @@ public class DataUtils {
}
return 0;
}
/**
* ID
*
* @param resolver ContentResolver
* @param noteId ID
* @return
* @throws IllegalArgumentException
*/
public static String getSnippetById(ContentResolver resolver, long noteId) {
Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI,
new String [] { NoteColumns.SNIPPET },
@ -281,7 +356,12 @@ public class DataUtils {
}
throw new IllegalArgumentException("Note is not found with id: " + noteId);
}
/**
*
*
* @param snippet
* @return
*/
public static String getFormattedSnippet(String snippet) {
if (snippet != null) {
snippet = snippet.trim();

@ -15,99 +15,129 @@
*/
package net.micode.notes.tool;
/**
* GTaskStringUtils Google Tasks JSON
*
*/
public class GTaskStringUtils {
public final static String GTASK_JSON_ACTION_ID = "action_id";
public final static String GTASK_JSON_ACTION_LIST = "action_list";
public final static String GTASK_JSON_ACTION_TYPE = "action_type";
public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create";
public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all";
public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move";
public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update";
/** 操作 ID 字段名 */
public final static String GTASK_JSON_ACTION_ID = "action_id";
public final static String GTASK_JSON_CREATOR_ID = "creator_id";
/** 操作列表字段名 */
public final static String GTASK_JSON_ACTION_LIST = "action_list";
public final static String GTASK_JSON_CHILD_ENTITY = "child_entity";
/** 操作类型字段名 */
public final static String GTASK_JSON_ACTION_TYPE = "action_type";
public final static String GTASK_JSON_CLIENT_VERSION = "client_version";
/** 操作类型:创建 */
public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create";
public final static String GTASK_JSON_COMPLETED = "completed";
/** 操作类型:获取全部 */
public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all";
public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id";
/** 操作类型:移动 */
public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move";
public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id";
/** 操作类型:更新 */
public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update";
public final static String GTASK_JSON_DELETED = "deleted";
/** 创建者 ID 字段名 */
public final static String GTASK_JSON_CREATOR_ID = "creator_id";
public final static String GTASK_JSON_DEST_LIST = "dest_list";
/** 子实体字段名 */
public final static String GTASK_JSON_CHILD_ENTITY = "child_entity";
public final static String GTASK_JSON_DEST_PARENT = "dest_parent";
/** 客户端版本字段名 */
public final static String GTASK_JSON_CLIENT_VERSION = "client_version";
public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type";
/** 是否完成字段名 */
public final static String GTASK_JSON_COMPLETED = "completed";
public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta";
/** 当前任务列表 ID 字段名 */
public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id";
public final static String GTASK_JSON_ENTITY_TYPE = "entity_type";
/** 默认任务列表 ID 字段名 */
public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id";
public final static String GTASK_JSON_GET_DELETED = "get_deleted";
/** 是否删除字段名 */
public final static String GTASK_JSON_DELETED = "deleted";
public final static String GTASK_JSON_ID = "id";
/** 目标位置字段名 */
public final static String GTASK_JSON_DEST_LIST = "dest_list";
public final static String GTASK_JSON_INDEX = "index";
/** 目标父节点字段名 */
public final static String GTASK_JSON_DEST_PARENT = "dest_parent";
public final static String GTASK_JSON_LAST_MODIFIED = "last_modified";
/** 目标父节点类型字段名 */
public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type";
public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point";
/** 实体差异内容字段名 */
public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta";
public final static String GTASK_JSON_LIST_ID = "list_id";
/** 实体类型字段名 */
public final static String GTASK_JSON_ENTITY_TYPE = "entity_type";
public final static String GTASK_JSON_LISTS = "lists";
/** 获取已删除项字段名 */
public final static String GTASK_JSON_GET_DELETED = "get_deleted";
public final static String GTASK_JSON_NAME = "name";
/** 实体唯一标识字段名 */
public final static String GTASK_JSON_ID = "id";
public final static String GTASK_JSON_NEW_ID = "new_id";
/** 索引字段名 */
public final static String GTASK_JSON_INDEX = "index";
public final static String GTASK_JSON_NOTES = "notes";
/** 最后修改时间字段名 */
public final static String GTASK_JSON_LAST_MODIFIED = "last_modified";
public final static String GTASK_JSON_PARENT_ID = "parent_id";
/** 最新同步点字段名 */
public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point";
public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id";
/** 列表 ID 字段名 */
public final static String GTASK_JSON_LIST_ID = "list_id";
public final static String GTASK_JSON_RESULTS = "results";
/** 列表集合字段名 */
public final static String GTASK_JSON_LISTS = "lists";
public final static String GTASK_JSON_SOURCE_LIST = "source_list";
/** 名称字段名 */
public final static String GTASK_JSON_NAME = "name";
public final static String GTASK_JSON_TASKS = "tasks";
/** 新 ID 字段名 */
public final static String GTASK_JSON_NEW_ID = "new_id";
public final static String GTASK_JSON_TYPE = "type";
/** 备注字段名 */
public final static String GTASK_JSON_NOTES = "notes";
public final static String GTASK_JSON_TYPE_GROUP = "GROUP";
/** 父节点 ID 字段名 */
public final static String GTASK_JSON_PARENT_ID = "parent_id";
public final static String GTASK_JSON_TYPE_TASK = "TASK";
/** 上一个兄弟节点 ID 字段名 */
public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id";
public final static String GTASK_JSON_USER = "user";
/**
public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]";
/** MIUI 笔记文件夹名称前缀 */
public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]";
public final static String FOLDER_DEFAULT = "Default";
/** 默认文件夹名称 */
public final static String FOLDER_DEFAULT = "Default";
public final static String FOLDER_CALL_NOTE = "Call_Note";
/** 通话笔记文件夹名称 */
public final static String FOLDER_CALL_NOTE = "Call_Note";
public final static String FOLDER_META = "METADATA";
/** 元数据标识符 */
public final static String FOLDER_META = "METADATA";
public final static String META_HEAD_GTASK_ID = "meta_gid";
/** 元数据中的 GID 字段名 */
public final static String META_HEAD_GTASK_ID = "meta_gid";
public final static String META_HEAD_NOTE = "meta_note";
/** 元数据中的笔记信息字段名 */
public final static String META_HEAD_NOTE = "meta_note";
public final static String META_HEAD_DATA = "meta_data";
/** 元数据中的内容信息字段名 */
public final static String META_HEAD_DATA = "meta_data";
public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE";
/** 元数据笔记名称(用于标记元信息) */
public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE";D DELETE";
}

@ -21,25 +21,35 @@ import android.preference.PreferenceManager;
import net.micode.notes.R;
import net.micode.notes.ui.NotesPreferenceActivity;
/**
* ResourceParser UI
*
*/
public class ResourceParser {
public static final int YELLOW = 0;
public static final int BLUE = 1;
public static final int WHITE = 2;
public static final int GREEN = 3;
public static final int RED = 4;
public static final int BG_DEFAULT_COLOR = YELLOW;
public static final int TEXT_SMALL = 0;
public static final int TEXT_MEDIUM = 1;
public static final int TEXT_LARGE = 2;
public static final int TEXT_SUPER = 3;
public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;
public static class NoteBgResources {
/** 笔记颜色常量:黄、蓝、白、绿、红 */
public static final int YELLOW = 0;
public static final int BLUE = 1;
public static final int WHITE = 2;
public static final int GREEN = 3;
public static final int RED = 4;
/** 默认背景颜色 ID */
public static final int BG_DEFAULT_COLOR = YELLOW;
/** 字体大小常量:小、中、大、超大 */
public static final int TEXT_SMALL = 0;
public static final int TEXT_MEDIUM = 1;
public static final int TEXT_LARGE = 2;
public static final int TEXT_SUPER = 3;
/** 默认字体大小 */
public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;
/**
* NoteBgResources
* ID
*/
public static class NoteBgResources {
// 背景和标题栏资源数组定义
private final static int [] BG_EDIT_RESOURCES = new int [] {
R.drawable.edit_yellow,
R.drawable.edit_blue,
@ -55,16 +65,32 @@ public class ResourceParser {
R.drawable.edit_title_green,
R.drawable.edit_title_red
};
/**
* ID
*
* @param id ID
* @return drawable ID
*/
public static int getNoteBgResource(int id) {
return BG_EDIT_RESOURCES[id];
}
/**
* ID
*
* @param id ID
* @return drawable ID
*/
public static int getNoteTitleBgResource(int id) {
return BG_EDIT_TITLE_RESOURCES[id];
}
}
/**
* ID
*
*
* @param context
* @return ID
*/
public static int getDefaultBgId(Context context) {
if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) {
@ -106,23 +132,48 @@ public class ResourceParser {
R.drawable.list_green_single,
R.drawable.list_red_single
};
/**
* ID
*
* @param id ID
* @return drawable ID
*/
public static int getNoteBgFirstRes(int id) {
return BG_FIRST_RESOURCES[id];
}
/**
* ID
*
* @param id ID
* @return drawable ID
*/
public static int getNoteBgLastRes(int id) {
return BG_LAST_RESOURCES[id];
}
/**
* ID
*
* @param id ID
* @return drawable ID
*/
public static int getNoteBgSingleRes(int id) {
return BG_SINGLE_RESOURCES[id];
}
/**
* ID
*
* @param id ID
* @return drawable ID
*/
public static int getNoteBgNormalRes(int id) {
return BG_NORMAL_RESOURCES[id];
}
/**
* ID
*
* @return drawable ID
*/
public static int getFolderBgRes() {
return R.drawable.list_folder;
}

@ -14,7 +14,7 @@
* limitations under the License.
*/
package net.micode.notes.ui;
package net.micode.notess.ui;
import android.app.Activity;
import android.app.AlertDialog;
@ -39,13 +39,29 @@ import net.micode.notes.tool.DataUtils;
import java.io.IOException;
/**
* AlarmAlertActivity Activity
* Activity
*/
public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { private long mNoteId;
/** 当前提醒对应的笔记 ID */
private long mNoteId;
/** 笔记摘要内容(用于显示在对话框中) */
private String mSnippet;
public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener {
private long mNoteId;
private String mSnippet;
private static final int SNIPPET_PREW_MAX_LEN = 60;
MediaPlayer mPlayer;
/** 最大显示长度限制 */
private static final int SNIPPET_PREW_MAX_LEN = 60;
/** 媒体播放器实例,用于播放闹钟声音 */
MediaPlayer mPlayer;
/**
* Activity
*
* -
* - ID
* -
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -82,12 +98,19 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
finish();
}
}
/**
*
*
* @return
*/
private boolean isScreenOn() {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
return pm.isScreenOn();
}
/**
*
*
*/
private void playAlarmSound() {
Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM);
@ -118,7 +141,13 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
e.printStackTrace();
}
}
/**
*
* -
* -
* -
* -
*/
private void showActionDialog() {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(R.string.app_name);
@ -129,7 +158,11 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
}
dialog.show().setOnDismissListener(this);
}
/**
*
*
* - NoteEditActivity
*/
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_NEGATIVE:
@ -142,7 +175,9 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
break;
}
}
/**
* Activity
*/
public void onDismiss(DialogInterface dialog) {
stopAlarmSound();
finish();

@ -27,17 +27,32 @@ import android.database.Cursor;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
/**
* AlarmInitReceiver BroadcastReceiver
*
*/
public class AlarmInitReceiver extends BroadcastReceiver {
private static final String [] PROJECTION = new String [] {
/** 查询笔记表时使用的列投影ID 和提醒时间) */
private static final String[] PROJECTION = new String[] {
NoteColumns.ID,
NoteColumns.ALERTED_DATE
};
};
private static final int COLUMN_ID = 0;
private static final int COLUMN_ALERTED_DATE = 1;
/** 列索引:笔记 ID */
private static final int COLUMN_ID = 0;
/** 列索引:提醒时间 */
private static final int COLUMN_ALERTED_DATE = 1;
/**
* 广
*
* -
* - PendingIntent
* - 使 AlarmManager RTC_WAKEUP
*
* @param context
* @param intent 广
*/
@Override
public void onReceive(Context context, Intent intent) {
long currentDate = System.currentTimeMillis();

@ -19,12 +19,22 @@ package net.micode.notes.ui;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* AlarmReceiver BroadcastReceiver
* 广 AlarmAlertActivity
*/
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
intent.setClass(context, AlarmAlertActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
/**
* 广
* AlarmAlertActivity
*
* @param context
* @param intent 广
*/
@Override
public void onReceive(Context context, Intent intent) {
intent.setClass(context, AlarmAlertActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}

@ -27,14 +27,22 @@ import android.text.format.DateFormat;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.NumberPicker;
/**
* DateTimePicker
* NumberPicker 24 AM/PM
*/
public class DateTimePicker extends FrameLayout {
/** 默认启用状态 */
private static final boolean DEFAULT_ENABLE_STATE = true;
private static final boolean DEFAULT_ENABLE_STATE = true;
/** 12 小时制中的小时数 */
private static final int HOURS_IN_HALF_DAY = 12;
private static final int HOURS_IN_HALF_DAY = 12;
private static final int HOURS_IN_ALL_DAY = 24;
private static final int DAYS_IN_ALL_WEEK = 7;
/** 24 小时制中的最大值 */
private static final int HOURS_IN_ALL_DAY = 24;
/** 一周天数 */
private static final int DAYS_IN_ALL_WEEK = 7;
private static final int DATE_SPINNER_MIN_VAL = 0;
private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1;
private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0;
@ -46,26 +54,41 @@ public class DateTimePicker extends FrameLayout {
private static final int AMPM_SPINNER_MIN_VAL = 0;
private static final int AMPM_SPINNER_MAX_VAL = 1;
private final NumberPicker mDateSpinner;
private final NumberPicker mHourSpinner;
private final NumberPicker mMinuteSpinner;
private final NumberPicker mAmPmSpinner;
private Calendar mDate;
/** 日期选择器 */
private final NumberPicker mDateSpinner;
private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK];
/** 小时选择器 */
private final NumberPicker mHourSpinner;
private boolean mIsAm;
/** 分钟选择器 */
private final NumberPicker mMinuteSpinner;
private boolean mIs24HourView;
/** AM/PM 选择器 */
private final NumberPicker mAmPmSpinner;
private boolean mIsEnabled = DEFAULT_ENABLE_STATE;
/** 当前日期时间Calendar */
private Calendar mDate;
private boolean mInitialising;
/** 显示的日期字符串数组 */
private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK];
private OnDateTimeChangedListener mOnDateTimeChangedListener;
/** 是否是 AM仅在非 24 小时模式下有效) */
private boolean mIsAm;
private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() {
@Override
/** 是否使用 24 小时制 */
private boolean mIs24HourView;
/** 控件是否启用 */
private boolean mIsEnabled = DEFAULT_ENABLE_STATE;
/** 是否正在初始化 */
private boolean mInitialising;
/** 日期时间变化监听器 */
/**
*
*/
private OnDateTimeChangedListener mOnDateTimeChangedListener; @Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal);
updateDateControl();

@ -28,18 +28,38 @@ import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
/**
* DateTimePickerDialog AlertDialog
* DateTimePicker
*/
public class DateTimePickerDialog extends AlertDialog implements OnClickListener {
/** 当前选中的日期时间Calendar */
private Calendar mDate = Calendar.getInstance();
private Calendar mDate = Calendar.getInstance();
private boolean mIs24HourView;
private OnDateTimeSetListener mOnDateTimeSetListener;
private DateTimePicker mDateTimePicker;
/** 是否使用 24 小时制显示时间 */
private boolean mIs24HourView;
public interface OnDateTimeSetListener {
void OnDateTimeSet(AlertDialog dialog, long date);
}
/** 日期时间设置完成后的回调接口 */
private OnDateTimeSetListener mOnDateTimeSetListener;
/** 内部使用的 DateTimePicker 控件实例 */
/**
*
*/
public interface OnDateTimeSetListener {
/**
*
*
* @param dialog
* @param date
*/ void OnDateTimeSet(AlertDialog dialog, long date);
}
/**
*
*
* @param context
* @param date
*/
public DateTimePickerDialog(Context context, long date) {
super(context);
mDateTimePicker = new DateTimePicker(context);
@ -63,15 +83,27 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
set24HourView(DateFormat.is24HourFormat(this.getContext()));
updateTitle(mDate.getTimeInMillis());
}
/**
* 使 24
*
* @param is24HourView true 使 24
*/
public void set24HourView(boolean is24HourView) {
mIs24HourView = is24HourView;
}
/**
*
*
* @param callBack
*/
public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) {
mOnDateTimeSetListener = callBack;
}
/**
*
*
* @param date
*/
private void updateTitle(long date) {
int flag =
DateUtils.FORMAT_SHOW_YEAR |
@ -80,7 +112,13 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR;
setTitle(DateUtils.formatDateTime(this.getContext(), date, flag));
}
/**
*
* OnDateTimeSetListener
*
* @param arg0
* @param arg1
*/
public void onClick(DialogInterface arg0, int arg1) {
if (mOnDateTimeSetListener != null) {
mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis());

@ -26,12 +26,26 @@ import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import net.micode.notes.R;
/**
* DropdownMenu Button PopupMenu
* UI
*/
public class DropdownMenu {
private Button mButton;
private PopupMenu mPopupMenu;
private Menu mMenu;
/** 触发菜单显示的按钮对象 */
private Button mButton;
/** 弹出菜单实例 */
private PopupMenu mPopupMenu;
/** 菜单对象,用于管理菜单项 */
private Menu mMenu;
/**
*
*
* @param context
* @param button
* @param menuId ID
*/
public DropdownMenu(Context context, Button button, int menuId) {
mButton = button;
mButton.setBackgroundResource(R.drawable.dropdown_icon);
@ -44,17 +58,30 @@ public class DropdownMenu {
}
});
}
/**
*
*
* @param listener
*/
public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) {
if (mPopupMenu != null) {
mPopupMenu.setOnMenuItemClickListener(listener);
}
}
/**
* ID MenuItem
*
* @param id ID
* @return MenuItem
*/
public MenuItem findItem(int id) {
return mMenu.findItem(id);
}
/**
*
*
* @param title
*/
public void setTitle(CharSequence title) {
mButton.setText(title);
}

@ -27,27 +27,51 @@ import android.widget.TextView;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
/**
* FoldersListAdapter CursorAdapter
* `FolderListItem`
*/
public class FoldersListAdapter extends CursorAdapter {
public static final String [] PROJECTION = {
/** 查询使用的列投影ID 和 SNIPPET文件夹名称 */
public static final String[] PROJECTION = {
NoteColumns.ID,
NoteColumns.SNIPPET
};
};
/** 列索引定义 */
public static final int ID_COLUMN = 0;
public static final int NAME_COLUMN = 1;
/**
* FoldersListAdapter
*
* @param context
* @param c ID SNIPPET
*/
public FoldersListAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
/**
* FolderListItem
*
* @param context
* @param cursor
* @param parent
* @return View
*/
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return new FolderListItem(context);
}
/**
*
*
*
* @param view
* @param context
* @param cursor
*/
@Override
public void bindView(View view, Context context, Cursor cursor) {
if (view instanceof FolderListItem) {
@ -56,22 +80,40 @@ public class FoldersListAdapter extends CursorAdapter {
((FolderListItem) view).bind(folderName);
}
}
/**
*
*
*
* @param context
* @param position
* @return
*/
public String getFolderName(Context context, int position) {
Cursor cursor = (Cursor) getItem(position);
return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context
.getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN);
}
/**
* FolderListItem LinearLayout
* TextView
*/
private class FolderListItem extends LinearLayout {
private TextView mName;
/**
* FolderListItem
*
* @param context
*/
public FolderListItem(Context context) {
super(context);
inflate(context, R.layout.folder_list_item, this);
mName = (TextView) findViewById(R.id.tv_folder_name);
}
/**
*
*
* @param name
*/
public void bind(String name) {
mName.setText(name);
}

@ -71,18 +71,19 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* NoteEditActivity Activity
*
*/
public class NoteEditActivity extends Activity implements OnClickListener,
NoteSettingChangedListener, OnTextViewChangeListener {
private class HeadViewHolder {
public TextView tvModified;
public ImageView ivAlertIcon;
public TextView tvAlertDate;
public ImageView ibSetBgColor;
public TextView tvModified; // 最后修改时间
public ImageView ivAlertIcon; // 提醒图标
public TextView tvAlertDate; // 提醒日期
public ImageView ibSetBgColor; // 设置背景按钮
}
/** 背景颜色选择按钮与对应颜色 ID 的映射 */
private static final Map<Integer, Integer> sBgSelectorBtnsMap = new HashMap<Integer, Integer>();
static {
@ -93,6 +94,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
sBgSelectorBtnsMap.put(R.id.iv_bg_white, ResourceParser.WHITE);
}
/** 颜色选择器中当前选中状态的图标资源映射 */
private static final Map<Integer, Integer> sBgSelectorSelectionMap = new HashMap<Integer, Integer>();
static {
sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select);
@ -101,7 +103,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select);
sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select);
}
/** 字体大小选择按钮与对应 ID 的映射 */
private static final Map<Integer, Integer> sFontSizeBtnsMap = new HashMap<Integer, Integer>();
static {
sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE);
@ -109,7 +111,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM);
sFontSizeBtnsMap.put(R.id.ll_font_super, ResourceParser.TEXT_SUPER);
}
/** 字体大小选择器中当前选中状态的图标资源映射 */
private static final Map<Integer, Integer> sFontSelectorSelectionMap = new HashMap<Integer, Integer>();
static {
sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select);
@ -120,22 +122,29 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private static final String TAG = "NoteEditActivity";
private HeadViewHolder mNoteHeaderHolder;
/** 顶部标题栏视图容器 */
private View mHeadViewPanel;
private View mHeadViewPanel;
/** 背景色选择器视图 */
private View mNoteBgColorSelector;
private View mNoteBgColorSelector;
/** 字体大小选择器视图 */
private View mFontSizeSelector;
private View mFontSizeSelector;
/** 编辑区域的 EditText */
private EditText mNoteEditor;
private EditText mNoteEditor;
/** 编辑区域的整体容器 */
private View mNoteEditorPanel;
private View mNoteEditorPanel;
/** 当前正在编辑的 WorkingNote 对象 */
private WorkingNote mWorkingNote;
private WorkingNote mWorkingNote;
/** SharedPreferences 实例,用于存储用户偏好 */
private SharedPreferences mSharedPrefs;
private SharedPreferences mSharedPrefs;
private int mFontSizeId;
/** 当前使用的字体大小 IDTEXT_SMALL, TEXT_MEDIUM 等) */
private int mFontSizeId;
private static final String PREFERENCE_FONT_SIZE = "pref_font_size";
@ -148,7 +157,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private String mUserQuery;
private Pattern mPattern;
/**
*
* Intent
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -161,10 +173,9 @@ public class NoteEditActivity extends Activity implements OnClickListener,
initResources();
}
/**
* Current activity may be killed when the memory is low. Once it is killed, for another time
* user load this activity, we should restore the former state
*/
/**
*
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
@ -267,7 +278,13 @@ public class NoteEditActivity extends Activity implements OnClickListener,
super.onResume();
initNoteScreen();
}
/**
* Intent Activity
*
* -
* -
* -
*/
private void initNoteScreen() {
mNoteEditor.setTextAppearance(this, TextAppearanceResources
.getTexAppearanceResource(mFontSizeId));
@ -294,7 +311,9 @@ public class NoteEditActivity extends Activity implements OnClickListener,
*/
showAlertHeader();
}
/**
*
*/
private void showAlertHeader() {
if (mWorkingNote.hasClockAlert()) {
long time = System.currentTimeMillis();

@ -36,15 +36,24 @@ import net.micode.notes.R;
import java.util.HashMap;
import java.util.Map;
/**
* NoteEditText EditText
*
*/
public class NoteEditText extends EditText {
private static final String TAG = "NoteEditText";
/** 日志标签 */
private static final String TAG = "NoteEditText";
private int mIndex;
private int mSelectionStartBeforeDelete;
private static final String SCHEME_TEL = "tel:" ;
private static final String SCHEME_HTTP = "http:" ;
private static final String SCHEME_EMAIL = "mailto:" ;
/** 电话链接前缀 */
private static final String SCHEME_TEL = "tel:";
/** 网页链接前缀 */
private static final String SCHEME_HTTP = "http:";
/** 邮件链接前缀 */
private static final String SCHEME_EMAIL = "mailto:";
private static final Map<String, Integer> sSchemaActionResMap = new HashMap<String, Integer>();
static {
@ -53,9 +62,7 @@ public class NoteEditText extends EditText {
sSchemaActionResMap.put(SCHEME_EMAIL, R.string.note_link_email);
}
/**
* Call by the {@link NoteEditActivity} to delete or add edit text
*/
/** 文本视图变化监听器 */
public interface OnTextViewChangeListener {
/**
* Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens

@ -25,7 +25,12 @@ import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.tool.DataUtils;
/**
* NoteItemData
* Cursor 访 UI
*/
/** 查询笔记时使用的列投影 */
public class NoteItemData {
static final String [] PROJECTION = new String [] {
NoteColumns.ID,

@ -77,7 +77,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashSet;
/**
* NotesListActivity
*
*/
public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
@ -90,8 +93,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private static final int MENU_FOLDER_CHANGE_NAME = 2;
private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction";
private enum ListEditState {
/** 当前处于的列表状态:普通笔记列表、子文件夹、通话记录文件夹 */
private enum ListEditState {
NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
};

@ -30,7 +30,8 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
// 这是一个继承自 CursorAdapter 的适配器类,用于将笔记数据绑定到 UI 上的列表项。
// 主要功能包括创建和更新列表项视图、支持选择模式下的多选操作、提供获取已选项目等功能。
public class NotesListAdapter extends CursorAdapter {
private static final String TAG = "NotesListAdapter";
private Context mContext;

@ -30,6 +30,8 @@ import net.micode.notes.tool.DataUtils;
import net.micode.notes.tool.ResourceParser.NoteItemBgResources;
// 继承自 LinearLayout用于表示笔记列表中的一个条目。
// 负责展示笔记的标题、修改时间、提醒图标等信息,并支持选择模式下的复选框显示。
public class NotesListItem extends LinearLayout {
private ImageView mAlert;
private TextView mTitle;
@ -98,7 +100,7 @@ public class NotesListItem extends LinearLayout {
setBackground(data);
}
// 根据笔记数据设置背景资源。对于不同类型的笔记(如第一个、最后一个、单独项等),应用不同的背景样式;对于文件夹则使用统一的背景样式。
private void setBackground(NoteItemData data) {
int id = data.getBgColorId();
if (data.getType() == Notes.TYPE_NOTE) {

@ -48,6 +48,8 @@ import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
// 继承自 PreferenceActivity用于管理笔记应用的设置偏好界面。
// 提供了同步账户设置、手动同步按钮控制、账户选择对话框等功能,并监听 Google 任务同步服务的状态变化以更新 UI。
public class NotesPreferenceActivity extends PreferenceActivity {
public static final String PREFERENCE_NAME = "notes_preferences";

@ -14,6 +14,7 @@
* limitations under the License.
*/
// NoteWidgetProvider 是一个抽象类,作为不同尺寸便签小部件(如 2x、4x的基础类
package net.micode.notes.widget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
@ -32,19 +33,28 @@ import net.micode.notes.tool.ResourceParser;
import net.micode.notes.ui.NoteEditActivity;
import net.micode.notes.ui.NotesListActivity;
/**
* 便
*/
public abstract class NoteWidgetProvider extends AppWidgetProvider {
// 查询数据库时使用的投影字段ID、背景颜色ID、便签内容片段
public static final String [] PROJECTION = new String [] {
NoteColumns.ID,
NoteColumns.BG_COLOR_ID,
NoteColumns.SNIPPET
};
// 对应PROJECTION数组中各字段的索引
public static final int COLUMN_ID = 0;
public static final int COLUMN_BG_COLOR_ID = 1;
public static final int COLUMN_SNIPPET = 2;
private static final String TAG = "NoteWidgetProvider";
/**
* ID
*
* @param context
* @param appWidgetIds ID
*/
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
ContentValues values = new ContentValues();
@ -56,7 +66,13 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider {
new String[] { String.valueOf(appWidgetIds[i])});
}
}
/**
* ID便
*
* @param context
* @param widgetId ID
* @return 便Cursor
*/
private Cursor getNoteWidgetInfo(Context context, int widgetId) {
return context.getContentResolver().query(Notes.CONTENT_NOTE_URI,
PROJECTION,
@ -64,11 +80,24 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider {
new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) },
null);
}
/**
*
*
* @param context
* @param appWidgetManager
* @param appWidgetIds ID
*/
protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
update(context, appWidgetManager, appWidgetIds, false);
}
/**
* ID
*
* @param context
* @param appWidgetManager
* @param appWidgetIds ID
* @param privacyMode
*/
private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds,
boolean privacyMode) {
for (int i = 0; i < appWidgetIds.length; i++) {
@ -123,10 +152,24 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider {
}
}
}
/**
* ID
*
* @param bgId ID
* @return ID
*/
protected abstract int getBgResourceId(int bgId);
/**
* 使ID
*
* @return ID
*/
protected abstract int getLayoutId();
/**
*
*
* @return
*/
protected abstract int getWidgetType();
}

@ -23,23 +23,45 @@ import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.tool.ResourceParser;
/**
* 2x便
*/
public class NoteWidgetProvider_2x extends NoteWidgetProvider {
/**
* 2x便
*
* @param context
* @param appWidgetManager
* @param appWidgetIds ID
*/
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.update(context, appWidgetManager, appWidgetIds);
}
/**
* 2x使ID
*
* @return ID
*/
@Override
protected int getLayoutId() {
return R.layout.widget_2x;
}
/**
* ID2x
*
* @param bgId ID
* @return ID
*/
@Override
protected int getBgResourceId(int bgId) {
return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId);
}
/**
*
*
* @return 2x
*/
@Override
protected int getWidgetType() {
return Notes.TYPE_WIDGET_2X;

@ -14,6 +14,7 @@
* limitations under the License.
*/
// NoteWidgetProvider_4x类继承自NoteWidgetProvider用于提供4x小部件的具体功能
package net.micode.notes.widget;
import android.appwidget.AppWidgetManager;
@ -22,23 +23,45 @@ import android.content.Context;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.tool.ResourceParser;
/**
* 4x便
*/
public class NoteWidgetProvider_4x extends NoteWidgetProvider {
/**
* 4x便
*
* @param context
* @param appWidgetManager
* @param appWidgetIds ID
*/
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.update(context, appWidgetManager, appWidgetIds);
}
/**
* 4x使ID
*
* @return ID
*/
protected int getLayoutId() {
return R.layout.widget_4x;
}
/**
* ID4x
*
* @param bgId ID
* @return ID
*/
@Override
protected int getBgResourceId(int bgId) {
return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId);
}
/**
*
*
* @return 4x
*/
@Override
protected int getWidgetType() {
return Notes.TYPE_WIDGET_4X;

Loading…
Cancel
Save