代码注释

zrm_branch
ZhuRuimin 2 years ago
parent 2fd6a8dbbb
commit 38d2745e70

@ -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<Long, String> mNidToGid;
private GTaskManager() {
private GTaskManager() { // 构造函数
mSyncing = false;
mCancelled = false;
mGTaskListHashMap = new HashMap<String, TaskList>();
@ -99,19 +99,19 @@ public class GTaskManager {
mNidToGid = new HashMap<Long, String>();
}
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<Map.Entry<String, Node>> iter = mGTaskHashMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, Node> 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<Map.Entry<String, TaskList>> iter = mGTaskListHashMap.entrySet().iterator();
while (iter.hasNext()) {
Iterator<Map.Entry<String, TaskList>> iter = mGTaskListHashMap.entrySet().iterator();// 迭代器
while (iter.hasNext()) {// 遍历
Map.Entry<String, TaskList> 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;
}
} // 取消同步
}

@ -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);

@ -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<Void, Void, HashSet<AppWidgetAttribute>>() {
protected HashSet<AppWidgetAttribute> doInBackground(Void... unused) {
HashSet<AppWidgetAttribute> widgets = mNotesListAdapter.getSelectedWidget();
@ -492,7 +492,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
@Override
protected void onPostExecute(HashSet<AppWidgetAttribute> widgets) {
protected void onPostExecute(HashSet<AppWidgetAttribute> 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<AppWidgetAttribute> 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<Void, Void, Integer>() {
@ -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()) {

@ -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<Integer, Boolean> 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<Integer, Boolean>();
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<Long> getSelectedItemIds() {
public HashSet<Long> getSelectedItemIds() {// 该方法用于获取选中的条目的 id
HashSet<Long> itemSet = new HashSet<Long>();
for (Integer position : mSelectedIndex.keySet()) {
if (mSelectedIndex.get(position) == true) {
@ -105,7 +105,7 @@ public class NotesListAdapter extends CursorAdapter {
return itemSet;
}
public HashSet<AppWidgetAttribute> getSelectedWidget() {
public HashSet<AppWidgetAttribute> getSelectedWidget() {// 该方法用于获取选中的条目的 widget
HashSet<AppWidgetAttribute> itemSet = new HashSet<AppWidgetAttribute>();
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<Boolean> values = mSelectedIndex.values();
if (null == values) {
return 0;
}
Iterator<Boolean> iter = values.iterator();
Iterator<Boolean> 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 {

@ -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()) {

@ -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);

Loading…
Cancel
Save