Compare commits

...

4 Commits

@ -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;
}
} // 取消同步
}

@ -14,7 +14,7 @@
* limitations under the License.
*/
package net.micode.notes.ui;
package net.micode.notes.ui; //该类所在的包名
import android.content.Context;
import android.database.Cursor;
@ -29,25 +29,30 @@ import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
// FoldersListAdapter 类的定义,扩展了 CursorAdapter 类。
public class FoldersListAdapter extends CursorAdapter {
public static final String [] PROJECTION = {
NoteColumns.ID,
NoteColumns.SNIPPET
};
// 定义数据库查询的投影和列的索引
public static final int ID_COLUMN = 0;
public static final int NAME_COLUMN = 1;
// FoldersListAdapter 类的构造函数,它调用父类的构造函数。
public FoldersListAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
//CursorAdapter 类的一个方法的实现,用于创建新的列表项视图。
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return new FolderListItem(context);
}
// CursorAdapter 类的一个方法的实现,用于将数据绑定到列表项视图上。
@Override
public void bindView(View view, Context context, Cursor cursor) {
if (view instanceof FolderListItem) {
@ -57,12 +62,15 @@ public class FoldersListAdapter extends CursorAdapter {
}
}
// 自定义方法,用于获取指定位置的文件夹名称
public String getFolderName(Context context, int position) {
Cursor cursor = (Cursor) getItem(position);
return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context
.getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN);
}
// FoldersListAdapter 类的一个内部类,用于表示列表项视图。它扩展了 LinearLayout 类,并维护了一个 TextView 来显示文件夹名称。
// bind() 方法用于将数据绑定到列表项视图上
private class FolderListItem extends LinearLayout {
private TextView mName;

@ -74,7 +74,7 @@ import java.util.regex.Pattern;
public class NoteEditActivity extends Activity implements OnClickListener,
NoteSettingChangedListener, OnTextViewChangeListener {
private class HeadViewHolder {
private class HeadViewHolder { // 头部视图的持有者
public TextView tvModified;
public ImageView ivAlertIcon;
@ -85,7 +85,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map<Integer, Integer> sBgSelectorBtnsMap = new HashMap<Integer, Integer>();
static {
static { // 背景选择器按钮的映射
sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW);
sBgSelectorBtnsMap.put(R.id.iv_bg_red, ResourceParser.RED);
sBgSelectorBtnsMap.put(R.id.iv_bg_blue, ResourceParser.BLUE);
@ -94,7 +94,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map<Integer, Integer> sBgSelectorSelectionMap = new HashMap<Integer, Integer>();
static {
static { // 背景选择器选择的映射
sBgSelectorSelectionMap.put(ResourceParser.YELLOW, R.id.iv_bg_yellow_select);
sBgSelectorSelectionMap.put(ResourceParser.RED, R.id.iv_bg_red_select);
sBgSelectorSelectionMap.put(ResourceParser.BLUE, R.id.iv_bg_blue_select);
@ -103,7 +103,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map<Integer, Integer> sFontSizeBtnsMap = new HashMap<Integer, Integer>();
static {
static { // 字体大小按钮的映射
sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE);
sFontSizeBtnsMap.put(R.id.ll_font_small, ResourceParser.TEXT_SMALL);
sFontSizeBtnsMap.put(R.id.ll_font_normal, ResourceParser.TEXT_MEDIUM);
@ -111,54 +111,54 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map<Integer, Integer> sFontSelectorSelectionMap = new HashMap<Integer, Integer>();
static {
static {// 字体选择器选择的映射
sFontSelectorSelectionMap.put(ResourceParser.TEXT_LARGE, R.id.iv_large_select);
sFontSelectorSelectionMap.put(ResourceParser.TEXT_SMALL, R.id.iv_small_select);
sFontSelectorSelectionMap.put(ResourceParser.TEXT_MEDIUM, R.id.iv_medium_select);
sFontSelectorSelectionMap.put(ResourceParser.TEXT_SUPER, R.id.iv_super_select);
}
private static final String TAG = "NoteEditActivity";
private static final String TAG = "NoteEditActivity";// 标签
private HeadViewHolder mNoteHeaderHolder;
private HeadViewHolder mNoteHeaderHolder;// 头部视图的持有者
private View mHeadViewPanel;
private View mHeadViewPanel;// 头部视图面板
private View mNoteBgColorSelector;
private View mNoteBgColorSelector;// 笔记背景颜色选择器
private View mFontSizeSelector;
private View mFontSizeSelector;// 字体大小选择器
private EditText mNoteEditor;
private EditText mNoteEditor;// 笔记编辑器
private View mNoteEditorPanel;
private View mNoteEditorPanel;// 笔记编辑器面板
private WorkingNote mWorkingNote;
private WorkingNote mWorkingNote;// 工作笔记
private SharedPreferences mSharedPrefs;
private int mFontSizeId;
private SharedPreferences mSharedPrefs;// 共享首选项
private int mFontSizeId;// 字体大小ID
private static final String PREFERENCE_FONT_SIZE = "pref_font_size";
private static final String PREFERENCE_FONT_SIZE = "pref_font_size";// 字体大小首选项
private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10;
private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10;// 快捷方式图标标题的最大长度
public static final String TAG_CHECKED = String.valueOf('\u221A');
public static final String TAG_UNCHECKED = String.valueOf('\u25A1');
public static final String TAG_CHECKED = String.valueOf('\u221A');// 标签已选中
public static final String TAG_UNCHECKED = String.valueOf('\u25A1');// 标签未选中
private LinearLayout mEditTextList;
private LinearLayout mEditTextList;// 编辑文本列表
private String mUserQuery;
private Pattern mPattern;
private String mUserQuery;// 用户查询
private Pattern mPattern;// 模式
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.note_edit);
protected void onCreate(Bundle savedInstanceState) {// 创建
super.onCreate(savedInstanceState);// 调用超类的方法
this.setContentView(R.layout.note_edit);// 设置布局
if (savedInstanceState == null && !initActivityState(getIntent())) {
if (savedInstanceState == null && !initActivityState(getIntent())) {// 如果保存的实例状态为空且初始化活动状态失败
finish();
return;
}
initResources();
initResources();// 初始化资源
}
/**
@ -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);

@ -37,7 +37,7 @@ import net.micode.notes.R;
import java.util.HashMap;
import java.util.Map;
public class NoteEditText extends EditText {
public class NoteEditText extends EditText {//继承自EditText
private static final String TAG = "NoteEditText";
private int mIndex;
private int mSelectionStartBeforeDelete;
@ -56,51 +56,51 @@ public class NoteEditText extends EditText {
/**
* Call by the {@link NoteEditActivity} to delete or add edit text
*/
public interface OnTextViewChangeListener {
public interface OnTextViewChangeListener {//接口
/**
* Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens
* and the text is null
*/
void onEditTextDelete(int index, String text);
void onEditTextDelete(int index, String text);//删除当前的edittext
/**
* Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER}
* happen
*/
void onEditTextEnter(int index, String text);
void onEditTextEnter(int index, String text);//在当前的edittext后面添加edittext
/**
* Hide or show item option when text change
*/
void onTextChange(int index, boolean hasText);
void onTextChange(int index, boolean hasText);//隐藏或显示item选项
}
private OnTextViewChangeListener mOnTextViewChangeListener;
private OnTextViewChangeListener mOnTextViewChangeListener;//接口对象
public NoteEditText(Context context) {
public NoteEditText(Context context) {//构造函数
super(context, null);
mIndex = 0;
}
public void setIndex(int index) {
mIndex = index;
}
}//设置index
public void setOnTextViewChangeListener(OnTextViewChangeListener listener) {
public void setOnTextViewChangeListener(OnTextViewChangeListener listener) {//设置接口对象
mOnTextViewChangeListener = listener;
}
public NoteEditText(Context context, AttributeSet attrs) {
public NoteEditText(Context context, AttributeSet attrs) {//构造函数
super(context, attrs, android.R.attr.editTextStyle);
}
public NoteEditText(Context context, AttributeSet attrs, int defStyle) {
public NoteEditText(Context context, AttributeSet attrs, int defStyle) {//构造函数
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(MotionEvent event) {
public boolean onTouchEvent(MotionEvent event) {//触摸事件
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
@ -122,7 +122,7 @@ public class NoteEditText extends EditText {
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
public boolean onKeyDown(int keyCode, KeyEvent event) {//按键事件
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
if (mOnTextViewChangeListener != null) {
@ -139,7 +139,7 @@ public class NoteEditText extends EditText {
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
public boolean onKeyUp(int keyCode, KeyEvent event) {//按键事件
switch(keyCode) {
case KeyEvent.KEYCODE_DEL:
if (mOnTextViewChangeListener != null) {
@ -168,7 +168,7 @@ public class NoteEditText extends EditText {
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {//焦点改变事件
if (mOnTextViewChangeListener != null) {
if (!focused && TextUtils.isEmpty(getText())) {
mOnTextViewChangeListener.onTextChange(mIndex, false);
@ -180,7 +180,7 @@ public class NoteEditText extends EditText {
}
@Override
protected void onCreateContextMenu(ContextMenu menu) {
protected void onCreateContextMenu(ContextMenu menu) {//创建上下文菜单
if (getText() instanceof Spanned) {
int selStart = getSelectionStart();
int selEnd = getSelectionEnd();

@ -27,7 +27,7 @@ import net.micode.notes.tool.DataUtils;
public class NoteItemData {
static final String [] PROJECTION = new String [] {
static final String [] PROJECTION = new String [] {//投影
NoteColumns.ID,
NoteColumns.ALERTED_DATE,
NoteColumns.BG_COLOR_ID,
@ -76,7 +76,7 @@ public class NoteItemData {
private boolean mIsOneNoteFollowingFolder;
private boolean mIsMultiNotesFollowingFolder;
public NoteItemData(Context context, Cursor cursor) {
public NoteItemData(Context context, Cursor cursor) {//构造函数
mId = cursor.getLong(ID_COLUMN);
mAlertDate = cursor.getLong(ALERTED_DATE_COLUMN);
mBgColorId = cursor.getInt(BG_COLOR_ID_COLUMN);
@ -109,14 +109,14 @@ public class NoteItemData {
checkPostion(cursor);
}
private void checkPostion(Cursor cursor) {
private void checkPostion(Cursor cursor) {//检查位置
mIsLastItem = cursor.isLast() ? true : false;
mIsFirstItem = cursor.isFirst() ? true : false;
mIsOnlyOneItem = (cursor.getCount() == 1);
mIsMultiNotesFollowingFolder = false;
mIsOneNoteFollowingFolder = false;
if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {
if (mType == Notes.TYPE_NOTE && !mIsFirstItem) {//如果是笔记并且不是第一个
int position = cursor.getPosition();
if (cursor.moveToPrevious()) {
if (cursor.getInt(TYPE_COLUMN) == Notes.TYPE_FOLDER
@ -136,89 +136,89 @@ public class NoteItemData {
public boolean isOneFollowingFolder() {
return mIsOneNoteFollowingFolder;
}
}//是否是一个文件夹
public boolean isMultiFollowingFolder() {
return mIsMultiNotesFollowingFolder;
}
}//是否是多个文件夹
public boolean isLast() {
return mIsLastItem;
}
}//是否是最后一个
public String getCallName() {
return mName;
}
}//获取呼叫名字
public boolean isFirst() {
return mIsFirstItem;
}
}//是否是第一个
public boolean isSingle() {
return mIsOnlyOneItem;
}
}//是否是单个
public long getId() {
return mId;
}
}//获取id
public long getAlertDate() {
return mAlertDate;
}
}//获取提醒日期
public long getCreatedDate() {
return mCreatedDate;
}
}//获取创建日期
public boolean hasAttachment() {
return mHasAttachment;
}
}//是否有附件
public long getModifiedDate() {
return mModifiedDate;
}
}//获取修改日期
public int getBgColorId() {
return mBgColorId;
}
}//获取背景颜色id
public long getParentId() {
return mParentId;
}
}//获取父id
public int getNotesCount() {
return mNotesCount;
}
}//获取笔记数量
public long getFolderId () {
return mParentId;
}
}//获取文件夹id
public int getType() {
return mType;
}
}//获取类型
public int getWidgetType() {
return mWidgetType;
}
}//获取小部件类型
public int getWidgetId() {
return mWidgetId;
}
}//获取小部件id
public String getSnippet() {
return mSnippet;
}
}//获取片段
public boolean hasAlert() {
return (mAlertDate > 0);
}
}//是否有提醒
public boolean isCallRecord() {
public boolean isCallRecord() {//是否是呼叫记录
return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber));
}
public static int getNoteType(Cursor cursor) {
return cursor.getInt(TYPE_COLUMN);
}
}//获取笔记类型
}

@ -78,7 +78,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashSet;
public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { //用来显示所有的笔记
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
private static final int FOLDER_LIST_QUERY_TOKEN = 1;
@ -136,7 +136,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private final static int REQUEST_CODE_NEW_NODE = 103;
@Override
protected void onCreate(Bundle savedInstanceState) {
protected void onCreate(Bundle savedInstanceState) {//创建
super.onCreate(savedInstanceState);
setContentView(R.layout.note_list);
initResources();
@ -148,7 +148,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {//返回
if (resultCode == RESULT_OK
&& (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) {
mNotesListAdapter.changeCursor(null);
@ -157,7 +157,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}
private void setAppInfoFromRawRes() {
private void setAppInfoFromRawRes() {//设置应用信息
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
StringBuilder sb = new StringBuilder();
@ -204,12 +204,12 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
@Override
protected void onStart() {
protected void onStart() {//开始
super.onStart();
startAsyncNotesListQuery();
}
private void initResources() {
private void initResources() {//初始化资源
mContentResolver = this.getContentResolver();
mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver());
mCurrentFolderId = Notes.ID_ROOT_FOLDER;
@ -231,12 +231,12 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mModeCallBack = new ModeCallback();
}
private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {//模式回调
private DropdownMenu mDropDownMenu;
private ActionMode mActionMode;
private MenuItem mMoveMenu;
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {//创建
getMenuInflater().inflate(R.menu.note_list_options, menu);
menu.findItem(R.id.delete).setOnMenuItemClickListener(this);
mMoveMenu = menu.findItem(R.id.move);
@ -269,7 +269,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
return true;
}
private void updateMenu() {
private void updateMenu() {//更新菜单
int selectedCount = mNotesListAdapter.getSelectedCount();
// Update dropdown menu
String format = getResources().getString(R.string.menu_select_title, selectedCount);
@ -286,17 +286,17 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {//准备
// TODO Auto-generated method stub
return false;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {//点击
// TODO Auto-generated method stub
return false;
}
public void onDestroyActionMode(ActionMode mode) {
public void onDestroyActionMode(ActionMode mode) {//销毁
mNotesListAdapter.setChoiceMode(false);
mNotesListView.setLongClickable(true);
mAddNewNote.setVisibility(View.VISIBLE);
@ -304,7 +304,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
public void finishActionMode() {
mActionMode.finish();
}
}//结束
public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
boolean checked) {
@ -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