|
|
|
|
/**
|
|
|
|
|
* 版权声明,说明该代码是MiCode开源社区的版权所有,并在Apache License 2.0下授权。
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
package net.micode.notes.ui;
|
|
|
|
|
|
|
|
|
|
// 导入所需的Android库和自定义包
|
|
|
|
|
|
|
|
|
|
public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
|
|
|
|
|
// 定义了一些查询操作的token,用于识别不同的后台查询操作
|
|
|
|
|
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
|
|
|
|
|
private static final int FOLDER_LIST_QUERY_TOKEN = 1;
|
|
|
|
|
|
|
|
|
|
// 定义了菜单项的ID
|
|
|
|
|
private static final int MENU_FOLDER_DELETE = 0;
|
|
|
|
|
private static final int MENU_FOLDER_VIEW = 1;
|
|
|
|
|
private static final int MENU_FOLDER_CHANGE_NAME = 2;
|
|
|
|
|
|
|
|
|
|
// 定义了用户首次使用应用时显示的介绍信息的SharedPreferences键
|
|
|
|
|
private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction";
|
|
|
|
|
|
|
|
|
|
// 枚举,定义了不同的列表编辑状态
|
|
|
|
|
private enum ListEditState {
|
|
|
|
|
NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 类变量定义
|
|
|
|
|
private ListEditState mState;
|
|
|
|
|
private BackgroundQueryHandler mBackgroundQueryHandler;
|
|
|
|
|
private NotesListAdapter mNotesListAdapter;
|
|
|
|
|
private ListView mNotesListView;
|
|
|
|
|
private Button mAddNewNote;
|
|
|
|
|
private boolean mDispatch;
|
|
|
|
|
private int mOriginY;
|
|
|
|
|
private int mDispatchY;
|
|
|
|
|
private TextView mTitleBar;
|
|
|
|
|
private long mCurrentFolderId;
|
|
|
|
|
private ContentResolver mContentResolver;
|
|
|
|
|
private ModeCallback mModeCallBack;
|
|
|
|
|
private static final String TAG = "NotesListActivity";
|
|
|
|
|
private static final int NOTES_LISTVIEW_SCROLL_RATE = 30;
|
|
|
|
|
private NoteItemData mFocusNoteDataItem;
|
|
|
|
|
private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?";
|
|
|
|
|
private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>?"
|
|
|
|
|
+ Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR ("
|
|
|
|
|
+ NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND "
|
|
|
|
|
+ NoteColumns.NOTES_COUNT + ">0)";
|
|
|
|
|
private final static int REQUEST_CODE_OPEN_NODE = 102;
|
|
|
|
|
private final static int REQUEST_CODE_NEW_NODE = 103;
|
|
|
|
|
|
|
|
|
|
// onCreate方法,初始化Activity
|
|
|
|
|
@Override
|
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
setContentView(R.layout.note_list);
|
|
|
|
|
initResources();
|
|
|
|
|
|
|
|
|
|
// 用户首次使用应用时,插入介绍信息
|
|
|
|
|
setAppInfoFromRawRes();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onActivityResult方法,处理其他Activity返回的结果
|
|
|
|
|
@Override
|
|
|
|
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// setAppInfoFromRawRes方法,从raw资源中读取介绍信息并显示
|
|
|
|
|
private void setAppInfoFromRawRes() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onStart方法,Activity启动时开始异步查询笔记列表
|
|
|
|
|
@Override
|
|
|
|
|
protected void onStart() {
|
|
|
|
|
super.onStart();
|
|
|
|
|
startAsyncNotesListQuery();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// initResources方法,初始化资源
|
|
|
|
|
private void initResources() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ModeCallback内部类,实现了ListView的MultiChoiceModeListener和OnMenuItemClickListener接口
|
|
|
|
|
private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewNoteOnTouchListener内部类,处理“新建笔记”按钮的触摸事件
|
|
|
|
|
private class NewNoteOnTouchListener implements OnTouchListener {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// startAsyncNotesListQuery方法,开始异步查询笔记列表
|
|
|
|
|
private void startAsyncNotesListQuery() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// BackgroundQueryHandler内部类,继承自AsyncQueryHandler,处理异步查询完成的回调
|
|
|
|
|
private final class BackgroundQueryHandler extends AsyncQueryHandler {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// showFolderListMenu方法,显示文件夹列表菜单
|
|
|
|
|
private void showFolderListMenu(Cursor cursor) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// createNewNote方法,创建新笔记
|
|
|
|
|
private void createNewNote() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// batchDelete方法,批量删除笔记
|
|
|
|
|
private void batchDelete() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// deleteFolder方法,删除文件夹
|
|
|
|
|
private void deleteFolder(long folderId) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// openNode方法,打开笔记
|
|
|
|
|
private void openNode(NoteItemData data) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// openFolder方法,打开文件夹
|
|
|
|
|
private void openFolder(NoteItemData data) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onClick方法,处理点击事件
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// showSoftInput方法,显示软键盘
|
|
|
|
|
private void showSoftInput() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// hideSoftInput方法,隐藏软键盘
|
|
|
|
|
private void hideSoftInput(View view) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// showCreateOrModifyFolderDialog方法,显示创建或修改文件夹的对话框
|
|
|
|
|
private void showCreateOrModifyFolderDialog(final boolean create) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onBackPressed方法,处理返回键事件
|
|
|
|
|
@Override
|
|
|
|
|
public void onBackPressed() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// updateWidget方法,更新Widget
|
|
|
|
|
private void updateWidget(int appWidgetId, int appWidgetType) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// mFolderOnCreateContextMenuListener变量,用于创建文件夹的上下文菜单
|
|
|
|
|
private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// onContextMenuClosed方法,上下文菜单关闭时的回调
|
|
|
|
|
@Override
|
|
|
|
|
public void onContextMenuClosed(Menu menu) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onContextItemSelected方法,处理上下文菜单项的选中事件
|
|
|
|
|
@Override
|
|
|
|
|
public boolean onContextItemSelected(MenuItem item) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onPrepareOptionsMenu方法,准备选项菜单
|
|
|
|
|
@Override
|
|
|
|
|
public boolean onPrepareOptionsMenu(Menu menu) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onOptionsItemSelected方法,处理选项菜单项的点击事件
|
|
|
|
|
@Override
|
|
|
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onSearchRequested方法,处理搜索请求
|
|
|
|
|
@Override
|
|
|
|
|
public boolean onSearchRequested() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// exportNoteToText方法,将笔记导出为文本
|
|
|
|
|
private void exportNoteToText() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// isSyncMode方法,判断是否是同步模式
|
|
|
|
|
private boolean isSyncMode() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// startPreferenceActivity方法,启动设置Activity
|
|
|
|
|
private void startPreferenceActivity() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// OnListItemClickListener内部类,实现了ListView的ItemClickListener接口
|
|
|
|
|
private class OnListItemClickListener implements OnItemClickListener {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// startQueryDestinationFolders方法,开始查询目标文件夹
|
|
|
|
|
private void startQueryDestinationFolders() {
|
|
|
|
|
// 省略了部分代码...
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// onItemLongClick方法,处理长按事件
|
|
|
|
|
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|