1. 1. 清单
  2. 2. TO-DO 应用
    1. 2.1. 弃之不用
    2. 2.2. 奇妙清单
    3. 2.3. Cicada 优点
  3. 3. 实现目标
  4. 4. 系统构建
    1. 4.1. 电子邮件系统
      1. 4.1.1. 原因
      2. 4.1.2. 底层实现
        1. 4.1.2.1. 获取待办事项
        2. 4.1.2.2. 共享代办事项
    2. 4.2. 类 MVC 模型
      1. 4.2.1. View 层
      2. 4.2.2. Controller 层
      3. 4.2.3. Model 层
  5. 5. 交互设计
    1. 5.1. 完成任务
    2. 5.2. 新建任务
    3. 5.3. 查看详细任务

Project Cicada# 001:Introduction

摘要:Cicada 中文名「蝉」,是我的第一款 Android 应用,它是基于开源软件 K-9 Mail 库开发的 TO-DO 应用,它的特点在于其基于 E-Mail 协议,支持跨平台,无需注册即可实现任务的共享,即使没有安装 APP,也可以通过邮件来实现大部分功能。本篇为概览,介绍软件的实现的功能,系统架构,UI 及交互。

清单

很多人显然意识到了「一个脑子记不过来」这一惨痛的事实,开始寻求一些解决之道,于是开始接触时间管理、GTD 等概念。然而,这些概念要不过于复杂,不适用于自己的实际生活,要么过于理论,很难套用到具体的行为中去。

而清单则是一个恰到好处的解决方案。一方面,清单充当了思维导图的角色,但你把不同的事项分别存放在不同的清单列表中,实际上已经是对这些事项的第一次梳理,明确了大致分类,方便对自己的日程和时间作出具体的分配和规划。另一方面,清单可以督促我们的行动。很多实验都已经证明了,无论你有没有强迫症,在清单上留有尚待完成的事项,都会激发一个人的行动欲,提高我们的办事效率。

TO-DO 应用

Android 平台上已经有不少 TO-DO 类应用,例如大名鼎鼎的 OmniFocus、Things,TO-DO 和最近很火的 Wunderlist 都是众多 Power User 的必备。

弃之不用

其中 GTD 老牌软件 OmniFocus、Things,你可以为每个事项设定不同的情景,关联不同的人物,在不同的透视下查看,当然,如果你每天都有上百个待办事项,OmniFocus 才是你唯一正确的选择。然而对于我们一般人,这些过于简单或复杂的设定,其实并不适用于大多数人的普通生活。

奇妙清单

「奇妙清单」接近我理想中的清单软件,我也一直将其作为日常生产力软件在使用,它没有复杂的情景设置,也没有任务的无限层级,事实上,从推出到现在,整体的设计和使用理念都没有发生过重大的改变。层级只有「清单 - 事项 - 子任务」三级,它只支持设置到期时间和一次提醒,可以对优先级高的任务打上星标,一款无所不能的 App,往往大多数人会因为学习成本过高而放弃。但「奇妙清单」非常巧妙地把握了这个平衡,在使用时一切功能都恰到好处。

Cicada 优点

1.不是每个人都是 Wunderlist「奇妙清单」的用户,但每个人都有电子邮箱,
  Cicada 基于用户现有的邮箱系统即可实现,任务的存储,分享,通过电子邮箱自动导入关系链
2.「奇妙清单」缺少聚合清单的清单流,导致有的事项容易错过,
  而 Cicada 通过算法进行重要性和任务周期进行事项的颜色标记和智能排序,
    优先安排重要度-周期比高的任务和紧急任务
3.分布式加 Group,可以通过清单 ID 或二维码加入清单而不用一个一个的添加,例如办公室同事或同班同学清单
4.没有客户端也可以使用,跨平台
5.利用邮件的文件传输功能实现文件传输

实现目标

1.实现个人事项的参加,持久化与云同步
2.支持事项的分类、检索与锁定(PIN)
3.支持基于邮件协议的事项分享
4.支持创建、加入清单群(Group),群二维码的生成
5.对邮件内容进行封装,即使在邮件客户端中也能够有良好的阅读体验
6.Material Design 化,并使用 Design Support Library 向下兼容至 Android V2.1
7.Private List 专属隐私列表,并使用 PIN 码保护
8.直接解析 E-Mail 中的联系人,并创建联系人列表
9.过期事项自动存档至回收箱中
10.任务按紧急程度,事项结束日期,持续时间自动排序
11.联系人的管理、分组,消息的接收、退出机制
12.邮件内容的解析,封装与呈现

