diff --git a/doc/开源软件的泛读维护标注报告文档.docx b/doc/开源软件的泛读维护标注报告文档.docx new file mode 100644 index 0000000..db9a220 Binary files /dev/null and b/doc/开源软件的泛读维护标注报告文档.docx differ diff --git a/doc/开源软件的质量分析报告.docx b/doc/开源软件的质量分析报告.docx new file mode 100644 index 0000000..9b8e964 Binary files /dev/null and b/doc/开源软件的质量分析报告.docx differ diff --git a/doc/开源软件的质量分析报告文档.docx b/doc/开源软件的质量分析报告文档.docx deleted file mode 100644 index 5202091..0000000 Binary files a/doc/开源软件的质量分析报告文档.docx and /dev/null differ diff --git a/doc/泛读标注维护.0.0 .docx b/doc/泛读标注维护.0.0 .docx new file mode 100644 index 0000000..d28a93a Binary files /dev/null and b/doc/泛读标注维护.0.0 .docx differ diff --git a/doc/泛读标注维护.0.0 (功能增强版).docx b/doc/泛读标注维护.1.0 .docx similarity index 77% rename from doc/泛读标注维护.0.0 (功能增强版).docx rename to doc/泛读标注维护.1.0 .docx index 69a6ea9..9399383 100644 Binary files a/doc/泛读标注维护.0.0 (功能增强版).docx and b/doc/泛读标注维护.1.0 .docx differ diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 4c482c1..e5c7d47 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -36,12 +36,12 @@ android:icon="@drawable/icon_app" android:label="@string/app_name" > @@ -50,36 +50,6 @@ - - - - - - - - - Type : INTEGER (long)

