Compare commits

...

30 Commits

Author SHA1 Message Date
叶媚杰 f0e25bb189 实践总结报告
2 years ago
叶媚杰 b985266113 实践总结报告
2 years ago
叶媚杰 ea9b3529c9 代码标注
2 years ago
叶媚杰 e62a4bd56c 贡献
2 years ago
叶媚杰 46c4feac5a 演示
2 years ago
叶媚杰 29f15045c9 PPT
2 years ago
叶媚杰 e0882eb73d UML
2 years ago
叶媚杰 6c38874082 doc
2 years ago
叶媚杰 eaf5f044e6 维护需求与设计方案
2 years ago
叶媚杰 0e8f154d56 答辩ppt
2 years ago
叶媚杰 9b837e0a85 虚拟机及真机运行视频
2 years ago
叶媚杰 37b2b396cb 质量分析报告
2 years ago
叶媚杰 d439ed7d03 UML
2 years ago
叶媚杰 69c82797d4 详细设计
2 years ago
叶媚杰 55a3cbbfee 新功能用例图
2 years ago
叶媚杰 90565ed317 新功能顺序图
2 years ago
叶媚杰 7663496a28 源代码
2 years ago
p42acfr3v e3d2f27c08 Merge pull request '精读' (#7) from develop into master
2 years ago
叶媚杰 ae53c69aa1 合并
2 years ago
叶媚杰 b80d23e1c1 需求构思分析
2 years ago
p42acfr3v bb4e1ba7d1 Merge pull request '精读' (#6) from ym_branch into develop
2 years ago
叶媚杰 f18412db0a mod
2 years ago
p7rlg9qz2 fa0969e4be Delete 'doc/小米便签开源代码泛读报告.docx'
2 years ago
叶媚杰 631093b4fd other
2 years ago
叶媚杰 24eaaffa09 other
2 years ago
叶媚杰 065f1afe0f UML
2 years ago
p9j8yusn2 56aa6bcf25 Delete 'jingdu.docx'
2 years ago
p9j8yusn2 49fcf04a1b ADD file via upload
2 years ago
叶媚杰 b33de33721 create files
2 years ago
叶媚杰 3b1a664259 create files
2 years ago

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

@ -28,6 +28,7 @@ import android.content.DialogInterface;//对话框界面
import android.content.Intent;//内容意图
import android.content.SharedPreferences;//内容偏好共享
import android.graphics.Paint;//引入绘画包
import android.graphics.Typeface;
import android.os.Bundle;
import android.preference.PreferenceManager;//偏好管理
import android.text.Spannable;//可跨度文本
@ -547,6 +548,9 @@ public class NoteEditActivity extends Activity implements OnClickListener,
case R.id.menu_delete_remind://选择删除提醒
mWorkingNote.setAlertDate(0, false);
break;
case R.id.menu_font_select:
showSingleAlertDiglog();
break;
default:
break;
}
@ -870,4 +874,59 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private void showToast(int resId, int duration) {//持续显示提示的视图
Toast.makeText(this, resId, duration).show();//设置toast消息的文本内容
}
public void showSingleAlertDiglog(){
final String[] items = {"方正舒体","华文彩云","华文琥珀","华文行楷","Viner Hand ITC","Vivaldi斜体紧缩","Vladimir Script"};
final AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
alertBuilder.setTitle("选择字体");
alertBuilder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
switch (i) {
case 0:
Typeface typeface0 = Typeface.createFromAsset(getAssets(), "font/FZSTK.TTF");
mNoteEditor.setTypeface(typeface0);
break;
case 1:
Typeface typeface1 = Typeface.createFromAsset(getAssets(), "font/STCAIYUN.TTF");
mNoteEditor.setTypeface(typeface1);
break;
case 2:
Typeface typeface2 = Typeface.createFromAsset(getAssets(), "font/STHUPO.TTF");
mNoteEditor.setTypeface(typeface2);
break;
case 3:
Typeface typeface3 = Typeface.createFromAsset(getAssets(), "font/STXINGKA.TTF");
mNoteEditor.setTypeface(typeface3);
break;
case 4:
Typeface typeface4 = Typeface.createFromAsset(getAssets(), "font/VINERITC.TTF");
mNoteEditor.setTypeface(typeface4);
break;
case 5:
Typeface typeface5 = Typeface.createFromAsset(getAssets(), "font/VIVALDII.TTF");
mNoteEditor.setTypeface(typeface5);
break;
case 6:
Typeface typeface6 = Typeface.createFromAsset(getAssets(), "font/VLADIMIR.TTF");
mNoteEditor.setTypeface(typeface6);
break;
}
Toast.makeText(NoteEditActivity.this, items[i],Toast.LENGTH_SHORT).show();
}
});
alertBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
alertBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
alertBuilder.create().show();
}
}