系统构建

电子邮件系统

原因

1.Cicada 使用电子邮件系统进行事项的分享,而无需搭建自己的服务器后台
2.使用互联网分布式的邮件系统可以将事项发布给地球上的任何人,而不用担心其是否安装客户端
3.电子邮件自带用户关系链,可以直接导入邮箱联系人
4.用户使用现有系统而无需使用一项新服务
5.邮件格式适合于群发,群组讨论
6.与平台无关,电子邮件是一个跨平台的数据协议
7.电子邮件适合长周期重要的事件,事项是对将来事件的计划无需实现即时通讯

I/T Rate

底层实现

Cicada 使用 K-9 Mail 作为底层框架,支持 SMTP/POP3/IMAP,即使团队成员没有使用客户端也可以发布待办任务和查看推送的代办事项

获取待办事项

Cicada 通过搜索邮件特定邮件解析成 XML 数据格式通过 Adapter 绑定到 RecyclerView 上实现将邮件解析成可操作的数据,可以实现任务的紧急的排序,任务的搜索,加入 tag,时间提醒,代办实现的广播等操作

共享代办事项

Cicada 通过解析器将事项信息封装成 HTML 格式的邮件,通过邮件服务器发到各成员的邮箱,如果有安装客户端则用客户端进行解析,否则则按照正常邮件存在。

类 MVC 模型

MVC 模型
MVC 模式(Model-View-Controller)将软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)

MVC 模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能:

(控制器 Controller)-负责转发请求,对请求进行处理
(视图 View)-图形界面设计
(模型 Model) -数据库数据管理和数据库设计

Cicada 将业务逻辑打包为 Model,UI 层设计使用 Material Design 进行呈现,Controller 通过 Activity,Service,Broadcast 和 Receiver 等等机制将用户请求转向 Model 层

View 层

View 层是采用 XML 文件进行界面的描述,包括各种界面组件、动画、交互的设计,分辨率、语言支持,UI 遵循 Material Design

Controller 层

Android 的控制层的重任通常落在了众多的 Acitvity 的肩上,这句话也就暗含了不要在 Acitivity 中写代码,Acitivity 负责对 UI 进行控制,要通过 Activity 交割 Model 业务逻辑层处理,这样做的另外一个原因是 Android 中的 Acitivity 的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉,Controller 可以通过 Activity,Service,Broadcast 和 Receiver 等等机制将用户请求转向 Model 层

Model 层

Model 层用于对数据库的操作、对网络等的操作,Cicada 的 Model 层包括 K-9Mail 库,包括 TCP,Socket 连接管理,邮件数据的封装,数据库的操作,IMAP 服务器响应类,搜索功能及添加的数据解析模块,Group 用户模块,响应来自 Controller 的请求

交互设计

完成任务

完成任务
当任务的时间到达 TimeLine 后,这个任务会从主清单中消失,消失过程为该 TextView 由长方形缩小为一个逐渐缩小旋转着的的圆,最后消失

用户可以选择 Doned 该任务,长按改 TextView,这个 Item 会 Float 起来,阴影范围扩大,此时处于可上下移动的状态,若移动下边的 Item 会跑上来以便改 Item 的插入,等待5000ms,若 Item 不发生移动,着产生水波的动画,将 Item 标绿然后消失

新建任务

新建任务
用户点击 FAB,由 FAB 的位置出现黄色水波填充整个长方形最后出现整个新建任务的 Activity,该层下方的区域为不可编辑状态,FAB 变为分享状态,点击后编辑区域向上滑动,下方出现添加分享人的区域,可以输入邮箱地址或用户名进行添加,添加分享人时,右边的 Button 为 Add,若为空则该按钮变为 Done,点击 Done 则新建任务界面打钩变绿,向下滑出,返回主清单列表,任务出现动画与消失时相反

查看详细任务

查看详细任务
点击该 Item,改 Item 向四周展开覆盖全页,同时底部 Item 消失,同时处于可编辑状态,点击 Back Button 这返回