diff --git a/src/main/java/net/micode/notes/gtask/data/SqlData.java b/src/main/java/net/micode/notes/gtask/data/SqlData.java index 7fdfd17..2bf0273 100644 --- a/src/main/java/net/micode/notes/gtask/data/SqlData.java +++ b/src/main/java/net/micode/notes/gtask/data/SqlData.java @@ -71,9 +71,9 @@ public class SqlData { private ContentValues mDiffDataValues; - public SqlData(Context context) {//初始化对象,用于存储数据 + public SqlData(Context context) { mContentResolver = context.getContentResolver(); - mIsCreate = true;//一类型的变量为true + mIsCreate = true; mDataId = INVALID_ID; mDataMimeType = DataConstants.NOTE; mDataContent = ""; @@ -82,14 +82,14 @@ public class SqlData { mDiffDataValues = new ContentValues(); } - public SqlData(Context context, Cursor c) {//同样是存储数据,另外定义支持冲cursor读入 + public SqlData(Context context, Cursor c) { mContentResolver = context.getContentResolver(); - mIsCreate = false;//二类型的变量为false + mIsCreate = false; loadFromCursor(c); mDiffDataValues = new ContentValues(); } - private void loadFromCursor(Cursor c) {//上面用到的从cursor读取的函数,从存储的各个列获取数据 + private void loadFromCursor(Cursor c) { mDataId = c.getLong(DATA_ID_COLUMN); mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN); mDataContent = c.getString(DATA_CONTENT_COLUMN); @@ -97,9 +97,9 @@ public class SqlData { mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN); } - public void setContent(@androidx.annotation.NonNull JSONObject js) throws JSONException {//获取json类型的参数,并且根据它更新自定义的数据单元中的值 - long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;//如果有id直接赋值,没有则需要在获取 - if (mIsCreate || mDataId != dataId) {//初始未设置的数据单元通过它设置内容,通过cursor产生的数据元可通过它完成更新 + public void setContent(JSONObject js) throws JSONException { + long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID; + if (mIsCreate || mDataId != dataId) { mDiffDataValues.put(DataColumns.ID, dataId); } mDataId = dataId; @@ -131,7 +131,7 @@ public class SqlData { } public JSONObject getContent() throws JSONException { - if (mIsCreate) {//同样的只有通过cursor产生的数据单元可通过这个函数获取数据 + if (mIsCreate) { Log.e(TAG, "it seems that we haven't created this in database yet"); return null; } @@ -144,7 +144,7 @@ public class SqlData { return js; } - public void commit(long noteId, boolean validateVersion, long version) {//提交数据,并且打上类似于标签的版本号以及验证值 + public void commit(long noteId, boolean validateVersion, long version) { if (mIsCreate) { if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) { @@ -162,12 +162,12 @@ public class SqlData { } else { if (mDiffDataValues.size() > 0) { int result = 0; - if (!validateVersion) { // 不验证版本的情况下,直接使用ContentResolver更新指定ID的数据 + if (!validateVersion) { result = mContentResolver.update(ContentUris.withAppendedId( Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, null, null); - } else { // 需要验证版本的情况下,使用ContentResolver进行条件更新操作 + } else { result = mContentResolver.update(ContentUris.withAppendedId( - Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, + Notes.CONTENT_DATA_URI, mDataId), mDiffDataValues, " ? in (SELECT " + NoteColumns.ID + " FROM " + TABLE.NOTE + " WHERE " + NoteColumns.VERSION + "=?)", new String[] { String.valueOf(noteId), String.valueOf(version) diff --git a/src/main/java/net/micode/notes/gtask/data/SqlNote.java b/src/main/java/net/micode/notes/gtask/data/SqlNote.java index 48891a6..79a4095 100644 --- a/src/main/java/net/micode/notes/gtask/data/SqlNote.java +++ b/src/main/java/net/micode/notes/gtask/data/SqlNote.java @@ -122,7 +122,7 @@ public class SqlNote { private ArrayList mDataList; - public SqlNote(Context context) {//定义数据单元存储数据 + public SqlNote(Context context) { mContext = context; mContentResolver = context.getContentResolver(); mIsCreate = true; @@ -135,7 +135,7 @@ public class SqlNote { mParentId = 0; mSnippet = ""; mType = Notes.TYPE_NOTE; - mWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;//直接从设置的属性中获取值 + mWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; mWidgetType = Notes.TYPE_WIDGET_INVALIDE; mOriginParent = 0; mVersion = 0; @@ -147,14 +147,14 @@ public class SqlNote { mContext = context; mContentResolver = context.getContentResolver(); mIsCreate = false; - loadFromCursor(c);//从cursor中直接获取变量值 + loadFromCursor(c); mDataList = new ArrayList(); if (mType == Notes.TYPE_NOTE) loadDataContent(); mDiffNoteValues = new ContentValues(); } - public SqlNote(Context context, long id) {//根据id初始化数据单元 + public SqlNote(Context context, long id) { mContext = context; mContentResolver = context.getContentResolver(); mIsCreate = false; @@ -175,7 +175,7 @@ public class SqlNote { }, null); if (c != null) { c.moveToNext(); - loadFromCursor(c);//通过调用减少重复代码编写 + loadFromCursor(c); } else { Log.w(TAG, "loadFromCursor: cursor = null"); } @@ -185,7 +185,7 @@ public class SqlNote { } } - private void loadFromCursor(Cursor c) {//直接使用get获得变量值 + private void loadFromCursor(Cursor c) { mId = c.getLong(ID_COLUMN); mAlertDate = c.getLong(ALERTED_DATE_COLUMN); mBgColorId = c.getInt(BG_COLOR_ID_COLUMN); @@ -200,7 +200,7 @@ public class SqlNote { mVersion = c.getLong(VERSION_COLUMN); } - private void loadDataContent() {//这个函数判别查询的数据是否存在,并且读取到数据列表中存储 + private void loadDataContent() { Cursor c = null; mDataList.clear(); try { @@ -210,12 +210,12 @@ public class SqlNote { }, null); if (c != null) { if (c.getCount() == 0) { - Log.w(TAG, "it seems that the note has not data");//遇到文件为空抛出对应的异常 + Log.w(TAG, "it seems that the note has not data"); return; } while (c.moveToNext()) { SqlData data = new SqlData(mContext, c); - mDataList.add(data);//向Datalist中加入读取到的数据 + mDataList.add(data); } } else { Log.w(TAG, "loadDataContent: cursor = null"); @@ -226,8 +226,7 @@ public class SqlNote { } } - public boolean setContent(JSONObject js) {//设置数据单元中变量的值 - //如果所需的值存在,直接赋值使用,否则再先进行一步读取 + public boolean setContent(JSONObject js) { try { JSONObject note = js.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); if (note.getInt(NoteColumns.TYPE) == Notes.TYPE_SYSTEM) { @@ -360,7 +359,7 @@ public class SqlNote { return true; } - public JSONObject getContent() {//直接读取的方式将所需的数据读到对应变量 + public JSONObject getContent() { try { JSONObject js = new JSONObject(); @@ -413,7 +412,6 @@ public class SqlNote { mDiffNoteValues.put(NoteColumns.PARENT_ID, id); } - //定义一些简单的获取取值的方法 public void setGtaskId(String gid) { mDiffNoteValues.put(NoteColumns.GTASK_ID, gid); } @@ -442,7 +440,7 @@ public class SqlNote { return mType == Notes.TYPE_NOTE; } - public void commit(boolean validateVersion) {//将数据做一定修改提交 + public void commit(boolean validateVersion) { if (mIsCreate) { if (mId == INVALID_ID && mDiffNoteValues.containsKey(NoteColumns.ID)) { mDiffNoteValues.remove(NoteColumns.ID); diff --git a/src/main/java/net/micode/notes/gtask/data/Task.java b/src/main/java/net/micode/notes/gtask/data/Task.java index 4d68293..6a19454 100644 --- a/src/main/java/net/micode/notes/gtask/data/Task.java +++ b/src/main/java/net/micode/notes/gtask/data/Task.java @@ -32,7 +32,7 @@ import org.json.JSONException; import org.json.JSONObject; -public class Task extends Node {//继承Node类的属性 +public class Task extends Node { private static final String TAG = Task.class.getSimpleName(); private boolean mCompleted; @@ -54,7 +54,7 @@ public class Task extends Node {//继承Node类的属性 mMetaInfo = null; } - public JSONObject getCreateAction(int actionId) {//创建一个初始的任务对象,并对它赋初值 + public JSONObject getCreateAction(int actionId) { JSONObject js = new JSONObject(); try { @@ -103,7 +103,7 @@ public class Task extends Node {//继承Node类的属性 return js; } - public JSONObject getUpdateAction(int actionId) {//更新任务 + public JSONObject getUpdateAction(int actionId) { JSONObject js = new JSONObject(); try { @@ -120,7 +120,7 @@ public class Task extends Node {//继承Node类的属性 // entity_delta JSONObject entity = new JSONObject(); entity.put(GTaskStringUtils.GTASK_JSON_NAME, getName()); - if (getNotes() != null) {//如果笔记不为空,更新笔记 + if (getNotes() != null) { entity.put(GTaskStringUtils.GTASK_JSON_NOTES, getNotes()); } entity.put(GTaskStringUtils.GTASK_JSON_DELETED, getDeleted()); @@ -135,11 +135,11 @@ public class Task extends Node {//继承Node类的属性 return js; } - public void setContentByRemoteJSON(JSONObject js) {//通过远端的json设置内容的值 + public void setContentByRemoteJSON(JSONObject js) { if (js != null) { try { // id - if (js.has(GTaskStringUtils.GTASK_JSON_ID)) {//如果值已经被json对象所具备,则直接进行设置 + if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { setGid(js.getString(GTaskStringUtils.GTASK_JSON_ID)); } @@ -175,7 +175,7 @@ public class Task extends Node {//继承Node类的属性 } } - public void setContentByLocalJSON(JSONObject js) {//通过本地的json文件来设置内容 + public void setContentByLocalJSON(JSONObject js) { if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE) || !js.has(GTaskStringUtils.META_HEAD_DATA)) { Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); @@ -204,7 +204,7 @@ public class Task extends Node {//继承Node类的属性 } } - public JSONObject getLocalJSONFromContent() {//通过本地的内容,生成json文件 + public JSONObject getLocalJSONFromContent() { String name = getName(); try { if (mMetaInfo == null) { @@ -216,7 +216,7 @@ public class Task extends Node {//继承Node类的属性 JSONObject js = new JSONObject(); JSONObject note = new JSONObject(); - JSONArray dataArray = new JSONArray();//声明所有所要用到的变量 + JSONArray dataArray = new JSONArray(); JSONObject data = new JSONObject(); data.put(DataColumns.CONTENT, name); dataArray.put(data); @@ -227,7 +227,7 @@ public class Task extends Node {//继承Node类的属性 } else { // synced task JSONObject note = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); - JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA);//提取出所有的信息 + JSONArray dataArray = mMetaInfo.getJSONArray(GTaskStringUtils.META_HEAD_DATA); for (int i = 0; i < dataArray.length(); i++) { JSONObject data = dataArray.getJSONObject(i); @@ -258,11 +258,11 @@ public class Task extends Node {//继承Node类的属性 } } - public int getSyncAction(Cursor c) {//同步缓存 + public int getSyncAction(Cursor c) { try { JSONObject noteInfo = null; if (mMetaInfo != null && mMetaInfo.has(GTaskStringUtils.META_HEAD_NOTE)) { - noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE);//更新到最新的笔记信息 + noteInfo = mMetaInfo.getJSONObject(GTaskStringUtils.META_HEAD_NOTE); } if (noteInfo == null) { @@ -311,14 +311,14 @@ public class Task extends Node {//继承Node类的属性 return SYNC_ACTION_ERROR; } - public boolean isWorthSaving() {//只要有信息就认为是值得保存的,返回true + public boolean isWorthSaving() { return mMetaInfo != null || (getName() != null && getName().trim().length() > 0) || (getNotes() != null && getNotes().trim().length() > 0); } public void setCompleted(boolean completed) { this.mCompleted = completed; - }//进行前面使用过的调用函数返回值的对应 + } public void setNotes(String notes) { this.mNotes = notes; diff --git a/src/main/java/net/micode/notes/gtask/data/TaskList.java b/src/main/java/net/micode/notes/gtask/data/TaskList.java index 95d6bf5..4ea21c5 100644 --- a/src/main/java/net/micode/notes/gtask/data/TaskList.java +++ b/src/main/java/net/micode/notes/gtask/data/TaskList.java @@ -30,17 +30,17 @@ import org.json.JSONObject; import java.util.ArrayList; -public class TaskList extends Node {//同Task一样,继承了Node +public class TaskList extends Node { private static final String TAG = TaskList.class.getSimpleName(); private int mIndex; - private ArrayList mChildren;//内部含有一个Task的列,是任务的序列 + private ArrayList mChildren; public TaskList() { super(); mChildren = new ArrayList(); - mIndex = 1;//初始化 + mIndex = 1; } public JSONObject getCreateAction(int actionId) { @@ -74,7 +74,7 @@ public class TaskList extends Node {//同Task一样,继承了Node return js; } - public JSONObject getUpdateAction(int actionId) {//更新行动与Task中定义的基本一样 + public JSONObject getUpdateAction(int actionId) { JSONObject js = new JSONObject(); try { @@ -104,7 +104,7 @@ public class TaskList extends Node {//同Task一样,继承了Node } public void setContentByRemoteJSON(JSONObject js) { - if (js != null) {//类似的通过远端更新内容 + if (js != null) { try { // id if (js.has(GTaskStringUtils.GTASK_JSON_ID)) { @@ -129,7 +129,7 @@ public class TaskList extends Node {//同Task一样,继承了Node } } - public void setContentByLocalJSON(JSONObject js) {//通过本地文件更新内容 + public void setContentByLocalJSON(JSONObject js) { if (js == null || !js.has(GTaskStringUtils.META_HEAD_NOTE)) { Log.w(TAG, "setContentByLocalJSON: nothing is avaiable"); } @@ -215,26 +215,26 @@ public class TaskList extends Node {//同Task一样,继承了Node return SYNC_ACTION_ERROR; } -//以上都与task定义类似 + public int getChildTaskCount() { return mChildren.size(); } public boolean addChildTask(Task task) { boolean ret = false; - if (task != null && !mChildren.contains(task)) {//任务不为空,并且还不在列表中,则将其加入 + if (task != null && !mChildren.contains(task)) { ret = mChildren.add(task); - if (ret) {//成功加入以后继续设置关系 + if (ret) { // need to set prior sibling and parent task.setPriorSibling(mChildren.isEmpty() ? null : mChildren .get(mChildren.size() - 1)); - task.setParent(this);//设置任务的父子关系 + task.setParent(this); } } return ret; } - public boolean addChildTask(Task task, int index) {//更进一步的实现在指定索引位置插入任务 + public boolean addChildTask(Task task, int index) { if (index < 0 || index > mChildren.size()) { Log.e(TAG, "add child task: invalid index"); return false; @@ -260,9 +260,9 @@ public class TaskList extends Node {//同Task一样,继承了Node return true; } - public boolean removeChildTask(Task task) {//移除子任务 + public boolean removeChildTask(Task task) { boolean ret = false; - int index = mChildren.indexOf(task);//查找其索引 + int index = mChildren.indexOf(task); if (index != -1) { ret = mChildren.remove(task); @@ -281,7 +281,7 @@ public class TaskList extends Node {//同Task一样,继承了Node return ret; } - public boolean moveChildTask(Task task, int index) {//定向移除对应位置的任务 + public boolean moveChildTask(Task task, int index) { if (index < 0 || index >= mChildren.size()) { Log.e(TAG, "move child task: invalid index"); @@ -299,7 +299,7 @@ public class TaskList extends Node {//同Task一样,继承了Node return (removeChildTask(task) && addChildTask(task, index)); } - public Task findChildTaskByGid(String gid) {//通过Gid查找任务 + public Task findChildTaskByGid(String gid) { for (int i = 0; i < mChildren.size(); i++) { Task t = mChildren.get(i); if (t.getGid().equals(gid)) { @@ -309,7 +309,7 @@ public class TaskList extends Node {//同Task一样,继承了Node return null; } - public int getChildTaskIndex(Task task) {//获取任务对应的索引 + public int getChildTaskIndex(Task task) { return mChildren.indexOf(task); } @@ -323,7 +323,7 @@ public class TaskList extends Node {//同Task一样,继承了Node public Task getChilTaskByGid(String gid) { for (Task task : mChildren) { - if (task.getGid().equals(gid))//找到一个gid相符的即为所要的任务 + if (task.getGid().equals(gid)) return task; } return null; diff --git a/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java b/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java index 1909174..937be4b 100644 --- a/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java +++ b/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java @@ -39,4 +39,3 @@ public class ActionFailureException extends RuntimeException { super(paramString, paramThrowable); } } - diff --git a/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java b/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java index 331588d..0e30963 100644 --- a/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java +++ b/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java @@ -42,3 +42,4 @@ public class NetworkFailureException extends Exception { super(paramString, paramThrowable); } } + diff --git a/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java b/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java index 7370d57..85723be 100644 --- a/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java +++ b/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java @@ -14,200 +14,145 @@ * limitations under the License. */ - package net.micode.notes.ui; - - import android.app.Activity; - import android.app.AlertDialog; - import android.content.Context; - import android.content.DialogInterface; - import android.content.DialogInterface.OnClickListener; - import android.content.DialogInterface.OnDismissListener; - import android.content.Intent; - import android.media.AudioManager; - import android.media.MediaPlayer; - import android.media.RingtoneManager; - import android.net.Uri; - import android.os.Bundle; - import android.os.PowerManager; - import android.provider.Settings; - import android.view.Window; - import android.view.WindowManager; - - import net.micode.notes.R; - import net.micode.notes.data.Notes; - import net.micode.notes.tool.DataUtils; - - import java.io.IOException; - - /** - * @classname: AlarmAlertActivity - * @description:设置闹钟提示 - * @date: 2023/12/28 11:18 - * @author: wangrunze - */ - public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { - private long mNoteId;//文本在数据库存储中的ID号 - private String mSnippet;//闹钟提示时出现的文本片段 - private static final int SNIPPET_PREW_MAX_LEN = 60; - MediaPlayer mPlayer; - //Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的 - //onsaveInstanceState方法是用来保存Activity的状态的,能从onCreate的参数savedInsanceState中获得状态数据 - - /** - * @classname: AlarmAlertActivity - * @methodname onCreate - * @description:创建界面并进行初始化操作 - * @date: 2023/12/28 11:27 - * @author: wangrunze - * @param: Bundle savedInstanceState - */ - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - requestWindowFeature(Window.FEATURE_NO_TITLE);//界面显示——无标题 - - final Window win = getWindow(); - win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); - - if (!isScreenOn()) { - win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON//保持窗体点亮 - | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON//将窗体点亮 - | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON//允许窗体点亮时锁屏 - | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR);//在手机锁屏后如果到了闹钟提示时间,点亮屏幕 - } - - Intent intent = getIntent(); - - try { - mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); - mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId);//根据ID从数据库中获取标签的内容 - mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, - SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info)//判断标签片段是否达到符合长度 - : mSnippet; - } catch (IllegalArgumentException e) { - e.printStackTrace(); - return; - } - - mPlayer = new MediaPlayer(); - if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) { - showActionDialog();//弹出对话框 - playAlarmSound();//闹钟提示音激发 - } else { - finish(); - } - } - - /** - * @classname: AlarmAlertActivity - * @methodname isScreenOn - * @description:判断屏幕是否锁屏,调用系统函数判断,最后返回值是布尔类型 - * @date: 2023/12/28 11:28 - * @author: wangrunze - * @return: pm.isScreenOn() - */ - private boolean isScreenOn() { - PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); - return pm.isScreenOn(); - } - - /** - * @classname: AlarmAlertActivity - * @methodname playAlarmSound - * @description:闹钟提示音启动激发 - * @date: 2023/12/28 11:29 - * @author: wangrunze - */ - - private void playAlarmSound() { - Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); - - int silentModeStreams = Settings.System.getInt(getContentResolver(), - Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); //调用系统的铃声管理URI,得到闹钟提示音 - - if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { - mPlayer.setAudioStreamType(silentModeStreams); - } else { - mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); - } - try { - mPlayer.setDataSource(this, url);//无返回值,设置多媒体数据来源 - mPlayer.prepare();//准备同步 - mPlayer.setLooping(true);//设置是否循环播放 - mPlayer.start();//开始播放 - } catch (IllegalArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace();//抛出异常, 还将显示出更深的调用信息 - } catch (SecurityException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalStateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - /** - * @classname: AlarmAlertActivity - * @methodname showActionDialog - * @description:新建对话框 - * @date: 2023/12/28 11:30 - * @author: wangrunze - */ - - private void showActionDialog() { - AlertDialog.Builder dialog = new AlertDialog.Builder(this);//用到AlertDialog.Builder中的create()新建了一个AlertDialog - dialog.setTitle(R.string.app_name);//为对话框设置标题 - dialog.setMessage(mSnippet);//为对话框设置内容 - dialog.setPositiveButton(R.string.notealert_ok, this);//给对话框添加"Yes"按钮 - if (isScreenOn()) { - dialog.setNegativeButton(R.string.notealert_enter, this);//给对话框添加"no"按钮 - } - dialog.show().setOnDismissListener(this); - } - - //DialogInterface dialog为对话框,which为选择按钮,功能为选择各种操作 - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_NEGATIVE://这是取消操作 - Intent intent = new Intent(this, NoteEditActivity.class);//实现两个类间的数据传输 - intent.setAction(Intent.ACTION_VIEW);//设置动作属性 - intent.putExtra(Intent.EXTRA_UID, mNoteId); - startActivity(intent); - break; - default: - break; - } - } - - /** - * @classname: AlarmAlertActivity - * @methodname onDismiss - * @description:停止闹钟声音 - * @date: 2023/12/28 11:30 - * @author: wangrunze - * @param:DialogInterface dialog - */ - public void onDismiss(DialogInterface dialog) { - stopAlarmSound(); - finish(); - } - /** - * @classname: AlarmAlertActivity - * @methodname: stopAlarmSound - * @description: - * @date: 2023/12/28 11:31 - * @author: wangrunze - */ - private void stopAlarmSound() { - if (mPlayer != null) { - mPlayer.stop(); - mPlayer.release(); - mPlayer = null; - } - } - } - \ No newline at end of file +package net.micode.notes.ui; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.DialogInterface.OnDismissListener; +import android.content.Intent; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.Bundle; +import android.os.PowerManager; +import android.provider.Settings; +import android.view.Window; +import android.view.WindowManager; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.tool.DataUtils; + +import java.io.IOException; + + +public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener { + private long mNoteId; + private String mSnippet; + private static final int SNIPPET_PREW_MAX_LEN = 60; + MediaPlayer mPlayer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + + final Window win = getWindow(); + win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + + if (!isScreenOn()) { + win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON + | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON + | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); + } + + Intent intent = getIntent(); + + try { + mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); + mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); + mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, + SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info) + : mSnippet; + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return; + } + + mPlayer = new MediaPlayer(); + if (DataUtils.visibleInNoteDatabase(getContentResolver(), mNoteId, Notes.TYPE_NOTE)) { + showActionDialog(); + playAlarmSound(); + } else { + finish(); + } + } + + private boolean isScreenOn() { + PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + return pm.isScreenOn(); + } + + private void playAlarmSound() { + Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM); + + int silentModeStreams = Settings.System.getInt(getContentResolver(), + Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); + + if ((silentModeStreams & (1 << AudioManager.STREAM_ALARM)) != 0) { + mPlayer.setAudioStreamType(silentModeStreams); + } else { + mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); + } + try { + mPlayer.setDataSource(this, url); + mPlayer.prepare(); + mPlayer.setLooping(true); + mPlayer.start(); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private void showActionDialog() { + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + dialog.setTitle(R.string.app_name); + dialog.setMessage(mSnippet); + dialog.setPositiveButton(R.string.notealert_ok, this); + if (isScreenOn()) { + dialog.setNegativeButton(R.string.notealert_enter, this); + } + dialog.show().setOnDismissListener(this); + } + + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_NEGATIVE: + Intent intent = new Intent(this, NoteEditActivity.class); + intent.setAction(Intent.ACTION_VIEW); + intent.putExtra(Intent.EXTRA_UID, mNoteId); + startActivity(intent); + break; + default: + break; + } + } + + public void onDismiss(DialogInterface dialog) { + stopAlarmSound(); + finish(); + } + + private void stopAlarmSound() { + if (mPlayer != null) { + mPlayer.stop(); + mPlayer.release(); + mPlayer = null; + } + } +} diff --git a/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/src/main/java/net/micode/notes/ui/NoteEditActivity.java index 462f91f..9738ffd 100644 --- a/src/main/java/net/micode/notes/ui/NoteEditActivity.java +++ b/src/main/java/net/micode/notes/ui/NoteEditActivity.java @@ -78,6 +78,7 @@ import java.util.regex.Pattern; * @date: 2023/12/27 0:08 * @author: Xia Yanbo */ + public class NoteEditActivity extends Activity implements OnClickListener, NoteSettingChangedListener, OnTextViewChangeListener { //定义视图组件的基本数据(后面出现在了操作菜可选项里) @@ -604,6 +605,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, } else { menu.findItem(R.id.menu_delete_remind).setVisible(false); } + return true; } /** @@ -652,6 +654,15 @@ public class NoteEditActivity extends Activity implements OnClickListener, mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ? TextNote.MODE_CHECK_LIST : 0); } +// else if(item.getItemId()== R.id.menu_secret) +// { +// mWorkingNote.setSecretMode(); +// +// } +// else if(item.getItemId()== R.id.menu_quit_secret) +// { +// mWorkingNote.setSecretMode(); +// } //分享 else if(item.getItemId()== R.id.menu_share) { @@ -748,10 +759,6 @@ public class NoteEditActivity extends Activity implements OnClickListener, * @description: * @date: 2023/12/25 21:34 * @author: Xia Yanbo - * @param: - * @param: - * @param: - * @return: */ public void onClockAlertChanged(long date, boolean set) { /** @@ -847,7 +854,7 @@ public class NoteEditActivity extends Activity implements OnClickListener, int index = 0; for (String item : items) { if(!TextUtils.isEmpty(item)) { - mEditTextList.addView(getListItem(item, index));//添加列表项(标记:实现的关键步骤addView) + mEditTextList.addView(getListItem(item, index));//添加列表项(标记:实现的关键步骤addView,getlistitem) index++; } } diff --git a/src/main/java/net/micode/notes/ui/NotesListActivity.java b/src/main/java/net/micode/notes/ui/NotesListActivity.java index 6394b05..93d1b2d 100644 --- a/src/main/java/net/micode/notes/ui/NotesListActivity.java +++ b/src/main/java/net/micode/notes/ui/NotesListActivity.java @@ -135,6 +135,8 @@ 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; + public static int secret_mode = 0; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -412,10 +414,35 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt private void startAsyncNotesListQuery() { String selection = (mCurrentFolderId == Notes.ID_ROOT_FOLDER) ? ROOT_FOLDER_SELECTION : NORMAL_SELECTION; - mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, - Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] { - String.valueOf(mCurrentFolderId) - }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); + if(secret_mode == 0) { + mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, + Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[]{ + String.valueOf(mCurrentFolderId) + }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); + } + else{ + String str1 = "520"; + String [] PROJECTION = new String [] { //定义一个新的PROJECTION数组,只换掉SNIPPET + NoteColumns.ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.CREATED_DATE, + NoteColumns.HAS_ATTACHMENT, + NoteColumns.MODIFIED_DATE, + NoteColumns.NOTES_COUNT, + NoteColumns.PARENT_ID, +// NoteColumns.SNIPPET, + str1, + NoteColumns.TYPE, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + }; + mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null, + Notes.CONTENT_NOTE_URI, PROJECTION, selection, new String[]{ + String.valueOf(mCurrentFolderId) + }, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC"); + + } } private final class BackgroundQueryHandler extends AsyncQueryHandler { @@ -772,6 +799,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } else { Log.e(TAG, "Wrong state:" + mState); } + if(secret_mode == 1) + menu.findItem(R.id.menu_secret).setVisible(false); + else + menu.findItem(R.id.menu_quit_secret).setVisible(false); return true; } @@ -804,6 +835,50 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt else if(item.getItemId()==R.id.menu_search) { onSearchRequested(); } + else if(item.getItemId()==R.id.menu_secret) + {//进入私密模式 + secret_mode = 1; + AlertDialog.Builder dialog = new AlertDialog.Builder(NotesListActivity.this); + dialog.setTitle("重要提醒"); + dialog.setMessage("您确认进入私密模式吗?"); + dialog.setCancelable(false); + dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startAsyncNotesListQuery(); + Toast.makeText(NotesListActivity.this,"您已进入私密模式",Toast.LENGTH_SHORT).show(); + } + }); + dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which){} + }); + dialog.show(); + startAsyncNotesListQuery(); + Toast.makeText(this,"您已进入私密模式",Toast.LENGTH_SHORT).show(); + } + else if(item.getItemId()==R.id.menu_quit_secret) + { //退出私密模式 + secret_mode = 0; + AlertDialog.Builder dialog = new AlertDialog.Builder(NotesListActivity.this); + dialog.setTitle("重要提醒"); + dialog.setMessage("您确认退出私密模式吗?"); + dialog.setCancelable(false); + dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startAsyncNotesListQuery(); + Toast.makeText(NotesListActivity.this,"您已退出私密模式",Toast.LENGTH_SHORT).show(); + } + }); + dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which){} + }); + dialog.show(); + + } + return true; } @@ -941,4 +1016,16 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt } return false; } + + public void setSecretMode() { + if(secret_mode==0) + { + secret_mode=1; + } + else{ + secret_mode=0; + } + } + } + diff --git a/src/main/res/menu/note_list.xml b/src/main/res/menu/note_list.xml index 42ea736..9903e2e 100644 --- a/src/main/res/menu/note_list.xml +++ b/src/main/res/menu/note_list.xml @@ -36,4 +36,12 @@ + + + + diff --git a/src/main/res/menu/sub_folder.xml b/src/main/res/menu/sub_folder.xml index b00de26..41fe907 100644 --- a/src/main/res/menu/sub_folder.xml +++ b/src/main/res/menu/sub_folder.xml @@ -21,4 +21,11 @@ + + + \ No newline at end of file diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 09f75ed..214a5eb 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -71,6 +71,8 @@ 确认要删除该条便签吗? 确认删除文件夹及所包含的便签吗? 已将所选 %1$d 条便签移到 %2$s 文件夹 + 私密模式 + 退出私密模式 SD卡被占用,不能操作 导出文本时发生错误,请检查SD卡 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 55df868..c54b8ad 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -75,6 +75,8 @@ Confirm to delete the selected %d notes? Confirm to delete this note? Have moved selected %1$d notes to %2$s folder + secret model + quit secret model SD card busy, not available now Export failed, please check SD card diff --git a/src/main/res/values/styles.xml b/src/main/res/values/styles.xml index d750e65..ad0d90d 100644 --- a/src/main/res/values/styles.xml +++ b/src/main/res/values/styles.xml @@ -64,6 +64,6 @@ \ No newline at end of file