diff --git a/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java b/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java index d2b4082..35ac648 100644 --- a/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java +++ b/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java @@ -48,12 +48,12 @@ import java.util.Iterator; import java.util.Map; -public class GTaskManager { - private static final String TAG = GTaskManager.class.getSimpleName(); +public class GTaskManager {// 该类用于管理 GTasks + private static final String TAG = GTaskManager.class.getSimpleName();// TAG 用于打印日志 - public static final int STATE_SUCCESS = 0; + public static final int STATE_SUCCESS = 0;// 定义了一些常量 - public static final int STATE_NETWORK_ERROR = 1; + public static final int STATE_NETWORK_ERROR = 1;// 定义了一些常量 public static final int STATE_INTERNAL_ERROR = 2; @@ -87,7 +87,7 @@ public class GTaskManager { private HashMap mNidToGid; - private GTaskManager() { + private GTaskManager() { // 构造函数 mSyncing = false; mCancelled = false; mGTaskListHashMap = new HashMap(); @@ -99,19 +99,19 @@ public class GTaskManager { mNidToGid = new HashMap(); } - public static synchronized GTaskManager getInstance() { + public static synchronized GTaskManager getInstance() { // 单例模式 if (mInstance == null) { mInstance = new GTaskManager(); } return mInstance; } - public synchronized void setActivityContext(Activity activity) { + public synchronized void setActivityContext(Activity activity) { // 设置 activity // used for getting authtoken mActivity = activity; } - public int sync(Context context, GTaskASyncTask asyncTask) { + public int sync(Context context, GTaskASyncTask asyncTask) { // 同步 if (mSyncing) { Log.d(TAG, "Sync is in progress"); return STATE_SYNC_IN_PROGRESS; @@ -127,25 +127,25 @@ public class GTaskManager { mGidToNid.clear(); mNidToGid.clear(); - try { + try { // try catch 语句 GTaskClient client = GTaskClient.getInstance(); client.resetUpdateArray(); // login google task - if (!mCancelled) { + if (!mCancelled) {// 如果没有取消 if (!client.login(mActivity)) { throw new NetworkFailureException("login google task failed"); } } // get the task list from google - asyncTask.publishProgess(mContext.getString(R.string.sync_progress_init_list)); + asyncTask.publishProgess(mContext.getString(R.string.sync_progress_init_list));// 发布进度 initGTaskList(); // do content sync work - asyncTask.publishProgess(mContext.getString(R.string.sync_progress_syncing)); + asyncTask.publishProgess(mContext.getString(R.string.sync_progress_syncing));// 发布进度 syncContent(); - } catch (NetworkFailureException e) { + } catch (NetworkFailureException e) {// 捕获异常 Log.e(TAG, e.toString()); return STATE_NETWORK_ERROR; } catch (ActionFailureException e) { @@ -155,7 +155,7 @@ public class GTaskManager { Log.e(TAG, e.toString()); e.printStackTrace(); return STATE_INTERNAL_ERROR; - } finally { + } finally {// finally 语句 mGTaskListHashMap.clear(); mGTaskHashMap.clear(); mMetaHashMap.clear(); @@ -165,25 +165,25 @@ public class GTaskManager { mSyncing = false; } - return mCancelled ? STATE_SYNC_CANCELLED : STATE_SUCCESS; + return mCancelled ? STATE_SYNC_CANCELLED : STATE_SUCCESS;// 返回状态 } - private void initGTaskList() throws NetworkFailureException { + private void initGTaskList() throws NetworkFailureException {// 初始化 GTasks if (mCancelled) return; - GTaskClient client = GTaskClient.getInstance(); + GTaskClient client = GTaskClient.getInstance();// 获取 GTasks 客户端 try { - JSONArray jsTaskLists = client.getTaskLists(); + JSONArray jsTaskLists = client.getTaskLists();// 获取 GTasks 列表 // init meta list first - mMetaList = null; + mMetaList = null;// 初始化 meta list for (int i = 0; i < jsTaskLists.length(); i++) { JSONObject object = jsTaskLists.getJSONObject(i); String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); String name = object.getString(GTaskStringUtils.GTASK_JSON_NAME); if (name - .equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META)) { + .equals(GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_META)) {// 如果是 meta 文件夹 mMetaList = new TaskList(); mMetaList.setContentByRemoteJSON(object); @@ -204,6 +204,7 @@ public class GTaskManager { } // create meta list if not existed + // 创建 meta list if (mMetaList == null) { mMetaList = new TaskList(); mMetaList.setName(GTaskStringUtils.MIUI_FOLDER_PREFFIX @@ -212,6 +213,7 @@ public class GTaskManager { } // init task list + // 初始化 task list for (int i = 0; i < jsTaskLists.length(); i++) { JSONObject object = jsTaskLists.getJSONObject(i); String gid = object.getString(GTaskStringUtils.GTASK_JSON_ID); @@ -240,14 +242,14 @@ public class GTaskManager { } } } - } catch (JSONException e) { + } catch (JSONException e) {// 捕获异常 Log.e(TAG, e.toString()); e.printStackTrace(); throw new ActionFailureException("initGTaskList: handing JSONObject failed"); } } - private void syncContent() throws NetworkFailureException { + private void syncContent() throws NetworkFailureException {// 同步内容 int syncType; Cursor c = null; String gid; @@ -255,12 +257,12 @@ public class GTaskManager { mLocalDeleteIdMap.clear(); - if (mCancelled) { + if (mCancelled) {// 如果取消 return; } // for local deleted note - try { + try {// try 语句 c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(type<>? AND parent_id=?)", new String[] { String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) @@ -290,16 +292,16 @@ public class GTaskManager { syncFolder(); // for note existing in database - try { + try {// try 语句 c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(type=? AND parent_id<>?)", new String[] { String.valueOf(Notes.TYPE_NOTE), String.valueOf(Notes.ID_TRASH_FOLER) }, NoteColumns.TYPE + " DESC"); - if (c != null) { + if (c != null) {// 如果 c 不为空 while (c.moveToNext()) { gid = c.getString(SqlNote.GTASK_ID_COLUMN); node = mGTaskHashMap.get(gid); - if (node != null) { + if (node != null) {// 如果 node 不为空 mGTaskHashMap.remove(gid); mGidToNid.put(gid, c.getLong(SqlNote.ID_COLUMN)); mNidToGid.put(c.getLong(SqlNote.ID_COLUMN), gid); @@ -319,7 +321,7 @@ public class GTaskManager { Log.w(TAG, "failed to query existing note in database"); } - } finally { + } finally { // finally 语句 if (c != null) { c.close(); c = null; @@ -327,6 +329,7 @@ public class GTaskManager { } // go through remaining items + // for note not existing in database Iterator> iter = mGTaskHashMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = iter.next(); @@ -351,7 +354,7 @@ public class GTaskManager { } - private void syncFolder() throws NetworkFailureException { + private void syncFolder() throws NetworkFailureException {// 同步文件夹 Cursor c = null; String gid; Node node; @@ -362,26 +365,28 @@ public class GTaskManager { } // for root folder - try { - c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, + try {// try 语句 + c = mContentResolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI,// 通过id查询 Notes.ID_ROOT_FOLDER), SqlNote.PROJECTION_NOTE, null, null, null); if (c != null) { c.moveToNext(); - gid = c.getString(SqlNote.GTASK_ID_COLUMN); + gid = c.getString(SqlNote.GTASK_ID_COLUMN);// 获取gtask_id node = mGTaskHashMap.get(gid); if (node != null) { mGTaskHashMap.remove(gid); - mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER); + mGidToNid.put(gid, (long) Notes.ID_ROOT_FOLDER); // for system folder, only + // update remote name if + // necessary mNidToGid.put((long) Notes.ID_ROOT_FOLDER, gid); // for system folder, only update remote name if necessary if (!node.getName().equals( GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); } else { - doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); + doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c);// 添加远程 } } else { - Log.w(TAG, "failed to query root folder"); + Log.w(TAG, "failed to query root folder");// 查询根文件夹失败 } } finally { if (c != null) { @@ -392,24 +397,27 @@ public class GTaskManager { // for call-note folder try { - c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)", + c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(_id=?)",// 通过id查询 new String[] { String.valueOf(Notes.ID_CALL_RECORD_FOLDER) }, null); - if (c != null) { + if (c != null) { // 如果 c 不为空 if (c.moveToNext()) { gid = c.getString(SqlNote.GTASK_ID_COLUMN); node = mGTaskHashMap.get(gid); if (node != null) { mGTaskHashMap.remove(gid); - mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER); + mGidToNid.put(gid, (long) Notes.ID_CALL_RECORD_FOLDER);// for system folder, + // only update + // remote name if + // necessary mNidToGid.put((long) Notes.ID_CALL_RECORD_FOLDER, gid); // for system folder, only update remote name if // necessary if (!node.getName().equals( GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) - doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c); + doContentSync(Node.SYNC_ACTION_UPDATE_REMOTE, node, c);// 更新远程 } else { doContentSync(Node.SYNC_ACTION_ADD_REMOTE, node, c); } @@ -522,29 +530,29 @@ public class GTaskManager { } } - private void addLocalNode(Node node) throws NetworkFailureException { + private void addLocalNode(Node node) throws NetworkFailureException { // 添加本地节点 if (mCancelled) { return; } - SqlNote sqlNote; + SqlNote sqlNote; // sql笔记 if (node instanceof TaskList) { - if (node.getName().equals( + if (node.getName().equals(// 根目录 GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_DEFAULT)) { sqlNote = new SqlNote(mContext, Notes.ID_ROOT_FOLDER); - } else if (node.getName().equals( - GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) { + } else if (node.getName().equals(// 回收站 + GTaskStringUtils.MIUI_FOLDER_PREFFIX + GTaskStringUtils.FOLDER_CALL_NOTE)) { // 通话记录 sqlNote = new SqlNote(mContext, Notes.ID_CALL_RECORD_FOLDER); - } else { + } else {// 其他文件夹 sqlNote = new SqlNote(mContext); sqlNote.setContent(node.getLocalJSONFromContent()); sqlNote.setParentId(Notes.ID_ROOT_FOLDER); } - } else { + } else {// 其他节点 sqlNote = new SqlNote(mContext); JSONObject js = node.getLocalJSONFromContent(); try { - if (js.has(GTaskStringUtils.META_HEAD_NOTE)) { + if (js.has(GTaskStringUtils.META_HEAD_NOTE)) {// 备注 JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); if (note.has(NoteColumns.ID)) { long id = note.getLong(NoteColumns.ID); @@ -555,7 +563,7 @@ public class GTaskManager { } } - if (js.has(GTaskStringUtils.META_HEAD_DATA)) { + if (js.has(GTaskStringUtils.META_HEAD_DATA)) {// 数据 JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA); for (int i = 0; i < dataArray.length(); i++) { JSONObject data = dataArray.getJSONObject(i); @@ -570,18 +578,18 @@ public class GTaskManager { } } - } catch (JSONException e) { + } catch (JSONException e) {// json异常 Log.w(TAG, e.toString()); e.printStackTrace(); } - sqlNote.setContent(js); + sqlNote.setContent(js);// 设置内容 - Long parentId = mGidToNid.get(((Task) node).getParent().getGid()); - if (parentId == null) { + Long parentId = mGidToNid.get(((Task) node).getParent().getGid());// 获取父节点 + if (parentId == null) {// 父节点为空 Log.e(TAG, "cannot find task's parent id locally"); throw new ActionFailureException("cannot add local node"); } - sqlNote.setParentId(parentId.longValue()); + sqlNote.setParentId(parentId.longValue());// 设置父节点 } // create the local node @@ -596,17 +604,17 @@ public class GTaskManager { updateRemoteMeta(node.getGid(), sqlNote); } - private void updateLocalNode(Node node, Cursor c) throws NetworkFailureException { + private void updateLocalNode(Node node, Cursor c) throws NetworkFailureException {// 更新本地节点 if (mCancelled) { return; } - SqlNote sqlNote; + SqlNote sqlNote;// sql笔记 // update the note locally sqlNote = new SqlNote(mContext, c); - sqlNote.setContent(node.getLocalJSONFromContent()); + sqlNote.setContent(node.getLocalJSONFromContent());// 设置内容 - Long parentId = (node instanceof Task) ? mGidToNid.get(((Task) node).getParent().getGid()) + Long parentId = (node instanceof Task) ? mGidToNid.get(((Task) node).getParent().getGid())// 获取父节点 : new Long(Notes.ID_ROOT_FOLDER); if (parentId == null) { Log.e(TAG, "cannot find task's parent id locally"); @@ -616,10 +624,10 @@ public class GTaskManager { sqlNote.commit(true); // update meta info - updateRemoteMeta(node.getGid(), sqlNote); + updateRemoteMeta(node.getGid(), sqlNote);// 更新远程元数据 } - private void addRemoteNode(Node node, Cursor c) throws NetworkFailureException { + private void addRemoteNode(Node node, Cursor c) throws NetworkFailureException {// 添加远程节点 if (mCancelled) { return; } @@ -628,7 +636,7 @@ public class GTaskManager { Node n; // update remotely - if (sqlNote.isNoteType()) { + if (sqlNote.isNoteType()) {// 笔记类型 Task task = new Task(); task.setContentByLocalJSON(sqlNote.getContent()); @@ -644,7 +652,7 @@ public class GTaskManager { // add meta updateRemoteMeta(task.getGid(), sqlNote); - } else { + } else {// 文件夹类型 TaskList tasklist = null; // we need to skip folder if it has already existed @@ -656,8 +664,8 @@ public class GTaskManager { else folderName += sqlNote.getSnippet(); - Iterator> iter = mGTaskListHashMap.entrySet().iterator(); - while (iter.hasNext()) { + Iterator> iter = mGTaskListHashMap.entrySet().iterator();// 迭代器 + while (iter.hasNext()) {// 遍历 Map.Entry entry = iter.next(); String gid = entry.getKey(); TaskList list = entry.getValue(); @@ -672,7 +680,7 @@ public class GTaskManager { } // no match we can add now - if (tasklist == null) { + if (tasklist == null) {// 任务列表为空 tasklist = new TaskList(); tasklist.setContentByLocalJSON(sqlNote.getContent()); GTaskClient.getInstance().createTaskList(tasklist); @@ -682,7 +690,7 @@ public class GTaskManager { } // update local note - sqlNote.setGtaskId(n.getGid()); + sqlNote.setGtaskId(n.getGid());// 设置gid sqlNote.commit(false); sqlNote.resetLocalModified(); sqlNote.commit(true); @@ -692,7 +700,7 @@ public class GTaskManager { mNidToGid.put(sqlNote.getId(), n.getGid()); } - private void updateRemoteNode(Node node, Cursor c) throws NetworkFailureException { + private void updateRemoteNode(Node node, Cursor c) throws NetworkFailureException {// 更新远程节点 if (mCancelled) { return; } @@ -730,7 +738,7 @@ public class GTaskManager { sqlNote.commit(true); } - private void updateRemoteMeta(String gid, SqlNote sqlNote) throws NetworkFailureException { + private void updateRemoteMeta(String gid, SqlNote sqlNote) throws NetworkFailureException {// 更新远程元数据 if (sqlNote != null && sqlNote.isNoteType()) { MetaData metaData = mMetaHashMap.get(gid); if (metaData != null) { @@ -746,7 +754,7 @@ public class GTaskManager { } } - private void refreshLocalSyncId() throws NetworkFailureException { + private void refreshLocalSyncId() throws NetworkFailureException {// 刷新本地同步id if (mCancelled) { return; } @@ -758,12 +766,12 @@ public class GTaskManager { initGTaskList(); Cursor c = null; - try { + try {// 尝试 c = mContentResolver.query(Notes.CONTENT_NOTE_URI, SqlNote.PROJECTION_NOTE, "(type<>? AND parent_id<>?)", new String[] { String.valueOf(Notes.TYPE_SYSTEM), String.valueOf(Notes.ID_TRASH_FOLER) }, NoteColumns.TYPE + " DESC"); - if (c != null) { + if (c != null) {// 如果游标不为空 while (c.moveToNext()) { String gid = c.getString(SqlNote.GTASK_ID_COLUMN); Node node = mGTaskHashMap.get(gid); @@ -773,7 +781,7 @@ public class GTaskManager { values.put(NoteColumns.SYNC_ID, node.getLastModified()); mContentResolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(SqlNote.ID_COLUMN)), values, null, null); - } else { + } else { // if we can't find the node, it means the node is deleted remotely Log.e(TAG, "something is missed"); throw new ActionFailureException( "some local items don't have gid after sync"); @@ -792,9 +800,10 @@ public class GTaskManager { public String getSyncAccount() { return GTaskClient.getInstance().getSyncAccount().name; - } + } // 获取同步账户 public void cancelSync() { mCancelled = true; - } + } // 取消同步 + } diff --git a/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/src/main/java/net/micode/notes/ui/NoteEditActivity.java index 7fd46e3..7e3ba2f 100644 --- a/src/main/java/net/micode/notes/ui/NoteEditActivity.java +++ b/src/main/java/net/micode/notes/ui/NoteEditActivity.java @@ -166,7 +166,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, * user load this activity, we should restore the former state */ @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { + protected void onRestoreInstanceState(Bundle savedInstanceState) {// super.onRestoreInstanceState(savedInstanceState); if (savedInstanceState != null && savedInstanceState.containsKey(Intent.EXTRA_UID)) { Intent intent = new Intent(Intent.ACTION_VIEW); diff --git a/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/main/java/net/micode/notes/ui/NotesListActivity.java index 5fcfbfd..53435a9 100644 --- a/src/main/java/net/micode/notes/ui/NotesListActivity.java +++ b/src/main/java/net/micode/notes/ui/NotesListActivity.java @@ -312,14 +312,14 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt updateMenu(); } - public boolean onMenuItemClick(MenuItem item) { + public boolean onMenuItemClick(MenuItem item) {//菜单点击 if (mNotesListAdapter.getSelectedCount() == 0) { Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), Toast.LENGTH_SHORT).show(); return true; } - switch (item.getItemId()) { + switch (item.getItemId()) {//项目 case R.id.delete: AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(getString(R.string.alert_title_delete)); @@ -346,9 +346,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - private class NewNoteOnTouchListener implements OnTouchListener { + private class NewNoteOnTouchListener implements OnTouchListener {//新的触摸事件 - public boolean onTouch(View v, MotionEvent event) { + public boolean onTouch(View v, MotionEvent event) {//触摸 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { Display display = getWindowManager().getDefaultDisplay(); @@ -386,7 +386,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } break; } - case MotionEvent.ACTION_MOVE: { + case MotionEvent.ACTION_MOVE: { //移动 if (mDispatch) { mDispatchY += (int) event.getY() - mOriginY; event.setLocation(event.getX(), mDispatchY); @@ -395,7 +395,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt break; } default: { - if (mDispatch) { + if (mDispatch) {//分发 event.setLocation(event.getX(), mDispatchY); mDispatch = false; return mNotesListView.dispatchTouchEvent(event); @@ -408,7 +408,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }; - private void startAsyncNotesListQuery() { + private void startAsyncNotesListQuery() {//开始异步笔记列表查询 String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION : NORMAL_SELECTION; mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, @@ -417,7 +417,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); } - private final class BackgroundQueryHandler extends AsyncQueryHandler { + private final class BackgroundQueryHandler extends AsyncQueryHandler { //后台查询处理 public BackgroundQueryHandler(ContentResolver contentResolver) { super(contentResolver); } @@ -441,7 +441,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - private void showFolderListMenu(Cursor cursor) { + private void showFolderListMenu(Cursor cursor) {//显示文件夹列表菜单 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(R.string.menu_title_select_folder); final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor); @@ -462,14 +462,14 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt builder.show(); } - private void createNewNote() { + private void createNewNote() {//创建新的笔记 Intent intent = new Intent(this, NoteEditActivity.class); intent.setAction(Intent.ACTION_INSERT_OR_EDIT); intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId); this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE); } - private void batchDelete() { + private void batchDelete() {//批量删除 new AsyncTask>() { protected HashSet doInBackground(Void... unused) { HashSet widgets = mNotesListAdapter.getSelectedWidget(); @@ -492,7 +492,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } @Override - protected void onPostExecute(HashSet widgets) { + protected void onPostExecute(HashSet widgets) {//执行后 if (widgets != null) { for (AppWidgetAttribute widget : widgets) { if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID @@ -506,7 +506,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }.execute(); } - private void deleteFolder(long folderId) { + private void deleteFolder(long folderId) {//删除文件夹 if (folderId == Notes.ID_ROOT_FOLDER) { Log.e(TAG, "Wrong folder id, should not happen " + folderId); return; @@ -516,14 +516,14 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt ids.add(folderId); HashSet widgets = DataUtils.getFolderNoteWidget(mContentResolver, folderId); - if (!isSyncMode()) { + if (!isSyncMode()) {//如果不是同步模式 // if not synced, delete folder directly DataUtils.batchDeleteNotes(mContentResolver, ids); } else { // in sync mode, we'll move the deleted folder into the trash folder DataUtils.batchMoveToFolder(mContentResolver, ids, Notes.ID_TRASH_FOLER); } - if (widgets != null) { + if (widgets != null) {//如果小部件不为空 for (AppWidgetAttribute widget : widgets) { if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID && widget.widgetType != Notes.TYPE_WIDGET_INVALIDE) { @@ -533,14 +533,14 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - private void openNode(NoteItemData data) { + private void openNode(NoteItemData data) {//打开笔记 Intent intent = new Intent(this, NoteEditActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.putExtra(Intent.EXTRA_UID, data.getId()); this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE); } - private void openFolder(NoteItemData data) { + private void openFolder(NoteItemData data) {//打开文件夹 mCurrentFolderId = data.getId(); startAsyncNotesListQuery(); if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { @@ -557,7 +557,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt mTitleBar.setVisibility(View.VISIBLE); } - public void onClick(View v) { + public void onClick(View v) {//点击事件 switch (v.getId()) { case R.id.btn_new_note: createNewNote(); @@ -567,24 +567,24 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - private void showSoftInput() { + private void showSoftInput() {//显示软键盘 InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (inputMethodManager != null) { inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); } } - private void hideSoftInput(View view) { + private void hideSoftInput(View view) {//隐藏软键盘 InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } - private void showCreateOrModifyFolderDialog(final boolean create) { + private void showCreateOrModifyFolderDialog(final boolean create) {//显示创建或修改文件夹对话框 final AlertDialog.Builder builder = new AlertDialog.Builder(this); View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null); final EditText etName = (EditText) view.findViewById(R.id.et_foler_name); showSoftInput(); - if (!create) { + if (!create) {//如果不是创建 if (mFocusNoteDataItem != null) { etName.setText(mFocusNoteDataItem.getSnippet()); builder.setTitle(getString(R.string.menu_folder_change_name)); @@ -604,19 +604,19 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } }); - final Dialog dialog = builder.setView(view).show(); - final Button positive = (Button)dialog.findViewById(android.R.id.button1); + final Dialog dialog = builder.setView(view).show();//显示对话框 + final Button positive = (Button)dialog.findViewById(android.R.id.button1); //获取确定按钮 positive.setOnClickListener(new OnClickListener() { public void onClick(View v) { hideSoftInput(etName); String name = etName.getText().toString(); - if (DataUtils.checkVisibleFolderName(mContentResolver, name)) { + if (DataUtils.checkVisibleFolderName(mContentResolver, name)) {//如果文件夹名字存在 Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name), Toast.LENGTH_LONG).show(); etName.setSelection(0, etName.length()); return; } - if (!create) { + if (!create) {//如果不是创建 if (!TextUtils.isEmpty(name)) { ContentValues values = new ContentValues(); values.put(NoteColumns.SNIPPET, name); @@ -627,7 +627,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt String.valueOf(mFocusNoteDataItem.getId()) }); } - } else if (!TextUtils.isEmpty(name)) { + } else if (!TextUtils.isEmpty(name)) { //如果是创建 ContentValues values = new ContentValues(); values.put(NoteColumns.SNIPPET, name); values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); @@ -638,26 +638,26 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }); if (TextUtils.isEmpty(etName.getText())) { - positive.setEnabled(false); + positive.setEnabled(false);//如果名字为空,确定按钮不可用 } /** * When the name edit text is null, disable the positive button */ - etName.addTextChangedListener(new TextWatcher() { + etName.addTextChangedListener(new TextWatcher() {//添加文本改变监听器 public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } public void onTextChanged(CharSequence s, int start, int before, int count) { - if (TextUtils.isEmpty(etName.getText())) { + if (TextUtils.isEmpty(etName.getText())) {//如果名字为空 positive.setEnabled(false); } else { positive.setEnabled(true); } } - public void afterTextChanged(Editable s) { + public void afterTextChanged(Editable s) {//文本改变后 // TODO Auto-generated method stub } @@ -665,7 +665,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } @Override - public void onBackPressed() { + public void onBackPressed() { //返回键 switch (mState) { case SUB_FOLDER: mCurrentFolderId = Notes.ID_ROOT_FOLDER; @@ -688,7 +688,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - private void updateWidget(int appWidgetId, int appWidgetType) { + private void updateWidget(int appWidgetId, int appWidgetType) {//更新小部件 Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); if (appWidgetType == Notes.TYPE_WIDGET_2X) { intent.setClass(this, NoteWidgetProvider_2x.class); @@ -707,7 +707,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt setResult(RESULT_OK, intent); } - private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() { + private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {//文件夹上下文菜单监听器 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { if (mFocusNoteDataItem != null) { menu.setHeaderTitle(mFocusNoteDataItem.getSnippet()); @@ -719,7 +719,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }; @Override - public void onContextMenuClosed(Menu menu) { + public void onContextMenuClosed(Menu menu) {//上下文菜单关闭 if (mNotesListView != null) { mNotesListView.setOnCreateContextMenuListener(null); } @@ -727,7 +727,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } @Override - public boolean onContextItemSelected(MenuItem item) { + public boolean onContextItemSelected(MenuItem item) {//上下文菜单项被选中 if (mFocusNoteDataItem == null) { Log.e(TAG, "The long click data item is null"); return false; @@ -737,7 +737,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt openFolder(mFocusNoteDataItem); break; case MENU_FOLDER_DELETE: - AlertDialog.Builder builder = new AlertDialog.Builder(this); + AlertDialog.Builder builder = new AlertDialog.Builder(this);//弹出对话框 builder.setTitle(getString(R.string.alert_title_delete)); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setMessage(getString(R.string.alert_message_delete_folder)); @@ -747,11 +747,11 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt deleteFolder(mFocusNoteDataItem.getId()); } }); - builder.setNegativeButton(android.R.string.cancel, null); + builder.setNegativeButton(android.R.string.cancel, null);//取消 builder.show(); break; case MENU_FOLDER_CHANGE_NAME: - showCreateOrModifyFolderDialog(false); + showCreateOrModifyFolderDialog(false);//显示创建或修改文件夹对话框 break; default: break; @@ -761,7 +761,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } @Override - public boolean onPrepareOptionsMenu(Menu menu) { + public boolean onPrepareOptionsMenu(Menu menu) {//准备菜单 menu.clear(); if (mState == ListEditState.NOTE_LIST) { getMenuInflater().inflate(R.menu.note_list, menu); @@ -779,7 +779,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(MenuItem item) {//菜单项被选中 switch (item.getItemId()) { case R.id.menu_new_folder: { showCreateOrModifyFolderDialog(true); @@ -791,7 +791,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } case R.id.menu_sync: { if (isSyncMode()) { - if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) { + if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) { // start sync GTaskSyncService.startSync(this); } else { GTaskSyncService.cancelSync(this); @@ -801,15 +801,15 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } break; } - case R.id.menu_setting: { + case R.id.menu_setting: {//设置 startPreferenceActivity(); break; } - case R.id.menu_new_note: { + case R.id.menu_new_note: {//新建便签 createNewNote(); break; } - case R.id.menu_search: + case R.id.menu_search://搜索 onSearchRequested(); break; default: @@ -819,12 +819,12 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } @Override - public boolean onSearchRequested() { + public boolean onSearchRequested() {//搜索请求 startSearch(null, false, null /* appData */, false); return true; } - private void exportNoteToText() { + private void exportNoteToText() {//导出便签到文本 final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this); new AsyncTask() { @@ -835,7 +835,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt @Override protected void onPostExecute(Integer result) { - if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) { + if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) {//SD卡未挂载 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this .getString(R.string.failed_sdcard_export)); @@ -843,7 +843,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt .getString(R.string.error_sdcard_unmounted)); builder.setPositiveButton(android.R.string.ok, null); builder.show(); - } else if (result == BackupUtils.STATE_SUCCESS) { + } else if (result == BackupUtils.STATE_SUCCESS) {//成功 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this .getString(R.string.success_sdcard_export)); @@ -852,7 +852,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt .getExportedTextFileName(), backup.getExportedTextFileDir())); builder.setPositiveButton(android.R.string.ok, null); builder.show(); - } else if (result == BackupUtils.STATE_SYSTEM_ERROR) { + } else if (result == BackupUtils.STATE_SYSTEM_ERROR) {//系统错误 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this .getString(R.string.failed_sdcard_export)); @@ -866,17 +866,17 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }.execute(); } - private boolean isSyncMode() { + private boolean isSyncMode() {//是否同步模式 return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; } - private void startPreferenceActivity() { + private void startPreferenceActivity() {//启动首选项活动 Activity from = getParent() != null ? getParent() : this; Intent intent = new Intent(from, NotesPreferenceActivity.class); from.startActivityIfNeeded(intent, -1); } - private class OnListItemClickListener implements OnItemClickListener { + private class OnListItemClickListener implements OnItemClickListener {//列表项点击监听器 public void onItemClick(AdapterView parent, View view, int position, long id) { if (view instanceof NotesListItem) { @@ -890,8 +890,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt return; } - switch (mState) { - case NOTE_LIST: + switch (mState) {//状态 + case NOTE_LIST://便签列表 if (item.getType() == Notes.TYPE_FOLDER || item.getType() == Notes.TYPE_SYSTEM) { openFolder(item); @@ -901,8 +901,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt Log.e(TAG, "Wrong note type in NOTE_LIST"); } break; - case SUB_FOLDER: - case CALL_RECORD_FOLDER: + case SUB_FOLDER://子文件夹 + case CALL_RECORD_FOLDER://通话记录文件夹 if (item.getType() == Notes.TYPE_NOTE) { openNode(item); } else { @@ -917,7 +917,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } - private void startQueryDestinationFolders() { + private void startQueryDestinationFolders() { //开始查询目标文件夹 String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?"; selection = (mState == ListEditState.NOTE_LIST) ? selection: "(" + selection + ") OR (" + NoteColumns.ID + "=" + Notes.ID_ROOT_FOLDER + ")"; @@ -935,7 +935,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt NoteColumns.MODIFIED_DATE + " DESC"); } - public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {//列表项长按监听器 if (view instanceof NotesListItem) { mFocusNoteDataItem = ((NotesListItem) view).getItemData(); if (mFocusNoteDataItem.getType() == Notes.TYPE_NOTE && !mNotesListAdapter.isInChoiceMode()) { diff --git a/src/main/java/net/micode/notes/ui/NotesListAdapter.java b/src/main/java/net/micode/notes/ui/NotesListAdapter.java index 51c9cb9..43f530b 100644 --- a/src/main/java/net/micode/notes/ui/NotesListAdapter.java +++ b/src/main/java/net/micode/notes/ui/NotesListAdapter.java @@ -31,19 +31,19 @@ import java.util.HashSet; import java.util.Iterator; -public class NotesListAdapter extends CursorAdapter { +public class NotesListAdapter extends CursorAdapter { // 该类扩展了 CursorAdapter 类 private static final String TAG = "NotesListAdapter"; private Context mContext; private HashMap mSelectedIndex; private int mNotesCount; private boolean mChoiceMode; - public static class AppWidgetAttribute { + public static class AppWidgetAttribute { // 定义了一个静态内部类 public int widgetId; public int widgetType; }; - public NotesListAdapter(Context context) { + public NotesListAdapter(Context context) { // 构造函数 super(context, null); mSelectedIndex = new HashMap(); mContext = context; @@ -51,12 +51,12 @@ public class NotesListAdapter extends CursorAdapter { } @Override - public View newView(Context context, Cursor cursor, ViewGroup parent) { + public View newView(Context context, Cursor cursor, ViewGroup parent) { // 重写了 CursorAdapter 类的 newView() 方法 return new NotesListItem(context); } @Override - public void bindView(View view, Context context, Cursor cursor) { + public void bindView(View view, Context context, Cursor cursor) {// 重写了 CursorAdapter 类的 bindView() 方法 if (view instanceof NotesListItem) { NoteItemData itemData = new NoteItemData(context, cursor); ((NotesListItem) view).bind(context, itemData, mChoiceMode, @@ -64,21 +64,21 @@ public class NotesListAdapter extends CursorAdapter { } } - public void setCheckedItem(final int position, final boolean checked) { + public void setCheckedItem(final int position, final boolean checked) { // 该方法用于设置选中的条目 mSelectedIndex.put(position, checked); notifyDataSetChanged(); } public boolean isInChoiceMode() { return mChoiceMode; - } + }// 该方法用于判断是否处于多选模式 - public void setChoiceMode(boolean mode) { + public void setChoiceMode(boolean mode) {// 该方法用于设置多选模式 mSelectedIndex.clear(); mChoiceMode = mode; } - public void selectAll(boolean checked) { + public void selectAll(boolean checked) {// 该方法用于设置是否全选 Cursor cursor = getCursor(); for (int i = 0; i < getCount(); i++) { if (cursor.moveToPosition(i)) { @@ -89,7 +89,7 @@ public class NotesListAdapter extends CursorAdapter { } } - public HashSet getSelectedItemIds() { + public HashSet getSelectedItemIds() {// 该方法用于获取选中的条目的 id HashSet itemSet = new HashSet(); for (Integer position : mSelectedIndex.keySet()) { if (mSelectedIndex.get(position) == true) { @@ -105,7 +105,7 @@ public class NotesListAdapter extends CursorAdapter { return itemSet; } - public HashSet getSelectedWidget() { + public HashSet getSelectedWidget() {// 该方法用于获取选中的条目的 widget HashSet itemSet = new HashSet(); for (Integer position : mSelectedIndex.keySet()) { if (mSelectedIndex.get(position) == true) { @@ -128,12 +128,12 @@ public class NotesListAdapter extends CursorAdapter { return itemSet; } - public int getSelectedCount() { + public int getSelectedCount() {// 该方法用于获取选中的条目的数量 Collection values = mSelectedIndex.values(); if (null == values) { return 0; } - Iterator iter = values.iterator(); + Iterator iter = values.iterator();// 该方法用于获取迭代器 int count = 0; while (iter.hasNext()) { if (true == iter.next()) { @@ -143,12 +143,12 @@ public class NotesListAdapter extends CursorAdapter { return count; } - public boolean isAllSelected() { + public boolean isAllSelected() {// 该方法用于判断是否全选 int checkedCount = getSelectedCount(); return (checkedCount != 0 && checkedCount == mNotesCount); } - public boolean isSelectedItem(final int position) { + public boolean isSelectedItem(final int position) {// 该方法用于判断是否选中 if (null == mSelectedIndex.get(position)) { return false; } @@ -156,23 +156,23 @@ public class NotesListAdapter extends CursorAdapter { } @Override - protected void onContentChanged() { + protected void onContentChanged() { // 重写了 CursorAdapter 类的 onContentChanged() 方法 super.onContentChanged(); calcNotesCount(); } @Override - public void changeCursor(Cursor cursor) { + public void changeCursor(Cursor cursor) {// 重写了 CursorAdapter 类的 changeCursor() 方法 super.changeCursor(cursor); calcNotesCount(); } - private void calcNotesCount() { + private void calcNotesCount() { // 该方法用于计算条目的数量 mNotesCount = 0; for (int i = 0; i < getCount(); i++) { Cursor c = (Cursor) getItem(i); if (c != null) { - if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) { + if (NoteItemData.getNoteType(c) == Notes.TYPE_NOTE) {// 该方法用于获取条目的类型 mNotesCount++; } } else { diff --git a/src/main/java/net/micode/notes/ui/NotesListItem.java b/src/main/java/net/micode/notes/ui/NotesListItem.java index 1221e80..a937c27 100644 --- a/src/main/java/net/micode/notes/ui/NotesListItem.java +++ b/src/main/java/net/micode/notes/ui/NotesListItem.java @@ -30,7 +30,7 @@ import net.micode.notes.tool.DataUtils; import net.micode.notes.tool.ResourceParser.NoteItemBgResources; -public class NotesListItem extends LinearLayout { +public class NotesListItem extends LinearLayout { // 继承自 LinearLayout 类 private ImageView mAlert; private TextView mTitle; private TextView mTime; @@ -38,7 +38,7 @@ public class NotesListItem extends LinearLayout { private NoteItemData mItemData; private CheckBox mCheckBox; - public NotesListItem(Context context) { + public NotesListItem(Context context) { // 构造函数 super(context); inflate(context, R.layout.note_item, this); mAlert = (ImageView) findViewById(R.id.iv_alert_icon); @@ -48,7 +48,7 @@ public class NotesListItem extends LinearLayout { mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); } - public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { + public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { // 绑定数据 if (choiceMode && data.getType() == Notes.TYPE_NOTE) { mCheckBox.setVisibility(View.VISIBLE); mCheckBox.setChecked(checked); @@ -57,14 +57,14 @@ public class NotesListItem extends LinearLayout { } mItemData = data; - if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { + if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { // 如果是通话记录文件夹 mCallName.setVisibility(View.GONE); mAlert.setVisibility(View.VISIBLE); mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); mTitle.setText(context.getString(R.string.call_record_folder_name) + context.getString(R.string.format_folder_files_count, data.getNotesCount())); mAlert.setImageResource(R.drawable.call_record); - } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) { + } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) {// 如果是通话记录 mCallName.setVisibility(View.VISIBLE); mCallName.setText(data.getCallName()); mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem); @@ -75,7 +75,7 @@ public class NotesListItem extends LinearLayout { } else { mAlert.setVisibility(View.GONE); } - } else { + } else { // 如果是笔记 mCallName.setVisibility(View.GONE); mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); @@ -94,12 +94,12 @@ public class NotesListItem extends LinearLayout { } } } - mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); + mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate()));// 设置时间 setBackground(data); } - private void setBackground(NoteItemData data) { + private void setBackground(NoteItemData data) {// 设置背景 int id = data.getBgColorId(); if (data.getType() == Notes.TYPE_NOTE) { if (data.isSingle() || data.isOneFollowingFolder()) { diff --git a/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java b/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java index 07c5f7e..e88d03c 100644 --- a/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java +++ b/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java @@ -48,20 +48,21 @@ import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.gtask.remote.GTaskSyncService; -public class NotesPreferenceActivity extends PreferenceActivity { - public static final String PREFERENCE_NAME = "notes_preferences"; +public class NotesPreferenceActivity extends PreferenceActivity { // implements + public static final String PREFERENCE_NAME = "notes_preferences";// "notes_preferences"; - public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name"; + public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name";// "pref_key_account_name"; - public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time"; + public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time";// "pref_last_sync_time"; - public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear"; + public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear";// "pref_key_bg_random_appear"; - private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; + private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key";// "pref_sync_account_key"; - private static final String AUTHORITIES_FILTER_KEY = "authorities"; + private static final String AUTHORITIES_FILTER_KEY = "authorities";// "authorities"; - private PreferenceCategory mAccountCategory; + private PreferenceCategory mAccountCategory;// = (PreferenceCategory) + // findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); private GTaskReceiver mReceiver; @@ -70,17 +71,17 @@ public class NotesPreferenceActivity extends PreferenceActivity { private boolean mHasAddedAccount; @Override - protected void onCreate(Bundle icicle) { + protected void onCreate(Bundle icicle) { //创建 super.onCreate(icicle); /* using the app icon for navigation */ - getActionBar().setDisplayHomeAsUpEnabled(true); + getActionBar().setDisplayHomeAsUpEnabled(true);//设置返回键 addPreferencesFromResource(R.xml.preferences); - mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY); + mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);//获取PreferenceCategory mReceiver = new GTaskReceiver(); IntentFilter filter = new IntentFilter(); - filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); + filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);//添加广播 registerReceiver(mReceiver, filter); mOriAccounts = null; @@ -89,14 +90,14 @@ public class NotesPreferenceActivity extends PreferenceActivity { } @Override - protected void onResume() { + protected void onResume() {//恢复 super.onResume(); // need to set sync account automatically if user has added a new // account - if (mHasAddedAccount) { + if (mHasAddedAccount) {//如果已经添加了账户 Account[] accounts = getGoogleAccounts(); - if (mOriAccounts != null && accounts.length > mOriAccounts.length) { + if (mOriAccounts != null && accounts.length > mOriAccounts.length) {//如果原来的账户不为空并且账户数大于原来的账户数 for (Account accountNew : accounts) { boolean found = false; for (Account accountOld : mOriAccounts) { @@ -117,21 +118,21 @@ public class NotesPreferenceActivity extends PreferenceActivity { } @Override - protected void onDestroy() { + protected void onDestroy() {//销毁 if (mReceiver != null) { unregisterReceiver(mReceiver); } super.onDestroy(); } - private void loadAccountPreference() { + private void loadAccountPreference() {//加载账户 mAccountCategory.removeAll(); Preference accountPref = new Preference(this); final String defaultAccount = getSyncAccountName(this); accountPref.setTitle(getString(R.string.preferences_account_title)); accountPref.setSummary(getString(R.string.preferences_account_summary)); - accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { + accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { //点击事件 public boolean onPreferenceClick(Preference preference) { if (!GTaskSyncService.isSyncing()) { if (TextUtils.isEmpty(defaultAccount)) { @@ -151,15 +152,15 @@ public class NotesPreferenceActivity extends PreferenceActivity { } }); - mAccountCategory.addPreference(accountPref); + mAccountCategory.addPreference(accountPref); //添加账户 } - private void loadSyncButton() { + private void loadSyncButton() { //加载同步按钮 Button syncButton = (Button) findViewById(R.id.preference_sync_button); TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview); // set button state - if (GTaskSyncService.isSyncing()) { + if (GTaskSyncService.isSyncing()) {//如果正在同步 syncButton.setText(getString(R.string.preferences_button_sync_cancel)); syncButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { @@ -167,22 +168,22 @@ public class NotesPreferenceActivity extends PreferenceActivity { } }); } else { - syncButton.setText(getString(R.string.preferences_button_sync_immediately)); + syncButton.setText(getString(R.string.preferences_button_sync_immediately));//立即同步 syncButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { GTaskSyncService.startSync(NotesPreferenceActivity.this); } }); } - syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this))); + syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));//如果账户名不为空 // set last sync time - if (GTaskSyncService.isSyncing()) { + if (GTaskSyncService.isSyncing()) {//如果正在同步 lastSyncTimeView.setText(GTaskSyncService.getProgressString()); lastSyncTimeView.setVisibility(View.VISIBLE); } else { long lastSyncTime = getLastSyncTime(this); - if (lastSyncTime != 0) { + if (lastSyncTime != 0) {//如果最后同步时间不为0 lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time, DateFormat.format(getString(R.string.preferences_last_sync_time_format), lastSyncTime))); @@ -193,13 +194,13 @@ public class NotesPreferenceActivity extends PreferenceActivity { } } - private void refreshUI() { + private void refreshUI() {//刷新UI loadAccountPreference(); loadSyncButton(); } - private void showSelectAccountAlertDialog() { - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); + private void showSelectAccountAlertDialog() {//显示选择账户对话框 + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);//创建对话框 View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); @@ -216,7 +217,7 @@ public class NotesPreferenceActivity extends PreferenceActivity { mOriAccounts = accounts; mHasAddedAccount = false; - if (accounts.length > 0) { + if (accounts.length > 0) { //如果账户数大于0 CharSequence[] items = new CharSequence[accounts.length]; final CharSequence[] itemMapping = items; int checkedItem = -1; @@ -227,7 +228,7 @@ public class NotesPreferenceActivity extends PreferenceActivity { } items[index++] = account.name; } - dialogBuilder.setSingleChoiceItems(items, checkedItem, + dialogBuilder.setSingleChoiceItems(items, checkedItem, //设置单选按钮 new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { setSyncAccount(itemMapping[which].toString()); @@ -238,9 +239,9 @@ public class NotesPreferenceActivity extends PreferenceActivity { } View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); - dialogBuilder.setView(addAccountView); + dialogBuilder.setView(addAccountView);//设置视图 - final AlertDialog dialog = dialogBuilder.show(); + final AlertDialog dialog = dialogBuilder.show(); //显示对话框 addAccountView.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mHasAddedAccount = true; @@ -254,7 +255,7 @@ public class NotesPreferenceActivity extends PreferenceActivity { }); } - private void showChangeAccountConfirmAlertDialog() { + private void showChangeAccountConfirmAlertDialog() { //显示更改账户确认对话框 AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); @@ -270,7 +271,7 @@ public class NotesPreferenceActivity extends PreferenceActivity { getString(R.string.preferences_menu_remove_account), getString(R.string.preferences_menu_cancel) }; - dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() { + dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {//设置列表项 public void onClick(DialogInterface dialog, int which) { if (which == 0) { showSelectAccountAlertDialog(); @@ -283,12 +284,12 @@ public class NotesPreferenceActivity extends PreferenceActivity { dialogBuilder.show(); } - private Account[] getGoogleAccounts() { + private Account[] getGoogleAccounts() {//获取谷歌账户 AccountManager accountManager = AccountManager.get(this); return accountManager.getAccountsByType("com.google"); } - private void setSyncAccount(String account) { + private void setSyncAccount(String account) {//设置同步账户 if (!getSyncAccountName(this).equals(account)) { SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); @@ -318,7 +319,7 @@ public class NotesPreferenceActivity extends PreferenceActivity { } } - private void removeSyncAccount() { + private void removeSyncAccount() {//移除同步账户 SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) { @@ -330,7 +331,7 @@ public class NotesPreferenceActivity extends PreferenceActivity { editor.commit(); // clean up local gtask related info - new Thread(new Runnable() { + new Thread(new Runnable() {//新建线程 public void run() { ContentValues values = new ContentValues(); values.put(NoteColumns.GTASK_ID, ""); @@ -340,13 +341,13 @@ public class NotesPreferenceActivity extends PreferenceActivity { }).start(); } - public static String getSyncAccountName(Context context) { + public static String getSyncAccountName(Context context) {//获取同步账户名 SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); } - public static void setLastSyncTime(Context context, long time) { + public static void setLastSyncTime(Context context, long time) {//设置最后同步时间 SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); @@ -354,13 +355,13 @@ public class NotesPreferenceActivity extends PreferenceActivity { editor.commit(); } - public static long getLastSyncTime(Context context) { + public static long getLastSyncTime(Context context) {//获取最后同步时间 SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); } - private class GTaskReceiver extends BroadcastReceiver { + private class GTaskReceiver extends BroadcastReceiver {//广播接收器 @Override public void onReceive(Context context, Intent intent) { @@ -374,7 +375,7 @@ public class NotesPreferenceActivity extends PreferenceActivity { } } - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(MenuItem item) {//选项菜单 switch (item.getItemId()) { case android.R.id.home: Intent intent = new Intent(this, NotesListActivity.class);