*/ public static final String VERSION = "version"; - - public static final String PASSWORD= "password"; } public interface DataColumns { diff --git a/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java b/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java index 4e1fa12..ffe5d57 100644 --- a/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java +++ b/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 = 5; + private static final int DB_VERSION = 4; public interface TABLE { public static final String NOTE = "note"; @@ -60,8 +60,7 @@ 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.PASSWORD + " TEXT DEFAULT NULL " + + NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" + ")"; private static final String CREATE_DATA_TABLE_SQL = @@ -322,10 +321,6 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper { upgradeToV4(db); oldVersion++; } - if(oldVersion == 4){ - upgradeToV5(db); - oldVersion++; - } if (reCreateTriggers) { reCreateNoteTableTriggers(db); @@ -364,9 +359,4 @@ 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("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.PASSWORD - + " TEXT DEFAULT NULL "); - } - } diff --git a/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java b/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java index 0ea27b7..b3b61e7 100644 --- a/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java +++ b/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java @@ -77,8 +77,8 @@ public class GTaskASyncTask extends AsyncTask { pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, NotesListActivity.class), 0); } -// notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, -// pendingIntent); + notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, + pendingIntent); mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); } diff --git a/src/main/java/net/micode/notes/model/WorkingNote.java b/src/main/java/net/micode/notes/model/WorkingNote.java index f97bbfe..be081e4 100644 --- a/src/main/java/net/micode/notes/model/WorkingNote.java +++ b/src/main/java/net/micode/notes/model/WorkingNote.java @@ -31,28 +31,10 @@ import net.micode.notes.data.Notes.NoteColumns; import net.micode.notes.data.Notes.TextNote; import net.micode.notes.tool.ResourceParser.NoteBgResources; -/** - * - * @ProjectName: xiaomibianqian - * @Package: model - * @ClassName: WorkingNote - * @Description: 创建了一个正在工作的便签类,其中有大量的参数,包括参量类、布尔值类、区分类的变量 - * 另外,封装了一系列的函数,其中有返回私有变量的,与数据库进行操作的,在不同情况下操作的(如新建的便签与修改的便签) - * 主要交互的包、类:NoteEditActivities,Notes(from data)Note NoteListActivity SqlData - * 另外,有创建一些接口,比如NoteSettingChangedListener,在NoteEditActivities中具体实现 - * - * @Author: zhoushiyu_br - * @CreateDate: 2023.12.16 - * @UpdateUser: 更新者: - * @UpdateDate: 2023.12.21 - * @UpdateRemark: 更新说明: - * @Version: 这次更新主要是修改了之前代码批注不够规范的问题,结合上课毛教员对于问题的指出,对格式进行了优化——PickupRAIN - */ + public class WorkingNote { // Note for the working note - - private String mPassword; - //这个在Note里面定义了Note类的基本类型, + private Note mNote; // Note Id private long mNoteId; // Note content @@ -62,34 +44,26 @@ public class WorkingNote { private long mAlertDate; - private long mModifiedDate;//最后的修改日期 + private long mModifiedDate; - private int mBgColorId;//定义的颜色的ID + private int mBgColorId; - private int mWidgetId;//定义了一个int类型,用来定位到哪一个小组件被使用 + private int mWidgetId; - private int mWidgetType;//定义了一个int类型,用来区分使用了什么类型的小组件 + private int mWidgetType; - private long mFolderId;//用来定位便签放在哪个文件夹 + private long mFolderId; private Context mContext; - public boolean PRIVATE_MODE = false; - private static final String TAG = "WorkingNote"; //定义为静态变量,保证不能再被更改。防止数据出现异常 + private static final String TAG = "WorkingNote"; - private boolean mIsDeleted; //定义一个布尔变量,用来保存是否要被删除。通过查看用法,发现在后面保存|修改的时候要进行判断。 + private boolean mIsDeleted; + + private NoteSettingChangedListener mNoteSettingStatusListener; - private NoteSettingChangedListener mNoteSettingStatusListener;//定义了一个接口,具体是在NoteEditActivities中实现,实现对于便签是否修改的监听 - /** - * 定义一个数组,保存DataColumn数组当中的一些列变量。关于DataColumn的注解我写在了定义处。 - * 之所以用一个字符串数组来调用DataColumn接口,是为了“方便在进行数据库操作时可以一次性指定需要查询的列”? - * 这个数组只有在loadNoteData这个函数的时候进行了调用。将数据加载到 - * 12.22更新,我学习了getContentResolver()的用法 - * 实际上,getContentResolver是用来查询数据库的,这里定义的Projection是所有属性的集合。数据库查询,按列进行 - * 在按列查询时,在数据库访问到底,只需要在数组中继续访问即可。关于函数详解我会写在函数的定义处; - */ public static final String[] DATA_PROJECTION = new String[] { - DataColumns.ID,//在Note里面定义一个接口类型 + DataColumns.ID, DataColumns.CONTENT, DataColumns.MIME_TYPE, DataColumns.DATA1, @@ -97,7 +71,7 @@ public class WorkingNote { DataColumns.DATA3, DataColumns.DATA4, }; -//这里的用法基本同上方,不过这些接口最后使用在数据库中 + public static final String[] NOTE_PROJECTION = new String[] { NoteColumns.PARENT_ID, NoteColumns.ALERTED_DATE, @@ -106,9 +80,7 @@ public class WorkingNote { NoteColumns.WIDGET_TYPE, NoteColumns.MODIFIED_DATE }; - /** - * 定义了一系列的基础值。 - */ + private static final int DATA_ID_COLUMN = 0; private static final int DATA_CONTENT_COLUMN = 1; @@ -129,23 +101,11 @@ public class WorkingNote { private static final int NOTE_MODIFIED_DATE_COLUMN = 5; - - - // New note construct - //初始化一个新的操作的Note - /** - * @method: WorkingNote - * @description: 初始化一个新的操作的Note - * @date: 2024/1/6 11:28 - * @author: 周石宇 - * @param: [android.content.Context, long]:[context, folderId] - * @return: - */ private WorkingNote(Context context, long folderId) { mContext = context; - mAlertDate = 0;//这里为什么是0还存疑 - mModifiedDate = System.currentTimeMillis();//获取系统时间,保存给最后修改时间 + mAlertDate = 0; + mModifiedDate = System.currentTimeMillis(); mFolderId = folderId; mNote = new Note(); mNoteId = 0; @@ -153,8 +113,7 @@ public class WorkingNote { mMode = 0; mWidgetType = Notes.TYPE_WIDGET_INVALIDE; } - //由于传入了noteId,所以是对一个已经存在的便签进行操作。 - //由于一些基本的已经定义,所以传入的变量很少。 + // Existing note construct private WorkingNote(Context context, long noteId, long folderId) { mContext = context; @@ -165,24 +124,11 @@ public class WorkingNote { loadNote(); } - /** - * @author: zhoushiyu_PickupRAIN - * @methodsName: loadNote - * @description: 创建游标,对数据库进行操作。首先从传入的URI中找到数据库地址,对元素数组进行逐列筛选。 - * @param: 虽然没传入,,但是说明一下 - * ->Notes.CONTENT_NOTE_URI:数据库的地址,根据URI找到相应数据库 - * ->NOTE_PROJECTION :属性列表,包含了所有的表头 - * ->这里就能很容易理解为什么NOTE_PROJECTION为什么只在这里调用,也没有初始化。 - * @return: String - * @throws: Nopes - * - */ private void loadNote() { - //定义一个cursor游标,用来操作数据。这里传入了很多量,如URI、Id、和来自Projection的一系列。 Cursor cursor = mContext.getContentResolver().query( ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, null, null); - //设置一个cursor,按行提取各种信息,保存到对应的变量中 + if (cursor != null) { if (cursor.moveToFirst()) { mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); @@ -199,14 +145,7 @@ public class WorkingNote { } loadNoteData(); } - /** - * @method: loadNoteData - * @description: 基本同上一个函数。值得注意的是这里对数据进行了筛选(通过selection),还对MIME进行了判断后加载 - * @date: 2024/1/6 11:29 - * @author: 周石宇 - * @param: []:[] - * @return: void - */ + private void loadNoteData() { Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { @@ -214,21 +153,14 @@ public class WorkingNote { }, null); if (cursor != null) { - // 检查是否有数据 if (cursor.moveToFirst()) { do { - // 获取类型 String type = cursor.getString(DATA_MIME_TYPE_COLUMN); if (DataConstants.NOTE.equals(type)) { - // 获取内容 mContent = cursor.getString(DATA_CONTENT_COLUMN); - // 获取模式 mMode = cursor.getInt(DATA_MODE_COLUMN); - // 获取ID mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); - } else if (DataConstants.CALL_NOTE.equals(type)) { - // 设置通话ID mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); } else { Log.d(TAG, "Wrong note type with type:" + type); @@ -241,63 +173,34 @@ public class WorkingNote { throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); } } -//简单的初始化函数,一会看一下用法 - - /** - * @method: createEmptyNote - * @description: 创建一个空的笔记 - * @date: 2024/1/2 10:21 - * @author: 周石宇 - * @param: [android.content.Context, long, int, int, int]:[context, folderId, widgetId, widgetType, defaultBgColorId] - * @return: net.micode.notes.model.WorkingNote - */ public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, int widgetType, int defaultBgColorId) { - // 创建一个新的WorkingNote实例 WorkingNote note = new WorkingNote(context, folderId); - // 设置笔记的背景颜色 note.setBgColorId(defaultBgColorId); - // 设置笔记的widgetId note.setWidgetId(widgetId); - // 设置笔记的widgetType note.setWidgetType(widgetType); - // 返回新的WorkingNote实例 return note; } public static WorkingNote load(Context context, long id) { return new WorkingNote(context, id, 0); } -//这里涉及了多线程的操作。 - /** - * @method: saveNote - * @description: 保存笔记 - * @date: 2024/1/2 10:23 - * @author: 周石宇 - * @param: []:[] - * @return: boolean - */ - public synchronized boolean saveNote() { - // 如果笔记 worth saving + public synchronized boolean saveNote() { if (isWorthSaving()) { - // 如果笔记不存在数据库中 if (!existInDatabase()) { - // 获取新笔记id if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { Log.e(TAG, "Create new note fail with id:" + mNoteId); return false; } } -//由于没有这个便签,所以报错,并返回false - mNote.syncNote(mContext, mNoteId);//这一行是同步信息的操作 + mNote.syncNote(mContext, mNoteId); /** * Update widget content if there exist any widget of this note */ - //对小组件的各种属性进行判断,来确定是否有组件,进行保存 if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { @@ -309,22 +212,10 @@ public class WorkingNote { } } - /** - * 以下定义、封装了一系列的实用函数,用于一些私有量的设置与判断 - * - */ public boolean existInDatabase() { return mNoteId > 0; } - /** - * @method: isWorthSaving - * @description: 判断是否值得保存,即判断是否需要保存到数据库 - * @date: 2024/1/2 10:24 - * @author: 周石宇 - * @param: []:[] - * @return: boolean - */ private boolean isWorthSaving() { if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) || (existInDatabase() && !mNote.isLocalModified())) { @@ -333,14 +224,6 @@ public class WorkingNote { return true; } } - /** - * @method: setOnSettingStatusChangedListener - * @description: 用来记录状态设定是否有发生过更改。 - * @date: 2024/1/2 10:24 - * @author: 周石宇 - * @param: [net.micode.notes.model.WorkingNote.NoteSettingChangedListener]:[l] - * @return: void - */ public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) { mNoteSettingStatusListener = l; @@ -373,14 +256,7 @@ public class WorkingNote { mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); } } - /** - * @method: setCheckListMode - * @description: 在EditActivities中使用,用来设定在list时的状态 - * @date: 2024/1/6 11:30 - * @author: 周石宇 - * @param: [int]:[mode] - * @return: void - */ + public void setCheckListMode(int mode) { if (mMode != mode) { if (mNoteSettingStatusListener != null) { @@ -412,23 +288,11 @@ public class WorkingNote { } } - /** - * 从这里一直向上大概的都是一些设置状态的函数。 - * 原因是设置的私有量,保证数据的可靠性 - * 具体使用在onOptionsItemSelected NoteEditActivities类,中调用 - */ - - - //这里的callNote我没有搞懂 public void convertToCallNote(String phoneNumber, long callDate) { mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); } - public void setPassword(String password){ -// mPassword=password; - mNote.setNoteValue(NoteColumns.PASSWORD,password); - } public boolean hasClockAlert() { return (mAlertDate > 0 ? true : false); @@ -478,8 +342,6 @@ public class WorkingNote { return mWidgetType; } - public String getPassword() { return mPassword; } -//声明了一个接口,具体都在EditActivies中进行实现。主要是一个监听(listener),来设置各个量的改变 public interface NoteSettingChangedListener { /** * Called when the background color of current note has just changed diff --git a/src/main/java/net/micode/notes/tool/ResourceParser.java b/src/main/java/net/micode/notes/tool/ResourceParser.java index 6f8b4b0..1ad3ad6 100644 --- a/src/main/java/net/micode/notes/tool/ResourceParser.java +++ b/src/main/java/net/micode/notes/tool/ResourceParser.java @@ -30,8 +30,6 @@ public class ResourceParser { public static final int GREEN = 3; public static final int RED = 4; - public static final int DUCK = 5; - public static final int BG_DEFAULT_COLOR = YELLOW; public static final int TEXT_SMALL = 0; @@ -47,10 +45,7 @@ public class ResourceParser { R.drawable.edit_blue, R.drawable.edit_white, R.drawable.edit_green, - R.drawable.edit_red, - R.drawable.note_bg_photo_wangyi - - + R.drawable.edit_red }; private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] { @@ -58,9 +53,7 @@ public class ResourceParser { R.drawable.edit_title_blue, R.drawable.edit_title_white, R.drawable.edit_title_green, - R.drawable.edit_title_red, - R.drawable.note_bg_photo_wangyi - + R.drawable.edit_title_red }; public static int getNoteBgResource(int id) { @@ -87,8 +80,7 @@ public class ResourceParser { R.drawable.list_blue_up, R.drawable.list_white_up, R.drawable.list_green_up, - R.drawable.list_red_up, - R.drawable.note_bg_photo_wangyi + R.drawable.list_red_up }; private final static int [] BG_NORMAL_RESOURCES = new int [] { @@ -96,8 +88,7 @@ public class ResourceParser { R.drawable.list_blue_middle, R.drawable.list_white_middle, R.drawable.list_green_middle, - R.drawable.list_red_middle, - R.drawable.note_bg_photo_wangyi + R.drawable.list_red_middle }; private final static int [] BG_LAST_RESOURCES = new int [] { @@ -106,7 +97,6 @@ public class ResourceParser { R.drawable.list_white_down, R.drawable.list_green_down, R.drawable.list_red_down, - R.drawable.note_bg_photo_wangyi }; private final static int [] BG_SINGLE_RESOURCES = new int [] { @@ -114,8 +104,7 @@ public class ResourceParser { R.drawable.list_blue_single, R.drawable.list_white_single, R.drawable.list_green_single, - R.drawable.list_red_single, - R.drawable.note_bg_photo_wangyi + R.drawable.list_red_single }; public static int getNoteBgFirstRes(int id) { diff --git a/src/main/java/net/micode/notes/ui/ChangeLoginPasswordActivity.java b/src/main/java/net/micode/notes/ui/ChangeLoginPasswordActivity.java deleted file mode 100644 index 6925781..0000000 --- a/src/main/java/net/micode/notes/ui/ChangeLoginPasswordActivity.java +++ /dev/null @@ -1,127 +0,0 @@ -package net.micode.notes.ui; - -import android.app.Activity; -import android.app.AlarmManager; -import android.app.AlertDialog; -import android.app.PendingIntent; -import android.app.SearchManager; -import android.appwidget.AppWidgetManager; -import android.content.ContentUris; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Paint; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.format.DateUtils; -import android.text.style.BackgroundColorSpan; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.WindowManager; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.CompoundButton.OnCheckedChangeListener; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.TextNote; -import net.micode.notes.model.WorkingNote; -import net.micode.notes.model.WorkingNote.NoteSettingChangedListener; -import net.micode.notes.tool.DataUtils; -import net.micode.notes.tool.ResourceParser; -import net.micode.notes.tool.ResourceParser.TextAppearanceResources; -import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener; -import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener; -import net.micode.notes.widget.NoteWidgetProvider_2x; -import net.micode.notes.widget.NoteWidgetProvider_4x; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import android.app.Activity; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.EditText; -import android.widget.Toast; - -public class ChangeLoginPasswordActivity extends Activity { - EditText OldPassword; - EditText NewPassword; - EditText ReWritePassword; - Button Acknowledged; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.change_login_password_activity); - getWindow().setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE - | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - OldPassword=(EditText) findViewById(R.id.old_password); - NewPassword=(EditText) findViewById(R.id.new_password); - ReWritePassword=(EditText) findViewById(R.id.ack_password); - Acknowledged=(Button)findViewById(R.id.Bt_Acknowledged); - Acknowledged.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String old_password = OldPassword.getText().toString(); - String new_password = NewPassword.getText().toString(); - String ack_password = ReWritePassword.getText().toString(); - - SharedPreferences pref=getSharedPreferences("user management",MODE_PRIVATE); - - String login_password=pref.getString("password",""); - - if(old_password.equals("")==true || new_password.equals("")==true || ack_password.equals("")==true) { - Toast.makeText(ChangeLoginPasswordActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show(); - }else if (new_password.equals(ack_password) == false) { - Toast.makeText(ChangeLoginPasswordActivity.this, "新建密码与重复密码不匹配,请重新输入密码", Toast.LENGTH_SHORT).show(); - ReWritePassword.setText(""); - }else if(old_password.equals(login_password) == false){ - Toast.makeText(ChangeLoginPasswordActivity.this, "原有密码错误,请重新输入密码", Toast.LENGTH_SHORT).show(); - OldPassword.setText(""); - } - else if (new_password.equals(ack_password) == true && old_password.equals(login_password) == true){ - SharedPreferences.Editor editor=getSharedPreferences("user management", MODE_PRIVATE).edit(); - editor.putString("password",new_password); - editor.apply(); - Toast.makeText(ChangeLoginPasswordActivity.this, "修改密码成功", Toast.LENGTH_SHORT).show(); - Intent intent=new Intent(ChangeLoginPasswordActivity.this, LoginActivity.class); - startActivity(intent); - finish(); - } - } - }); - } - - @Override - public void onBackPressed() { - Intent intent=new Intent(ChangeLoginPasswordActivity.this, LoginActivity.class); - startActivity(intent); - finish(); - } -} - diff --git a/src/main/java/net/micode/notes/ui/LoginActivity.java b/src/main/java/net/micode/notes/ui/LoginActivity.java deleted file mode 100644 index 80fc195..0000000 --- a/src/main/java/net/micode/notes/ui/LoginActivity.java +++ /dev/null @@ -1,163 +0,0 @@ -package net.micode.notes.ui; -import android.app.Activity; -import android.app.AlarmManager; -import android.app.AlertDialog; -import android.app.PendingIntent; -import android.app.ProgressDialog; -import android.app.SearchManager; -import android.appwidget.AppWidgetManager; -import android.content.ContentUris; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Paint; -import android.os.Bundle; -import android.os.Handler; -import android.preference.PreferenceManager; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.format.DateUtils; -import android.text.style.BackgroundColorSpan; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.CompoundButton.OnCheckedChangeListener; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.TextNote; -import net.micode.notes.model.WorkingNote; -import net.micode.notes.model.WorkingNote.NoteSettingChangedListener; -import net.micode.notes.tool.DataUtils; -import net.micode.notes.tool.ResourceParser; -import net.micode.notes.tool.ResourceParser.TextAppearanceResources; -import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener; -import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener; -import net.micode.notes.widget.NoteWidgetProvider_2x; -import net.micode.notes.widget.NoteWidgetProvider_4x; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -public class LoginActivity extends Activity{ - private EditText accountEdit; - - private EditText passwordEdit; - - private Button login; - - private Button cancel; - - private Button change; - - private long last_login_time = 0 ; - - public static final long MAX_LOGIN_TIME = 1000; - - - - - - @Override - protected void onCreate(Bundle savedInstanceState){ - super.onCreate(savedInstanceState); - - SharedPreferences pref=getSharedPreferences("user management",MODE_PRIVATE); - boolean user_boolean = pref.getBoolean("user",false);//获取用户是否设置了密码 - if(!user_boolean) //User_boolean = false时,(没有设置密码),直接跳转到便签主界面 - { - SharedPreferences.Editor editor=getSharedPreferences("user management", MODE_PRIVATE).edit(); - editor.putString("password","123456"); - editor.putBoolean("user",true); - editor.apply(); - } - - SharedPreferences login_time_get = getSharedPreferences("login time",MODE_PRIVATE); - boolean is_first_login = login_time_get.getBoolean("is_first_login",false); - - setContentView(R.layout.login_activity); - accountEdit = (EditText) findViewById(R.id.account); - passwordEdit = (EditText) findViewById(R.id.password); - login = (Button) findViewById(R.id.login); - cancel = (Button) findViewById(R.id.cancel); - change = (Button) findViewById(R.id.change_password); - - - long current_time = System.currentTimeMillis(); - - cancel.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - Toast.makeText(LoginActivity.this, R.string.app_already_quit, Toast.LENGTH_LONG).show(); - finish(); - } - }); - - Long current_login_time = login_time_get.getLong("current login time",0); - if((is_first_login)&&(current_time - current_login_time <= MAX_LOGIN_TIME)){ - SharedPreferences.Editor editor=getSharedPreferences("login time", MODE_PRIVATE).edit(); - editor.putLong("current login time",System.currentTimeMillis()); - editor.apply(); - Intent intent = new Intent(LoginActivity.this,NotesListActivity.class); - startActivity(intent); - finish(); - } - - else{ - if(!is_first_login){ - SharedPreferences.Editor editor=getSharedPreferences("login time", MODE_PRIVATE).edit(); - editor.putLong("current login time",System.currentTimeMillis()); - editor.putBoolean("is_first_login",true); - editor.apply(); - } - - login.setOnClickListener(new View.OnClickListener(){ - public void onClick(View v) { - String account = accountEdit.getText().toString(); - String password = passwordEdit.getText().toString(); - - SharedPreferences pref=getSharedPreferences("user management",MODE_PRIVATE); - String share_password=pref.getString("password",""); - - if(account.equals("hei") && password.equals(share_password)){ - ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this); - progressDialog.setTitle(R.string.Loading); - progressDialog.setMessage("Loading..."); - progressDialog.setCancelable(true); - progressDialog.show();; - Intent intent = new Intent(LoginActivity.this,NotesListActivity.class); - startActivity(intent); - finish(); - }else { - Toast.makeText(LoginActivity.this, R.string.invalid,Toast.LENGTH_SHORT).show(); - } - } - }); - - change.setOnClickListener(new View.OnClickListener(){ - @Override - public void onClick(View v) { - Intent intent = new Intent(LoginActivity.this,ChangeLoginPasswordActivity.class); - startActivity(intent); - finish(); - } - }); - } - } -} diff --git a/src/main/java/net/micode/notes/ui/LoginView.java b/src/main/java/net/micode/notes/ui/LoginView.java deleted file mode 100644 index deca847..0000000 --- a/src/main/java/net/micode/notes/ui/LoginView.java +++ /dev/null @@ -1,76 +0,0 @@ -package net.micode.notes.ui; - -import android.app.Activity; -import android.app.AlarmManager; -import android.app.AlertDialog; -import android.app.PendingIntent; -import android.app.SearchManager; -import android.appwidget.AppWidgetManager; -import android.content.ContentUris; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Paint; -import android.os.Bundle; -import android.os.Handler; -import android.preference.PreferenceManager; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.format.DateUtils; -import android.text.style.BackgroundColorSpan; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.WindowManager; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.CompoundButton.OnCheckedChangeListener; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.TextNote; -import net.micode.notes.model.WorkingNote; -import net.micode.notes.model.WorkingNote.NoteSettingChangedListener; -import net.micode.notes.tool.DataUtils; -import net.micode.notes.tool.ResourceParser; -import net.micode.notes.tool.ResourceParser.TextAppearanceResources; -import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener; -import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener; -import net.micode.notes.widget.NoteWidgetProvider_2x; -import net.micode.notes.widget.NoteWidgetProvider_4x; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - - -public class LoginView extends Activity -{ - Handler mHandler=new Handler(); - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.login_view); - mHandler.postDelayed(new Runnable() { - @Override - public void run() { - Intent intent = new Intent(LoginView.this, LoginActivity.class); - startActivity(intent); - finish(); - } - },2000); - } -} diff --git a/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/src/main/java/net/micode/notes/ui/NoteEditActivity.java index b640329..862883b 100644 --- a/src/main/java/net/micode/notes/ui/NoteEditActivity.java +++ b/src/main/java/net/micode/notes/ui/NoteEditActivity.java @@ -19,7 +19,6 @@ package net.micode.notes.ui; import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; -import android.app.Dialog; import android.app.PendingIntent; import android.app.SearchManager; import android.appwidget.AppWidgetManager; @@ -28,9 +27,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; -import android.content.res.AssetManager; import android.graphics.Paint; -import android.graphics.Typeface; import android.os.Bundle; import android.preference.PreferenceManager; import android.text.Spannable; @@ -46,7 +43,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; -import android.view.inputmethod.InputMethodManager; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; @@ -72,7 +68,6 @@ import net.micode.notes.widget.NoteWidgetProvider_4x; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -96,8 +91,6 @@ public class NoteEditActivity extends Activity implements OnClickListener, sBgSelectorBtnsMap.put(R.id.iv_bg_blue, ResourceParser.BLUE); sBgSelectorBtnsMap.put(R.id.iv_bg_green, ResourceParser.GREEN); sBgSelectorBtnsMap.put(R.id.iv_bg_white, ResourceParser.WHITE); - sBgSelectorBtnsMap.put(R.id.iv_ph_duck, ResourceParser.DUCK); - } private static final Map sBgSelectorSelectionMap = new HashMap(); @@ -107,10 +100,8 @@ public class NoteEditActivity extends Activity implements OnClickListener, sBgSelectorSelectionMap.put(ResourceParser.BLUE, R.id.iv_bg_blue_select); sBgSelectorSelectionMap.put(ResourceParser.GREEN, R.id.iv_bg_green_select); sBgSelectorSelectionMap.put(ResourceParser.WHITE, R.id.iv_bg_white_select); - sBgSelectorSelectionMap.put(ResourceParser.DUCK, R.id.iv_ph_duck_select); - }// + } - //选择便签字体大小的界选择器的吧 private static final Map sFontSizeBtnsMap = new HashMap(); static { sFontSizeBtnsMap.put(R.id.ll_font_large, ResourceParser.TEXT_LARGE); @@ -278,20 +269,11 @@ public class NoteEditActivity extends Activity implements OnClickListener, } private void initNoteScreen() { - - String defaultText = getIntent().getStringExtra(Notes.INTENT_EXTRA_TEMPLE_TEXT); - if(defaultText!=null){ - saveNote();//否则会增加一个null的奇怪现象 - mWorkingNote.setWorkingText(mWorkingNote.getContent()+defaultText); - mNoteEditor.setText(mWorkingNote.getContent()); // 将defaultText的值写入到笔记编辑器中 - } -// Toast.makeText(getApplicationContext(), defaultText, Toast.LENGTH_SHORT).show(); mNoteEditor.setTextAppearance(this, TextAppearanceResources .getTexAppearanceResource(mFontSizeId)); if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) { switchToListMode(mWorkingNote.getContent()); } else { - ; mNoteEditor.setText(getHighlightQueryResult(mWorkingNote.getContent(), mUserQuery)); mNoteEditor.setSelection(mNoteEditor.getText().length()); } @@ -305,43 +287,6 @@ public class NoteEditActivity extends Activity implements OnClickListener, mWorkingNote.getModifiedDate(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_YEAR)); -// String mPassword=mWorkingNote.getPassword(); -// if (mWorkingNote.getPassword()!=null){ -// final AlertDialog.Builder builder = new AlertDialog.Builder(this); -// View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text, null); -// //编辑Text -// final EditText etName = (EditText) view.findViewById(R.id.et_foler_name); -// etName.setText(""); -// etName.setHint("请输入密码"); -// builder.setTitle("密码检验"); -// builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// //获取输入的字符串 -// String password = etName.getText().toString(); -// Log.d("mPassword: ", mPassword); -// Log.d("password: ", password); -// //判断密码正确性 -// if (!password.equals(mPassword)) { -// Log.d("密码不正确,正确密码是:",mPassword); -// dialog.dismiss(); -// onBackPressed(); -// } -// } -// }); -// builder.setNegativeButton("cancel", new DialogInterface.OnClickListener(){ -// @Override -// public void onClick(DialogInterface dialog, int which) { -// dialog.dismiss(); -// onBackPressed(); -// } -// }); -// final Dialog dialog = builder.setView(view).show(); -// dialog.show(); -// } -// else{ -// Toast.makeText(NoteEditActivity.this,"还没有设置密码", Toast.LENGTH_SHORT).show(); -// } /** * TODO: Add the menu for setting alert. Currently disable it because the DateTimePicker @@ -595,102 +540,6 @@ public class NoteEditActivity extends Activity implements OnClickListener, } else if (itemId == R.id.menu_delete_remind) { mWorkingNote.setAlertDate(0, false); } - else if (itemId == R.id.menu_enter_private_mode){ - if(mWorkingNote.getPassword()==null){ - final AlertDialog.Builder builder = new AlertDialog.Builder(this); - View view = LayoutInflater.from(this).inflate(R.layout.dialog_edit_text,null); - final EditText etName = (EditText)view.findViewById(R.id.et_foler_name); - etName.setText(""); - etName.setHint("请输入密码"); - builder.setTitle("为便签设置新密码"); - builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String password = etName.getText().toString(); - mWorkingNote.setPassword(password); - if ( mWorkingNote.getPassword() != null ){ - Toast.makeText(NoteEditActivity.this,"密码设置成功", Toast.LENGTH_SHORT).show(); - } - InputMethodManager inputMethodManager =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(etName.getWindowToken(),0); - dialog.dismiss(); - } - }); - builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - InputMethodManager inputMethodManager = (InputMethodManager) - getSystemService(Context.INPUT_METHOD_SERVICE); - inputMethodManager.hideSoftInputFromWindow(etName.getWindowToken(),0); - } - }); - final Dialog dialog = builder.setView(view).show(); - } - } else if (itemId==R.id.menu_select_font) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - - builder.setTitle("选择字体") - .setItems(new CharSequence[]{"默认字体", "仿宋_GB2312", "姚体", "宋体","忍者体","楷体","黑体"}, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case 0: - // 创建空的模板 -// createEmptyTemplate(); - mNoteEditor.setTypeface(Typeface.DEFAULT); - break; - case 1: - // 创建模板 1 -// createTemplate("模板 1"); -// AssetManager mgr = getAssets(); - Typeface tf1=Typeface.createFromAsset(getAssets(),"font/fs.ttf"); - mNoteEditor.setTypeface(tf1); - break; - case 2: - Typeface tf2=Typeface.createFromAsset(getAssets(),"font/fzytk.TTF"); - mNoteEditor.setTypeface(tf2); - break; - case 3: - // 创建模板 3 -// createTemplate("模板 3"); - Typeface tf3=Typeface.createFromAsset(getAssets(),"font/stsong.TTF"); - mNoteEditor.setTypeface(tf3); - break; - case 4: - Typeface tf4=Typeface.createFromAsset(getAssets(),"font/fzrzt.TTF"); - mNoteEditor.setTypeface(tf4); - break; - case 5: - Typeface tf5=Typeface.createFromAsset(getAssets(),"font/kt.ttf"); - mNoteEditor.setTypeface(tf5); - break; - case 6: - Typeface tf6=Typeface.createFromAsset(getAssets(),"font/simhei.ttf"); - mNoteEditor.setTypeface(tf6); - break; - - - } - } - }); - builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){ - @Override - public void onClick(DialogInterface dialog, int which) { - Toast.makeText(NoteEditActivity.this,"字体设置成功", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - } - }); - builder.setNegativeButton("cancle", new DialogInterface.OnClickListener(){ - public void onClick(DialogInterface dialog, int which) { - Toast.makeText(NoteEditActivity.this,"字体设置失败", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - } }); - final Dialog dialog = builder.show(); - - - - - } - return true; } diff --git a/src/main/java/net/micode/notes/ui/NoteItemData.java b/src/main/java/net/micode/notes/ui/NoteItemData.java index 17cc5d4..0f5a878 100644 --- a/src/main/java/net/micode/notes/ui/NoteItemData.java +++ b/src/main/java/net/micode/notes/ui/NoteItemData.java @@ -39,7 +39,7 @@ public class NoteItemData { NoteColumns.SNIPPET, NoteColumns.TYPE, NoteColumns.WIDGET_ID, - NoteColumns.WIDGET_TYPE, NoteColumns.PASSWORD + NoteColumns.WIDGET_TYPE, }; private static final int ID_COLUMN = 0; @@ -54,7 +54,6 @@ 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 PASSWORD_COLUMN = 12;//这里事实上还在存疑,时候需要增加一个列用于索引。 private long mId; private long mAlertDate; @@ -71,8 +70,6 @@ public class NoteItemData { private String mName; private String mPhoneNumber; - private String mPassword; - private boolean mIsLastItem; private boolean mIsFirstItem; private boolean mIsOnlyOneItem; @@ -94,8 +91,6 @@ public class NoteItemData { mType = cursor.getInt(TYPE_COLUMN); mWidgetId = cursor.getInt(WIDGET_ID_COLUMN); mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN); - mPassword =cursor.getString(PASSWORD_COLUMN); - mPhoneNumber = ""; if (mParentId == Notes.ID_CALL_RECORD_FOLDER) { @@ -202,9 +197,6 @@ public class NoteItemData { public int getType() { return mType; } - public String getmPassword(){ - return mPassword; - } public int getWidgetType() { return mWidgetType; @@ -229,11 +221,4 @@ public class NoteItemData { public static int getNoteType(Cursor cursor) { return cursor.getInt(TYPE_COLUMN); } - - public boolean hasPassword(){ - if(mPassword.length()!=0&&mPassword!=null){ - return true; - } - return false; - } } diff --git a/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/main/java/net/micode/notes/ui/NotesListActivity.java index 47db7f8..6db3761 100644 --- a/src/main/java/net/micode/notes/ui/NotesListActivity.java +++ b/src/main/java/net/micode/notes/ui/NotesListActivity.java @@ -71,23 +71,13 @@ import net.micode.notes.tool.ResourceParser; import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; import net.micode.notes.widget.NoteWidgetProvider_2x; import net.micode.notes.widget.NoteWidgetProvider_4x; -//import net.micode.notes.model.WorkingFolder; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashSet; -import java.util.Stack; - -/** - * @class: NotesListActivity - * @extends: Activity - * @implements: OnClickListener, OnItemLongClickListener - * @description: 主要实现小米便签刚进入界面。该类为一种main Activity,(xml中有定义)覆盖点击事件监听及长按事件监听类。。 - * @author: 王毅 - * @date: 2024/1/5 16:17 - */ + public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; @@ -125,9 +115,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt private long mCurrentFolderId; - private Stack mFolderIdStack=new Stack(); - - private ContentResolver mContentResolver; private ModeCallback mModeCallBack; @@ -148,14 +135,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt private final static int REQUEST_CODE_OPEN_NODE = 102; private final static int REQUEST_CODE_NEW_NODE = 103; - /** - * @method: onCreate - * @description: 创建Activity,启动其生命周期。完成设置界面样式、初始化资源、且在用户第一次使用App时进行介绍 - * @date: 2024/1/2 10:26 - * @author: 王毅 - * @param: [android.os.Bundle]:[savedInstanceState] - * @return: void - */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -168,14 +147,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt setAppInfoFromRawRes(); } - /** - * @method: onActivityResult - * @description: intent返回数据接收函数。形参为请求码、结果码、其他intent返回的数据。主要与NoteEditActivity交互 - * @date: 2024/1/2 10:27 - * @author: 高浏洋 - * @param: [int, int, android.content.Intent]:[requestCode, resultCode, data] - * @return: void - */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK @@ -186,34 +157,19 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - /** - * @method: setAppInfoFromRawRes - * @description: 第一次使用App时调用,显示introduction。 - * @date: 2024/1/5 16:18 - * @author: 高浏洋 - * @param: []:[] - * @return: void - */ 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 { @@ -239,7 +195,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt 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"); @@ -248,28 +203,12 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - /** - * @method: onStart - * @description: onCreate调用后回调,此Activity对用户可见。 - * @date: 2024/1/5 16:19 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ @Override protected void onStart() { super.onStart(); startAsyncNotesListQuery(); } - /** - * @method: initResources - * @description: 初始化资源 - * @date: 2024/1/5 16:20 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ private void initResources() { mContentResolver = this.getContentResolver(); mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); @@ -292,58 +231,30 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt mModeCallBack = new ModeCallback(); } - /** - * @class: ModeCallback - * @implements: ListView.MultiChoiceModeListener, OnMenuItemClickListener - * @description: 定义了ActionMode的使用。便签长按事件通过ActionMode执行。 - * 便签长按后出现选择(多个)便签删除的菜单栏,其在ActionBar中显示。 - * @author: 王毅 - * @date: 2024/1/5 16:21 - */ private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { private DropdownMenu mDropDownMenu; private ActionMode mActionMode; private MenuItem mMoveMenu; - /** - * @method: onCreateActionMode - * @description: ActionMode创建函数,形参为创建的ActionMode及需要通过该ActionMode显示的Menu对象 - * @date: 2024/1/5 16:23 - * @author: 高浏阳 - * @param: [android.view.ActionMode, android.view.Menu]:[mode, menu] - * @return: boolean - */ public boolean onCreateActionMode(ActionMode mode, Menu menu) { getMenuInflater().inflate(R.menu.note_list_options, menu); - // 设置菜单项的点击事件 menu.findItem(R.id.delete).setOnMenuItemClickListener(this); - // 获取移动菜单 mMoveMenu = menu.findItem(R.id.move); - // 如果当前文件夹是通话记录文件夹或者用户文件夹的数量为0,则隐藏移动菜单 if (mFocusNoteDataItem.getParentId() == Notes.ID_CALL_RECORD_FOLDER || DataUtils.getUserFolderCount(mContentResolver) == 0) { mMoveMenu.setVisible(false); } else { - // 否则显示移动菜单 mMoveMenu.setVisible(true); - // 设置移动菜单的点击事件 mMoveMenu.setOnMenuItemClickListener(this); } - // 保存当前模式 mActionMode = mode; - // 设置列表选择模式 mNotesListAdapter.setChoiceMode(true); - // 设置列表不可点击 mNotesListView.setLongClickable(false); - // 隐藏添加新笔记按钮 mAddNewNote.setVisibility(View.GONE); - // 创建自定义菜单 View customView = LayoutInflater.from(NotesListActivity.this).inflate( R.layout.note_list_dropdown_menu, null); - // 设置自定义菜单 mode.setCustomView(customView); - // 创建下拉菜单 mDropDownMenu = new DropdownMenu(NotesListActivity.this, (Button) customView.findViewById(R.id.selection_menu), R.menu.note_list_dropdown); @@ -358,31 +269,16 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt return true; } - /** - * @method: updateMenu - * @description: 用于进行多选(全选)时菜单栏界面的更新 - * @date: 2024/1/5 16:23 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ private void updateMenu() { - - - - //获取已选择的项数 int selectedCount = mNotesListAdapter.getSelectedCount(); - //根据已选择的项数,设置菜单标题 + // Update dropdown menu String format = getResources().getString(R.string.menu_select_title, selectedCount); mDropDownMenu.setTitle(format); - //设置菜单中的action_select_all的标题 MenuItem item = mDropDownMenu.findItem(R.id.action_select_all); if (item != null) { - //如果已选择全部,则设置action_select_all的标题为menu_deselect_all if (mNotesListAdapter.isAllSelected()) { item.setChecked(true); item.setTitle(R.string.menu_deselect_all); - //否则设置action_select_all的标题为menu_select_all } else { item.setChecked(false); item.setTitle(R.string.menu_select_all); @@ -390,81 +286,32 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - - /** - * @method: onPrepareActionMode - * @description: //重新刷新菜单栏时调用 - * @date: 2024/1/5 16:26 - * @author: 高浏阳 - * @param: [android.view.ActionMode, android.view.Menu]:[mode, menu] - * @return: boolean - */ public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // TODO Auto-generated method stub return false; } - /** - * @method: onActionItemClicked - * @description: 菜单栏点击动作按钮时调用、形参为ActionMode与点击的菜单项 - * @date: 2024/1/5 16:26 - * @author: 高浏阳 - * @param: [android.view.ActionMode, android.view.MenuItem]:[mode, item] - * @return: boolean - */ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { // TODO Auto-generated method stub return false; } - /** - * @method: onDestroyActionMode - * @description: 销毁或退出ActionMode时调用 - * @date: 2024/1/5 16:26 - * @author: 高浏阳 - * @param: [android.view.ActionMode]:[mode] - * @return: void - */ public void onDestroyActionMode(ActionMode mode) { mNotesListAdapter.setChoiceMode(false); mNotesListView.setLongClickable(true); mAddNewNote.setVisibility(View.VISIBLE); } - /** - * @method: finishActionMode - * @description: 结束ActionMode时调用 - * @date: 2024/1/5 16:27 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ public void finishActionMode() { mActionMode.finish(); } - /** - * @method: onItemCheckedStateChanged - * @description: 描述一下方法的作用 - * @date: 2024/1/5 16:27 - * @author: 高浏阳 - * @param: [android.view.ActionMode, int, long, boolean]:[mode, position, id, checked] - * @return: void - */ public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { mNotesListAdapter.setCheckedItem(position, checked); updateMenu(); } - /** - * @method: onMenuItemClick - * @description: 菜单项点击时调用。 - * @date: 2024/1/6 11:04 - * @author: 高浏阳 - * @param: [android.view.MenuItem]:[item] - * @return: boolean - */ public boolean onMenuItemClick(MenuItem item) { if (mNotesListAdapter.getSelectedCount() == 0) { Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), @@ -474,29 +321,21 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt int itemId = item.getItemId(); if (itemId == R.id.delete) { - // 创建一个AlertDialog.Builder对象,用于构建AlertDialog AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); - // 设置标题 builder.setTitle(getString(R.string.alert_title_delete)); - // 设置图标 builder.setIcon(android.R.drawable.ic_dialog_alert); - // 设置消息 builder.setMessage(getString(R.string.alert_message_delete_notes, mNotesListAdapter.getSelectedCount())); - // 设置确定按钮 builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - batchDelete();//批处理删除 + batchDelete(); } }); - // 设置取消按钮 builder.setNegativeButton(android.R.string.cancel, null); - // 显示AlertDialog builder.show(); } else if (itemId == R.id.move) { - // 启动移动到文件夹查询 startQueryDestinationFolders(); } else { return false; @@ -505,31 +344,19 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - /** - * @class: NewNoteOnTouchListener - * @implements: OnTouchListener - * @description: 新便签触摸事件监听类。根据触摸事件(比如手在屏幕滑动)修正视图的位置参数 - * @author: 王毅 - * @date: 2024/1/6 11:05 - */ private class NewNoteOnTouchListener implements OnTouchListener { public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { - //获取当前屏幕的高度 Display display = getWindowManager().getDefaultDisplay(); int screenHeight = display.getHeight(); - //获取新建笔记视图的高度 int newNoteViewHeight = mAddNewNote.getHeight(); - //计算新建笔记视图的起始位置 int start = screenHeight - newNoteViewHeight; - //计算当前点击的y坐标 int eventY = start + (int) event.getY(); /** * Minus TitleBar's height */ - //如果当前状态是子文件夹,则减去标题栏的高度 if (mState == ListEditState.SUB_FOLDER) { eventY -= mTitleBar.getHeight(); start -= mTitleBar.getHeight(); @@ -544,18 +371,13 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt * also change. This is very bad, just for the UI designer's strong requirement. */ if (event.getY() < (event.getX() * (-0.12) + 94)) { - // 获取最后一个可见的View View view = mNotesListView.getChildAt(mNotesListView.getChildCount() - 1 - mNotesListView.getFooterViewsCount()); if (view != null && view.getBottom() > start && (view.getTop() < (start + 94))) { - // 记录Y轴的起始位置 mOriginY = (int) event.getY(); - // 记录Y轴的偏移量 mDispatchY = eventY; - // 设置新的坐标 event.setLocation(event.getX(), mDispatchY); - // 设置偏移量 mDispatch = true; return mNotesListView.dispatchTouchEvent(event); } @@ -563,7 +385,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt break; } case MotionEvent.ACTION_MOVE: { - // 移动时,将Y坐标值增加 if (mDispatch) { mDispatchY += (int) event.getY() - mOriginY; event.setLocation(event.getX(), mDispatchY); @@ -585,15 +406,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }; - /** - * @method: startAsyncNotesListQuery - * @description: 已同步便签查询。当进入一个新文件夹时会向数据库发送查询当前文件夹下的便签请求。返回查询结果。这是一个异步查询进程 - * @date: 2024/1/6 11:06 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ - private void startAsyncNotesListQuery() { String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION : NORMAL_SELECTION; @@ -603,38 +415,20 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); } - /** - * @class: BackgroundQueryHandler - * @extends: AsyncQueryHandler - * @description: 背景查询消息处理类。主要功能是将查询后得到的便签在界面显示 - * @author: 王毅 - * @date: 2024/1/6 11:07 - */ - private final class BackgroundQueryHandler extends AsyncQueryHandler { public BackgroundQueryHandler(ContentResolver contentResolver) { super(contentResolver); } - /** - * @method: onQueryComplete - * @description: 下面就是查询结束后对返回数据的处理,完成界面更新 - * @date: 2024/1/6 11:08 - * @author: 高浏阳 - * @param: [int, java.lang.Object, android.database.Cursor]:[token, cookie, cursor] - * @return: void - */ @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { switch (token) { case FOLDER_NOTE_LIST_QUERY_TOKEN: - // 更新笔记列表适配器 mNotesListAdapter.changeCursor(cursor); break; case FOLDER_LIST_QUERY_TOKEN: - // 如果查询成功,则显示文件夹列表菜单 if (cursor != null && cursor.getCount() > 0) { - showFolderListMenu(cursor);//根据查询出的cursor来显示列表 + showFolderListMenu(cursor); } else { Log.e(TAG, "Query folder failed"); } @@ -645,77 +439,34 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - - /** - * @method: showFolderListMenu - * @description: 通过游标显示文件夹列表菜单,功能为移动便签至某个文件件 - * @date: 2024/1/6 11:08 - * @author: 高浏阳 - * @param: [android.database.Cursor]:[cursor] - * @return: void - */ private void showFolderListMenu(Cursor cursor) { AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); - // 设置标题 builder.setTitle(R.string.menu_title_select_folder); - // 创建一个FoldersListAdapter对象 final FoldersListAdapter adapter = new FoldersListAdapter(this, cursor); - // 设置适配器,并设置点击事件 builder.setAdapter(adapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - // 移动选中的笔记到指定文件夹 DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter.getSelectedItemIds(), adapter.getItemId(which)); - // 弹出提示信息 Toast.makeText( NotesListActivity.this, getString(R.string.format_move_notes_to_folder, mNotesListAdapter.getSelectedCount(), adapter.getFolderName(NotesListActivity.this, which)), Toast.LENGTH_SHORT).show(); - // 结束ActionMode mModeCallBack.finishActionMode(); } }); builder.show(); } - /** - * @method: createNewNote - * @description: 创建新便签。主要是创建intent并启动。 - * @date: 2024/1/7 22:21 - * @author: 高浏洋 - * @param: []:[] - * @return: void - */ 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 createTempelNote(int num){ - String temple1="Time:\nClass:\nTeacher:\nScore:\n"; - String temple2="Group:\nLeader:\nNumber:\nScore:\n"; - String temple3="早操:\n早餐:\n第一节课:\n"; - String[] temple= {temple1,temple2,temple2}; - Intent intent = new Intent(this, NoteEditActivity.class); - intent.setAction(Intent.ACTION_INSERT_OR_EDIT); - intent.putExtra(Notes.INTENT_EXTRA_FOLDER_ID, mCurrentFolderId); - intent.putExtra(Notes.INTENT_EXTRA_TEMPLE_TEXT,temple[num-1]); - this.startActivityForResult(intent, REQUEST_CODE_NEW_NODE); - } - - /** - * @method: batchDelete - * @description: 批处理删除。用于多个标签删除时 - * @date: 2024/1/6 11:15 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ private void batchDelete() { new AsyncTask>() { protected HashSet doInBackground(Void... unused) { @@ -753,14 +504,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }.execute(); } - /** - * @method: deleteFolder - * @description: 文件夹删除功能 - * @date: 2024/1/6 11:16 - * @author: 高浏阳 - * @param: [long]:[folderId] - * @return: void - */ private void deleteFolder(long folderId) { if (folderId == Notes.ID_ROOT_FOLDER) { Log.e(TAG, "Wrong folder id, should not happen " + folderId); @@ -788,82 +531,36 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - /** - * @method: openNode - * @description: 打开便签功能。形参为NoteItemData,其为文件夹或便签的实例。 - * @date: 2024/1/6 11:17 - * @author: 高浏阳 - * @param: [net.micode.notes.ui.NoteItemData]:[data] - * @return: void - */ private void openNode(NoteItemData data) { Intent intent = new Intent(this, NoteEditActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.putExtra(Intent.EXTRA_UID, data.getId()); this.startActivityForResult(intent, REQUEST_CODE_OPEN_NODE); } -/** - * @method openFolder - * @description 打开文件夹方法 - * @date: 2023/12/21 7:54 - * @author: 王毅 - * @param - * @return - */ private void openFolder(NoteItemData data) { - // 设置当前文件夹的ID - Long TempId=new Long(mCurrentFolderId); - mFolderIdStack.add(TempId); mCurrentFolderId = data.getId(); - // 开始异步查询笔记列表 startAsyncNotesListQuery(); - // 如果当前文件夹的ID等于Notes.ID_CALL_RECORD_FOLDER if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { - // 设置当前状态为CALL_RECORD_FOLDER mState = ListEditState.CALL_RECORD_FOLDER; - // 隐藏添加新笔记按钮 mAddNewNote.setVisibility(View.GONE); } else { - // 否则设置当前状态为SUB_FOLDER mState = ListEditState.SUB_FOLDER; } - // 如果当前文件夹的ID等于Notes.ID_CALL_RECORD_FOLDER if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { - // 设置标题栏文本为call_record_folder_name mTitleBar.setText(R.string.call_record_folder_name); } else { - // 否则设置标题栏文本为data.getSnippet() mTitleBar.setText(data.getSnippet()); } - // 设置标题栏可见 mTitleBar.setVisibility(View.VISIBLE); } - /** - * @method: onClick - * @description: 视图点击事件。实现创建便签。 - * @date: 2024/1/6 11:17 - * @author: 高浏阳 - * @param: [android.view.View]:[v] - * @return: void - */ - public void onClick(View v) { if (v.getId() == R.id.btn_new_note) { - selectCreatemode(this); -// createNewNote(); + createNewNote(); } } - /** - * @method: showSoftInput - * @description: 显示软键盘 - * @date: 2024/1/6 11:17 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ private void showSoftInput() { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (inputMethodManager != null) { @@ -871,127 +568,65 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - /** - * @method: hideSoftInput - * @description: 不显示软键盘 - * @date: 2024/1/6 11:18 - * @author: 高浏阳 - * @param: [android.view.View]:[view] - * @return: void - */ private void hideSoftInput(View view) { - - - - //获取输入法管理服务 InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - //隐藏输入法 inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } - //文件夹新建、查看及重命名功能。 - /** - * @method showCreateOrModifyFolderDialog - * @description 显示创建或修改文件夹对话框 - * @date: 2023/12/21 9:44 - * @author: 王毅 - * @param :[boolean]:[create] - * @return void - */ 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); final EditText etName = (EditText) view.findViewById(R.id.et_foler_name); - // 显示输入框 showSoftInput(); if (!create) { if (mFocusNoteDataItem != null) { - // 设置文本框中的文本为当前文件夹的摘要 etName.setText(mFocusNoteDataItem.getSnippet()); - // 设置标题为修改文件夹名称 builder.setTitle(getString(R.string.menu_folder_change_name)); } else { Log.e(TAG, "The long click data item is null"); return; } } else { - // 创建文件夹,清空文本框 etName.setText(""); - // 设置标题为创建文件夹 builder.setTitle(this.getString(R.string.menu_create_folder)); } - //设置确定按钮 + builder.setPositiveButton(android.R.string.ok, null); - //设置取消按钮 builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - //隐藏软键盘 hideSoftInput(etName); } }); - //创建对话框 final Dialog dialog = builder.setView(view).show(); - //获取确定按钮 final Button positive = (Button)dialog.findViewById(android.R.id.button1); positive.setOnClickListener(new OnClickListener() { public void onClick(View v) { - //隐藏软键盘 hideSoftInput(etName); - //获取输入框中的文本 String name = etName.getText().toString(); - //检查输入的文本是否已经存在 if (DataUtils.checkVisibleFolderName(mContentResolver, name)) { - //如果存在,则提示用户 Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name), Toast.LENGTH_LONG).show(); - //将光标移动到输入框的末尾 etName.setSelection(0, etName.length()); return; } - - //如果输入的文本不存在 if (!create) { - //如果输入的文本不为空 if (!TextUtils.isEmpty(name)) { - //创建一个ContentValues对象 ContentValues values = new ContentValues(); - //将输入的文本添加到ContentValues对象中 values.put(NoteColumns.SNIPPET, name); values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); values.put(NoteColumns.LOCAL_MODIFIED, 1); - //更新指定id的记录 mContentResolver.update(Notes.CONTENT_NOTE_URI, values, NoteColumns.ID + "=?", new String[] { String.valueOf(mFocusNoteDataItem.getId()) }); } - //新建文件夹的关键,如果是创建文件夹 } else if (!TextUtils.isEmpty(name)) { - //如果在根文件夹中创建 - if (mCurrentFolderId == Notes.ID_ROOT_FOLDER){ - //创建一个ContentValues对象 ContentValues values = new ContentValues(); - //将输入的文本添加到ContentValues对象中 values.put(NoteColumns.SNIPPET, name); values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); - //插入新记录 mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); } - //如果在子文件夹中创建 - else { - //创建一个ContentValues对象 - ContentValues values = new ContentValues(); - //将输入的文本添加到ContentValues对象中 - values.put(NoteColumns.SNIPPET, name); - values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER); - values.put(NoteColumns.PARENT_ID, String.valueOf(mCurrentFolderId)); - //插入新记录 - mContentResolver.insert(Notes.CONTENT_NOTE_URI, values); - } - - } - //关闭对话框 dialog.dismiss(); } }); @@ -1009,7 +644,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } public void onTextChanged(CharSequence s, int start, int before, int count) { - // 当输入框内容发生变化时,判断输入框内容是否为空,如果为空,则禁用positive按钮,否则启用positive按钮 if (TextUtils.isEmpty(etName.getText())) { positive.setEnabled(false); } else { @@ -1024,46 +658,23 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt }); } - /** - * @method: onBackPressed - * @description: 用于处理子Acitivity返回父Activity。相当于对按下“返回箭头”的处理。即返回NotesListActivity活动。 - * @date: 2024/1/6 11:18 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ @Override public void onBackPressed() { switch (mState) { case SUB_FOLDER: - // 设置当前文件夹ID为根文件夹ID - mCurrentFolderId = mFolderIdStack.pop().longValue(); - //mCurrentFolderId = Notes.ID_ROOT_FOLDER; - if(mCurrentFolderId == Notes.ID_ROOT_FOLDER){ - // 设置当前状态为NOTE_LIST - mState = ListEditState.NOTE_LIST; - } - else{ - mState = ListEditState.SUB_FOLDER; - } + mCurrentFolderId = Notes.ID_ROOT_FOLDER; + mState = ListEditState.NOTE_LIST; startAsyncNotesListQuery(); - // 设置标题栏不可见 mTitleBar.setVisibility(View.GONE); break; case CALL_RECORD_FOLDER: - // 设置当前文件夹ID为根文件夹ID mCurrentFolderId = Notes.ID_ROOT_FOLDER; - // 设置当前状态为NOTE_LIST mState = ListEditState.NOTE_LIST; - // 设置添加新笔记按钮可见 mAddNewNote.setVisibility(View.VISIBLE); - // 设置标题栏不可见 mTitleBar.setVisibility(View.GONE); - // 开始异步查询笔记列表 startAsyncNotesListQuery(); break; case NOTE_LIST: - // 调用父类的onBackPressed方法 super.onBackPressed(); break; default: @@ -1071,142 +682,68 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } } - /** - * @method: updateWidget - * @description: 更新小组件 - * @date: 2024/1/6 11:19 - * @author: 高浏阳 - * @param: [int, int]:[appWidgetId, appWidgetType] - * @return: void - */ private void updateWidget(int appWidgetId, int appWidgetType) { Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); - // 判断widget的类型 if (appWidgetType == Notes.TYPE_WIDGET_2X) { - // 设置widget的更新类 intent.setClass(this, NoteWidgetProvider_2x.class); } else if (appWidgetType == Notes.TYPE_WIDGET_4X) { - // 设置widget的更新类 intent.setClass(this, NoteWidgetProvider_4x.class); } else { Log.e(TAG, "Unspported widget type"); return; } - // 设置更新widget的id intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { appWidgetId }); - // 发送更新widget的广播 sendBroadcast(intent); - // 设置更新结果 setResult(RESULT_OK, intent); } - - /** - * @class: NotesListActivity - * @extends: - * @description: 实现按文件夹item的上下文菜单的回调函数,查看、删除、修改文件夹名称的浮动菜单栏(ContextMenu)创建(就是长按后出现) - * @author: 王毅 - * @date: 2023/12/23 9:28 - */ private final OnCreateContextMenuListener mFolderOnCreateContextMenuListener = new OnCreateContextMenuListener() { - //创建ContextMenu,形参为创建的菜单、长按事件绑定的视图、视图元素信息 - - - /** - * @method: onCreateContextMenu - * @description: 构造长按文件夹item的上下文菜单 - * @date: 2023/12/23 9:12 - * @author: 王毅 - * @param: [android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo]:[menu, v, menuInfo] - * @return: void - */ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - - - - // 如果mFocusNoteDataItem不为空 if (mFocusNoteDataItem != null) { - // 设置菜单的标题为mFocusNoteDataItem的摘要 menu.setHeaderTitle(mFocusNoteDataItem.getSnippet()); - // 添加菜单项,菜单项的ID为MENU_FOLDER_VIEW,文本为R.string.menu_folder_view menu.add(0, MENU_FOLDER_VIEW, 0, R.string.menu_folder_view); - // 添加菜单项,菜单项的ID为MENU_FOLDER_DELETE,文本为R.string.menu_folder_delete menu.add(0, MENU_FOLDER_DELETE, 0, R.string.menu_folder_delete); - // 添加菜单项,菜单项的ID为MENU_FOLDER_CHANGE_NAME,文本为R.string.menu_folder_change_name menu.add(0, MENU_FOLDER_CHANGE_NAME, 0, R.string.menu_folder_change_name); } } }; - //下面都是对浮动菜单栏的一些函数 - - /** - * @method onContextMenuClosed - * @description 浮动菜单栏关闭 - * @date: 2023/12/21 8:32 - * @author: 王毅 - * param [android.view.Menu]:[menu] - * @return void - */ @Override public void onContextMenuClosed(Menu menu) { - - - - // 移除对mNotesListView的监听 - // 否则,当用户在列表项上右键时,会调用onContextMenuClosed()方法 - - // 移除对mNotesListView的监听 if (mNotesListView != null) { mNotesListView.setOnCreateContextMenuListener(null); } super.onContextMenuClosed(menu); } - //浮动菜单栏点击按钮后事件处理。 @Override public boolean onContextItemSelected(MenuItem item) { - - - // 判断当前焦点数据项是否为空 if (mFocusNoteDataItem == null) { Log.e(TAG, "The long click data item is null"); return false; } - // 根据根据点击菜单项id进行判断 switch (item.getItemId()) { - // 打开文件夹 case MENU_FOLDER_VIEW: openFolder(mFocusNoteDataItem); break; - // 删除文件夹 case MENU_FOLDER_DELETE: - // 实例化一个Builder类 AlertDialog.Builder builder = new AlertDialog.Builder(this); - // 设置标题 builder.setTitle(getString(R.string.alert_title_delete)); - // 设置图标 builder.setIcon(android.R.drawable.ic_dialog_alert); - // 设置消息 builder.setMessage(getString(R.string.alert_message_delete_folder)); - // 设置确定按钮 builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - // 删除文件夹 deleteFolder(mFocusNoteDataItem.getId()); } }); - // 设置取消按钮 builder.setNegativeButton(android.R.string.cancel, null); - // 显示对话框 builder.show(); break; - // 修改文件夹名称 case MENU_FOLDER_CHANGE_NAME: showCreateOrModifyFolderDialog(false); break; @@ -1217,31 +754,17 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt return true; } - //下面是OptionsMenu菜单创建的有关函数。 - // - /** - * @method: onPrepareOptionsMenu - * @description: 针对不同界面打开不同的选项菜单,OptionsMenu创建 - * @date: 2023/12/23 9:55 - * @author: 王毅 - * @param: [android.view.Menu]:[menu] - * @return: boolean - */ @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); if (mState == ListEditState.NOTE_LIST) { - // 加载note_list菜单 getMenuInflater().inflate(R.menu.note_list, menu); // set sync or sync_cancel - // 设置sync或sync_cancel menu.findItem(R.id.menu_sync).setTitle( GTaskSyncService.isSyncing() ? R.string.menu_sync_cancel : R.string.menu_sync); } else if (mState == ListEditState.SUB_FOLDER) { - // 加载sub_folder菜单 getMenuInflater().inflate(R.menu.sub_folder, menu); } else if (mState == ListEditState.CALL_RECORD_FOLDER) { - // 加载call_record_folder菜单 getMenuInflater().inflate(R.menu.call_record_folder, menu); } else { Log.e(TAG, "Wrong state:" + mState); @@ -1249,73 +772,39 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt return true; } - /** - * @method: onOptionsItemSelected - * @description: 点击不同的选项菜单栏打开不同的界面 - * @date: 2023/12/24 10:07 - * @author: 王毅 - * @param: [android.view.MenuItem]:[item] - * @return: boolean - */ @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.menu_new_folder) { - // 创建或修改文件夹 showCreateOrModifyFolderDialog(true); } else if (itemId == R.id.menu_export_text) { - // 导出笔记到文本 exportNoteToText(); } else if (itemId == R.id.menu_sync) { - // 同步笔记 if (isSyncMode()) { if (TextUtils.equals(item.getTitle(), getString(R.string.menu_sync))) { - // 开始同步 GTaskSyncService.startSync(this); } else { - // 取消同步 GTaskSyncService.cancelSync(this); } } else { - // 开始偏好设置 startPreferenceActivity(); } } else if (itemId == R.id.menu_setting) { - // 开始偏好设置 startPreferenceActivity(); } else if (itemId == R.id.menu_new_note) { - // 创建新笔记 createNewNote(); } else if (itemId == R.id.menu_search) { - // 请求搜索 onSearchRequested(); } return true; } - /** - * @method: onSearchRequested - * @description: 搜索栏功能实现(就是最上面那个搜索便签得的),调用了ui组件 - * @date: 2024/1/6 11:20 - * @author: 高浏阳 - * @param: []:[] - * @return: boolean - */ @Override public boolean onSearchRequested() { startSearch(null, false, null /* appData */, false); return true; } - //下面使用了异步线程类AsynTask。可在类中可以直接进行UI操作,并将后台计算的结果及时的交给UI线程进行UI界面显示。 - /** - * @method: exportNoteToText - * @description: 将便签内容输出为文本 - * @date: 2024/1/6 11:21 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ private void exportNoteToText() { final BackupUtils backup = BackupUtils.getInstance(NotesListActivity.this); new AsyncTask() { @@ -1328,7 +817,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt @Override protected void onPostExecute(Integer result) { if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) { - // 弹出提示框,提示SD卡未卸载 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this .getString(R.string.failed_sdcard_export)); @@ -1337,7 +825,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt builder.setPositiveButton(android.R.string.ok, null); builder.show(); } else if (result == BackupUtils.STATE_SUCCESS) { - // 弹出提示框,提示SD卡导出成功 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this .getString(R.string.success_sdcard_export)); @@ -1347,7 +834,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt builder.setPositiveButton(android.R.string.ok, null); builder.show(); } else if (result == BackupUtils.STATE_SYSTEM_ERROR) { - // 弹出提示框,提示SD卡导出失败 AlertDialog.Builder builder = new AlertDialog.Builder(NotesListActivity.this); builder.setTitle(NotesListActivity.this .getString(R.string.failed_sdcard_export)); @@ -1365,46 +851,19 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0; } - /** - * @method: startPreferenceActivity - * @description: 用于跳转到保存的设置界面。这个maybe在isSyncMode==0时调用。作用在没进行过保存设置时。 - * @date: 2024/1/6 11:22 - * @author: 高浏阳 - * @param: []:[] - * @return: void - */ private void startPreferenceActivity() { Activity from = getParent() != null ? getParent() : this; Intent intent = new Intent(from, NotesPreferenceActivity.class); from.startActivityIfNeeded(intent, -1); } - /** - * @class: OnListItemClickListener - * @implements OnItemClickListener - * @description: 点击事件监听类 - * @author: 王毅 - * @date: 2024/1/6 11:22 - */ private class OnListItemClickListener implements OnItemClickListener { - - /** - * @method: onItemClick - * @description: 点击事件处理。将点击事件其与视图绑定。 - * @date: 2024/1/6 11:23 - * @author: 高浏阳 - * @param: [android.widget.AdapterView, android.view.View, int, long]:[parent, view, position, id] - * @return: void - */ public void onItemClick(AdapterView parent, View view, int position, long id) { if (view instanceof NotesListItem) { NoteItemData item = ((NotesListItem) view).getItemData(); - // 判断是否处于选择模式 if (mNotesListAdapter.isInChoiceMode()) { - // 如果当前是笔记,则调用选择回调函数 if (item.getType() == Notes.TYPE_NOTE) { - // 减去头部视图的数量 position = position - mNotesListView.getHeaderViewsCount(); mModeCallBack.onItemCheckedStateChanged(null, position, id, !mNotesListAdapter.isSelectedItem(position)); @@ -1414,27 +873,20 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt switch (mState) { case NOTE_LIST: - // 如果当前是文件夹或者系统文件夹,则打开文件夹 if (item.getType() == Notes.TYPE_FOLDER || item.getType() == Notes.TYPE_SYSTEM) { openFolder(item); - // 如果当前是笔记,则打开笔记 } else if (item.getType() == Notes.TYPE_NOTE) { - testNode(item); + openNode(item); } else { Log.e(TAG, "Wrong note type in NOTE_LIST"); } break; case SUB_FOLDER: case CALL_RECORD_FOLDER: - // 如果当前是笔记,则打开笔记 if (item.getType() == Notes.TYPE_NOTE) { - testNode(item); -// openNode(item); - }else if (item.getType() == Notes.TYPE_FOLDER - || item.getType() == Notes.TYPE_SYSTEM) { - openFolder(item);} - else { + openNode(item); + } else { Log.e(TAG, "Wrong note type in SUB_FOLDER"); } break; @@ -1464,14 +916,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt NoteColumns.MODIFIED_DATE + " DESC"); } - /** - * @method onItemLongClick - * @description 处理用户长按控件时的行为 - * @date: 2023/12/21 8:37 - * @author: 王毅 - * @param :[android.widget.AdapterView, android.view.View, int, long]:[parent, view, position, id] - * @return boolean - */ public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { if (view instanceof NotesListItem) { mFocusNoteDataItem = ((NotesListItem) view).getItemData(); @@ -1488,99 +932,4 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } return false; } - public void testNode(final NoteItemData item){ - //if (!item.getmPassword().equals("1"))//判断是否有密码,如果没有密码,直接打开即可 - if(item.getmPassword()!=null && !item.getmPassword().equals("")) - { - final AlertDialog.Builder builder = new AlertDialog.Builder(this);//初始化对话框 - builder.setTitle("验证密码"); - View view = LayoutInflater.from(this).inflate(R.layout.pwd, null);//加载对话框的布局文件 - final EditText editPwd = (EditText) view.findViewById(R.id.set_password);//初始化对话框里的文本对象 - editPwd.setHint("输入隐私密码"); - builder.setPositiveButton(android.R.string.ok, null);//确定按钮 - builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) {//取消按钮 - hideSoftInput(editPwd);//隐藏软键盘 - } - }); - showSoftInput();//显示软键盘 - final Dialog dialog = builder.setView(view).show();//显示出来 - - final Button positive = (Button)dialog.findViewById(android.R.id.button1);//加载确定按钮布局文件 - positive.setOnClickListener(new OnClickListener() { - public void onClick(View v) {//设置确定按钮的接收器 - hideSoftInput(editPwd);//点击确定后收起软键盘 - String Password = editPwd.getText().toString();//文本框里的输入值 - String mPassword=item.getmPassword(); - if (TextUtils.isEmpty(Password) || Password.equals(mPassword)) {//输入不为空 -// Toast.makeText(getApplicationContext(), Password, Toast.LENGTH_SHORT).show(); - Toast.makeText(NotesListActivity.this,"密码正确", Toast.LENGTH_SHORT).show(); -// inputPwd = Password; - openNode(item); - dialog.dismiss();//撤销对话框 - }else{ - Toast.makeText(NotesListActivity.this,"密码错误", Toast.LENGTH_SHORT).show(); - editPwd.setText(""); - dialog.show(); - } - - - - } - - }); - if (TextUtils.isEmpty(editPwd.getText())) {//如果文件夹名称为空,则不能选择确定按钮 - positive.setEnabled(false); - } - - editPwd.addTextChangedListener(new TextWatcher() {//添加文本更改监听器,即判断文本更改状态 - public void beforeTextChanged(CharSequence s, int start, int count, int after) {//文本更改之前(未完成) - // TODO Auto-generated method stub - } - - public void onTextChanged(CharSequence s, int start, int before, int count) {//当前文本改变触发, - if (TextUtils.isEmpty(editPwd.getText())) {//文本为空确定按键不可用,不为空则可用 - positive.setEnabled(false); - } else { - positive.setEnabled(true); - } - } - public void afterTextChanged(Editable s) {//文本修改之后(未完成) - // TODO Auto-generated method stub - } - }); - } else { - openNode(item); - } - } - public void selectCreatemode(Context context){ - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("选择模板") - .setItems(new CharSequence[]{"创建空新模板", "创建模板 1", "创建模板 2", "创建模板 3"}, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case 0: - // 创建空的模板 - createNewNote(); - break; - case 1: - // 创建模板 1 - createTempelNote(1); -// createTemplate("模板 1"); - break; - case 2: - // 创建模板 2 - createTempelNote(2); -// break; - case 3: - // 创建模板 3 - createTempelNote(3); - break; - } - } - }) - .show(); - - } } - diff --git a/src/main/java/net/micode/notes/ui/NotesListItem.java b/src/main/java/net/micode/notes/ui/NotesListItem.java index 9af4bd1..1221e80 100644 --- a/src/main/java/net/micode/notes/ui/NotesListItem.java +++ b/src/main/java/net/micode/notes/ui/NotesListItem.java @@ -32,7 +32,6 @@ import net.micode.notes.tool.ResourceParser.NoteItemBgResources; public class NotesListItem extends LinearLayout { private ImageView mAlert; - private ImageView mLock; private TextView mTitle; private TextView mTime; private TextView mCallName; @@ -85,16 +84,8 @@ public class NotesListItem extends LinearLayout { + context.getString(R.string.format_folder_files_count, data.getNotesCount())); mAlert.setVisibility(View.GONE); -// if(data.has) } else { - if(data.getmPassword()==null){ - mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); - }else { - - mTitle.setText("便签已加密"); - } -// -// mTitle.setText("Jiami"); + mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); if (data.hasAlert()) { mAlert.setImageResource(R.drawable.clock); mAlert.setVisibility(View.VISIBLE); diff --git a/src/main/res/drawable-hdpi/lock_private.png b/src/main/res/drawable-hdpi/lock_private.png deleted file mode 100644 index 965c19d..0000000 Binary files a/src/main/res/drawable-hdpi/lock_private.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/login_photo.png b/src/main/res/drawable-hdpi/login_photo.png deleted file mode 100644 index bb6b8c9..0000000 Binary files a/src/main/res/drawable-hdpi/login_photo.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/login_view_photo.png b/src/main/res/drawable-hdpi/login_view_photo.png deleted file mode 100644 index c8897ea..0000000 Binary files a/src/main/res/drawable-hdpi/login_view_photo.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/login_view_photo_2.jpg b/src/main/res/drawable-hdpi/login_view_photo_2.jpg deleted file mode 100644 index 9447402..0000000 Binary files a/src/main/res/drawable-hdpi/login_view_photo_2.jpg and /dev/null differ diff --git a/src/main/res/drawable-hdpi/note_background_photo_duck.jpg b/src/main/res/drawable-hdpi/note_background_photo_duck.jpg deleted file mode 100644 index b6f1ca3..0000000 Binary files a/src/main/res/drawable-hdpi/note_background_photo_duck.jpg and /dev/null differ diff --git a/src/main/res/drawable-hdpi/note_background_photo_wangyi.png b/src/main/res/drawable-hdpi/note_background_photo_wangyi.png deleted file mode 100644 index 8aadb9f..0000000 Binary files a/src/main/res/drawable-hdpi/note_background_photo_wangyi.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/note_bg_photo_wangyi.png b/src/main/res/drawable-hdpi/note_bg_photo_wangyi.png deleted file mode 100644 index 3af7855..0000000 Binary files a/src/main/res/drawable-hdpi/note_bg_photo_wangyi.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/note_edit_color_selector_panel_test.png b/src/main/res/drawable-hdpi/note_edit_color_selector_panel_test.png deleted file mode 100644 index 4a58b67..0000000 Binary files a/src/main/res/drawable-hdpi/note_edit_color_selector_panel_test.png and /dev/null differ diff --git a/src/main/res/layout/change_login_password_activity.xml b/src/main/res/layout/change_login_password_activity.xml deleted file mode 100644 index b9e854f..0000000 --- a/src/main/res/layout/change_login_password_activity.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - -