标注代码及文档 #7

Merged
pcffgoxks merged 1 commits from develop into main 11 months ago

@ -14,116 +14,150 @@
* limitations under the License. * limitations under the License.
*/ */
/**
* UI
*/
package net.micode.notes.ui; package net.micode.notes.ui;
import android.app.Activity; /**
import android.app.AlertDialog; * Android
import android.app.Dialog; * UI
import android.appwidget.AppWidgetManager; */
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.ActionMode;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Display;
import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
import net.micode.notes.model.WorkingNote;
import net.micode.notes.tool.BackupUtils;
import net.micode.notes.tool.DataUtils;
import net.micode.notes.tool.ResourceParser;
import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute;
import net.micode.notes.widget.NoteWidgetProvider_2x;
import net.micode.notes.widget.NoteWidgetProvider_4x;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashSet;
import android.app.Activity; //表示应用程序中的一个活动,例如界面展示等
import android.app.AlertDialog; //用于显示对话框的类
import android.app.Dialog; //用于创建对话框的类
import android.appwidget.AppWidgetManager; //用于管理桌面小组件的类
import android.content.AsyncQueryHandler; //用于在后台执行异步数据库查询的处理器。
import android.content.ContentResolver; //用于访问应用程序的内容提供者,进行数据的增删改查。
import android.content.ContentValues; //用于存储键值对,用于对数据库进行操作。
import android.content.Context; //表示 Android 应用程序的当前状态,提供访问应用程序的资源和类的接口。
import android.content.DialogInterface; //用于创建对话框与用户进行交互。
import android.content.Intent; //用于在应用程序内部或者不同应用程序之间进行交互或传递信息。
import android.content.SharedPreferences; //用于存储应用程序的轻量级 key-value 数据。
import android.database.Cursor; //用于在数据集中进行移动并访问查询结果。
import android.os.AsyncTask; //用于在后台执行长时间运行的操作,并在主线程更新用户界面。
import android.os.Bundle; //用于传递数据。
import android.preference.PreferenceManager; //用于访问应用程序的默认共享偏好设置。
import android.text.Editable; //表示文本框中的可编辑文本。
import android.text.TextUtils; //用于处理和操作文本数据。
import android.text.TextWatcher; //用于监听文本变化的接口。
import android.util.Log; //用于在调试时记录日志。
import android.view.ActionMode; //用于在用户界面上执行上下文操作的模式。
import android.view.ContextMenu; //用于在视图组件上下文菜单的呈现。
import android.view.ContextMenu.ContextMenuInfo; //提供有关创建上下文菜单的视图组件的额外信息。
import android.view.Display; //表示屏幕上的显示内容。
import android.view.HapticFeedbackConstants; //用于触觉反馈的常量值。
import android.view.LayoutInflater; //用于动态加载 XML 布局文件。
import android.view.Menu; //表示应用程序的菜单。
import android.view.MenuItem; //用于表示菜单项。
import android.view.MenuItem.OnMenuItemClickListener; //用于监听菜单项点击事件的接口。
import android.view.MotionEvent; //用于表示单个事件的运动事件。
import android.view.View; //用户界面上的可视元素。
import android.view.View.OnClickListener; //用于监听视图点击事件的接口。
import android.view.View.OnCreateContextMenuListener; //用于监听创建上下文菜单的接口。
import android.view.View.OnTouchListener; //用于监听视图触摸事件的接口。
import android.view.inputmethod.InputMethodManager; //用于管理输入法框架的接口。
import android.widget.AdapterView; //用于在视图组件中表示数据项的子集合。
import android.widget.AdapterView.OnItemClickListener; //用于监听列表项点击事件的接口。
import android.widget.AdapterView.OnItemLongClickListener; //用于监听列表项长按事件的接口。
import android.widget.Button; //用于在用户界面中表示按钮。
import android.widget.EditText; //用于在用户界面中表示可编辑的文本视图。
import android.widget.ListView; //用于在用户界面中表示列表视图。
import android.widget.PopupMenu; //用于显示弹出菜单的类。
import android.widget.TextView; //用于在用户界面中表示文本视图。
import android.widget.Toast; //用于显示简短消息的类。
import net.micode.notes.R; //引用应用程序的资源。
import net.micode.notes.data.Notes; //包含与笔记相关的数据的类。
import net.micode.notes.data.Notes.NoteColumns; //包含笔记数据列的类。
import net.micode.notes.gtask.remote.GTaskSyncService; //用于与 Google 任务同步服务进行交互的类
import net.micode.notes.model.WorkingNote; //与正在编辑的笔记相关联的类。
import net.micode.notes.tool.BackupUtils; //用于处理备份的工具类
import net.micode.notes.tool.DataUtils; //包含处理数据的实用方法的类。
import net.micode.notes.tool.ResourceParser; //用于解析资源的类。
import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; //用于在笔记列表适配器中表示应用程序小部件属性的类。
import net.micode.notes.widget.NoteWidgetProvider_2x; //用于创建 2x 大小笔记应用程序小部件的类。
import net.micode.notes.widget.NoteWidgetProvider_4x; //用于创建 4x 大小笔记应用程序小部件的类。用于创建 4x 大小笔记应用程序小部件的类。
import java.io.BufferedReader; //用于从字符输入流中读取文本的类。
import java.io.IOException; //用于处理输入输出异常的类。
import java.io.InputStream; //用于表示输入字节流的类。
import java.io.InputStreamReader; //用于从字节流到字符流的桥梁。
import java.util.HashSet; //用于表示一组不重复的元素的类。
/**
* Activity
*
*/
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_NOTE_LIST_QUERY_TOKEN = 0; //定义查询便签列表相关的变量
private static final int FOLDER_LIST_QUERY_TOKEN = 1; private static final int FOLDER_LIST_QUERY_TOKEN = 1; //定义查询的相关变量
private static final int MENU_FOLDER_DELETE = 0; private static final int MENU_FOLDER_DELETE = 0; //标识用户是否选择了删除选项
private static final int MENU_FOLDER_VIEW = 1; private static final int MENU_FOLDER_VIEW = 1; //标识用户选择的外观
private static final int MENU_FOLDER_CHANGE_NAME = 2; private static final int MENU_FOLDER_CHANGE_NAME = 2; //标识用户是否选择重命名
private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction"; private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction";
//定义一个字符串指向应用介绍
/**
*
*
*
* NOTE_LIST便SUB_FOLDER
* CALL_RECORD_FOLDER
*/
private enum ListEditState { private enum ListEditState {
NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
}; };
private ListEditState mState; private ListEditState mState; //定义了一个标识列表编辑状态的变量
private BackgroundQueryHandler mBackgroundQueryHandler;
private NotesListAdapter mNotesListAdapter; private BackgroundQueryHandler mBackgroundQueryHandler; //用于在后台执行数据库查询等操作以避免阻塞UI线程
private ListView mNotesListView; private NotesListAdapter mNotesListAdapter; //用于管理便签列表中数据项的适配器,通常与 ListView 一起使用
private Button mAddNewNote; private ListView mNotesListView; //它表示便签列表的视图,用于显示便签列表中的数据项,
// 并与适配器NotesListAdapter一起工作以展示数据。
private boolean mDispatch; /**
*
*/
private Button mAddNewNote; //声明了一个私有成员变量 mAddNewNote类型为 Button
// 用来表示一个按钮控件,通常用于用户点击以添加新的便签。
private int mOriginY; private boolean mDispatch; //声明了一个私有成员变量 mDispatch类型为 boolean
// 用来表示一个标志位,可能用于控制某些事件的分发。
private int mDispatchY; private int mOriginY; //声明了两个私有成员变量 mOriginY 和 mDispatchY类型为 int
private int mDispatchY; // 可能用于记录某些位置坐标的信息。
private TextView mTitleBar; private TextView mTitleBar; //声明了一个私有成员变量 mTitleBar类型为 TextView
// 用来表示一个文本视图,通常用于显示标题栏的文本信息。
private long mCurrentFolderId; private long mCurrentFolderId; //用来表示当前文件夹的ID。
private ContentResolver mContentResolver; private ContentResolver mContentResolver; //用来获取应用的内容提供者,用于访问应用的数据
private ModeCallback mModeCallBack; private ModeCallback mModeCallBack; //用于处理列表的编辑模式
private static final String TAG = "NotesListActivity"; private static final String TAG = "NotesListActivity"; //通常用于在日志或调试信息中标识类名
public static final int NOTES_LISTVIEW_SCROLL_RATE = 30; public static final int NOTES_LISTVIEW_SCROLL_RATE = 30; //表示便签列表视图的滚动速率
private NoteItemData mFocusNoteDataItem; private NoteItemData mFocusNoteDataItem; //用于表示当前焦点的便签数据项
private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?"; private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?";
@ -131,9 +165,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
+ Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR (" + Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR ("
+ NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND " + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND "
+ NoteColumns.NOTES_COUNT + ">0)"; + NoteColumns.NOTES_COUNT + ">0)";
//分别表示正常的选择条件和根文件夹的选择条件,
//通常用于数据库查询的条件语句
private final static int REQUEST_CODE_OPEN_NODE = 102; private final static int REQUEST_CODE_OPEN_NODE = 102;
private final static int REQUEST_CODE_NEW_NODE = 103; private final static int REQUEST_CODE_NEW_NODE = 103; //分别表示启动Activity时用到的请求码用于区分不同的启动请求
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -147,6 +182,17 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
setAppInfoFromRawRes(); setAppInfoFromRawRes();
} }
/**
*
* Activity
* startActivityForResultActivity
* requestCode
* resultCode
* dataIntent
* @param requestCode
* @param resultCode
* @param data
*/
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK if (resultCode == RESULT_OK
@ -157,6 +203,12 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
} }
} }
/**
* SharedPreferences
* SharedPreferences
* rawWorkingNote
* SharedPreferences
*/
private void setAppInfoFromRawRes() { private void setAppInfoFromRawRes() {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
@ -203,12 +255,22 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
} }
} }
/**
* ActivityActivity
* onStartstartAsyncNotesListQuery
*/
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
startAsyncNotesListQuery(); startAsyncNotesListQuery();
} }
/**
*
* ID便
* Activity
* 便
*/
private void initResources() { private void initResources() {
mContentResolver = this.getContentResolver(); mContentResolver = this.getContentResolver();
mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver());
@ -231,11 +293,23 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mModeCallBack = new ModeCallback(); mModeCallBack = new ModeCallback();
} }
/**
* ModeCallback
* ListView.MultiChoiceModeListener
* OnMenuItemClickListener
*
*/
private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
private DropdownMenu mDropDownMenu; private DropdownMenu mDropDownMenu;
private ActionMode mActionMode; private ActionMode mActionMode;
private MenuItem mMoveMenu; private MenuItem mMoveMenu;
/**
*
* @param mode
* @param menu
* @return
*/
public boolean onCreateActionMode(ActionMode mode, Menu menu) { public boolean onCreateActionMode(ActionMode mode, Menu menu) {
getMenuInflater().inflate(R.menu.note_list_options, menu); getMenuInflater().inflate(R.menu.note_list_options, menu);
menu.findItem(R.id.delete).setOnMenuItemClickListener(this); menu.findItem(R.id.delete).setOnMenuItemClickListener(this);
@ -269,6 +343,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
return true; return true;
} }
/**
*
*/
private void updateMenu() { private void updateMenu() {
int selectedCount = mNotesListAdapter.getSelectedCount(); int selectedCount = mNotesListAdapter.getSelectedCount();
// Update dropdown menu // Update dropdown menu
@ -286,11 +363,23 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
} }
} }
/**
*
* @param mode
* @param menu
* @return
*/
public boolean onPrepareActionMode(ActionMode mode, Menu menu) { public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
} }
/**
*
* @param mode
* @param item
* @return
*/
public boolean onActionItemClicked(ActionMode mode, MenuItem item) { public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
@ -319,28 +408,26 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
return true; return true;
} }
switch (item.getItemId()) { int itemId = item.getItemId();
case R.id.delete: if (itemId == R.id.delete) {
AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
builder.setTitle(getString(R.string.alert_title_delete)); builder.setTitle(getString(R.string.alert_title_delete));
builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setMessage(getString(R.string.alert_message_delete_notes, builder.setMessage(getString(R.string.alert_message_delete_notes,
mNotesListAdapter.getSelectedCount())); mNotesListAdapter.getSelectedCount()));
builder.setPositiveButton(android.R.string.ok, builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, public void onClick(DialogInterface dialog,
int which) { int which) {
batchDelete(); batchDelete();
} }
}); });
builder.setNegativeButton(android.R.string.cancel, null); builder.setNegativeButton(android.R.string.cancel, null);
builder.show(); builder.show();
break; } else if (itemId == R.id.move) {
case R.id.move: startQueryDestinationFolders();
startQueryDestinationFolders(); } else {
break; return false;
default:
return false;
} }
return true; return true;
} }
@ -558,12 +645,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
} }
public void onClick(View v) { public void onClick(View v) {
switch (v.getId()) { if (v.getId() == R.id.btn_new_note) {
case R.id.btn_new_note: createNewNote();
createNewNote();
break;
default:
break;
} }
} }
@ -780,40 +863,27 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { int itemId = item.getItemId();
case R.id.menu_new_folder: { if (itemId == R.id.menu_new_folder) {
showCreateOrModifyFolderDialog(true); showCreateOrModifyFolderDialog(true);
break; } else if (itemId == R.id.menu_export_text) {
} exportNoteToText();
case R.id.menu_export_text: { } else if (itemId == R.id.menu_sync) {
exportNoteToText(); if (isSyncMode()) {
break; if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) {
} GTaskSyncService.startSync(this);
case R.id.menu_sync: {
if (isSyncMode()) {
if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) {
GTaskSyncService.startSync(this);
} else {
GTaskSyncService.cancelSync(this);
}
} else { } else {
startPreferenceActivity(); GTaskSyncService.cancelSync(this);
} }
break; } else {
}
case R.id.menu_setting: {
startPreferenceActivity(); startPreferenceActivity();
break;
} }
case R.id.menu_new_note: { } else if (itemId == R.id.menu_setting) {
createNewNote(); startPreferenceActivity();
break; } else if (itemId == R.id.menu_new_note) {
} createNewNote();
case R.id.menu_search: } else if (itemId == R.id.menu_search) {
onSearchRequested(); onSearchRequested();
break;
default:
break;
} }
return true; return true;
} }

Loading…
Cancel
Save