From 7cba0d9bc79fe23b129bf4c331f2ae195ee4327e Mon Sep 17 00:00:00 2001 From: yangtingkai <1752285001@qq.com> Date: Fri, 29 Oct 2021 10:55:59 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yangtingkai_branch.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 yangtingkai_branch.txt 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 From f93f76e1b6848f76ddd1a256acad2b3e6be924c7 Mon Sep 17 00:00:00 2001 From: yangtingkai <1752285001@qq.com> Date: Tue, 2 Nov 2021 23:24:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E5=B0=8F=E7=B1=B3?= =?UTF-8?q?=E4=BE=BF=E7=AD=BE=EF=BC=8C=E8=A7=A3=E5=86=B3=E4=BA=86sonarqube?= =?UTF-8?q?=E5=88=86=E6=9E=90=E5=87=BA=E7=8E=B0=E7=9A=84=E5=9C=A8ui?= =?UTF-8?q?=E5=8C=85=E4=B8=ADNotesListActivity=E6=96=87=E4=BB=B6=E7=9A=84B?= =?UTF-8?q?ugs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notes/gtask/remote/GTaskASyncTask.java | 12 +- .../micode/notes/ui/NotesListActivity.java | 281 +++++++++--------- 2 files changed, 143 insertions(+), 150 deletions(-) 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/ui/NotesListActivity.java b/src/Notes-master/app/src/main/java/net/micode/notes/ui/NotesListActivity.java index e843aecf..6fedf169 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,162 @@ 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); + 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 (InputStreamReader isr = new InputStreamReader(in);BufferedReader br = new BufferedReader(isr)){ + in = getResources().openRawResource(R.raw.introduction); //加载软件自带的第一条便签内容 + if (in != null) { + 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 +272,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 +441,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); @@ -461,17 +462,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 +506,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 +540,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 +557,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 +567,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 +688,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 +707,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 +760,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt return true; } - +//右上角菜单栏 @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); @@ -817,13 +818,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 +870,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 +917,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: From 0232f42c9fe9155695e4e6590205c5c010684e85 Mon Sep 17 00:00:00 2001 From: yangtingkai <1752285001@qq.com> Date: Tue, 9 Nov 2021 10:48:28 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=EF=BC=9A=E5=AF=86=E7=A0=81=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/src/main/AndroidManifest.xml | 14 +++++ .../java/net/micode/notes/data/Notes.java | 1 + .../notes/data/NotesDatabaseHelper.java | 40 ++++++++++++- .../java/net/micode/notes/model/Note.java | 1 + .../net/micode/notes/model/WorkingNote.java | 26 ++++++++- .../net/micode/notes/ui/NoteEditActivity.java | 56 +++++++++++++++++++ .../net/micode/notes/ui/NoteItemData.java | 8 +++ .../micode/notes/ui/NotesListActivity.java | 7 ++- .../net/micode/notes/ui/NotesListItem.java | 18 ++++++ .../app/src/main/res/layout/note_edit.xml | 17 ++++++ .../app/src/main/res/layout/note_item.xml | 7 +++ .../app/src/main/res/layout/note_list.xml | 1 + .../app/src/main/res/menu/call_note_edit.xml | 8 +++ .../app/src/main/res/menu/note_edit.xml | 13 ++++- .../app/src/main/res/menu/note_list.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 16 ++++++ .../src/main/res/values-zh-rTW/strings.xml | 16 ++++++ .../app/src/main/res/values/colors.xml | 5 ++ .../app/src/main/res/values/strings.xml | 26 +++++++-- .../app/src/main/res/values/styles.xml | 19 ++++++- 20 files changed, 285 insertions(+), 15 deletions(-) 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/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/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 6fedf169..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 @@ -141,6 +141,7 @@ public class NotesListActivity extends Activity implements OnClickListen protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.note_list); + //getWindow().setBackgroundDrawableResource(R.drawable.list_background_light); initResources(); /** @@ -165,9 +166,11 @@ public class NotesListActivity extends Activity implements OnClickListen if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { StringBuilder sb = new StringBuilder(); InputStream in = null; - try (InputStreamReader isr = new InputStreamReader(in);BufferedReader br = new BufferedReader(isr)){ + 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) { @@ -453,7 +456,7 @@ public class NotesListActivity extends Activity implements OnClickListen 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(); 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/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" /> + + + + + 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 @@ - + @@ -49,4 +49,13 @@ + + + + + \ 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-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/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 From 1a2ee1d900579950af479876d2c1eda3bc21a6e8 Mon Sep 17 00:00:00 2001 From: yangtingkai <1752285001@qq.com> Date: Tue, 9 Nov 2021 11:06:44 +0800 Subject: [PATCH 4/4] Signed-off-by: yangtingkai <1752285001@qq.com> --- .../java/net/micode/notes/tool/Point.java | 113 +++++ .../net/micode/notes/ui/LockPatternView.java | 385 ++++++++++++++++++ .../net/micode/notes/ui/SetLockActivity.java | 94 +++++ .../net/micode/notes/ui/UnlockActivity.java | 56 +++ .../src/main/res/drawable-hdpi/add_note.png | Bin 0 -> 24939 bytes .../main/res/drawable-hdpi/bitmap_error.png | Bin 0 -> 3754 bytes .../main/res/drawable-hdpi/bitmap_normal.png | Bin 0 -> 3788 bytes .../main/res/drawable-hdpi/bitmap_pressed.png | Bin 0 -> 3757 bytes .../main/res/drawable-hdpi/icon_app_new.png | Bin 0 -> 1447 bytes .../app/src/main/res/drawable-hdpi/life.png | Bin 0 -> 841 bytes .../src/main/res/drawable-hdpi/line_error.png | Bin 0 -> 2806 bytes .../main/res/drawable-hdpi/line_pressed.png | Bin 0 -> 2807 bytes .../app/src/main/res/drawable-hdpi/lock.png | Bin 0 -> 5492 bytes .../src/main/res/drawable-hdpi/menu_top.png | Bin 0 -> 672 bytes .../src/main/res/drawable-hdpi/note_top.png | Bin 0 -> 676 bytes .../app/src/main/res/drawable-hdpi/play.png | Bin 0 -> 904 bytes .../app/src/main/res/drawable-hdpi/study.png | Bin 0 -> 536 bytes .../src/main/res/drawable-hdpi/working.png | Bin 0 -> 670 bytes .../settings_launcher_foreground.xml | 36 ++ .../drawable/settings_launcher_background.xml | 74 ++++ .../app/src/main/res/layout/activity_lock.xml | 20 + .../src/main/res/layout/activity_set_lock.xml | 32 ++ .../src/main/res/layout/widget_lock_view.xml | 10 + .../app/src/main/res/values-night/themes.xml | 7 + .../app/src/main/res/values/attrs.xml | 6 + .../app/src/main/res/values/themes.xml | 16 + 26 files changed, 849 insertions(+) create mode 100644 src/Notes-master/app/src/main/java/net/micode/notes/tool/Point.java create mode 100644 src/Notes-master/app/src/main/java/net/micode/notes/ui/LockPatternView.java create mode 100644 src/Notes-master/app/src/main/java/net/micode/notes/ui/SetLockActivity.java create mode 100644 src/Notes-master/app/src/main/java/net/micode/notes/ui/UnlockActivity.java create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/add_note.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_error.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_normal.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/bitmap_pressed.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/icon_app_new.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/life.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/line_error.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/line_pressed.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/lock.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/menu_top.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/note_top.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/play.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/study.png create mode 100644 src/Notes-master/app/src/main/res/drawable-hdpi/working.png create mode 100644 src/Notes-master/app/src/main/res/drawable-v24/settings_launcher_foreground.xml create mode 100644 src/Notes-master/app/src/main/res/drawable/settings_launcher_background.xml create mode 100644 src/Notes-master/app/src/main/res/layout/activity_lock.xml create mode 100644 src/Notes-master/app/src/main/res/layout/activity_set_lock.xml create mode 100644 src/Notes-master/app/src/main/res/layout/widget_lock_view.xml create mode 100644 src/Notes-master/app/src/main/res/values-night/themes.xml create mode 100644 src/Notes-master/app/src/main/res/values/attrs.xml create mode 100644 src/Notes-master/app/src/main/res/values/themes.xml 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/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 0000000000000000000000000000000000000000..d6775276c7271bcdbc6176ea51737c8038506a6b GIT binary patch literal 24939 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..72424a8b25146ea39026f52371e93409119a1a96 GIT binary patch literal 3754 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 Q{k*_oZ-1}H2P1#|8wX~ny#N3J literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7ee575d8610e451cc6a5183af544ea68fa5b92fc GIT binary patch literal 841 zcmV-P1GfB$P)1GrXbk+5Xa%?{`VRg@w9>XiGeyIAfND@Q9ePgul_-wi z3=)5fF|67m(R+GGE%;nG;_(LX644Ox-BHDn_kcFyjl@q8uO)sy3WwV00SAdU6F*6O z2l3OkomowR`ct$Dyjt|tXDcK~#6_)@%A zK0&LbXVW;i{_b!TPF} zq|e*dVfT4;;1VPzMf6u5&#;-)lDO;93GVEjgnze+9U<}|7X7dxbQe< T*drz600000NkvXXu0mjfM7NNC literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..93f879955cf2e45df369769e7bddb41a98dd3b4b GIT binary patch literal 2806 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 IM6N<$g26^rvH$=8 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9ab92d17b731fef81ce2be908e6eb59ae1d6a1d9 GIT binary patch literal 2807 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 JPDHLkV1o0cRO$c# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c2f13ab6e403d1d67222982b2fbd80e595c886e4 GIT binary patch literal 5492 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 Eg3 + + + + + + + + + + + + \ 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 @@ + + + + + + + + +