|
|
# 小米便签项目设计文档
|
|
|
|
|
|
## 1. 项目主要功能及其代码实现关系简表
|
|
|
|
|
|
| 功能模块 | 实现类 | 主要功能描述 |
|
|
|
|---------|---------|-----------|
|
|
|
| 便签列表 | NotesListActivity | 显示便签列表,支持文件夹查看、新建便签、删除便签等功能 |
|
|
|
| 便签编辑 | NoteEditActivity | 支持便签的创建、编辑、设置提醒、背景颜色等功能 |
|
|
|
| 数据模型 | Note, WorkingNote | 便签的数据模型,包含便签的基本属性和操作方法 |
|
|
|
| 数据存储 | NotesDatabaseHelper, NotesProvider | 管理SQLite数据库,提供数据访问接口 |
|
|
|
| 桌面小部件 | NoteWidgetProvider_2x, NoteWidgetProvider_4x | 提供2x2和4x4两种大小的桌面小部件 |
|
|
|
| 提醒功能 | AlarmReceiver, AlarmAlertActivity | 提供便签提醒功能 |
|
|
|
| Google同步 | GTaskSyncService | 提供与Google Tasks的同步功能(当前版本已禁用) |
|
|
|
| 数据导出 | BackupUtils | 支持将便签导出为文本文件 |
|
|
|
|
|
|
## 2. 主要的类图与关系
|
|
|
|
|
|
### 数据模型类图
|
|
|
|
|
|
```mermaid
|
|
|
classDiagram
|
|
|
class Note {
|
|
|
+long id
|
|
|
+long parent_id
|
|
|
+String snippet
|
|
|
+long alert_date
|
|
|
+long created_date
|
|
|
+long modified_date
|
|
|
+int bg_color_id
|
|
|
+int type
|
|
|
+int widget_id
|
|
|
+int widget_type
|
|
|
+boolean has_attachment
|
|
|
+getNewNoteId()
|
|
|
+syncNote()
|
|
|
}
|
|
|
|
|
|
class NoteData {
|
|
|
+long textDataId
|
|
|
+long callDataId
|
|
|
+setTextData()
|
|
|
+setCallData()
|
|
|
+pushIntoContentResolver()
|
|
|
}
|
|
|
|
|
|
class WorkingNote {
|
|
|
+long mNoteId
|
|
|
+int mBgColorId
|
|
|
+String mContent
|
|
|
+long mAlertDate
|
|
|
+long mModifiedDate
|
|
|
+int mWidgetId
|
|
|
+int mWidgetType
|
|
|
+boolean mHasAttachment
|
|
|
+long mFolderId
|
|
|
+setAlertDate()
|
|
|
+setBgColorId()
|
|
|
+saveNote()
|
|
|
+createEmptyNote()
|
|
|
}
|
|
|
|
|
|
class Notes {
|
|
|
+AUTHORITY: String
|
|
|
+TYPE_NOTE: int
|
|
|
+TYPE_FOLDER: int
|
|
|
+TYPE_SYSTEM: int
|
|
|
+ID_ROOT_FOLDER: int
|
|
|
+ID_TEMPARAY_FOLDER: int
|
|
|
+ID_CALL_RECORD_FOLDER: int
|
|
|
+ID_TRASH_FOLER: int
|
|
|
}
|
|
|
|
|
|
class NoteColumns {
|
|
|
+ID: String
|
|
|
+PARENT_ID: String
|
|
|
+CREATED_DATE: String
|
|
|
+MODIFIED_DATE: String
|
|
|
+ALERTED_DATE: String
|
|
|
+SNIPPET: String
|
|
|
+WIDGET_ID: String
|
|
|
+WIDGET_TYPE: String
|
|
|
+BG_COLOR_ID: String
|
|
|
+HAS_ATTACHMENT: String
|
|
|
}
|
|
|
|
|
|
class DataColumns {
|
|
|
+ID: String
|
|
|
+MIME_TYPE: String
|
|
|
+NOTE_ID: String
|
|
|
+CREATED_DATE: String
|
|
|
+MODIFIED_DATE: String
|
|
|
+CONTENT: String
|
|
|
+DATA1: String
|
|
|
+DATA2: String
|
|
|
+DATA3: String
|
|
|
+DATA4: String
|
|
|
+DATA5: String
|
|
|
}
|
|
|
|
|
|
Note "1" *-- "1" NoteData : contains
|
|
|
WorkingNote "1" --> "1" Note : uses
|
|
|
Note --> Notes : uses constants
|
|
|
Notes "1" *-- "1" NoteColumns : defines
|
|
|
Notes "1" *-- "1" DataColumns : defines
|
|
|
```
|
|
|
|
|
|
### 数据库模式图
|
|
|
|
|
|
```mermaid
|
|
|
erDiagram
|
|
|
NOTE {
|
|
|
long id PK
|
|
|
long parent_id FK
|
|
|
long alerted_date
|
|
|
int bg_color_id
|
|
|
long created_date
|
|
|
boolean has_attachment
|
|
|
long modified_date
|
|
|
int notes_count
|
|
|
string snippet
|
|
|
int type
|
|
|
int widget_id
|
|
|
int widget_type
|
|
|
long sync_id
|
|
|
boolean local_modified
|
|
|
long origin_parent_id
|
|
|
string gtask_id
|
|
|
long version
|
|
|
}
|
|
|
|
|
|
DATA {
|
|
|
long id PK
|
|
|
string mime_type
|
|
|
long note_id FK
|
|
|
long created_date
|
|
|
long modified_date
|
|
|
string content
|
|
|
int data1
|
|
|
int data2
|
|
|
string data3
|
|
|
string data4
|
|
|
string data5
|
|
|
}
|
|
|
|
|
|
NOTE ||--o{ DATA : "has"
|
|
|
NOTE ||--o{ NOTE : "contains"
|
|
|
```
|
|
|
|
|
|
### 创建新便签的时序图
|
|
|
|
|
|
```mermaid
|
|
|
sequenceDiagram
|
|
|
actor User
|
|
|
participant NLA as NotesListActivity
|
|
|
participant WN as WorkingNote
|
|
|
participant N as Note
|
|
|
participant NP as NotesProvider
|
|
|
participant DB as NotesDatabaseHelper
|
|
|
|
|
|
User->>NLA: Click "New Note"
|
|
|
NLA->>NLA: createNewNote()
|
|
|
NLA->>WN: createEmptyNote()
|
|
|
WN->>N: getNewNoteId()
|
|
|
N->>NP: insert(ContentValues)
|
|
|
NP->>DB: insert into note table
|
|
|
DB-->>NP: return note id
|
|
|
NP-->>N: return Uri with id
|
|
|
N-->>WN: return note id
|
|
|
WN-->>NLA: return WorkingNote instance
|
|
|
NLA->>NLA: startActivity(NoteEditActivity)
|
|
|
```
|
|
|
|
|
|
## 3. 项目架构图
|
|
|
|
|
|
### MVC架构模式
|
|
|
|
|
|
```mermaid
|
|
|
graph TD
|
|
|
A[Model<br>Note, WorkingNote, Notes] --> B[Controller<br>NotesProvider, NotesDatabaseHelper]
|
|
|
B --> A
|
|
|
C[View<br>NotesListActivity, NoteEditActivity] --> B
|
|
|
B --> C
|
|
|
C --> D[用户界面<br>XML布局文件]
|
|
|
D --> C
|
|
|
```
|
|
|
|
|
|
## 4. 项目总体技术点分析
|
|
|
|
|
|
1. **MVC架构模式**:
|
|
|
- Model层:Note、WorkingNote等数据模型类
|
|
|
- View层:NotesListActivity、NoteEditActivity等UI类
|
|
|
- Controller层:NotesProvider、NotesDatabaseHelper等数据控制类
|
|
|
|
|
|
2. **ContentProvider数据访问**:
|
|
|
- 使用ContentProvider(NotesProvider)提供数据访问接口
|
|
|
- 支持CRUD(增删改查)操作
|
|
|
- 通过URI标识不同的数据资源
|
|
|
|
|
|
3. **SQLite数据库存储**:
|
|
|
- 使用SQLite数据库存储便签数据
|
|
|
- 两个主要表:note表和data表
|
|
|
- 使用触发器(Trigger)维护数据一致性
|
|
|
|
|
|
4. **AppWidget桌面小部件**:
|
|
|
- 提供2x2和4x4两种大小的桌面小部件
|
|
|
- 支持通过小部件快速查看和创建便签
|
|
|
|
|
|
5. **同步功能**:
|
|
|
- 支持与Google Tasks同步(当前版本已禁用)
|
|
|
- 使用REST API进行数据同步
|
|
|
|
|
|
6. **提醒功能**:
|
|
|
- 使用AlarmManager实现便签提醒
|
|
|
- 支持设置提醒时间并在到达时间时触发通知
|
|
|
|
|
|
7. **数据导出功能**:
|
|
|
- 支持将便签导出为文本文件
|
|
|
- 支持通过短信或邮件分享便签内容
|
|
|
|
|
|
8. **Material Design设计**:
|
|
|
- 遵循Material Design设计规范
|
|
|
- 提供美观、直观的用户界面 |