@ -39,7 +39,7 @@ import java.util.ArrayList;
public class SqlNote {
private static final String TAG = SqlNote.class.getSimpleName();////调用getSimpleName ()函数得到类的简写名称存入字符串TAG中////
private static final String TAG = SqlNote.class.getSimpleName();
private static final int INVALID_ID = -99999;
@ -50,51 +50,54 @@ public class SqlNote {
NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE, NoteColumns.SYNC_ID,
NoteColumns.LOCAL_MODIFIED, NoteColumns.ORIGIN_PARENT_ID, NoteColumns.GTASK_ID,
NoteColumns.VERSION
};//集合了interface NoteColumns中所有17个SF常量//
};
//以下设置17个列的编号对应不同的属性//
public static final int ID_COLUMN = 0;//通知日期列//
public static final int ID_COLUMN = 0;
public static final int ALERTED_DATE_COLUMN = 1;//提醒时间//
public static final int ALERTED_DATE_COLUMN = 1;
public static final int BG_COLOR_ID_COLUMN = 2;//背景颜色//
public static final int BG_COLOR_ID_COLUMN = 2;
public static final int CREATED_DATE_COLUMN = 3;//创建时间//
public static final int CREATED_DATE_COLUMN = 3;
public static final int HAS_ATTACHMENT_COLUMN = 4;//有无附件//
public static final int HAS_ATTACHMENT_COLUMN = 4;
public static final int MODIFIED_DATE_COLUMN = 5;//修改时间//
public static final int MODIFIED_DATE_COLUMN = 5;
public static final int NOTES_COUNT_COLUMN = 6;//便签数//
public static final int NOTES_COUNT_COLUMN = 6;
public static final int PARENT_ID_COLUMN = 7;//父节点ID//
public static final int PARENT_ID_COLUMN = 7;
public static final int SNIPPET_COLUMN = 8;//文本片段//
public static final int SNIPPET_COLUMN = 8;
public static final int TYPE_COLUMN = 9;//文件类型//
public static final int TYPE_COLUMN = 9;
public static final int WIDGET_ID_COLUMN = 10;//窗口小部件ID//
public static final int WIDGET_ID_COLUMN = 10;
public static final int WIDGET_TYPE_COLUMN = 11;//小部件种类//
public static final int WIDGET_TYPE_COLUMN = 11;
public static final int SYNC_ID_COLUMN = 12;//同步ID//
public static final int SYNC_ID_COLUMN = 12;
public static final int LOCAL_MODIFIED_COLUMN = 13;//本地修改的符号//
public static final int LOCAL_MODIFIED_COLUMN = 13;
public static final int ORIGIN_PARENT_ID_COLUMN = 14;//原始文件夹ID//
public static final int ORIGIN_PARENT_ID_COLUMN = 14;
public static final int GTASK_ID_COLUMN = 15;//用户ID//
public static final int GTASK_ID_COLUMN = 15;
public static final int VERSION_COLUMN = 16;//版本号//
public static final int VERSION_COLUMN = 16;
//以下定义了17个内部变量其中12个可以由content获得5个需要初始化为0或者new//
private Context mContext;
private ContentResolver mContentResolver;
private boolean mIsCreate;
private long mId;//通过ArrayList记录note中的data//
private long mId;
private long mAlertDate;
private int mBgColorId;
private long mCreatedDate;
private int mHasAttachment;
@ -119,17 +122,16 @@ public class SqlNote {
private ArrayList<SqlData> mDataList;
//以下定义了三种构造SqlNote的方法分别需要不同的参数//
public SqlNote(Context context) {
mContext = context;//获取context程序间共享数据//
mContext = context;
mContentResolver = context.getContentResolver();
mIsCreate = true;//第一种构造方式的标识,对象是新建的//
mId = INVALID_ID;//无效ID//
mIsCreate = true;
mId = INVALID_ID;
mAlertDate = 0;
mBgColorId = ResourceParser.getDefaultBgId(context);//系统默认背景//
mCreatedDate = System.currentTimeMillis();//调用系统函数获取创建时间//
mBgColorId = ResourceParser.getDefaultBgId(context);
mCreatedDate = System.currentTimeMillis();
mHasAttachment = 0;
mModifiedDate = System.currentTimeMillis();//调用系统函数最近修改时间//
mModifiedDate = System.currentTimeMillis();
mParentId = 0;
mSnippet = "";
mType = Notes.TYPE_NOTE;
@ -137,23 +139,23 @@ public class SqlNote {
mWidgetType = Notes.TYPE_WIDGET_INVALIDE;
mOriginParent = 0;
mVersion = 0;
mDiffNoteValues = new ContentValues();//新建一个NoteValues值用来记录改变的values//
mDataList = new ArrayList<SqlData>();//新建一个data的列表//
}//构造函数参数只有context对所有的变量进行初始化//
mDiffNoteValues = new ContentValues();
mDataList = new ArrayList<SqlData>();
}
public SqlNote(Context context, Cursor c) {
mContext = context;
mContentResolver = context.getContentResolver();
mIsCreate = false;//第二种方式标识为false对象已存在不是新建的//
mIsCreate = false;
loadFromCursor(c);
mDataList = new ArrayList<SqlData>();
if (mType == Notes.TYPE_NOTE)
loadDataContent();//如果是note类型则调用下面的 loadDataContent()函数,加载数据内容//
loadDataContent();
mDiffNoteValues = new ContentValues();
}//构造函数有context和一个数据库的cursor两个参数多数变量通过cursor指向的一条记录直接进行初始化//
}
public SqlNote(Context context, long id) {
mContext = context;//将mIsCreate定义为False作为标识以id为参数运行loadFromCursor函数//
mContext = context;
mContentResolver = context.getContentResolver();
mIsCreate = false;
loadFromCursor(id);
@ -162,7 +164,7 @@ public class SqlNote {
loadDataContent();
mDiffNoteValues = new ContentValues();
}//第三种构造方式采用context和id//
}
private void loadFromCursor(long id) {
Cursor c = null;
@ -170,18 +172,18 @@ public class SqlNote {
c = mContentResolver.query(Notes.CONTENT_NOTE_URI, PROJECTION_NOTE, "(_id=?)",
new String[] {
String.valueOf(id)
}, null);//通过try避免异常//
}, null);
if (c != null) {
c.moveToNext();
loadFromCursor(c);
} else {
Log.w(TAG, "loadFromCursor: cursor = null");
}//代码块:如果有内容就将移入文档,并再次等待光标的内容,否则报错//
}
} finally {
if (c != null)
c.close();
}//执行完后关闭释放//
}//通过id从cursor加载数据//
}
}
private void loadFromCursor(Cursor c) {
mId = c.getLong(ID_COLUMN);
@ -196,142 +198,141 @@ public class SqlNote {
mWidgetId = c.getInt(WIDGET_ID_COLUMN);
mWidgetType = c.getInt(WIDGET_TYPE_COLUMN);
mVersion = c.getLong(VERSION_COLUMN);
}//通过游标从光标处加载数据//
}
private void loadDataContent() {
Cursor c = null;//通过content获取共享数据并加载到数据库当前游标处//
Cursor c = null;
mDataList.clear();
try {
c = mContentResolver.query(Notes.CONTENT_DATA_URI, SqlData.PROJECTION_DATA,
"(note_id=?)", new String[] {
String.valueOf(mId)
}, null);//获取ID对应content内容//
}, null);
if (c != null) {
if (c.getCount() == 0) {
Log.w(TAG, "it seems that the note has not data");
return;
}//查询到该note的id确实有对应项即cursor有对应//
}
while (c.moveToNext()) {
SqlData data = new SqlData(mContext, c);//将获取数据存入数据表//
SqlData data = new SqlData(mContext, c);
mDataList.add(data);
}//记录数量不为0则循环直到记录不存在不断地取出记录放到DataList中//
}
} else {
Log.w(TAG, "loadDataContent: cursor = null");
}
} finally {
if (c != null)
c.close();
}//最后若游标不为空,关闭游标并释放//
}/*获取ID对应content内容如果查询到该note的id确实有对应项即cursor有对应获取ID对应content内容*/
}
}
/*设置通过content机制共享的数据信息*/
public boolean setContent(JSONObject js) {
try {
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);//创建一个JSONObject对象note//
JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);
if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) {
Log.w(TAG, "cannot set system folder");//判断是不是系统文件夹,如果是,不能修改//
Log.w(TAG, "cannot set system folder");
} else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_FOLDER) {
// for folder we can only update the snnipet and type
String snippet = note.has(NoteColumns.SNIPPET) ? note
.getString(NoteColumns.SNIPPET) : "";//如果共享数据存在摘要则将其赋给snippet变量否则该变量为空//
.getString(NoteColumns.SNIPPET) : "";
if (mIsCreate || !mSnippet.equals(snippet)) {
mDiffNoteValues.put(NoteColumns.SNIPPET, snippet);
}//如果SQLNote采用的是第一种构造方式,或者snippet为空则将snippet这一项键值存入contentvalue中尽管是“”//
}
mSnippet = snippet;
int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE)
: Notes.TYPE_NOTE;// 获取数据类型以下操作都和上面对snippet的操作一样一起根据共享的数据设置SqlNote内容的上述17项//
: Notes.TYPE_NOTE;
if (mIsCreate || mType != type) {
mDiffNoteValues.put(NoteColumns.TYPE, type);
}//如果是新建的或 type 不匹配//
}
mType = type;
} else if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_NOTE) {
JSONArray dataArray = js.getJSONArray(GTaskStringUtils.META_HEAD_DATA);
long id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID;//获取ID//
long id = note.has(NoteColumns.ID) ? note.getLong(NoteColumns.ID) : INVALID_ID;
if (mIsCreate || mId != id) {
mDiffNoteValues.put(NoteColumns.ID, id);
}//如果只是通过上下文对note进行数据库操作或者该ID与原ID不相同//
}
mId = id;
long alertDate = note.has(NoteColumns.ALERTED_DATE) ? note
.getLong(NoteColumns.ALERTED_DATE) : 0;//获取提醒时间//
.getLong(NoteColumns.ALERTED_DATE) : 0;
if (mIsCreate || mAlertDate != alertDate) {
mDiffNoteValues.put(NoteColumns.ALERTED_DATE, alertDate);
}//如果只是通过上下文对note进行数据库操作或者该提醒日期与原提醒日期不相同//
}
mAlertDate = alertDate;
int bgColorId = note.has(NoteColumns.BG_COLOR_ID) ? note
.getInt(NoteColumns.BG_COLOR_ID) : ResourceParser.getDefaultBgId(mContext);//获取背景颜色//
.getInt(NoteColumns.BG_COLOR_ID) : ResourceParser.getDefaultBgId(mContext);
if (mIsCreate || mBgColorId != bgColorId) {
mDiffNoteValues.put(NoteColumns.BG_COLOR_ID, bgColorId);
}//同上,此处为背景颜色//
}
mBgColorId = bgColorId;
long createDate = note.has(NoteColumns.CREATED_DATE) ? note
.getLong(NoteColumns.CREATED_DATE) : System.currentTimeMillis();//获取数据的创建日期,//
.getLong(NoteColumns.CREATED_DATE) : System.currentTimeMillis();
if (mIsCreate || mCreatedDate != createDate) {
mDiffNoteValues.put(NoteColumns.CREATED_DATE, createDate);
}//同上,此处为创建日期//
}
mCreatedDate = createDate;
int hasAttachment = note.has(NoteColumns.HAS_ATTACHMENT) ? note
.getInt(NoteColumns.HAS_ATTACHMENT) : 0;
if (mIsCreate || mHasAttachment != hasAttachment) {
mDiffNoteValues.put(NoteColumns.HAS_ATTACHMENT, hasAttachment);
}//同上,此处为有无附件//
}
mHasAttachment = hasAttachment;
long modifiedDate = note.has(NoteColumns.MODIFIED_DATE) ? note
.getLong(NoteColumns.MODIFIED_DATE) : System.currentTimeMillis();
if (mIsCreate || mModifiedDate != modifiedDate) {
mDiffNoteValues.put(NoteColumns.MODIFIED_DATE, modifiedDate);
}//同上,此处为修改时间//
}
mModifiedDate = modifiedDate;
long parentId = note.has(NoteColumns.PARENT_ID) ? note
.getLong(NoteColumns.PARENT_ID) : 0;
if (mIsCreate || mParentId != parentId) {
mDiffNoteValues.put(NoteColumns.PARENT_ID, parentId);
}//同上此处为父类ID//
}
mParentId = parentId;
String snippet = note.has(NoteColumns.SNIPPET) ? note
.getString(NoteColumns.SNIPPET) : "";
if (mIsCreate || !mSnippet.equals(snippet)) {
mDiffNoteValues.put(NoteColumns.SNIPPET, snippet);
}//同上,此处为将该文本片段覆盖原文本片段//
}
mSnippet = snippet;
int type = note.has(NoteColumns.TYPE) ? note.getInt(NoteColumns.TYPE)
: Notes.TYPE_NOTE;
if (mIsCreate || mType != type) {
mDiffNoteValues.put(NoteColumns.TYPE, type);
}//同上,此处为文件类型//
}
mType = type;
int widgetId = note.has(NoteColumns.WIDGET_ID) ? note.getInt(NoteColumns.WIDGET_ID)
: AppWidgetManager.INVALID_APPWIDGET_ID;
if (mIsCreate || mWidgetId != widgetId) {
mDiffNoteValues.put(NoteColumns.WIDGET_ID, widgetId);
}//同上此处为小部件ID//
}
mWidgetId = widgetId;
int widgetType = note.has(NoteColumns.WIDGET_TYPE) ? note
.getInt(NoteColumns.WIDGET_TYPE) : Notes.TYPE_WIDGET_INVALIDE;
if (mIsCreate || mWidgetType != widgetType) {
mDiffNoteValues.put(NoteColumns.WIDGET_TYPE, widgetType);
}//同上,此处为部件类型//
}
mWidgetType = widgetType;
long originParent = note.has(NoteColumns.ORIGIN_PARENT_ID) ? note
.getLong(NoteColumns.ORIGIN_PARENT_ID) : 0;
if (mIsCreate || mOriginParent != originParent) {
mDiffNoteValues.put(NoteColumns.ORIGIN_PARENT_ID, originParent);
}//同上此处为将该原始父文件夹ID覆盖原原始父文件夹ID//
}
mOriginParent = originParent;
for (int i = 0; i < dataArray.length(); i++) {
JSONObject data = dataArray.getJSONObject(i);//依次获取数据表中的数据ID//
JSONObject data = dataArray.getJSONObject(i);
SqlData sqlData = null;
if (data.has(DataColumns.ID)) {
long dataId = data.getLong(DataColumns.ID);
@ -339,25 +340,25 @@ public class SqlNote {
if (dataId == temp.getId()) {
sqlData = temp;
}
}// 该数据ID对应的数据如果存在将对应的数据存在数据库中//
}//遍历 dataArray查找 id 为 dataId 的数据//
}
}
if (sqlData == null) {
sqlData = new SqlData(mContext);
mDataList.add(sqlData);
}/*如果数据库没有更新, 就根据上下文创建一个数据库数据,并添加到数据列表中*/
}
sqlData.setContent(data);// 最后为数据库数据进行设置//
sqlData.setContent(data);
}
}
} catch (JSONException e) {
Log.e(TAG, e.toString());
e.printStackTrace();
return false;
}//出现JSONException时日志显示错误同时打印堆栈轨迹//
}
return true;
}
//获取content机制提供的数据并加载到note中//
public JSONObject getContent() {
try {
JSONObject js = new JSONObject();
@ -365,10 +366,10 @@ public class SqlNote {
if (mIsCreate) {
Log.e(TAG, "it seems that we haven't created this in database yet");
return null;
}//采用的是第一种构造方式,自然实施初始化而已,显示错误:没创建数据库//
}
JSONObject note = new JSONObject();//新建变量note用于传输共享数据//
if (mType == Notes.TYPE_NOTE) {//如果对象的类型是note类型设置以上12个内部变量//
JSONObject note = new JSONObject();
if (mType == Notes.TYPE_NOTE) {
note.put(NoteColumns.ID, mId);
note.put(NoteColumns.ALERTED_DATE, mAlertDate);
note.put(NoteColumns.BG_COLOR_ID, mBgColorId);
@ -388,118 +389,117 @@ public class SqlNote {
JSONObject data = sqlData.getContent();
if (data != null) {
dataArray.put(data);
}//将note中的所有数据存进dataarray中
}//利用循环将数据链表的数据获取//
}
}
js.put(GTaskStringUtils.META_HEAD_DATA, dataArray);
} else if (mType == Notes.TYPE_FOLDER || mType == Notes.TYPE_SYSTEM) {
note.put(NoteColumns.ID, mId);
note.put(NoteColumns.TYPE, mType);
note.put(NoteColumns.SNIPPET, mSnippet);
js.put(GTaskStringUtils.META_HEAD_NOTE, note);
}//如果是文件夹或者系统文件那么只存放id种类摘要和note//
}
return js;
} catch (JSONException e) {
Log.e(TAG, e.toString());
e.printStackTrace();
}//捕获json类型异常显示错误打印堆栈痕迹//
}
return null;
}
public void setParentId(long id) {
mParentId = id;
mDiffNoteValues.put(NoteColumns.PARENT_ID, id);
}//给当前id设置父id//
}
public void setGtaskId(String gid) {
mDiffNoteValues.put(NoteColumns.GTASK_ID, gid);
}//给当前id设置Gtaskid//
}
public void setSyncId(long syncId) {
mDiffNoteValues.put(NoteColumns.SYNC_ID, syncId);
}//给当前id设置同步id//
}
public void resetLocalModified() {
mDiffNoteValues.put(NoteColumns.LOCAL_MODIFIED, 0);
}//重新设置本地的修改//
}
public long getId() {
return mId;
}//获取当前ID//
}
public long getParentId() {
return mParentId;
}//获取当前ID的父类ID//
}
public String getSnippet() {
return mSnippet;
}//获取小片段即用于显示的部分便签内容//
}
public boolean isNoteType() {
return mType == Notes.TYPE_NOTE;
}//判断是否为便签类型//
}
//commit函数用于把当前造作所做的修改保存到数据库//
public void commit(boolean validateVersion) {
if (mIsCreate) {//如果是第一种构造方式//
if (mIsCreate) {
if (mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) {
mDiffNoteValues.remove(NoteColumns.ID);
}//如果是一个无效的id并且还含有这个id就将它移除//
}
Uri uri = mContentResolver.insert(Notes.CONTENT_NOTE_URI, mDiffNoteValues);//更新Uri//
Uri uri = mContentResolver.insert(Notes.CONTENT_NOTE_URI, mDiffNoteValues);
try {
mId = Long.valueOf(uri.getPathSegments().get(1));//强制转换path为id Long型//
mId = Long.valueOf(uri.getPathSegments().get(1));
} catch (NumberFormatException e) {
Log.e(TAG, "Get note id error :" + e.toString());
throw new ActionFailureException("create note failed");
} //捕获异常转换出错显示错误“获取note的id出现错误”//
}
if (mId == 0) {
throw new IllegalStateException("Create thread id failed");
}//创建线程 id 失败//
}
if (mType == Notes.TYPE_NOTE) {
for (SqlData sqlData : mDataList) {
sqlData.commit(mId, false, -1);
}
}//对于note类型引用sqlData.commit方法操作//
}
} else {
if (mId <= 0 && mId != Notes.ID_ROOT_FOLDER && mId != Notes.ID_CALL_RECORD_FOLDER) {
Log.e(TAG, "No such note");
throw new IllegalStateException("Try to update note with invalid id");
}//判断是否含有这个便签,不存在的话,尝试以无效 id 更新 note//
}
if (mDiffNoteValues.size() > 0) {
mVersion ++;//更新版本:版本升级一个等级//
mVersion ++;
int result = 0;
if (!validateVersion) {
result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "("
+ NoteColumns.ID + "=?)", new String[] {
String.valueOf(mId)
});//如果是无效版本更新内容解析器存入便签内容uri便签IDmID构造字符串//
});
} else {
result = mContentResolver.update(Notes.CONTENT_NOTE_URI, mDiffNoteValues, "("
+ NoteColumns.ID + "=?) AND (" + NoteColumns.VERSION + "<=?)",
new String[] {
String.valueOf(mId), String.valueOf(mVersion)
});
}//如果是有效版本, 更新内容解析器存入便签内容uri便签ID便签版本mIDmVersion//
}
if (result == 0) {
Log.w(TAG, "there is no update. maybe user updates note when syncing");
}//如果内容解析器没有更新,那么报错:没有更新,或许用户在同步时进行更新//
}
}
if (mType == Notes.TYPE_NOTE) {
for (SqlData sqlData : mDataList) {
sqlData.commit(mId, validateVersion, mVersion);
}
}//对note类型还是对其中的data引用commit从而实现目的//
}
}
// refresh local info
loadFromCursor(mId);//通过 cursor 从当前 id 处加载数据//
loadFromCursor(mId);
if (mType == Notes.TYPE_NOTE)
loadDataContent();// 如果是便签类型:获取共享数据并加载到数据库//
loadDataContent();
mDiffNoteValues.clear();//改变数据库构造模式//
mIsCreate = false;//改变数据库构造模式//
mDiffNoteValues.clear();
mIsCreate = false;
}
}

