diff --git a/src/Notes-master/app/src/main/AndroidManifest.xml b/src/Notes-master/app/src/main/AndroidManifest.xml
index 2b772973..6a8cf6c1 100644
--- a/src/Notes-master/app/src/main/AndroidManifest.xml
+++ b/src/Notes-master/app/src/main/AndroidManifest.xml
@@ -20,6 +20,8 @@
android:versionCode="1"
android:versionName="0.1" >
+
+
@@ -136,6 +138,18 @@
android:theme="@android:style/Theme.Holo.Light" >
+
+
+
+
+
+
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/data/Notes.java b/src/Notes-master/app/src/main/java/net/micode/notes/data/Notes.java
index f240604b..7d64db36 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/data/Notes.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/data/Notes.java
@@ -62,6 +62,7 @@ public class Notes {
public static final Uri CONTENT_DATA_URI = Uri.parse("content://" + AUTHORITY + "/data");
public interface NoteColumns {
+ public static final String PASSCODE = "passcode";
/**
* The unique ID for a row
* Type: INTEGER (long)
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java b/src/Notes-master/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java
index ffe5d577..729f4eb3 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java
@@ -30,7 +30,7 @@ import net.micode.notes.data.Notes.NoteColumns;
public class NotesDatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "note.db";
- private static final int DB_VERSION = 4;
+ private static final int DB_VERSION = 5;
public interface TABLE {
public static final String NOTE = "note";
@@ -60,7 +60,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," +
NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +
NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," +
- NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" +
+ NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0," +
+ NoteColumns.PASSCODE + " TEXT NOT NULL DEFAULT ''" +
")";
private static final String CREATE_DATA_TABLE_SQL =
@@ -80,7 +81,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
private static final String CREATE_DATA_NOTE_ID_INDEX_SQL =
"CREATE INDEX IF NOT EXISTS note_id_index ON " +
- TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";
+ TABLE.DATA + "(" + DataColumns.NOTE_ID + ");";
/**
* Increase folder's note count when move note to the folder
@@ -322,6 +323,21 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
oldVersion++;
}
+ if (oldVersion == 4) {
+ upgradeToV5(db);
+ oldVersion++;
+ }
+/*
+ if (oldVersion == 5) {
+ upgradeToV6(db);
+ oldVersion++;
+ }
+
+ if (oldVersion == 6) {
+ upgradeToV7(db);
+ oldVersion++;
+ }*/
+
if (reCreateTriggers) {
reCreateNoteTableTriggers(db);
reCreateDataTableTriggers(db);
@@ -359,4 +375,22 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION
+ " INTEGER NOT NULL DEFAULT 0");
}
+
+ private void upgradeToV5(SQLiteDatabase db) {
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE.NOTE);
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE.DATA);
+ createNoteTable(db);
+ createDataTable(db);
+ }
+/*
+ private void upgradeToV6(SQLiteDatabase db) {
+ db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD CLOUMN" + NoteColumns.TOP
+ + " INTEGER NOT NULL DEFAULT 0");
+ }
+
+ private void upgradeToV7(SQLiteDatabase db) {
+ db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD CLOUMN" + NoteColumns.CLASSIFICATION
+ + " INTEGER NOT NULL DEFAULT 0");
+ }
+ */
}
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java
index d63af242..529639fc 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java
@@ -77,17 +77,9 @@ public class GTaskASyncTask extends AsyncTask {
pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
NotesListActivity.class), 0);
}
- notification = new Notification.Builder(mContext)
- .setContentIntent(pendingIntent)
- .setTicker(mContext.getString(R.string.app_name))
- .setContentTitle(mContext.getString(R.string.app_name))
- .setContentText(content)
- .setWhen(System.currentTimeMillis())
- .setSmallIcon(R.drawable.icon_app)
- .build();
- notification.icon = R.drawable.icon_app;
+ /*notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content,
+ pendingIntent);*/
mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);
-
}
@Override
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/model/Note.java b/src/Notes-master/app/src/main/java/net/micode/notes/model/Note.java
index 6706cf67..54593584 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/model/Note.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/model/Note.java
@@ -50,6 +50,7 @@ public class Note {
values.put(NoteColumns.TYPE, Notes.TYPE_NOTE);
values.put(NoteColumns.LOCAL_MODIFIED, 1);
values.put(NoteColumns.PARENT_ID, folderId);
+ values.put(NoteColumns.PASSCODE, "");
Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values);
long noteId = 0;
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/model/WorkingNote.java b/src/Notes-master/app/src/main/java/net/micode/notes/model/WorkingNote.java
index be081e43..bea760dd 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/model/WorkingNote.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/model/WorkingNote.java
@@ -42,6 +42,9 @@ public class WorkingNote {
// Note mode
private int mMode;
+ /**记录便签已设置密码*/
+ private String mPasscode;
+
private long mAlertDate;
private long mModifiedDate;
@@ -54,6 +57,7 @@ public class WorkingNote {
private long mFolderId;
+
private Context mContext;
private static final String TAG = "WorkingNote";
@@ -78,7 +82,8 @@ public class WorkingNote {
NoteColumns.BG_COLOR_ID,
NoteColumns.WIDGET_ID,
NoteColumns.WIDGET_TYPE,
- NoteColumns.MODIFIED_DATE
+ NoteColumns.MODIFIED_DATE,
+ NoteColumns.PASSCODE
};
private static final int DATA_ID_COLUMN = 0;
@@ -101,6 +106,7 @@ public class WorkingNote {
private static final int NOTE_MODIFIED_DATE_COLUMN = 5;
+ private static final int NOTE_PASSCODE_COLUMN = 6;
// New note construct
private WorkingNote(Context context, long folderId) {
mContext = context;
@@ -112,6 +118,7 @@ public class WorkingNote {
mIsDeleted = false;
mMode = 0;
mWidgetType = Notes.TYPE_WIDGET_INVALIDE;
+ mPasscode = ""; //save note's password
}
// Existing note construct
@@ -137,6 +144,7 @@ public class WorkingNote {
mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN);
mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN);
mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN);
+ mPasscode = cursor.getString(NOTE_PASSCODE_COLUMN); //get password from database
}
cursor.close();
} else {
@@ -342,6 +350,22 @@ public class WorkingNote {
return mWidgetType;
}
+ /**判断是否已经设置密码*/
+ public boolean hasPasscode() {
+ return !mPasscode.equals("");
+ }
+
+ /**设置便签访问密码,并存入数据库*/
+ public void setPasscode(String passcode) {
+ mPasscode = passcode;
+ mNote.setNoteValue(NoteColumns.PASSCODE, passcode);
+ }
+
+ /**获取设置的密码*/
+ public String getPasscode() {
+ return mPasscode;
+ }
+
public interface NoteSettingChangedListener {
/**
* Called when the background color of current note has just changed
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/tool/Point.java b/src/Notes-master/app/src/main/java/net/micode/notes/tool/Point.java
new file mode 100644
index 00000000..f3d8e4ee
--- /dev/null
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/tool/Point.java
@@ -0,0 +1,113 @@
+package net.micode.notes.tool;
+
+public class Point {
+ public static int BITMAP_NORMAL = 0; // 正常
+ public static int BITMAP_ERROR = 1; // 错误
+ public static int BITMAP_PRESS = 2; // 按下
+
+ //九宫格中的点的下标(即每个点代表一个值)
+ private String index;
+ //点的状态
+ private int state;
+ //点的坐标
+ private float x;
+ private float y;
+
+ public Point() {
+ super();
+ }
+
+ public Point(int x, int y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ public String getIndex() {
+ return index;
+ }
+
+ public int getState() {
+ return state;
+ }
+
+ public float getX() {
+ return x;
+ }
+
+ public float getY() {
+ return y;
+ }
+
+ public void setIndex(String index) {
+ this.index = index;
+ }
+
+ public void setState(int state) {
+ this.state = state;
+ }
+
+ public void setX(float x) {
+ this.x = x;
+ }
+
+ public void setY(float y) {
+ this.y = y;
+ }
+
+ /**
+ * 判断屏幕上的九宫格中的点能否可以进行连线
+ *
+ * @param a
+ * @param moveX
+ * @param moveY
+ * @param radius 点bitmap的半径
+ * @return 布尔型
+ */
+ public boolean isWith(Point a, float moveX, float moveY, float radius) {
+ float result = (float) Math.sqrt((a.getX() - moveX)
+ * (a.getX() - moveX) + (a.getY() - moveY)
+ * (a.getY() - moveY));
+ if (result < 5 * radius / 4) {
+ return true;
+ }
+ return false;
+ }
+
+ public static float getDegrees(Point a, Point b) {
+ float degrees = 0;
+ float ax = a.getX();
+ float ay = a.getY();
+ float bx = b.getX();
+ float by = b.getY();
+
+ if (ax == bx) {
+ if (by > ay) {
+ degrees = 90;
+ } else {
+ degrees = 270;
+ }
+ } else if (by == ay) {
+ if (ax > bx) {
+ degrees = 180;
+ } else {
+ degrees = 0;
+ }
+ } else {
+ if (ax > bx) {
+ if (ay > by) { // 第三象限
+ degrees = 180 + (float) (Math.atan2(ay - by, ax - bx) * 180 / Math.PI);
+ } else { // 第二象限
+ degrees = 180 - (float) (Math.atan2(by - ay, ax - bx) * 180 / Math.PI);
+ }
+ } else {
+ if (ay > by) { // 第四象限
+ degrees = 360 - (float) (Math.atan2(ay - by, bx - ax) * 180 / Math.PI);
+ } else { // 第一象限
+ degrees = (float) (Math.atan2(by - ay, bx - ax) * 180 / Math.PI);
+ }
+ }
+ }
+ return degrees;
+ }
+}
+
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/ui/LockPatternView.java b/src/Notes-master/app/src/main/java/net/micode/notes/ui/LockPatternView.java
new file mode 100644
index 00000000..0218d439
--- /dev/null
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/ui/LockPatternView.java
@@ -0,0 +1,385 @@
+package net.micode.notes.ui;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+
+import net.micode.notes.R;
+import net.micode.notes.tool.Point;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class LockPatternView extends View {
+ //判断线的状态
+ private static boolean isLineState = true;
+ //判断点是否被实例化了
+ private static boolean isInitPoint = false;
+ //判断手指是否离开屏幕
+ private static boolean isFinish = false;
+ //判断手指点击屏幕时是否选中了九宫格中的点
+ private static boolean isSelect = false;
+ // 创建MyPoint的数组
+ private Point[][] mPoints = new Point[3][3];
+ // 声明屏幕的宽和高
+ private int mScreenHeight;
+ private int mScreenWidth;
+ // 声明点线的图片的半径
+ private float mPointRadius;
+ // 声明线的图片的高(即是半径)
+ private float mLineHeight;
+ // 声明鼠标移动的x,y坐标
+ private float mMoveX, mMoveY;
+ // 声明屏幕上的宽和高的偏移量
+ private int mScreenHeightOffSet = 0;
+ private int mScreenWidthOffSet = 0;
+ // 创建一个画笔
+ private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ // 声明资源图片
+ private Bitmap mBitmapNormal;
+ private Bitmap mBitmapPressed;
+ private Bitmap mBitmapError;
+ private Bitmap mLinePressed;
+ private Bitmap mLineError;
+ // 创建一个矩阵
+ private Matrix mMatrix = new Matrix();
+ // 创建MyPoint的列表
+ private List mPointList = new ArrayList();
+ // 实例化鼠标点
+ private Point mMousePoint = new Point();
+ // 用获取从activity中传过来的密码字符串
+ private String mPassword = "";
+ private final static String TAG = "LockPatternView";
+
+ private Context mContext;
+ private OnLockListener mListener;
+
+ public LockPatternView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ mContext = context;
+ }
+
+ public LockPatternView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public LockPatternView(Context context) {
+ super(context);
+ }
+
+ /**
+ * 画点和画线
+ */
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ if (!isInitPoint) {
+ initPoint(); // 先初始化
+ }
+
+ canvasPoint(canvas); // 开始画点
+
+ // 开始画线
+ if (mPointList.size() > 0) {
+ Point b = null;
+ Point a = mPointList.get(0);
+ for (int i = 1; i < mPointList.size(); i++) {
+ b = mPointList.get(i);
+ canvasLine(a, b, canvas);
+ a = b;
+ }
+ if (!isFinish) {
+ canvasLine(a, mMousePoint, canvas);
+ }
+ }
+ }
+
+ /**
+ * 手指点击手机屏幕
+ */
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ mMoveX = event.getX();
+ mMoveY = event.getY();
+ // 设置移动点的坐标
+ mMousePoint.setX(mMoveX);
+ mMousePoint.setY(mMoveY);
+ Point mPoint = null;
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ isLineState = true;
+ isFinish = false;
+ // 每次点击时就会将pointList中元素设置转化成正常状态
+ for (int i = 0; i < mPointList.size(); i++) {
+ mPointList.get(i).setState(Point.BITMAP_NORMAL);
+ }
+ // 将pointList中的元素清除掉
+ mPointList.clear();
+ // 判断是否点中了九宫格中的点
+ mPoint = getIsSelectedPoint(mMoveX, mMoveY);
+ if (mPoint != null) {
+ isSelect = true;
+ }
+ break;
+ case MotionEvent.ACTION_MOVE:
+ if (isSelect == true) {
+ mPoint = getIsSelectedPoint(mMoveX, mMoveY);
+ }
+
+ break;
+ case MotionEvent.ACTION_UP:
+ isFinish = true;
+ isSelect = false;
+ // 规定至少要有4个点被连线才有可能是正确
+ // 其他种情况都是错误的
+ if (mPointList.size() >= 4) {// 正确情况
+ for (int j = 0; j < mPointList.size(); j++) {
+ mPassword += mPointList.get(j).getIndex();
+ }
+ //将连线后得到的密码传给activity
+ mListener.getStringPassword(mPassword);
+ mPassword = "";
+ //经过activity判断传过来是否正确
+ if (mListener.isPassword()) {
+ for (int i = 0; i < mPointList.size(); i++) {
+ mPointList.get(i).setState(Point.BITMAP_PRESS);
+ }
+ } else {
+ for (int i = 0; i < mPointList.size(); i++) {
+ mPointList.get(i).setState(Point.BITMAP_ERROR);
+ }
+ isLineState = false;
+ }
+ // 错误情况
+ } else if (mPointList.size() < 4 && mPointList.size() > 1) {
+ for (int i = 0; i < mPointList.size(); i++) {
+ mPointList.get(i).setState(Point.BITMAP_ERROR);
+ }
+ isLineState = false;
+ // 如果只有一个点被点中时为正常情况
+ } else if (mPointList.size() == 1) {
+ for (int i = 0; i < mPointList.size(); i++) {
+ mPointList.get(i).setState(Point.BITMAP_NORMAL);
+ }
+ }
+ break;
+ }
+ // 将mPoint添加到pointList中
+ if (isSelect && mPoint != null) {
+ if (mPoint.getState() == Point.BITMAP_NORMAL) {
+ mPoint.setState(Point.BITMAP_PRESS);
+ mPointList.add(mPoint);
+ }
+ }
+ // 每次发生OnTouchEvent()后都刷新View
+ postInvalidate();
+ return true;
+ }
+
+ /**
+ * 判断九宫格中的某个点是否被点中了,或者某个点能否被连线
+ *
+ * @param moveX
+ * @param moveY
+ * @return
+ */
+ private Point getIsSelectedPoint(float moveX, float moveY) {
+ Point myPoint = null;
+ for (int i = 0; i < mPoints.length; i++) {
+ for (int j = 0; j < mPoints[i].length; j++) {
+ if (mPoints[i][j].isWith(mPoints[i][j], moveX, moveY,
+ mPointRadius)) {
+ myPoint = mPoints[i][j];
+ }
+ }
+ }
+
+ return myPoint;
+ }
+
+ /**
+ * 画线
+ *
+ * @param a 起始点
+ * @param b 目的点
+ * @param canvas 画布
+ */
+ private void canvasLine(Point a, Point b, Canvas canvas) {
+ // Math.sqrt(平方+平方)
+ float abInstance = (float) Math.sqrt(
+ (a.getX() - b.getX()) * (a.getX() - b.getX())
+ + (a.getY() - b.getY()) * (a.getY() - b.getY())
+ );
+ canvas.rotate(Point.getDegrees(a, b), a.getX(), a.getY());
+
+ mMatrix.setScale(abInstance / mLineHeight, 1);
+ mMatrix.postTranslate(a.getX(), a.getY());
+ if (isLineState) {
+ canvas.drawBitmap(mLinePressed, mMatrix, mPaint);
+ } else {
+ canvas.drawBitmap(mLineError, mMatrix, mPaint);
+ }
+
+ canvas.rotate(-Point.getDegrees(a, b), a.getX(), a.getY());
+ }
+
+ /**
+ * 画点
+ *
+ * @param canvas
+ */
+ private void canvasPoint(Canvas canvas) {
+ for (int i = 0; i < mPoints.length; i++) {
+ for (int j = 0; j < mPoints[i].length; j++) {
+ if (mPoints[i][j]==null) {
+ //重启view时,new的变量被销毁,其他未被销毁,导致设置一次开启app,第二次进入时
+ //isinitpoint 变量已为true,可是点实例未初始化;
+ initPoint();
+ }
+ if (mPoints[i][j].getState() == Point.BITMAP_NORMAL) {
+ canvas.drawBitmap(mBitmapNormal,
+ mPoints[i][j].getX() - mPointRadius,
+ mPoints[i][j].getY() - mPointRadius, mPaint);
+ } else if (mPoints[i][j].getState() == Point.BITMAP_PRESS) {
+ canvas.drawBitmap(mBitmapPressed,
+ mPoints[i][j].getX() - mPointRadius,
+ mPoints[i][j].getY() - mPointRadius, mPaint);
+ } else {
+ canvas.drawBitmap(mBitmapError,
+ mPoints[i][j].getX() - mPointRadius,
+ mPoints[i][j].getY() - mPointRadius, mPaint);
+ }
+ }
+ }
+ }
+
+ private void minitPoint(){
+ /**
+ * 开始实例化九宫格中点
+ */
+ mPoints[0][0] = new Point(mScreenWidthOffSet + mScreenWidth / 4,
+ mScreenHeightOffSet + mScreenHeight / 4);
+ mPoints[0][1] = new Point(mScreenWidthOffSet + mScreenWidth / 2,
+ mScreenHeightOffSet + mScreenHeight / 4);
+ mPoints[0][2] = new Point(mScreenWidthOffSet + mScreenWidth * 3 / 4,
+ mScreenHeightOffSet + mScreenHeight / 4);
+
+ mPoints[1][0] = new Point(mScreenWidthOffSet + mScreenWidth / 4,
+ mScreenHeightOffSet + mScreenHeight / 2);
+ mPoints[1][1] = new Point(mScreenWidthOffSet + mScreenWidth / 2,
+ mScreenHeightOffSet + mScreenHeight / 2);
+ mPoints[1][2] = new Point(mScreenWidthOffSet + mScreenWidth * 3 / 4,
+ mScreenHeightOffSet + mScreenHeight / 2);
+
+ mPoints[2][0] = new Point(mScreenWidthOffSet + mScreenWidth / 4,
+ mScreenHeightOffSet + mScreenHeight * 3 / 4);
+ mPoints[2][1] = new Point(mScreenWidthOffSet + mScreenWidth / 2,
+ mScreenHeightOffSet + mScreenHeight * 3 / 4);
+ mPoints[2][2] = new Point(mScreenWidthOffSet + mScreenWidth * 3 / 4,
+ mScreenHeightOffSet + mScreenHeight * 3 / 4);
+
+
+ // 设置九宫格中的各个index
+ int index = 1;
+ for (int i = 0; i < mPoints.length; i++) {
+ for (int j = 0; j < mPoints[i].length; j++) {
+ mPoints[i][j].setIndex(index + "");
+ // 在没有任何操作的情况下默認点的状态
+ mPoints[i][j].setState(Point.BITMAP_NORMAL);
+ index++;
+ }
+ }
+ }
+
+ /**
+ * 实例化九宫格中所有点和所有的资源图片
+ */
+ private void initPoint() {
+ // 获取View的宽高
+ mScreenWidth = getWidth();
+ mScreenHeight = getHeight();
+ if (mScreenHeight > mScreenWidth) {
+ // 获取y轴上的偏移量
+ mScreenHeightOffSet = (mScreenHeight - mScreenWidth) / 2;
+ // 将屏幕高的变量设置成与宽相等,目的是为了new Point(x,y)时方便操作
+ mScreenHeight = mScreenWidth;
+ } else {
+ // 获取x轴上的偏移量
+ mScreenWidthOffSet = (mScreenWidth - mScreenHeight) / 2;
+ // 将屏幕宽的变量设置成与高相等,目的是为了new Point(x,y)时方便操作
+ mScreenWidth = mScreenHeight;
+ }
+
+ /**
+ * 实例化所有的资源图片
+ */
+ mBitmapError = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap_error);
+ mBitmapNormal = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap_normal);
+ mBitmapPressed = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap_pressed);
+ mLineError = BitmapFactory.decodeResource(getResources(), R.drawable.line_error);
+ mLinePressed = BitmapFactory.decodeResource(getResources(), R.drawable.line_pressed);
+
+ mPointRadius = mBitmapNormal.getWidth() / 2;
+ mLineHeight = mLinePressed.getHeight();
+
+ /**
+ * 开始实例化九宫格中点
+ */
+ mPoints[0][0] = new Point(mScreenWidthOffSet + mScreenWidth / 4,
+ mScreenHeightOffSet + mScreenHeight / 4);
+ mPoints[0][1] = new Point(mScreenWidthOffSet + mScreenWidth / 2,
+ mScreenHeightOffSet + mScreenHeight / 4);
+ mPoints[0][2] = new Point(mScreenWidthOffSet + mScreenWidth * 3 / 4,
+ mScreenHeightOffSet + mScreenHeight / 4);
+
+ mPoints[1][0] = new Point(mScreenWidthOffSet + mScreenWidth / 4,
+ mScreenHeightOffSet + mScreenHeight / 2);
+ mPoints[1][1] = new Point(mScreenWidthOffSet + mScreenWidth / 2,
+ mScreenHeightOffSet + mScreenHeight / 2);
+ mPoints[1][2] = new Point(mScreenWidthOffSet + mScreenWidth * 3 / 4,
+ mScreenHeightOffSet + mScreenHeight / 2);
+
+ mPoints[2][0] = new Point(mScreenWidthOffSet + mScreenWidth / 4,
+ mScreenHeightOffSet + mScreenHeight * 3 / 4);
+ mPoints[2][1] = new Point(mScreenWidthOffSet + mScreenWidth / 2,
+ mScreenHeightOffSet + mScreenHeight * 3 / 4);
+ mPoints[2][2] = new Point(mScreenWidthOffSet + mScreenWidth * 3 / 4,
+ mScreenHeightOffSet + mScreenHeight * 3 / 4);
+
+
+ // 设置九宫格中的各个index
+ int index = 1;
+ for (int i = 0; i < mPoints.length; i++) {
+ for (int j = 0; j < mPoints[i].length; j++) {
+ mPoints[i][j].setIndex(index + "");
+ // 在没有任何操作的情况下默認点的状态
+ mPoints[i][j].setState(Point.BITMAP_NORMAL);
+ index++;
+ }
+ }
+
+ // 将isInitPoint设置为true
+ isInitPoint = true;
+ }
+
+ public interface OnLockListener {
+ public void getStringPassword(String password);
+
+ public boolean isPassword();
+ }
+
+
+ public void setLockListener(OnLockListener listener) {
+ this.mListener = listener;
+ }
+
+}
+
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
index 96a9ff89..ae424d8f 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
@@ -30,9 +30,11 @@ import android.content.SharedPreferences;
import android.graphics.Paint;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
+import android.text.TextWatcher;
import android.text.format.DateUtils;
import android.text.style.BackgroundColorSpan;
import android.util.Log;
@@ -141,6 +143,9 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private static final int SHORTCUT_ICON_TITLE_MAX_LEN = 10;
+ private static final int REQUEST_SET_PASSCODE = 0;
+ private static final int REQUEST_UNLOCK = 1;
+
public static final String TAG_CHECKED = String.valueOf('\u221A');
public static final String TAG_UNCHECKED = String.valueOf('\u25A1');
@@ -148,6 +153,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private String mUserQuery;
private Pattern mPattern;
+ private boolean Locked; /* 用以判断是否已解锁 */
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -259,6 +265,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return false;
}
mWorkingNote.setOnSettingStatusChangedListener(this);
+ Locked = mWorkingNote.hasPasscode();//设置便签解锁状态;
+ if (intent.hasExtra("lock")) {
+ Locked = false;
+ }
return true;
}
@@ -293,6 +303,15 @@ public class NoteEditActivity extends Activity implements OnClickListener,
* is not ready
*/
showAlertHeader();
+
+ //如果设置了密码,启动输入密码页面
+ if (mWorkingNote.hasPasscode() && Locked) {
+ saveNote();
+ Intent intent = new Intent(this,UnlockActivity.class);
+ intent.putExtra(Intent.EXTRA_UID, mWorkingNote.getNoteId());
+ startActivityForResult(intent,REQUEST_SET_PASSCODE);
+ finish();
+ }
}
private void showAlertHeader() {
@@ -502,6 +521,12 @@ public class NoteEditActivity extends Activity implements OnClickListener,
} else {
menu.findItem(R.id.menu_delete_remind).setVisible(false);
}
+ //如果已经设置密码,显示删除密码选项,否则,显示设置密码选项
+ if (mWorkingNote.hasPasscode()) {
+ menu.findItem(R.id.menu_set_password).setVisible(false);
+ } else {
+ menu.findItem(R.id.menu_remove_password).setVisible(false);
+ }
return true;
}
@@ -547,12 +572,43 @@ public class NoteEditActivity extends Activity implements OnClickListener,
case R.id.menu_delete_remind:
mWorkingNote.setAlertDate(0, false);
break;
+ //设置密码
+ case R.id.menu_set_password:
+ setPasscode();
+ break;
+ //删除密码
+ case R.id.menu_remove_password:
+ deletePasscode();
+ break;
default:
break;
}
return true;
}
+ /**
+ * 弹出设置密码界面
+ */
+ private void setPasscode() {
+ //确保笔记已写入数据库
+ saveNote();
+ //初始化一个新的意图,用以跳转至设置密码界面
+ Intent intent = new Intent(this,SetLockActivity.class);
+ //给意图传入当前便签的id参数,便于从设置密码活动中跳转回编辑便签活动
+ intent.putExtra(Intent.EXTRA_UID, mWorkingNote.getNoteId());
+ startActivity(intent);
+ finish();
+ }
+
+ /**
+ * 删除便签密码
+ */
+ private void deletePasscode() {
+ mWorkingNote.setPasscode("");
+ saveNote();
+ Toast.makeText(NoteEditActivity.this,R.string.note_passcode_deleted,Toast.LENGTH_SHORT).show();
+ }
+
private void setReminder() {
DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis());
d.setOnDateTimeSetListener(new OnDateTimeSetListener() {
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/ui/NoteItemData.java b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NoteItemData.java
index 0f5a8782..46bd84bb 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/ui/NoteItemData.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NoteItemData.java
@@ -40,6 +40,7 @@ public class NoteItemData {
NoteColumns.TYPE,
NoteColumns.WIDGET_ID,
NoteColumns.WIDGET_TYPE,
+ NoteColumns.PASSCODE
};
private static final int ID_COLUMN = 0;
@@ -54,6 +55,7 @@ public class NoteItemData {
private static final int TYPE_COLUMN = 9;
private static final int WIDGET_ID_COLUMN = 10;
private static final int WIDGET_TYPE_COLUMN = 11;
+ private static final int PASSCODE_COLUMN = 12;
private long mId;
private long mAlertDate;
@@ -69,6 +71,7 @@ public class NoteItemData {
private int mWidgetType;
private String mName;
private String mPhoneNumber;
+ private String mPasscode;
private boolean mIsLastItem;
private boolean mIsFirstItem;
@@ -92,6 +95,7 @@ public class NoteItemData {
mWidgetId = cursor.getInt(WIDGET_ID_COLUMN);
mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN);
+ mPasscode = cursor.getString(PASSCODE_COLUMN);
mPhoneNumber = "";
if (mParentId == Notes.ID_CALL_RECORD_FOLDER) {
mPhoneNumber = DataUtils.getCallNumberByNoteId(context.getContentResolver(), mId);
@@ -221,4 +225,8 @@ public class NoteItemData {
public static int getNoteType(Cursor cursor) {
return cursor.getInt(TYPE_COLUMN);
}
+
+ public boolean hasLock() {
+ return !mPasscode.equals("");
+ }
}
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
index e843aecf..3aace150 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
@@ -16,6 +16,7 @@
package net.micode.notes.ui;
+import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -29,6 +30,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.Editable;
@@ -78,163 +80,165 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashSet;
-public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
- private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
+public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
+ 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";
- private enum ListEditState {
- NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
- };
+ private enum ListEditState {
+ NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
+ };
- private ListEditState mState;
+ private ListEditState mState;
- private BackgroundQueryHandler mBackgroundQueryHandler;
+ private BackgroundQueryHandler mBackgroundQueryHandler;
- private NotesListAdapter mNotesListAdapter;
+ private NotesListAdapter mNotesListAdapter;
- private ListView mNotesListView;
+ private ListView mNotesListView;
- private Button mAddNewNote;
+ private Button mAddNewNote;
- private boolean mDispatch;
+ private boolean mDispatch;
- private int mOriginY;
+ private int mOriginY;
- private int mDispatchY;
+ private int mDispatchY;
- private TextView mTitleBar;
+ private TextView mTitleBar;
- private long mCurrentFolderId;
+ private long mCurrentFolderId;
- 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 + "=?";
- 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 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;
+ private final static int REQUEST_CODE_OPEN_NODE = 102;
+ private final static int REQUEST_CODE_NEW_NODE = 103;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.note_list);
- initResources();
+ @Override//创建activity
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.note_list);
+ //getWindow().setBackgroundDrawableResource(R.drawable.list_background_light);
+ initResources();
- /**
- * Insert an introduction when user firstly use this application
- */
- setAppInfoFromRawRes();
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (resultCode == RESULT_OK
- && (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) {
- mNotesListAdapter.changeCursor(null);
- } else {
- super.onActivityResult(requestCode, resultCode, data);
+ /**
+ * Insert an introduction when user firstly use this application
+ */
+ setAppInfoFromRawRes();
}
- }
-
- private void setAppInfoFromRawRes() {
- SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
- if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
- StringBuilder sb = new StringBuilder();
- InputStream in = null;
- try {
- in = getResources().openRawResource(R.raw.introduction);
- if (in != null) {
- InputStreamReader isr = new InputStreamReader(in);
- BufferedReader br = new BufferedReader(isr);
- char [] buf = new char[1024];
- int len = 0;
- while ((len = br.read(buf)) > 0) {
- sb.append(buf, 0, len);
+ //对子模块进行数据分析
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (resultCode == RESULT_OK
+ && (requestCode == REQUEST_CODE_OPEN_NODE || requestCode == REQUEST_CODE_NEW_NODE)) {
+ mNotesListAdapter.changeCursor(null);
+ } else {
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+ }
+ //从Res/Raw/下的introduction文件里导入资源
+ @TargetApi(Build.VERSION_CODES.KITKAT)
+ private void setAppInfoFromRawRes() {
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
+ if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
+ StringBuilder sb = new StringBuilder();
+ InputStream in = null;
+ try {
+ in = getResources().openRawResource(R.raw.introduction); //加载软件自带的第一条便签内容
+ if (in != null) {
+ InputStreamReader isr = new InputStreamReader(in);
+ BufferedReader br = new BufferedReader(isr);
+ char [] buf = new char[1024];
+ int len = 0;
+ while ((len = br.read(buf)) > 0) {
+ sb.append(buf, 0, len);
+ }
+ } else {
+ Log.e(TAG, "Read introduction file error");
+ return;
}
- } else {
- Log.e(TAG, "Read introduction file error");
+ } catch (IOException e) {
+ e.printStackTrace();
return;
- }
- } catch (IOException e) {
- e.printStackTrace();
- return;
- } finally {
- if(in != null) {
- try {
- in.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ } finally {
+ if(in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
}
- }
- WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER,
- AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE,
- ResourceParser.RED);
- note.setWorkingText(sb.toString());
- if (note.saveNote()) {
- sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit();
- } else {
- Log.e(TAG, "Save introduction note error");
- return;
+ WorkingNote note = WorkingNote.createEmptyNote(this, Notes.ID_ROOT_FOLDER,
+ AppWidgetManager.INVALID_APPWIDGET_ID, Notes.TYPE_WIDGET_INVALIDE,
+ ResourceParser.RED);
+ note.setWorkingText(sb.toString());
+ if (note.saveNote()) {
+ sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit();
+ } else {
+ Log.e(TAG, "Save introduction note error");
+ return;
+ }
}
}
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- startAsyncNotesListQuery();
- }
-
- private void initResources() {
- mContentResolver = this.getContentResolver();
- mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver());
- mCurrentFolderId = Notes.ID_ROOT_FOLDER;
- mNotesListView = (ListView) findViewById(R.id.notes_list);
- mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null),
- null, false);
- mNotesListView.setOnItemClickListener(new OnListItemClickListener());
- mNotesListView.setOnItemLongClickListener(this);
- mNotesListAdapter = new NotesListAdapter(this);
- mNotesListView.setAdapter(mNotesListAdapter);
- mAddNewNote = (Button) findViewById(R.id.btn_new_note);
- mAddNewNote.setOnClickListener(this);
- mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener());
- mDispatch = false;
- mDispatchY = 0;
- mOriginY = 0;
- mTitleBar = (TextView) findViewById(R.id.tv_title_bar);
- mState = ListEditState.NOTE_LIST;
- mModeCallBack = new ModeCallback();
- }
+ @Override
+ protected void onStart() {
+ super.onStart();
+ startAsyncNotesListQuery();
+ }
+ //加载原始资源,如界面背景、图标等
+ private void initResources() {
+ mContentResolver = this.getContentResolver();
+ mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver());
+ mCurrentFolderId = Notes.ID_ROOT_FOLDER;
+ mNotesListView = (ListView) findViewById(R.id.notes_list);
+ mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null),
+ null, false);
+ mNotesListView.setOnItemClickListener(new OnListItemClickListener());
+ mNotesListView.setOnItemLongClickListener(this);
+ mNotesListAdapter = new NotesListAdapter(this);
+ mNotesListView.setAdapter(mNotesListAdapter);
+ mAddNewNote = (Button) findViewById(R.id.btn_new_note);
+ mAddNewNote.setOnClickListener(this);
+ mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener());
+ mDispatch = false;
+ mDispatchY = 0;
+ mOriginY = 0;
+ mTitleBar = (TextView) findViewById(R.id.tv_title_bar);
+ mState = ListEditState.NOTE_LIST;
+ mModeCallBack = new ModeCallback();
+ }
+ //下拉菜单的实现
private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
- private DropdownMenu mDropDownMenu;
- private ActionMode mActionMode;
- private MenuItem mMoveMenu;
+ private DropdownMenu mDropDownMenu;//下拉菜单
+ private ActionMode mActionMode;//为用户提供一个action菜单
+ private MenuItem mMoveMenu;//菜单中不同的功能
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
getMenuInflater().inflate(R.menu.note_list_options, menu);
@@ -271,7 +275,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private void updateMenu() {
int selectedCount = mNotesListAdapter.getSelectedCount();
- // Update dropdown menu
+ // Update dropdown menu 更新下拉菜单
String format = getResources().getString(R.string.menu_select_title, selectedCount);
mDropDownMenu.setTitle(format);
MenuItem item = mDropDownMenu.findItem(R.id.action_select_all);
@@ -440,7 +444,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}
}
-
+//文件夹相关操作
private void showFolderListMenu(Cursor cursor) {
AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this);
builder.setTitle(R.string.menu_title_select_folder);
@@ -452,7 +456,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which));
Toast.makeText(
NotesListActivity.this,
- getString(R.string.format_move_notes_to_folder,
+ getString(R.string.format_move_notes_to_folder,
mNotesListAdapter.getSelectedCount(),
adapter.getFolderName(NotesListActivity.this, which)),
Toast.LENGTH_SHORT).show();
@@ -461,17 +465,17 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
});
builder.show();
}
-
+//新建便签
private void createNewNote() {
Intent intent = new Intent(this, NoteEditActivity.class);
intent.setAction(Intent.ACTION_INSERT_OR_EDIT);
intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId);
this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE);
}
-
+//删除便签
private void batchDelete() {
- new AsyncTask>() {
- protected HashSet doInBackground(Void... unused) {
+ new AsyncTask>() {
+ protected HashSet doInBackground(Params... unused) {
HashSet widgets = mNotesListAdapter.getSelectedWidget();
if (!isSyncMode()) {
// if not synced, delete notes directly
@@ -505,7 +509,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}.execute();
}
-
+//删除文件夹
private void deleteFolder(long folderId) {
if (folderId == Notes.ID_ROOT_FOLDER) {
Log.e(TAG, "Wrong folder id, should not happen " + folderId);
@@ -539,7 +543,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
intent.putExtra(Intent.EXTRA_UID, data.getId());
this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE);
}
-
+//打开文件夹
private void openFolder(NoteItemData data) {
mCurrentFolderId = data.getId();
startAsyncNotesListQuery();
@@ -556,7 +560,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
mTitleBar.setVisibility(View.VISIBLE);
}
-
+//监听是否点击新建便签的按钮
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_new_note:
@@ -566,19 +570,19 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
break;
}
}
-
+//显示软键盘
private void showSoftInput() {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputMethodManager != null) {
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
}
-
+//隐藏软键盘
private void hideSoftInput(View view) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
-
+//创建或修改文件夹
private void showCreateOrModifyFolderDialog(final boolean create) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null);
@@ -687,7 +691,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
break;
}
}
-
+//更新微件(在桌面显示的便签微件)
private void updateWidget(int appWidgetId, int appWidgetType) {
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
if (appWidgetType == Notes.TYPE_WIDGET_2X) {
@@ -706,7 +710,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
sendBroadcast(intent);
setResult(RESULT_OK, intent);
}
-
+//文件夹的查看、改名、删除
private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() {
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
if (mFocusNoteDataItem != null) {
@@ -759,7 +763,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
return true;
}
-
+//右上角菜单栏
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
@@ -817,13 +821,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
return true;
}
-
+//搜索便签
@Override
public boolean onSearchRequested() {
startSearch(null, false, null /* appData */, false);
return true;
}
-
+//将便签导出为txt
private void exportNoteToText() {
final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this);
new AsyncTask() {
@@ -869,7 +873,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private boolean isSyncMode() {
return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0;
}
-
+//小米便签设置
private void startPreferenceActivity() {
Activity from = getParent() != null ? getParent() : this;
Intent intent = new Intent(from, NotesPreferenceActivity.class);
@@ -916,7 +920,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}
-
+//查询目标文件夹
private void startQueryDestinationFolders() {
String selection = NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>? AND " + NoteColumns.ID + "<>?";
selection = (mState == ListEditState.NOTE_LIST) ? selection:
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListItem.java b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListItem.java
index 1221e808..40dea10a 100644
--- a/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListItem.java
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListItem.java
@@ -37,6 +37,7 @@ public class NotesListItem extends LinearLayout {
private TextView mCallName;
private NoteItemData mItemData;
private CheckBox mCheckBox;
+ private ImageView mLock;
public NotesListItem(Context context) {
super(context);
@@ -46,6 +47,7 @@ public class NotesListItem extends LinearLayout {
mTime = (TextView) findViewById(R.id.tv_time);
mCallName = (TextView) findViewById(R.id.tv_name);
mCheckBox = (CheckBox) findViewById(android.R.id.checkbox);
+ mLock = (ImageView) findViewById(R.id.iv_lock);
}
public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) {
@@ -75,6 +77,14 @@ public class NotesListItem extends LinearLayout {
} else {
mAlert.setVisibility(View.GONE);
}
+ if (data.hasLock()) {
+ mLock.setImageResource(R.drawable.lock);
+ mLock.setVisibility(View.VISIBLE);
+ String text = "已加密";
+ mTitle.setText(text);
+ } else {
+ mLock.setVisibility(View.GONE);
+ }
} else {
mCallName.setVisibility(View.GONE);
mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);
@@ -92,6 +102,14 @@ public class NotesListItem extends LinearLayout {
} else {
mAlert.setVisibility(View.GONE);
}
+ if (data.hasLock()) {
+ mLock.setImageResource(R.drawable.lock);
+ mLock.setVisibility(View.VISIBLE);
+ String text = "已加密";
+ mTitle.setText(text);
+ } else {
+ mLock.setVisibility(View.GONE);
+ }
}
}
mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate()));
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/ui/SetLockActivity.java b/src/Notes-master/app/src/main/java/net/micode/notes/ui/SetLockActivity.java
new file mode 100644
index 00000000..a4cd8400
--- /dev/null
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/ui/SetLockActivity.java
@@ -0,0 +1,94 @@
+package net.micode.notes.ui;
+
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import net.micode.notes.model.WorkingNote;
+import net.micode.notes.R;
+import net.micode.notes.ui.LockPatternView;
+
+public class SetLockActivity extends AppCompatActivity {
+
+ private TextView mTitleTv;
+ private LockPatternView mLockPatternView;
+ // private LinearLayout mBottomLayout;
+ private Button mClearBtn;
+// private Button mConfirmBtn;
+
+ private String mPassword;
+ /**
+ * 是否是第一次输入密码
+ */
+ private boolean isFirst = true;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_set_lock);
+
+ initViews();
+ initEvents();
+ }
+
+ private void initEvents() {
+ mLockPatternView.setLockListener(new LockPatternView.OnLockListener() {
+ @Override
+ public void getStringPassword(String password) {
+ if (isFirst) {
+ mPassword = password;
+ mTitleTv.setText("再次输入手势密码");
+ isFirst = false;
+ mClearBtn.setVisibility(View.VISIBLE);
+ } else {
+ if (password.equals(mPassword)) {
+ Intent pre = getIntent();
+ //将密码写入数据库
+ long noteId = pre.getLongExtra(Intent.EXTRA_UID, 0);
+ WorkingNote mWorkingNote = WorkingNote.load(SetLockActivity.this,noteId);
+ mWorkingNote.setPasscode(password);
+ boolean saved = mWorkingNote.saveNote();//保存便签
+ Intent intent = new Intent(SetLockActivity.this, NoteEditActivity.class);
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.putExtra("lock",0);
+ intent.putExtra(Intent.EXTRA_UID, noteId);
+ startActivity(intent);
+ SetLockActivity.this.finish();
+ }else {
+ Toast.makeText(SetLockActivity.this,"两次密码不一致,请重新设置",Toast.LENGTH_SHORT).show();
+ mPassword = "";
+ mTitleTv.setText("设置手势密码");
+ isFirst = true;
+ mClearBtn.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ @Override
+ public boolean isPassword() {
+ return false;
+ }
+ });
+
+ mClearBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mPassword = "";
+ isFirst = true;
+ mClearBtn.setVisibility(View.GONE);
+ }
+ });
+
+ }
+
+ private void initViews() {
+ mTitleTv = (TextView) findViewById(R.id.tv_activity_set_lock_title);
+ mLockPatternView = (LockPatternView) findViewById(R.id.lockView);
+ mClearBtn = (Button) findViewById(R.id.btn_password_clear);
+ }
+}
diff --git a/src/Notes-master/app/src/main/java/net/micode/notes/ui/UnlockActivity.java b/src/Notes-master/app/src/main/java/net/micode/notes/ui/UnlockActivity.java
new file mode 100644
index 00000000..9c4c8737
--- /dev/null
+++ b/src/Notes-master/app/src/main/java/net/micode/notes/ui/UnlockActivity.java
@@ -0,0 +1,56 @@
+package net.micode.notes.ui;
+
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.widget.Toast;
+
+import net.micode.notes.model.WorkingNote;
+import net.micode.notes.R;
+import net.micode.notes.ui.LockPatternView;
+
+public class UnlockActivity extends AppCompatActivity {
+
+ private LockPatternView mLockPatternView;
+ private String mPasswordStr;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_lock);
+
+ mLockPatternView = (LockPatternView) findViewById(R.id.lockView);
+ Intent pre = getIntent();
+ final Long noteId = pre.getLongExtra(Intent.EXTRA_UID, 0);
+
+ mLockPatternView.setLockListener(new LockPatternView.OnLockListener() {
+ WorkingNote mWorkingNote = WorkingNote.load(UnlockActivity.this,noteId);
+ String password = mWorkingNote.getPasscode();
+ @Override
+ public void getStringPassword(String password) {
+ mPasswordStr = password;
+ }
+
+ @Override
+ public boolean isPassword() {
+ if (mPasswordStr.equals(password)) {
+ Toast.makeText(UnlockActivity.this, "密码正确", Toast.LENGTH_SHORT).show();
+ Intent intent = new Intent(UnlockActivity.this, NoteEditActivity.class);
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.putExtra("lock",0);
+ intent.putExtra(Intent.EXTRA_UID, noteId);
+ startActivity(intent);
+ UnlockActivity.this.finish();
+ //TODO comment or not
+ //return true;
+ } else {
+ Toast.makeText(UnlockActivity.this, "密码不正确", Toast.LENGTH_SHORT).show();
+ }
+ return false;
+ }
+ });
+
+ }
+
+}
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/add_note.png b/src/Notes-master/app/src/main/res/drawable-hdpi/add_note.png
new file mode 100644
index 00000000..d6775276
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/add_note.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_error.png b/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_error.png
new file mode 100644
index 00000000..72424a8b
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_error.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_normal.png b/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_normal.png
new file mode 100644
index 00000000..8de75243
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_normal.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_pressed.png b/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_pressed.png
new file mode 100644
index 00000000..f5773c0d
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_pressed.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/icon_app_new.png b/src/Notes-master/app/src/main/res/drawable-hdpi/icon_app_new.png
new file mode 100644
index 00000000..fe01c027
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/icon_app_new.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/life.png b/src/Notes-master/app/src/main/res/drawable-hdpi/life.png
new file mode 100644
index 00000000..7ee575d8
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/life.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/line_error.png b/src/Notes-master/app/src/main/res/drawable-hdpi/line_error.png
new file mode 100644
index 00000000..93f87995
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/line_error.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/line_pressed.png b/src/Notes-master/app/src/main/res/drawable-hdpi/line_pressed.png
new file mode 100644
index 00000000..9ab92d17
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/line_pressed.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/lock.png b/src/Notes-master/app/src/main/res/drawable-hdpi/lock.png
new file mode 100644
index 00000000..c2f13ab6
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/lock.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/menu_top.png b/src/Notes-master/app/src/main/res/drawable-hdpi/menu_top.png
new file mode 100644
index 00000000..7dd864f2
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/menu_top.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/note_top.png b/src/Notes-master/app/src/main/res/drawable-hdpi/note_top.png
new file mode 100644
index 00000000..1026ad3e
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/note_top.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/play.png b/src/Notes-master/app/src/main/res/drawable-hdpi/play.png
new file mode 100644
index 00000000..2e9fc493
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/play.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/study.png b/src/Notes-master/app/src/main/res/drawable-hdpi/study.png
new file mode 100644
index 00000000..07fd66dd
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/study.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-hdpi/working.png b/src/Notes-master/app/src/main/res/drawable-hdpi/working.png
new file mode 100644
index 00000000..0bf6b2f6
Binary files /dev/null and b/src/Notes-master/app/src/main/res/drawable-hdpi/working.png differ
diff --git a/src/Notes-master/app/src/main/res/drawable-v24/settings_launcher_foreground.xml b/src/Notes-master/app/src/main/res/drawable-v24/settings_launcher_foreground.xml
new file mode 100644
index 00000000..6ae17cc3
--- /dev/null
+++ b/src/Notes-master/app/src/main/res/drawable-v24/settings_launcher_foreground.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/app/src/main/res/drawable/settings_launcher_background.xml b/src/Notes-master/app/src/main/res/drawable/settings_launcher_background.xml
new file mode 100644
index 00000000..ca3826a4
--- /dev/null
+++ b/src/Notes-master/app/src/main/res/drawable/settings_launcher_background.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Notes-master/app/src/main/res/layout/activity_lock.xml b/src/Notes-master/app/src/main/res/layout/activity_lock.xml
new file mode 100644
index 00000000..f26cd81e
--- /dev/null
+++ b/src/Notes-master/app/src/main/res/layout/activity_lock.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
diff --git a/src/Notes-master/app/src/main/res/layout/activity_set_lock.xml b/src/Notes-master/app/src/main/res/layout/activity_set_lock.xml
new file mode 100644
index 00000000..2d5f203f
--- /dev/null
+++ b/src/Notes-master/app/src/main/res/layout/activity_set_lock.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Notes-master/app/src/main/res/layout/note_edit.xml b/src/Notes-master/app/src/main/res/layout/note_edit.xml
index 10b2aa73..e2247c86 100644
--- a/src/Notes-master/app/src/main/res/layout/note_edit.xml
+++ b/src/Notes-master/app/src/main/res/layout/note_edit.xml
@@ -40,6 +40,14 @@
android:layout_marginRight="8dip"
android:textAppearance="@style/TextAppearanceSecondaryItem" />
+
+
+
+
+
+
+
diff --git a/src/Notes-master/app/src/main/res/layout/note_list.xml b/src/Notes-master/app/src/main/res/layout/note_list.xml
index 6b25d38f..5ecbd9a9 100644
--- a/src/Notes-master/app/src/main/res/layout/note_list.xml
+++ b/src/Notes-master/app/src/main/res/layout/note_list.xml
@@ -37,6 +37,7 @@
android:textColor="#FFEAD1AE"
android:textSize="@dimen/text_font_size_medium" />
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/app/src/main/res/menu/call_note_edit.xml b/src/Notes-master/app/src/main/res/menu/call_note_edit.xml
index 02c05280..5c914dd4 100644
--- a/src/Notes-master/app/src/main/res/menu/call_note_edit.xml
+++ b/src/Notes-master/app/src/main/res/menu/call_note_edit.xml
@@ -45,4 +45,12 @@
+
+
+
+
diff --git a/src/Notes-master/app/src/main/res/menu/note_edit.xml b/src/Notes-master/app/src/main/res/menu/note_edit.xml
index 35cacd14..99af372e 100644
--- a/src/Notes-master/app/src/main/res/menu/note_edit.xml
+++ b/src/Notes-master/app/src/main/res/menu/note_edit.xml
@@ -17,11 +17,11 @@
\ No newline at end of file
diff --git a/src/Notes-master/app/src/main/res/menu/note_list.xml b/src/Notes-master/app/src/main/res/menu/note_list.xml
index 42ea7363..884ec58e 100644
--- a/src/Notes-master/app/src/main/res/menu/note_list.xml
+++ b/src/Notes-master/app/src/main/res/menu/note_list.xml
@@ -36,4 +36,5 @@
+
diff --git a/src/Notes-master/app/src/main/res/values-night/themes.xml b/src/Notes-master/app/src/main/res/values-night/themes.xml
new file mode 100644
index 00000000..6f991572
--- /dev/null
+++ b/src/Notes-master/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/app/src/main/res/values-zh-rCN/strings.xml b/src/Notes-master/app/src/main/res/values-zh-rCN/strings.xml
index 09f75ed9..bde0e4f5 100644
--- a/src/Notes-master/app/src/main/res/values-zh-rCN/strings.xml
+++ b/src/Notes-master/app/src/main/res/values-zh-rCN/strings.xml
@@ -63,6 +63,8 @@
发送到桌面
提醒我
删除提醒
+ 设置密码
+ 删除密码
选择文件夹
上一级文件夹
已添加到桌面
@@ -122,5 +124,19 @@
- %1$s 条符合“%2$s”的搜索结果
+ 亮背景
+ 暗背景
+ 设置
+ 设置
+ 打开设置失败
+ 新建便签
+ 新建便签
+ 新建便签失败
+ 设置密码
+ 删除密码
+ 密码已删除
+ 设置置顶
+ 分类
+ 取消分类
diff --git a/src/Notes-master/app/src/main/res/values-zh-rTW/strings.xml b/src/Notes-master/app/src/main/res/values-zh-rTW/strings.xml
index e29b79bc..ae03dc99 100644
--- a/src/Notes-master/app/src/main/res/values-zh-rTW/strings.xml
+++ b/src/Notes-master/app/src/main/res/values-zh-rTW/strings.xml
@@ -64,6 +64,8 @@
發送到桌面
提醒我
刪除提醒
+ 设置密码
+ 删除密码
選擇文件夾
上一級文件夾
已添加到桌面
@@ -123,5 +125,19 @@
- %1$s 條符合”%2$s“的搜尋結果
+ 亮背景
+ 暗背景
+ 設置
+ 設置
+ 打开設置失敗
+ 新建便簽
+ 新建便簽
+ 新建便簽失敗
+ 設置密码
+ 删除密码
+ 密码已删除
+ 設置置頂
+ 分類
+ 取消分類
diff --git a/src/Notes-master/app/src/main/res/values/attrs.xml b/src/Notes-master/app/src/main/res/values/attrs.xml
new file mode 100644
index 00000000..e52391d2
--- /dev/null
+++ b/src/Notes-master/app/src/main/res/values/attrs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/app/src/main/res/values/colors.xml b/src/Notes-master/app/src/main/res/values/colors.xml
index 123ffbfb..2496c0c4 100644
--- a/src/Notes-master/app/src/main/res/values/colors.xml
+++ b/src/Notes-master/app/src/main/res/values/colors.xml
@@ -17,4 +17,9 @@
#335b5b5b
+ #FF039BE5
+ #FF01579B
+ #FF40C4FF
+ #FF00B0FF
+ #66000000
diff --git a/src/Notes-master/app/src/main/res/values/strings.xml b/src/Notes-master/app/src/main/res/values/strings.xml
index 55df8682..a26b6d82 100644
--- a/src/Notes-master/app/src/main/res/values/strings.xml
+++ b/src/Notes-master/app/src/main/res/values/strings.xml
@@ -15,8 +15,7 @@
limitations under the License.
-->
-
+
Notes
Notes 2x2
Notes 4x4
@@ -67,6 +66,8 @@
Send to home
Remind me
Delete reminder
+ Set password
+ Remove password
Select folder
Parent folder
Note added to home
@@ -127,9 +128,26 @@
set
cancel
- - %1$s result for \"%2$s\"
+ - %1$s result for \"%2$s\"
- - %1$s results for \"%2$s\"
+ - %1$s results for \"%2$s\"
+ FullscreenActivity
+ Dummy Button
+ DUMMY\nCONTENT
+ light mode
+ night mode
+ Settings
+ Settings
+ unavailable
+ Add note
+ Add note
+ Failed to add note
+ Set passcode
+ Delete passcode
+ passcode deleted
+ Set top
+ Classify
+ Cancel classification
diff --git a/src/Notes-master/app/src/main/res/values/styles.xml b/src/Notes-master/app/src/main/res/values/styles.xml
index d750e659..f803d368 100644
--- a/src/Notes-master/app/src/main/res/values/styles.xml
+++ b/src/Notes-master/app/src/main/res/values/styles.xml
@@ -16,18 +16,22 @@
-->
+
+
+
+
@@ -63,7 +67,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Notes-master/app/src/main/res/values/themes.xml b/src/Notes-master/app/src/main/res/values/themes.xml
new file mode 100644
index 00000000..6ddddf73
--- /dev/null
+++ b/src/Notes-master/app/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yangtingkai_branch.txt b/yangtingkai_branch.txt
new file mode 100644
index 00000000..da556643
--- /dev/null
+++ b/yangtingkai_branch.txt
@@ -0,0 +1 @@
+这是杨廷楷的branch
\ No newline at end of file