@ -83,7 +83,7 @@ public class Task extends Node {//创建Task类继承父类Node//
js.put(GTaskStringUtils.GTASK_JSON_PARENT_ID, mParent.getGid());//目的父id的类型//
// dest_parent_type
js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE
js.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT_TYPE ,
GTaskStringUtils.GTASK_JSON_TYPE_GROUP);//更新列表id存入父id//
// list_id

@ -90,6 +90,8 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private static final int MENU_FOLDER_CHANGE_NAME = 2;//.菜单中改文件夹名项对应的int值
private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction";//用于第一次打开小米便签的判断
private int login_mode;
private int mode = -1;
private enum ListEditState {//列表编辑状态类
NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
@ -136,15 +138,16 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private final static int REQUEST_CODE_NEW_NODE = 103;//请求代码新节点
@Override
protected void onCreate(Bundle savedInstanceState) {//创建类
super.onCreate(savedInstanceState);//super调用父类的protected函数,创建窗口时使用
setContentView(R.layout.note_list);//设置内容的视图
initResources();//初始化资源
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.note_list);
getWindow().setBackgroundDrawableResource(R.drawable.red);
initResources();
/**
* Insert an introduction when user firstly use this application
*/
setAppInfoFromRawRes();//当第一次使用这个app的时候插入介绍信息
setAppInfoFromRawRes();
}
@Override
@ -425,7 +428,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
@Override//查询完成后对光标的处理
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {//查询完成后对光标的处理
switch (token) {
case FOLDER_NOTE_LIST_QUERY_TOKEN //如果是便签查询被采用,更改光标位置
case FOLDER_NOTE_LIST_QUERY_TOKEN: //如果是便签查询被采用,更改光标位置
mNotesListAdapter.changeCursor(cursor);//如果是便签查询被采用,更改光标位置
break;
case FOLDER_LIST_QUERY_TOKEN://获取文件夹请求
@ -775,6 +778,11 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
} else {//否则设置标签为“错误状态”+当前状态
Log.e(TAG, "Wrong state:" + mState);//报错日志信息
}
if(mode == -1){
menu.findItem(R.id.menu_red).setVisible(true);
}else if (mode == 0){
menu.findItem(R.id.menu_sky).setVisible(true);
}
return true;
}
@ -809,15 +817,55 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
createNewNote();
break;
}
case R.id.menu_search://搜索
onSearchRequested();//查询
case R.id.menu_search: { /*搜索按钮的响应*/
onSearchRequested();
break;
}
case R.id.menu_login: { //设置登录密码功能
if(login_mode == 0)//没有设置密码
set_login_password();
else if(login_mode ==1)//已经设置密码
change_login_password();
break;
}
case R.id.menu_deletelogin:{
delete_login_password();
break;
}
case R.id.menu_sky:{
mode = -1;
getWindow().setBackgroundDrawableResource(R.drawable.sky);
break;
}
case R.id.menu_red:{
mode = 0;
getWindow().setBackgroundDrawableResource(R.drawable.red);
break;
}
default:
break;
}
return true;
}
private void set_login_password() {
Intent intent=new Intent(NotesListActivity.this,RegisterLoginPassword.class);
startActivity(intent);
finish();
}
private void change_login_password() {
Intent intent=new Intent(NotesListActivity.this,ChangedLoginPassword.class);
startActivity(intent);
finish();
}
private void delete_login_password() {
Intent intent=new Intent(NotesListActivity.this,DeleteLoginPassword.class);
startActivity(intent);
finish();
}
@Override
public boolean onSearchRequested() {//根据关键字搜索便签(还未实现)
startSearch(null, false, null /* appData */, false);

@ -197,7 +197,7 @@ public class DataUtils {//数据的集成工具类
return exist;
}
public static HashSet<AppWidgetAttribute> getFolderNoteWidget(ContentResolver resolver, long folderId) {/使hashsetidtype
public static HashSet<AppWidgetAttribute> getFolderNoteWidget(ContentResolver resolver, long folderId) {//使用hashset来存储不同窗口的id和type并且建立对应关系
Cursor c = resolver.query(Notes.CONTENT_NOTE_URI,
new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE },
NoteColumns.PARENT_ID + "=?",

@ -0,0 +1,2 @@
#Thu Mar 16 18:03:46 CST 2023
gradle.version=8.0.2

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
</component>
</project>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\18255\.android\avd\Pixel_2_API_30_1.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-03-25T03:06:29.058591600Z" />
</component>
</project>

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="$PROJECT_DIR$/../../../ProgramTools/gradle/gradle-8.0.2" />
<option name="gradleJvm" value="Embedded JDK" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
</component>
</project>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

@ -0,0 +1,3 @@
?
settings.gradle,0\5\05efc8b1657769a27696d478ded1e95f38737233

@ -0,0 +1,3 @@
?
settings.gradle,0\5\05efc8b1657769a27696d478ded1e95f38737233

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

@ -0,0 +1,21 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 33
buildToolsVersion "33.0.2"
useLibrary'org.apache.http.legacy' //add
defaultConfig {
applicationId "net.micode.notes"
minSdkVersion 14
targetSdkVersion 14
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}

@ -0,0 +1,12 @@
/**
* Automatically generated file. DO NOT MODIFY
*/
package net.micode.notes;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "net.micode.notes";
public static final String BUILD_TYPE = "debug";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "0.1";
}

@ -0,0 +1,20 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "net.micode.notes",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "0.1",
"outputFile": "app-debug.apk"
}
],
"elementType": "File"
}

@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../apk/debug/output-metadata.json

@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=7.4.2

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save