# Conflicts:
#	src/app/src/main/AndroidManifest.xml
#	src/app/src/main/java/net/micode/notes/data/Contact.java
#	src/app/src/main/java/net/micode/notes/data/Notes.java
#	src/app/src/main/java/net/micode/notes/data/NotesDatabaseHelper.java
#	src/app/src/main/java/net/micode/notes/data/NotesProvider.java
#	src/app/src/main/java/net/micode/notes/gtask/data/Node.java
#	src/app/src/main/java/net/micode/notes/gtask/data/SqlData.java
#	src/app/src/main/java/net/micode/notes/gtask/data/SqlNote.java
#	src/app/src/main/java/net/micode/notes/gtask/data/Task.java
#	src/app/src/main/java/net/micode/notes/gtask/data/TaskList.java
#	src/app/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java
#	src/app/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java
#	src/app/src/main/java/net/micode/notes/gtask/remote/GTaskASyncTask.java
#	src/app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java
#	src/app/src/main/java/net/micode/notes/gtask/remote/GTaskManager.java
#	src/app/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java
#	src/app/src/main/java/net/micode/notes/model/Note.java
#	src/app/src/main/java/net/micode/notes/model/WorkingNote.java
#	src/app/src/main/java/net/micode/notes/tool/BackupUtils.java
#	src/app/src/main/java/net/micode/notes/tool/DataUtils.java
#	src/app/src/main/java/net/micode/notes/tool/GTaskStringUtils.java
#	src/app/src/main/java/net/micode/notes/tool/ResourceParser.java
#	src/app/src/main/java/net/micode/notes/ui/AlarmAlertActivity.java
#	src/app/src/main/java/net/micode/notes/ui/AlarmInitReceiver.java
#	src/app/src/main/java/net/micode/notes/ui/AlarmReceiver.java
#	src/app/src/main/java/net/micode/notes/ui/DateTimePicker.java
#	src/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java
#	src/app/src/main/java/net/micode/notes/ui/DropdownMenu.java
#	src/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java
#	src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
#	src/app/src/main/java/net/micode/notes/ui/NoteEditText.java
#	src/app/src/main/java/net/micode/notes/ui/NoteItemData.java
#	src/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
#	src/app/src/main/java/net/micode/notes/ui/NotesListAdapter.java
#	src/app/src/main/java/net/micode/notes/ui/NotesPreferenceActivity.java
#	src/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider.java
#	src/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_2x.java
#	src/app/src/main/java/net/micode/notes/widget/NoteWidgetProvider_4x.java
#	src/app/src/main/res/menu/note_list.xml
#	src/app/src/main/res/values-zh-rCN/strings.xml
#	src/app/src/main/res/values/strings.xml
master
lyy 1 year ago
commit bcc54e841a

@ -1,8 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<<<<<<< HEAD
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.micode.notes"
android:versionCode="1"
android:versionName="0.1">
=======
<!-- Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.micode.notes"
android:versionCode="1"
android:versionName="0.1" >
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<uses-sdk android:minSdkVersion="14" />
@ -17,6 +40,7 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
<<<<<<< HEAD
android:icon="@drawable/icon_app"
android:label="@string/app_name">
<activity
@ -44,12 +68,40 @@
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/NoteTheme">
=======
android:icon="@drawable/icon_app"
android:label="@string/app_name" >
<activity
android:name=".ui.NotesListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/NoteTheme"
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustPan" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.NoteEditActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:exported="true"
android:theme="@style/NoteTheme" >
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/text_note" />
<data android:mimeType="vnd.android.cursor.item/call_note" />
</intent-filter>
<<<<<<< HEAD
<intent-filter>
<action android:name="android.intent.action.INSERT_OR_EDIT" />
@ -61,10 +113,23 @@
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
=======
<intent-filter>
<action android:name="android.intent.action.INSERT_OR_EDIT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/text_note" />
<data android:mimeType="vnd.android.cursor.item/call_note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
<<<<<<< HEAD
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
@ -79,6 +144,22 @@
android:name=".widget.NoteWidgetProvider_2x"
android:exported="true"
android:label="@string/app_widget2x2">
=======
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<provider
android:name="net.micode.notes.data.NotesProvider"
android:authorities="micode_notes"
android:exported="true"
android:multiprocess="true" />
<receiver
android:name=".widget.NoteWidgetProvider_2x"
android:exported="true"
android:label="@string/app_widget2x2" >
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
@ -86,6 +167,7 @@
</intent-filter>
<meta-data
<<<<<<< HEAD
android:name="android.appwidget.provider"
android:resource="@xml/widget_2x_info" />
</receiver>
@ -93,6 +175,16 @@
android:name=".widget.NoteWidgetProvider_4x"
android:exported="true"
android:label="@string/app_widget4x4">
=======
android:name="android.appwidget.provider"
android:resource="@xml/widget_2x_info" />
</receiver>
<receiver
android:name=".widget.NoteWidgetProvider_4x"
android:exported="true"
android:label="@string/app_widget4x4" >
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
@ -100,16 +192,26 @@
</intent-filter>
<meta-data
<<<<<<< HEAD
android:name="android.appwidget.provider"
android:resource="@xml/widget_4x_info" />
</receiver>
<receiver
android:name=".ui.AlarmInitReceiver"
android:exported="true">
=======
android:name="android.appwidget.provider"
android:resource="@xml/widget_4x_info" />
</receiver>
<receiver android:name=".ui.AlarmInitReceiver"
android:exported="true">
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<<<<<<< HEAD
<receiver
android:name=".ui.AlarmReceiver"
android:process=":remote"></receiver>
@ -134,4 +236,36 @@
android:value=".ui.NoteEditActivity" />
</application>
</manifest>
</manifest>
=======
<receiver
android:name="net.micode.notes.ui.AlarmReceiver"
android:process=":remote" >
</receiver>
<activity
android:name=".ui.AlarmAlertActivity"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
</activity>
<activity
android:name="net.micode.notes.ui.NotesPreferenceActivity"
android:label="@string/preferences_title"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Holo.Light" >
</activity>
<service
android:name="net.micode.notes.gtask.remote.GTaskSyncService"
android:exported="false" >
</service>
<meta-data
android:name="android.app.default_searchable"
android:value=".ui.NoteEditActivity" />
</application>
</manifest>
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0

@ -25,7 +25,11 @@ import android.util.Log;
import java.util.HashMap;
<<<<<<< HEAD
public class Contact {//联系人数据库
=======
public class Contact {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static HashMap<String, String> sContactCache;
private static final String TAG = "Contact";

@ -17,7 +17,11 @@
package net.micode.notes.data;
import android.net.Uri;
<<<<<<< HEAD
public class Notes {//便签数据库,用于记录便签相关属性和数据
=======
public class Notes {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static final String AUTHORITY = "micode_notes";
public static final String TAG = "Notes";
public static final int TYPE_NOTE = 0;

@ -27,7 +27,11 @@ import net.micode.notes.data.Notes.DataConstants;
import net.micode.notes.data.Notes.NoteColumns;
<<<<<<< HEAD
public class NotesDatabaseHelper extends SQLiteOpenHelper {//数据库帮助类,用于辅助创建、处理数据库的条目
=======
public class NotesDatabaseHelper extends SQLiteOpenHelper {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String DB_NAME = "note.db";
private static final int DB_VERSION = 4;

@ -35,7 +35,11 @@ import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.data.NotesDatabaseHelper.TABLE;
<<<<<<< HEAD
public class NotesProvider extends ContentProvider {//便签信息提供类
=======
public class NotesProvider extends ContentProvider {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final UriMatcher mMatcher;
private NotesDatabaseHelper mHelper;

@ -20,7 +20,11 @@ import android.database.Cursor;
import org.json.JSONObject;
<<<<<<< HEAD
public abstract class Node {//同步任务的管理结点,用于设置、保存同步动作的信息
=======
public abstract class Node {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static final int SYNC_ACTION_NONE = 0;
public static final int SYNC_ACTION_ADD_REMOTE = 1;

@ -35,7 +35,11 @@ import org.json.JSONException;
import org.json.JSONObject;
<<<<<<< HEAD
public class SqlData {//数据库中基本数据,方法包括读取数据、获取数据库中数据、提交数据到数据库
=======
public class SqlData {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = SqlData.class.getSimpleName();
private static final int INVALID_ID = -99999;

@ -38,7 +38,11 @@ import org.json.JSONObject;
import java.util.ArrayList;
<<<<<<< HEAD
public class SqlNote {//数据库中便签数据,方法包括读取便签内容、从数据库中获取便签数据、设置便签内容、提交便签数据到数据库
=======
public class SqlNote {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = SqlNote.class.getSimpleName();
private static final int INVALID_ID = -99999;

@ -32,7 +32,11 @@ import org.json.JSONException;
import org.json.JSONObject;
<<<<<<< HEAD
public class Task extends Node {//同步任务将创建、更新和同步动作包装成JSON对象用本地和远程的JSON对结点内容进行设置获取同步信息进行本地和远程的同步
=======
public class Task extends Node {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = Task.class.getSimpleName();
private boolean mCompleted;

@ -30,7 +30,11 @@ import org.json.JSONObject;
import java.util.ArrayList;
<<<<<<< HEAD
public class TaskList extends Node {//同步任务列表将Task组织成同步任务列表进行管理
=======
public class TaskList extends Node {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = TaskList.class.getSimpleName();
private int mIndex;

@ -16,7 +16,11 @@
package net.micode.notes.gtask.exception;
<<<<<<< HEAD
public class ActionFailureException extends RuntimeException {//动作失败异常
=======
public class ActionFailureException extends RuntimeException {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final long serialVersionUID = 4425249765923293627L;
public ActionFailureException() {

@ -16,7 +16,11 @@
package net.micode.notes.gtask.exception;
<<<<<<< HEAD
public class NetworkFailureException extends Exception {//网络异常失败
=======
public class NetworkFailureException extends Exception {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final long serialVersionUID = 2107610287180234136L;
public NetworkFailureException() {

@ -63,7 +63,11 @@ public class GTaskASyncTask extends AsyncTask<Void, String, Integer> {
});
}
<<<<<<< HEAD
private void showNotification(int tickerId, String content) {//GTask异步任务方法包括任务同步和取消显示同步任务的进程、通知和结果
=======
private void showNotification(int tickerId, String content) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
PendingIntent pendingIntent;
if (tickerId != R.string.ticker_success) {
pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,

@ -61,7 +61,11 @@ import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
<<<<<<< HEAD
public class GTaskClient {//GTask客户端提供登录Google账户创建任务和任务列表添加和删除结点提交、重置更新、获取任务列表等功能
=======
public class GTaskClient {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = GTaskClient.class.getSimpleName();
private static final String GTASK_URL = "https://mail.google.com/tasks/";

@ -48,7 +48,11 @@ import java.util.Iterator;
import java.util.Map;
<<<<<<< HEAD
public class GTaskManager {//GTask管理者提供同步本地和远端的任务初始化任务列表同步内容、文件夹添加、更新本地和远端结点刷新本地同步任务ID等功能
=======
public class GTaskManager {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = GTaskManager.class.getSimpleName();
public static final int STATE_SUCCESS = 0;

@ -23,7 +23,11 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
<<<<<<< HEAD
public class GTaskSyncService extends Service {//GTask同步服务用于提供同步服务 (开始、取消同步),发送广播
=======
public class GTaskSyncService extends Service {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public final static String ACTION_STRING_NAME = "sync_action_type";
public final static int ACTION_START_SYNC = 0;

@ -15,6 +15,7 @@
*/
package net.micode.notes.model;
<<<<<<< HEAD
import android.content.ContentProviderOperation;//批量的更新、插入、删除数据。
import android.content.ContentProviderResult;//操作的结果
import android.content.ContentUris;//用于添加和获取Uri后面的ID
@ -24,6 +25,17 @@ import android.content.OperationApplicationException;//操作应用程序容错
import android.net.Uri;//表示待操作的数据
import android.os.RemoteException;//远程容错
import android.util.Log;//输出日志,比如说出错、警告等
=======
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.OperationApplicationException;
import android.net.Uri;
import android.os.RemoteException;
import android.util.Log;
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.CallNote;
@ -34,17 +46,25 @@ import net.micode.notes.data.Notes.TextNote;
import java.util.ArrayList;
<<<<<<< HEAD
public class Note {//单个便签项
private ContentValues mNoteDiffValues;
//ContentValues 是Android SQLite库提供的一个类用于存储键值对。在SQLite中通常使用ContentValues来构建要插入到数据库中的行或用于更新现有行的数据。它基本上是一个HashMap其中键是字符串代表列名值是对应要插入或更新的数据。
private NoteData mNoteData;//见下方自定义的NoteData类用于记录便签内容
private static final String TAG = "Note";//定义一个初始化后不可改变的静态变量作为数据库的标记
=======
public class Note {
private ContentValues mNoteDiffValues;
private NoteData mNoteData;
private static final String TAG = "Note";
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
/**
* Create a new note id for adding a new note to databases
*/
public static synchronized long getNewNoteId(Context context, long folderId) {
// Create a new note in the database
ContentValues values = new ContentValues();
<<<<<<< HEAD
long createdTime = System.currentTimeMillis();//获取时间
values.put(NoteColumns.CREATED_DATE, createdTime);//设置创建日期
values.put(NoteColumns.MODIFIED_DATE, createdTime);//设置修改日期
@ -54,6 +74,15 @@ public class Note {//单个便签项
Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values);
//Uri统一资源标识符在Android中用于标识内容提供者中的数据
//将内容提供者对象中的数据插入到由uri指定的位置。
=======
long createdTime = System.currentTimeMillis();
values.put(NoteColumns.CREATED_DATE, createdTime);
values.put(NoteColumns.MODIFIED_DATE, createdTime);
values.put(NoteColumns.TYPE, Notes.TYPE_NOTE);
values.put(NoteColumns.LOCAL_MODIFIED, 1);
values.put(NoteColumns.PARENT_ID, folderId);
Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
long noteId = 0;
try {
@ -61,6 +90,7 @@ public class Note {//单个便签项
} catch (NumberFormatException e) {
Log.e(TAG, "Get note id error :" + e.toString());
noteId = 0;
<<<<<<< HEAD
}//验证noteID是否正确
/*
* try-catch
@ -75,18 +105,29 @@ public class Note {//单个便签项
if (noteId == -1) {
throw new IllegalStateException("Wrong note id:" + noteId);
}//如果验证失败抛出异常
=======
}
if (noteId == -1) {
throw new IllegalStateException("Wrong note id:" + noteId);
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
return noteId;
}
public Note() {
mNoteDiffValues = new ContentValues();
mNoteData = new NoteData();
<<<<<<< HEAD
}//构造函数
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void setNoteValue(String key, String value) {
mNoteDiffValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
<<<<<<< HEAD
}//设置数据库表格的标签属性数据
public void setTextData(String key, String value) {
@ -104,6 +145,25 @@ public class Note {//单个便签项
public void setCallDataId(long id) {
mNoteData.setCallDataId(id);
}//得到电话号码数据的ID
=======
}
public void setTextData(String key, String value) {
mNoteData.setTextData(key, value);
}
public void setTextDataId(long id) {
mNoteData.setTextDataId(id);
}
public long getTextDataId() {
return mNoteData.mTextDataId;
}
public void setCallDataId(long id) {
mNoteData.setCallDataId(id);
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void setCallData(String key, String value) {
mNoteData.setCallData(key, value);
@ -111,38 +171,63 @@ public class Note {//单个便签项
public boolean isLocalModified() {
return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified();
<<<<<<< HEAD
}//判断是否是本地修改
public boolean syncNote(Context context, long noteId) {//同步
=======
}
public boolean syncNote(Context context, long noteId) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (noteId <= 0) {
throw new IllegalArgumentException("Wrong note id:" + noteId);
}
if (!isLocalModified()) {
return true;
<<<<<<< HEAD
}//没修改不需要同步
/*
* In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and
* {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update thenote data info
* LOCAL_MODIFIEDMODIFIED_DATE使
=======
}
/**
* In theory, once data changed, the note should be updated on {@link NoteColumns#LOCAL_MODIFIED} and
* {@link NoteColumns#MODIFIED_DATE}. For data safety, though update note fails, we also update the
* note data info
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
*/
if (context.getContentResolver().update(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), mNoteDiffValues, null,
null) == 0) {
Log.e(TAG, "Update note error, should not happen");
// Do not return, fall through
<<<<<<< HEAD
}//如果笔记更新失败记录日志
mNoteDiffValues.clear();//清除数据库标签属性中的所有内容
=======
}
mNoteDiffValues.clear();
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (mNoteData.isLocalModified()
&& (mNoteData.pushIntoContentResolver(context, noteId) == null)) {
return false;
<<<<<<< HEAD
}//如果笔记内容在本地被修改把笔记内容推送到内容解析器如果失败则返回false
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
return true;
}
<<<<<<< HEAD
private class NoteData {//定义一个基本的便签内容的数据类,主要包含文本数据和电话号码数据
private long mTextDataId;
@ -151,6 +236,16 @@ public class Note {//单个便签项
private long mCallDataId;
private ContentValues mCallDataValues;////电话号码数据
=======
private class NoteData {
private long mTextDataId;
private ContentValues mTextDataValues;
private long mCallDataId;
private ContentValues mCallDataValues;
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = "NoteData";
@ -159,11 +254,19 @@ public class Note {//单个便签项
mCallDataValues = new ContentValues();
mTextDataId = 0;
mCallDataId = 0;
<<<<<<< HEAD
}//构造函数
boolean isLocalModified() {
return mTextDataValues.size() > 0 || mCallDataValues.size() > 0;
}//判断是否是本地修改
=======
}
boolean isLocalModified() {
return mTextDataValues.size() > 0 || mCallDataValues.size() > 0;
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
void setTextDataId(long id) {
if(id <= 0) {
@ -191,12 +294,17 @@ public class Note {//单个便签项
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
}
<<<<<<< HEAD
Uri pushIntoContentResolver(Context context, long noteId) {//将新的数据通过Uri的操作存储到数据库
=======
Uri pushIntoContentResolver(Context context, long noteId) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
/**
* Check for safety
*/
if (noteId <= 0) {
throw new IllegalArgumentException("Wrong note id:" + noteId);
<<<<<<< HEAD
}//判断数据是否合法
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
@ -211,6 +319,19 @@ public class Note {//单个便签项
mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE);
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
mTextDataValues);//向指定的URL插入数据
=======
}
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
ContentProviderOperation.Builder builder = null;
if(mTextDataValues.size() > 0) {
mTextDataValues.put(DataColumns.NOTE_ID, noteId);
if (mTextDataId == 0) {
mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE);
Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI,
mTextDataValues);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
try {
setTextDataId(Long.valueOf(uri.getPathSegments().get(1)));
} catch (NumberFormatException e) {
@ -218,6 +339,7 @@ public class Note {//单个便签项
mTextDataValues.clear();
return null;
}
<<<<<<< HEAD
} else {//如果数据已经存在,更新数据
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
Notes.CONTENT_DATA_URI, mTextDataId));
@ -228,6 +350,18 @@ public class Note {//单个便签项
}
if(mCallDataValues.size() > 0) {//把电话号码数据存入DataColumns
=======
} else {
builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId(
Notes.CONTENT_DATA_URI, mTextDataId));
builder.withValues(mTextDataValues);
operationList.add(builder.build());
}
mTextDataValues.clear();
}
if(mCallDataValues.size() > 0) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mCallDataValues.put(DataColumns.NOTE_ID, noteId);
if (mCallDataId == 0) {
mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE);
@ -252,6 +386,7 @@ public class Note {//单个便签项
if (operationList.size() > 0) {
try {
ContentProviderResult[] results = context.getContentResolver().applyBatch(
<<<<<<< HEAD
Notes.AUTHORITY, operationList);//执行操作列表中的多个操作
return (results == null || results.length == 0 || results[0] == null) ? null
: ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId);
@ -259,6 +394,15 @@ public class Note {//单个便签项
Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
return null;
} catch (OperationApplicationException e) {//OperationApplicationException通常表示应用层操作失败。
=======
Notes.AUTHORITY, operationList);
return (results == null || results.length == 0 || results[0] == null) ? null
: ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId);
} catch (RemoteException e) {
Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
return null;
} catch (OperationApplicationException e) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
return null;
}

@ -32,7 +32,11 @@ import net.micode.notes.data.Notes.TextNote;
import net.micode.notes.tool.ResourceParser.NoteBgResources;
<<<<<<< HEAD
public class WorkingNote {//当前活动便签项
=======
public class WorkingNote {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
// Note for the working note
private Note mNote;
// Note Id
@ -124,14 +128,21 @@ public class WorkingNote {//当前活动便签项
loadNote();
}
<<<<<<< HEAD
// 加载Note
private void loadNote() {
// 通过数据库调用query函数找到第一个条目
=======
private void loadNote() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
Cursor cursor = mContext.getContentResolver().query(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null,
null, null);
<<<<<<< HEAD
// 若存在,储存相应信息
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (cursor != null) {
if (cursor.moveToFirst()) {
mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN);
@ -142,11 +153,15 @@ public class WorkingNote {//当前活动便签项
mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN);
}
cursor.close();
<<<<<<< HEAD
// 若不存在,报错
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
} else {
Log.e(TAG, "No note with id:" + mNoteId);
throw new IllegalArgumentException("Unable to find note with id " + mNoteId);
}
<<<<<<< HEAD
// 加载NoteData
loadNoteData();
}
@ -154,14 +169,25 @@ public class WorkingNote {//当前活动便签项
// 加载NoteData
private void loadNoteData() {
// 通过数据库调用query函数找到第一个条目
=======
loadNoteData();
}
private void loadNoteData() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION,
DataColumns.NOTE_ID + "=?", new String[] {
String.valueOf(mNoteId)
}, null);
<<<<<<< HEAD
// 查到信息不为空
if (cursor != null) {
if (cursor.moveToFirst()) {// 查看第一项是否存在
=======
if (cursor != null) {
if (cursor.moveToFirst()) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
do {
String type = cursor.getString(DATA_MIME_TYPE_COLUMN);
if (DataConstants.NOTE.equals(type)) {
@ -173,18 +199,27 @@ public class WorkingNote {//当前活动便签项
} else {
Log.d(TAG, "Wrong note type with type:" + type);
}
<<<<<<< HEAD
} while (cursor.moveToNext());//查阅所有项,直到为空
}
cursor.close();
// 若不存在,报错
=======
} while (cursor.moveToNext());
}
cursor.close();
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
} else {
Log.e(TAG, "No data with id:" + mNoteId);
throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId);
}
}
<<<<<<< HEAD
// 创建空的Note
// 传参context文件夹id小部件ID背景颜色
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId,
int widgetType, int defaultBgColorId) {
WorkingNote note = new WorkingNote(context, folderId);
@ -194,15 +229,24 @@ public class WorkingNote {//当前活动便签项
return note;
}
<<<<<<< HEAD
//构造函数是私有的。用load函数调用构造函数
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static WorkingNote load(Context context, long id) {
return new WorkingNote(context, id, 0);
}
<<<<<<< HEAD
// 保存Note
public synchronized boolean saveNote() {
if (isWorthSaving()) {//是否值得保存
if (!existInDatabase()) { // 是否存在数据库中
=======
public synchronized boolean saveNote() {
if (isWorthSaving()) {
if (!existInDatabase()) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) {
Log.e(TAG, "Create new note fail with id:" + mNoteId);
return false;
@ -225,14 +269,21 @@ public class WorkingNote {//当前活动便签项
}
}
<<<<<<< HEAD
// 是否在数据库中存在
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public boolean existInDatabase() {
return mNoteId > 0;
}
<<<<<<< HEAD
// 是否值得保存
private boolean isWorthSaving() {
// 被删除,或(不在数据库中 内容为空),或本地已保存过
=======
private boolean isWorthSaving() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent))
|| (existInDatabase() && !mNote.isLocalModified())) {
return false;
@ -241,7 +292,10 @@ public class WorkingNote {//当前活动便签项
}
}
<<<<<<< HEAD
// 便签更新监视
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) {
mNoteSettingStatusListener = l;
}
@ -256,7 +310,10 @@ public class WorkingNote {//当前活动便签项
}
}
<<<<<<< HEAD
// 删除标记
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void markDeleted(boolean mark) {
mIsDeleted = mark;
if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID
@ -265,7 +322,10 @@ public class WorkingNote {//当前活动便签项
}
}
<<<<<<< HEAD
//背景颜色
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void setBgColorId(int id) {
if (id != mBgColorId) {
mBgColorId = id;
@ -286,7 +346,10 @@ public class WorkingNote {//当前活动便签项
}
}
<<<<<<< HEAD
//小部件类型
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void setWidgetType(int type) {
if (type != mWidgetType) {
mWidgetType = type;
@ -294,7 +357,10 @@ public class WorkingNote {//当前活动便签项
}
}
<<<<<<< HEAD
//小部件ID
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void setWidgetId(int id) {
if (id != mWidgetId) {
mWidgetId = id;
@ -363,8 +429,11 @@ public class WorkingNote {//当前活动便签项
return mWidgetType;
}
<<<<<<< HEAD
// 创建接口 NoteSettingChangedListener,便签更新监视
// 为NoteEditActivity提供接口
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public interface NoteSettingChangedListener {
/**
* Called when the background color of current note has just changed

@ -36,7 +36,11 @@ import java.io.IOException;
import java.io.PrintStream;
<<<<<<< HEAD
public class BackupUtils {//备份工具类,用于数据备份读取、显示
=======
public class BackupUtils {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = "BackupUtils";
// Singleton stuff
private static BackupUtils sInstance;

@ -35,7 +35,11 @@ import java.util.ArrayList;
import java.util.HashSet;
<<<<<<< HEAD
public class DataUtils {//便签数据处理工具类,封装如查找、移动、删除数据等操作
=======
public class DataUtils {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static final String TAG = "DataUtils";
public static boolean batchDeleteNotes(ContentResolver resolver, HashSet<Long> ids) {
if (ids == null) {

@ -16,7 +16,11 @@
package net.micode.notes.tool;
<<<<<<< HEAD
public class GTaskStringUtils {//同步中使用的字符串工具类为了jsonObject提供string对象
=======
public class GTaskStringUtils {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public final static String GTASK_JSON_ACTION_ID = "action_id";

@ -22,7 +22,11 @@ import android.preference.PreferenceManager;
import net.micode.notes.R;
import net.micode.notes.ui.NotesPreferenceActivity;
<<<<<<< HEAD
public class ResourceParser {//界面元素的解析工具类利用R.java这个类获取资源供程序调用
=======
public class ResourceParser {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static final int YELLOW = 0;
public static final int BLUE = 1;

@ -40,14 +40,21 @@ import net.micode.notes.tool.DataUtils;
import java.io.IOException;
<<<<<<< HEAD
public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener {//闹铃提醒界面
private long mNoteId;//文本在数据库存储中的ID号
private String mSnippet;//闹钟提示时出现的文本片段
=======
public class AlarmAlertActivity extends Activity implements OnClickListener, OnDismissListener {
private long mNoteId;
private String mSnippet;
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final int SNIPPET_PREW_MAX_LEN = 60;
MediaPlayer mPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
<<<<<<< HEAD
//onCreate 方法是 Activity 生命周期中的一个重要方法,当 Activity 第一次被创建时调用。
//Bundle类型的数据与Map类型的数据相似都是以key-value的形式存储数据的
// Bundle 类型的参数 savedInstanceState是用来保存之前该 Activity 的状态,如果 Activity 之前被销毁(例如由于屏幕旋转)并且现在重新创建,那么 savedInstanceState 将包含之前保存的状态数据。
@ -107,19 +114,58 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
} else {
finish();
//完成闹钟动作
=======
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();
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
}
}
private boolean isScreenOn() {
<<<<<<< HEAD
//判断屏幕是否锁屏,调用系统函数判断,最后返回值是布尔类型
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
//PowerManager: 这是一个Android的系统级服务允许应用程序控制设备的电源状态例如使设备进入睡眠状态或唤醒设备
//getSystemService(): 这是一个Context类的方法用于获取系统级别的服务。在Android中许多核心功能如闹钟、通知、电源管理等都是通过这种方式提供的。
//Context.POWER_SERVICE: 这是一个常量,表示电源管理服务的名称
=======
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
return pm.isScreenOn();
}
private void playAlarmSound() {
<<<<<<< HEAD
////闹钟提示音激发
Uri url = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM);
//调用系统的铃声管理URI得到闹钟提示音
@ -162,6 +208,33 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
e.printStackTrace();
} catch (IOException e) {
//当Java程序无法正常读取或写入数据流时就会抛出IOException。IOException是一个广泛的异常类型它涵盖了各种文件和网络操作中可能出现的错误情况。例如当试图打开不存在的文件或目录或者无法访问文件或目录时会发生IOException。IOException类提供了一些方法来获取有关错误的详细信息例如getMessage()方法返回错误消息的详细描述getCause()方法返回导致IOException的根本原因。
=======
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) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
// TODO Auto-generated catch block
e.printStackTrace();
}
@ -169,6 +242,7 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
private void showActionDialog() {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
<<<<<<< HEAD
//AlertDialog的构造方法全部是Protected的所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。要创建一个AlertDialog就要用到AlertDialog.Builder中的create()方法
dialog.setTitle(R.string.app_name);
//为对话框设置标题
@ -183,10 +257,20 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
//show() 是 Dialog 类的一个方法,用于显示对话框
//setOnDismissListener 是 Dialog 类的一个方法,用于设置对话框关闭时的监听器。
//this 通常指代当前的Activity或Fragment意味着当对话框关闭时会回调当前Activity或Fragment中实现的 onDismiss 方法。
=======
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);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
}
public void onClick(DialogInterface dialog, int which) {
switch (which) {
<<<<<<< HEAD
//用which来选择click后下一步的操作
case DialogInterface.BUTTON_NEGATIVE:
//这是取消操作
@ -202,24 +286,42 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
break;
default:
//这是确定操作
=======
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:
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
break;
}
}
public void onDismiss(DialogInterface dialog) {
<<<<<<< HEAD
//忽略
stopAlarmSound();
//停止闹钟声音
finish();
//完成该动作
=======
stopAlarmSound();
finish();
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
}
private void stopAlarmSound() {
if (mPlayer != null) {
mPlayer.stop();
<<<<<<< HEAD
//停止播放
mPlayer.release();
//释放MediaPlayer对象
=======
mPlayer.release();
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mPlayer = null;
}
}

@ -28,13 +28,20 @@ import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
<<<<<<< HEAD
public class AlarmInitReceiver extends BroadcastReceiver {//闹铃提醒启动消息接收器
=======
public class AlarmInitReceiver extends BroadcastReceiver {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String [] PROJECTION = new String [] {
NoteColumns.ID,
NoteColumns.ALERTED_DATE
};
<<<<<<< HEAD
//对数据库的操作调用标签ID和闹钟时间
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final int COLUMN_ID = 0;
private static final int COLUMN_ALERTED_DATE = 1;
@ -42,6 +49,7 @@ public class AlarmInitReceiver extends BroadcastReceiver {//闹铃提醒启动
@Override
public void onReceive(Context context, Intent intent) {
long currentDate = System.currentTimeMillis();
<<<<<<< HEAD
//System.currentTimeMillis()产生一个当前的毫秒
//这个毫秒其实就是自1970年1月1日0时起的毫秒数
Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, PROJECTION,
@ -72,5 +80,27 @@ public class AlarmInitReceiver extends BroadcastReceiver {//闹铃提醒启动
c.close();//关闭Cursor
}
//这段代码的主要目的是从某个数据库中读取一系列记录的提醒日期并为每个记录设置一个闹钟提醒。当这些日期到达时AlarmReceiver将被触发。
=======
Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI,
PROJECTION,
NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE,
new String[] { String.valueOf(currentDate) },
null);
if (c != null) {
if (c.moveToFirst()) {
do {
long alertDate = c.getLong(COLUMN_ALERTED_DATE);
Intent sender = new Intent(context, AlarmReceiver.class);
sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID)));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0);
AlarmManager alermManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent);
} while (c.moveToNext());
}
c.close();
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
}
}

@ -20,6 +20,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
<<<<<<< HEAD
public class AlarmReceiver extends BroadcastReceiver {//闹铃提醒接收器
@Override
public void onReceive(Context context, Intent intent) {
@ -32,3 +33,13 @@ public class AlarmReceiver extends BroadcastReceiver {//闹铃提醒接收器
}
}
//这是实现alarm这个功能最接近用户层的包基于上面的两个包
=======
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
intent.setClass(context, AlarmAlertActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0

@ -28,8 +28,13 @@ import android.view.View;
import android.widget.FrameLayout;
import android.widget.NumberPicker;
<<<<<<< HEAD
public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
//FrameLayout是布局模板之一所有的子元素全部在屏幕的右上方
=======
public class DateTimePicker extends FrameLayout {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final boolean DEFAULT_ENABLE_STATE = true;
private static final int HOURS_IN_HALF_DAY = 12;
@ -45,15 +50,24 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
private static final int MINUT_SPINNER_MAX_VAL = 59;
private static final int AMPM_SPINNER_MIN_VAL = 0;
private static final int AMPM_SPINNER_MAX_VAL = 1;
<<<<<<< HEAD
//初始化控件
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private final NumberPicker mDateSpinner;
private final NumberPicker mHourSpinner;
private final NumberPicker mMinuteSpinner;
private final NumberPicker mAmPmSpinner;
<<<<<<< HEAD
//NumberPicker是数字选择器
//这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午)
private Calendar mDate;
//定义了Calendar类型的变量mDate用于操作时间
=======
private Calendar mDate;
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK];
private boolean mIsAm;
@ -74,41 +88,64 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
onDateTimeChanged();
}
};
<<<<<<< HEAD
//OnValueChangeListener这是时间改变监听器这里主要是对日期的监听
//将现在日期的值传递给mDateupdateDateControl是同步操作
private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {
//这里是对 小时Hour 的监听
=======
private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
boolean isDateChanged = false;
Calendar cal = Calendar.getInstance();
<<<<<<< HEAD
//声明一个Calendar的变量cal便于后续的操作
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (!mIs24HourView) {
if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) {
cal.setTimeInMillis(mDate.getTimeInMillis());
cal.add(Calendar.DAY_OF_YEAR, 1);
isDateChanged = true;
<<<<<<< HEAD
//这里是对于12小时制时晚上11点和12点交替时对日期的更改
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
} else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) {
cal.setTimeInMillis(mDate.getTimeInMillis());
cal.add(Calendar.DAY_OF_YEAR, -1);
isDateChanged = true;
<<<<<<< HEAD
}//这里是对于12小时制时凌晨11点和12点交替时对日期的更改
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY ||
oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) {
mIsAm = !mIsAm;
updateAmPmControl();
<<<<<<< HEAD
}//这里是对于12小时制时中午11点和12点交替时对AM和PM的更改
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
} else {
if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) {
cal.setTimeInMillis(mDate.getTimeInMillis());
cal.add(Calendar.DAY_OF_YEAR, 1);
isDateChanged = true;
<<<<<<< HEAD
//这里是对于24小时制时晚上11点和12点交替时对日期的更改
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
} else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) {
cal.setTimeInMillis(mDate.getTimeInMillis());
cal.add(Calendar.DAY_OF_YEAR, -1);
isDateChanged = true;
<<<<<<< HEAD
}//这里是对于12小时制时凌晨11点和12点交替时对日期的更改
}
int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY);
@ -117,29 +154,49 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
//通过set函数将新的Hour值传给mDate
onDateTimeChanged();
//判断日期是否改变
=======
}
}
int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY);
mDate.set(Calendar.HOUR_OF_DAY, newHour);
onDateTimeChanged();
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (isDateChanged) {
setCurrentYear(cal.get(Calendar.YEAR));
setCurrentMonth(cal.get(Calendar.MONTH));
setCurrentDay(cal.get(Calendar.DAY_OF_MONTH));
<<<<<<< HEAD
}//更新日期
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
}
};
private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() {
@Override
<<<<<<< HEAD
//这里是对 分钟Minute改变的监听
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
int minValue = mMinuteSpinner.getMinValue();
int maxValue = mMinuteSpinner.getMaxValue();
int offset = 0;
<<<<<<< HEAD
//设置offset作为小时改变的一个记录数据
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (oldVal == maxValue && newVal == minValue) {
offset += 1;
} else if (oldVal == minValue && newVal == maxValue) {
offset -= 1;
}
<<<<<<< HEAD
//如果原值为59新值为0则offset加1
//如果原值为0新值为59则offset减1
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (offset != 0) {
mDate.add(Calendar.HOUR_OF_DAY, offset);
mHourSpinner.setValue(getCurrentHour());
@ -159,7 +216,10 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
};
private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() {
<<<<<<< HEAD
//对AM和PM的监听
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
mIsAm = !mIsAm;
@ -181,6 +241,7 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
public DateTimePicker(Context context) {
this(context, System.currentTimeMillis());
}
<<<<<<< HEAD
//通过对数据库的访问,获取当前的系统时间
public DateTimePicker(Context context, long date) {
this(context, date, DateFormat.is24HourFormat(context));
@ -189,10 +250,20 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
public DateTimePicker(Context context, long date, boolean is24HourView) {
super(context);
//获取系统时间
=======
public DateTimePicker(Context context, long date) {
this(context, date, DateFormat.is24HourFormat(context));
}
public DateTimePicker(Context context, long date, boolean is24HourView) {
super(context);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mDate = Calendar.getInstance();
mInitialising = true;
mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY;
inflate(context, R.layout.datetime_picker, this);
<<<<<<< HEAD
//如果当前Activity里用到别的layout比如对话框layout
//还要设置这个layout上的其他组件的内容就必须用inflate()方法先将对话框的layout找出来
//然后再用findViewById()找到它上面的其它组件
@ -206,13 +277,26 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
mHourSpinner = (NumberPicker) findViewById(R.id.hour);
mHourSpinner.setOnValueChangedListener(mOnHourChangedListener);
=======
mDateSpinner = (NumberPicker) findViewById(R.id.date);
mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL);
mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL);
mDateSpinner.setOnValueChangedListener(mOnDateChangedListener);
mHourSpinner = (NumberPicker) findViewById(R.id.hour);
mHourSpinner.setOnValueChangedListener(mOnHourChangedListener);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mMinuteSpinner = (NumberPicker) findViewById(R.id.minute);
mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL);
mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL);
mMinuteSpinner.setOnLongPressUpdateInterval(100);
mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener);
<<<<<<< HEAD
//这段代码是使用 Android 的 NumberPicker 控件来创建三个数字选择器:一个用于日期、一个用于小时、一个用于分钟。
//这些控件通常用于在一个预定义的范围内选择数字
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings();
mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm);
@ -221,33 +305,56 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
mAmPmSpinner.setDisplayedValues(stringsForAmPm);
mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener);
<<<<<<< HEAD
// update controls to initial state 将控件更新到初始状态
=======
// update controls to initial state
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
updateDateControl();
updateHourControl();
updateAmPmControl();
set24HourView(is24HourView);
<<<<<<< HEAD
// set to current time 设置为当前时间
=======
// set to current time
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
setCurrentDate(date);
setEnabled(isEnabled());
<<<<<<< HEAD
// set the content descriptions 设置内容描述
=======
// set the content descriptions
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mInitialising = false;
}
@Override
<<<<<<< HEAD
public void setEnabled(boolean enabled) {//用于设置时间选择器的启用或禁用状态
if (mIsEnabled == enabled) {
return;
}
super.setEnabled(enabled);//这行代码调用了当前类的父类中的setEnabled方法并传递了enabled参数。这确保了父类的状态也被相应地设置。
=======
public void setEnabled(boolean enabled) {
if (mIsEnabled == enabled) {
return;
}
super.setEnabled(enabled);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mDateSpinner.setEnabled(enabled);
mMinuteSpinner.setEnabled(enabled);
mHourSpinner.setEnabled(enabled);
mAmPmSpinner.setEnabled(enabled);
<<<<<<< HEAD
//分别设置了四个不同的spinner的启用状态
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mIsEnabled = enabled;
}
@ -264,7 +371,11 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
public long getCurrentDateInTimeMillis() {
return mDate.getTimeInMillis();
}
<<<<<<< HEAD
//实现函数——得到当前的秒数
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
/**
* Set the current date
*
@ -275,7 +386,11 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
cal.setTimeInMillis(date);
setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE));
<<<<<<< HEAD
}//实现函数功能——设置当前的时间参数是date
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
/**
* Set the current date
@ -293,7 +408,11 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
setCurrentDay(dayOfMonth);
setCurrentHour(hourOfDay);
setCurrentMinute(minute);
<<<<<<< HEAD
}//实现函数功能——设置当前的时间,参数是各详细的变量
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
/**
* Get current year
@ -470,7 +589,11 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
mDateSpinner.setDisplayedValues(mDateDisplayValues);
mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2);
mDateSpinner.invalidate();
<<<<<<< HEAD
}// 对于星期几的算法
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private void updateAmPmControl() {
if (mIs24HourView) {
@ -480,7 +603,11 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
mAmPmSpinner.setValue(index);
mAmPmSpinner.setVisibility(View.VISIBLE);
}
<<<<<<< HEAD
}// 对于上下午操作的算法
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private void updateHourControl() {
if (mIs24HourView) {
@ -490,13 +617,20 @@ public class DateTimePicker extends FrameLayout {//设置提醒时间的部件
mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW);
mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW);
}
<<<<<<< HEAD
}// 对与小时的算法
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
/**
* Set the callback that indicates the 'Set' button has been pressed.
* @param callback the callback, if null will do nothing
*/
<<<<<<< HEAD
//设置一个回调函数该回调函数会在“Set”按钮被按下时触发。如果用户没有提供回调函数即传递了null则不会执行任何操作。
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) {
mOnDateTimeChangedListener = callback;
}

@ -29,6 +29,7 @@ import android.content.DialogInterface.OnClickListener;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
<<<<<<< HEAD
public class DateTimePickerDialog extends AlertDialog implements OnClickListener {//设置提醒时间的对话框界面
private Calendar mDate = Calendar.getInstance();
@ -39,12 +40,21 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
private DateTimePicker mDateTimePicker;
//DateTimePicker控件控件一般用于让用户可以从日期列表中选择单个值。
//运行时,单击控件边上的下拉箭头,会显示为两个部分:一个下拉列表,一个用于选择日期的
=======
public class DateTimePickerDialog extends AlertDialog implements OnClickListener {
private Calendar mDate = Calendar.getInstance();
private boolean mIs24HourView;
private OnDateTimeSetListener mOnDateTimeSetListener;
private DateTimePicker mDateTimePicker;
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public interface OnDateTimeSetListener {
void OnDateTimeSet(AlertDialog dialog, long date);
}
public DateTimePickerDialog(Context context, long date) {
<<<<<<< HEAD
//对该界面对话框的实例化
super(context);
//对数据库的操作
@ -54,16 +64,28 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() {
public void onDateTimeChanged(DateTimePicker view, int year, int month,
int dayOfMonth, int hourOfDay, int minute) {
=======
super(context);
mDateTimePicker = new DateTimePicker(context);
setView(mDateTimePicker);
mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() {
public void onDateTimeChanged(DateTimePicker view, int year, int month,
int dayOfMonth, int hourOfDay, int minute) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mDate.set(Calendar.YEAR, year);
mDate.set(Calendar.MONTH, month);
mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
mDate.set(Calendar.HOUR_OF_DAY, hourOfDay);
mDate.set(Calendar.MINUTE, minute);
<<<<<<< HEAD
//将视图中的各选项设置为系统当前时间
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
updateTitle(mDate.getTimeInMillis());
}
});
mDate.setTimeInMillis(date);
<<<<<<< HEAD
//得到系统时间
mDate.set(Calendar.SECOND, 0);
//将秒数设置为0
@ -73,6 +95,13 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
//设置按钮
set24HourView(DateFormat.is24HourFormat(this.getContext()));
//时间标准化打印
=======
mDate.set(Calendar.SECOND, 0);
mDateTimePicker.setCurrentDate(mDate.getTimeInMillis());
setButton(context.getString(R.string.datetime_dialog_ok), this);
setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null);
set24HourView(DateFormat.is24HourFormat(this.getContext()));
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
updateTitle(mDate.getTimeInMillis());
}
@ -82,6 +111,7 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) {
mOnDateTimeSetListener = callBack;
<<<<<<< HEAD
}//将时间日期滚动选择控件实例化
private void updateTitle(long date) {
@ -92,11 +122,28 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener
flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR;
setTitle(DateUtils.formatDateTime(this.getContext(), date, flag));
}//android开发中常见日期管理工具类DateUtils按照上下午显示时间
=======
}
private void updateTitle(long date) {
int flag =
DateUtils.FORMAT_SHOW_YEAR |
DateUtils.FORMAT_SHOW_DATE |
DateUtils.FORMAT_SHOW_TIME;
flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR;
setTitle(DateUtils.formatDateTime(this.getContext(), date, flag));
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void onClick(DialogInterface arg0, int arg1) {
if (mOnDateTimeSetListener != null) {
mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis());
}
<<<<<<< HEAD
}//第一个参数arg0是接收到点击事件的对话框
//第二个参数arg1是该对话框上的按钮
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
}

@ -27,7 +27,11 @@ import android.widget.PopupMenu.OnMenuItemClickListener;
import net.micode.notes.R;
<<<<<<< HEAD
public class DropdownMenu {//下拉菜单界面
=======
public class DropdownMenu {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private Button mButton;
private PopupMenu mPopupMenu;
private Menu mMenu;

@ -29,7 +29,11 @@ import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
<<<<<<< HEAD
public class FoldersListAdapter extends CursorAdapter {//文件夹列表链接器(链接数据库)
=======
public class FoldersListAdapter extends CursorAdapter {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static final String [] PROJECTION = {
NoteColumns.ID,
NoteColumns.SNIPPET

@ -73,8 +73,12 @@ import java.util.regex.Pattern;
public class NoteEditActivity extends Activity implements OnClickListener,
<<<<<<< HEAD
NoteSettingChangedListener, OnTextViewChangeListener {//便签编辑activity
//继承了点击监听和两个自定义的监听
=======
NoteSettingChangedListener, OnTextViewChangeListener {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private class HeadViewHolder {
public TextView tvModified;
@ -83,8 +87,13 @@ public class NoteEditActivity extends Activity implements OnClickListener,
public TextView tvAlertDate;
public ImageView ibSetBgColor;
<<<<<<< HEAD
}//TextView是Android中用于显示文本的一个控件ImageView是Android中用于显示图像的控件
//使用Map实现数据存储
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final Map<Integer, Integer> sBgSelectorBtnsMap = new HashMap<Integer, Integer>();
static {
sBgSelectorBtnsMap.put(R.id.iv_bg_yellow, ResourceParser.YELLOW);
@ -92,7 +101,11 @@ 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);
<<<<<<< HEAD
}//put函数是将指定值和指定键相连
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final Map<Integer, Integer> sBgSelectorSelectionMap = new HashMap<Integer, Integer>();
static {
@ -122,6 +135,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private static final String TAG = "NoteEditActivity";
private HeadViewHolder mNoteHeaderHolder;
<<<<<<< HEAD
//View: 这是Android SDK中的一个核心类表示用户界面中的一个矩形区域能够绘制和响应事件。
// 基本上,一个 View 对象可以是一个按钮、一个文本字段、一个图片,或者其他任何可以出现在用户界面上的组件。
private View mHeadViewPanel;//表头
@ -142,6 +156,23 @@ public class NoteEditActivity extends Activity implements OnClickListener,
//它的特点是简单、轻量,并且数据是持久的(即使应用被关闭或设备重启,数据也会保留)
private SharedPreferences mSharedPrefs;
private int mFontSizeId;//字体大小
=======
private View mHeadViewPanel;
private View mNoteBgColorSelector;
private View mFontSizeSelector;
private EditText mNoteEditor;
private View mNoteEditorPanel;
private WorkingNote mWorkingNote;
private SharedPreferences mSharedPrefs;
private int mFontSizeId;
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String PREFERENCE_FONT_SIZE = "pref_font_size";
@ -150,6 +181,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
public static final String TAG_CHECKED = String.valueOf('\u221A');
public static final String TAG_UNCHECKED = String.valueOf('\u25A1');
<<<<<<< HEAD
//LinearLayout: 这是Android SDK中的一个布局类用于创建线性布局。线性布局可以水平或垂直地排列其子视图。
private LinearLayout mEditTextList;
@ -166,6 +198,18 @@ public class NoteEditActivity extends Activity implements OnClickListener,
//设置Activity的UI布局。R.layout.note_edit是一个资源引用它指向一个XML布局文件该文件定义了Activity的UI。
this.setContentView(R.layout.note_edit);
//判断是否是首次创建不是首次创建从Intent中获取数据
=======
private LinearLayout mEditTextList;
private String mUserQuery;
private Pattern mPattern;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.note_edit);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (savedInstanceState == null && !initActivityState(getIntent())) {
finish();
return;
@ -177,6 +221,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
* Current activity may be killed when the memory is low. Once it is killed, for another time
* user load this activity, we should restore the former state
*/
<<<<<<< HEAD
/*
AndroidActivity使
Android
@ -185,6 +230,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
ActivityonSaveInstanceState
ActivityonRestoreInstanceState
*/
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
@ -204,6 +251,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
* If the user specified the {@link Intent#ACTION_VIEW} but not provided with id,
* then jump to the NotesListActivity
*/
<<<<<<< HEAD
//如果用户指定了{@link Intent#ACTION_VIEW}但未提供id则跳转到NotesListActivity。
mWorkingNote = null;
@ -217,10 +265,21 @@ public class NoteEditActivity extends Activity implements OnClickListener,
* Starting from the searched result
*/
//根据键值查找ID
=======
mWorkingNote = null;
if (TextUtils.equals(Intent.ACTION_VIEW, intent.getAction())) {
long noteId = intent.getLongExtra(Intent.EXTRA_UID, 0);
mUserQuery = "";
/**
* Starting from the searched result
*/
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (intent.hasExtra(SearchManager.EXTRA_DATA_KEY)) {
noteId = Long.parseLong(intent.getStringExtra(SearchManager.EXTRA_DATA_KEY));
mUserQuery = intent.getStringExtra(SearchManager.USER_QUERY);
}
<<<<<<< HEAD
//如果ID在数据库中未找到
if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) {
Intent jump = new Intent(this, NotesListActivity.class);
@ -232,6 +291,16 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
//ID在数据库中找到
else {
=======
if (!DataUtils.visibleInNoteDatabase(getContentResolver(), noteId, Notes.TYPE_NOTE)) {
Intent jump = new Intent(this, NotesListActivity.class);
startActivity(jump);
showToast(R.string.error_note_not_exist);
finish();
return false;
} else {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mWorkingNote = WorkingNote.load(this, noteId);
if (mWorkingNote == null) {
Log.e(TAG, "load note failed with note id" + noteId);
@ -239,6 +308,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return false;
}
}
<<<<<<< HEAD
//getWindow().setSoftInputMode() 是 Android 开发中用来控制软键盘显示时窗口如何调整的一个方法。
//SOFT_INPUT_STATE_HIDDEN: 这个常量指定了当活动被创建时,软键盘应该被隐藏。也就是说,当这个活动启动时,输入法键盘不会自动弹出。
//SOFT_INPUT_ADJUST_RESIZE: 这个常量指定了当软键盘显示时,活动窗口应该调整大小,以确保活动的内容不会被软键盘遮挡。
@ -248,6 +318,12 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
//Intent.ACTION_INSERT_OR_EDIT 是 Android 开发中的一个 action它用于启动一个 activity 来插入或编辑一个特定的数据项。
else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) {
=======
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
} else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
// New note
long folderId = intent.getLongExtra(Notes.INTENT_EXTRA_FOLDER_ID, 0);
int widgetId = intent.getIntExtra(Notes.INTENT_EXTRA_WIDGET_ID,
@ -278,7 +354,11 @@ public class NoteEditActivity extends Activity implements OnClickListener,
widgetType, bgResId);
mWorkingNote.convertToCallNote(phoneNumber, callDate);
}
<<<<<<< HEAD
} else {//创建一个新的WorkingNote
=======
} else {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mWorkingNote = WorkingNote.createEmptyNote(this, folderId, widgetId, widgetType,
bgResId);
}
@ -296,13 +376,20 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
@Override
<<<<<<< HEAD
//onResume() Activity即将恢复到前台运行时被调用。Activity已可见可以响应用户的操作
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
protected void onResume() {
super.onResume();
initNoteScreen();
}
<<<<<<< HEAD
private void initNoteScreen() {//对界面的初始化操作
=======
private void initNoteScreen() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mNoteEditor.setTextAppearance(this, TextAppearanceResources
.getTexAppearanceResource(mFontSizeId));
if (mWorkingNote.getCheckListMode() == TextNote.MODE_CHECK_LIST) {
@ -329,12 +416,21 @@ public class NoteEditActivity extends Activity implements OnClickListener,
showAlertHeader();
}
<<<<<<< HEAD
private void showAlertHeader() {//闹钟的显示
if (mWorkingNote.hasClockAlert()) {
long time = System.currentTimeMillis();
if (time > mWorkingNote.getAlertDate()) {//如果系统时间大于了闹钟设置的时间,那么闹钟失效
mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired);
} else {//显示闹钟开启的图标
=======
private void showAlertHeader() {
if (mWorkingNote.hasClockAlert()) {
long time = System.currentTimeMillis();
if (time > mWorkingNote.getAlertDate()) {
mNoteHeaderHolder.tvAlertDate.setText(R.string.note_alert_expired);
} else {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mNoteHeaderHolder.tvAlertDate.setText(DateUtils.getRelativeTimeSpanString(
mWorkingNote.getAlertDate(), time, DateUtils.MINUTE_IN_MILLIS));
}
@ -347,11 +443,14 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
@Override
<<<<<<< HEAD
/*
Activity Activity
Activity Activity onNewIntent(Intent intent)
Intent Activity Intent Activity
*/
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
initActivityState(intent);
@ -368,30 +467,47 @@ public class NoteEditActivity extends Activity implements OnClickListener,
if (!mWorkingNote.existInDatabase()) {
saveNote();
}
<<<<<<< HEAD
//在创建一个新的标签时,先在数据库中匹配
//如果不存在,那么先在数据库中存储
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
outState.putLong(Intent.EXTRA_UID, mWorkingNote.getNoteId());
Log.d(TAG, "Save working note id: " + mWorkingNote.getNoteId() + " onSaveInstanceState");
}
@Override
<<<<<<< HEAD
//MotionEvent是对屏幕触控的传递机制
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public boolean dispatchTouchEvent(MotionEvent ev) {
if (mNoteBgColorSelector.getVisibility() == View.VISIBLE
&& !inRangeOfView(mNoteBgColorSelector, ev)) {
mNoteBgColorSelector.setVisibility(View.GONE);
return true;
<<<<<<< HEAD
}//颜色选择器在屏幕上可见
=======
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (mFontSizeSelector.getVisibility() == View.VISIBLE
&& !inRangeOfView(mFontSizeSelector, ev)) {
mFontSizeSelector.setVisibility(View.GONE);
return true;
<<<<<<< HEAD
}//字体大小选择器在屏幕上可见
return super.dispatchTouchEvent(ev);
}
//对屏幕触控的坐标进行操作
=======
}
return super.dispatchTouchEvent(ev);
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private boolean inRangeOfView(View view, MotionEvent ev) {
int []location = new int[2];
view.getLocationOnScreen(location);
@ -407,7 +523,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private void initResources() {
<<<<<<< HEAD
//对标签各项属性内容的初始化
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mHeadViewPanel = findViewById(R.id.note_title);
mNoteHeaderHolder = new HeadViewHolder();
mNoteHeaderHolder.tvModified = (TextView) findViewById(R.id.tv_modified_date);
@ -418,13 +537,21 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mNoteEditor = (EditText) findViewById(R.id.note_edit_view);
mNoteEditorPanel = findViewById(R.id.sv_note_edit);
mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector);
<<<<<<< HEAD
for (int id : sBgSelectorBtnsMap.keySet()) {//背景颜色
=======
for (int id : sBgSelectorBtnsMap.keySet()) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
ImageView iv = (ImageView) findViewById(id);
iv.setOnClickListener(this);
}
mFontSizeSelector = findViewById(R.id.font_size_selector);
<<<<<<< HEAD
for (int id : sFontSizeBtnsMap.keySet()) {//字体大小
=======
for (int id : sFontSizeBtnsMap.keySet()) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
View view = findViewById(id);
view.setOnClickListener(this);
};
@ -442,8 +569,11 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
@Override
<<<<<<< HEAD
//onPause() 在当前Activity被其他Activity覆盖或锁屏时调用。
//表示Activity正在停止准备从前台返回至后台此时可以做一些停止动画数据存储等工作
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
protected void onPause() {
super.onPause();
if(saveNote()) {
@ -452,7 +582,11 @@ public class NoteEditActivity extends Activity implements OnClickListener,
clearSettingState();
}
<<<<<<< HEAD
private void updateWidget() {//和桌面小工具的同步
=======
private void updateWidget() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
if (mWorkingNote.getWidgetType() == Notes.TYPE_WIDGET_2X) {
intent.setClass(this, NoteWidgetProvider_2x.class);
@ -476,7 +610,11 @@ public class NoteEditActivity extends Activity implements OnClickListener,
if (id == R.id.btn_set_bg_color) {
mNoteBgColorSelector.setVisibility(View.VISIBLE);
findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
<<<<<<< HEAD
View.VISIBLE);
=======
- View.VISIBLE);
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
} else if (sBgSelectorBtnsMap.containsKey(id)) {
findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
View.GONE);
@ -499,7 +637,11 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
@Override
<<<<<<< HEAD
public void onBackPressed() {//返回
=======
public void onBackPressed() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if(clearSettingState()) {
return;
}
@ -519,7 +661,11 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return false;
}
<<<<<<< HEAD
public void onBackgroundColorChanged() {//背景颜色
=======
public void onBackgroundColorChanged() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
View.VISIBLE);
mNoteEditorPanel.setBackgroundResource(mWorkingNote.getBgColorResId());
@ -527,7 +673,11 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
@Override
<<<<<<< HEAD
public boolean onPrepareOptionsMenu(Menu menu) {//准备选择菜单,在选项菜单被显示之前被调用
=======
public boolean onPrepareOptionsMenu(Menu menu) {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (isFinishing()) {
return true;
}
@ -552,6 +702,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
@Override
<<<<<<< HEAD
//动态改变菜单选项内容
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@ -570,11 +721,26 @@ public class NoteEditActivity extends Activity implements OnClickListener,
//添加“YES”按钮
builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {//建立按键监听器
=======
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_new_note:
createNewNote();
break;
case R.id.menu_delete:
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_note));
builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void onClick(DialogInterface dialog, int which) {
deleteCurrentNote();
finish();
}
});
<<<<<<< HEAD
builder.setNegativeButton(android.R.string.cancel, null);//添加“NO”的按钮
builder.show();//显示对话框
break;
@ -598,6 +764,30 @@ public class NoteEditActivity extends Activity implements OnClickListener,
setReminder();
break;
case R.id.menu_delete_remind://删除提醒
=======
builder.setNegativeButton(android.R.string.cancel, null);
builder.show();
break;
case R.id.menu_font_size:
mFontSizeSelector.setVisibility(View.VISIBLE);
findViewById(sFontSelectorSelectionMap.get(mFontSizeId)).setVisibility(View.VISIBLE);
break;
case R.id.menu_list_mode:
mWorkingNote.setCheckListMode(mWorkingNote.getCheckListMode() == 0 ?
TextNote.MODE_CHECK_LIST : 0);
break;
case R.id.menu_share:
getWorkingText();
sendTo(this, mWorkingNote.getContent());
break;
case R.id.menu_send_to_desktop:
sendToDesktop();
break;
case R.id.menu_alert:
setReminder();
break;
case R.id.menu_delete_remind:
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
mWorkingNote.setAlertDate(0, false);
break;
default:
@ -606,23 +796,36 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return true;
}
<<<<<<< HEAD
private void setReminder() {//创建提醒
// 建立修改时间日期的对话框
DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis());
//选择提醒的日期
d.setOnDateTimeSetListener(new OnDateTimeSetListener() {//建立监听器
=======
private void setReminder() {
DateTimePickerDialog d = new DateTimePickerDialog(this, System.currentTimeMillis());
d.setOnDateTimeSetListener(new OnDateTimeSetListener() {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void OnDateTimeSet(AlertDialog dialog, long date) {
mWorkingNote.setAlertDate(date , true);
}
});
<<<<<<< HEAD
d.show();//显示对话框
=======
d.show();
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
}
/**
* Share note to apps that support {@link Intent#ACTION_SEND} action
* and {@text/plain} type
*/
<<<<<<< HEAD
//分享便签
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private void sendTo(Context context, String info) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, info);
@ -630,10 +833,16 @@ public class NoteEditActivity extends Activity implements OnClickListener,
context.startActivity(intent);
}
<<<<<<< HEAD
//创建新便签
private void createNewNote() {
// Firstly, save current editing notes
saveNote();//保存当前便签
=======
private void createNewNote() {
// Firstly, save current editing notes
saveNote();
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
// For safety, start a new NoteEditActivity
finish();
@ -643,7 +852,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
startActivity(intent);
}
<<<<<<< HEAD
//删除当前便签
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private void deleteCurrentNote() {
if (mWorkingNote.existInDatabase()) {
HashSet<Long> ids = new HashSet<Long>();
@ -653,6 +865,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
} else {
Log.d(TAG, "Wrong note id, should not happen");
}
<<<<<<< HEAD
// if (!isSyncMode()) {
// if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) {
// Log.e(TAG, "Delete Note error");
@ -662,22 +875,40 @@ public class NoteEditActivity extends Activity implements OnClickListener,
Log.e(TAG, "Move notes to trash folder error, should not happens");
}
// }
=======
if (!isSyncMode()) {
if (!DataUtils.batchDeleteNotes(getContentResolver(), ids)) {
Log.e(TAG, "Delete Note error");
}
} else {
if (!DataUtils.batchMoveToFolder(getContentResolver(), ids, Notes.ID_TRASH_FOLER)) {
Log.e(TAG, "Move notes to trash folder error, should not happens");
}
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
}
mWorkingNote.markDeleted(true);
}
<<<<<<< HEAD
//判断是否为同步模式
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private boolean isSyncMode() {
return NotesPreferenceActivity.getSyncAccountName(this).trim().length() > 0;
}
<<<<<<< HEAD
//设置提醒时间
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public void onClockAlertChanged(long date, boolean set) {
/**
* User could set clock to an unsaved note, so before setting the
* alert clock, we should save the note first
*/
if (!mWorkingNote.existInDatabase()) {
<<<<<<< HEAD
saveNote();//保存便签
}
if (mWorkingNote.getNoteId() > 0) {
@ -694,6 +925,22 @@ public class NoteEditActivity extends Activity implements OnClickListener,
alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent);
}
} else {//没有运行的便签就报错
=======
saveNote();
}
if (mWorkingNote.getNoteId() > 0) {
Intent intent = new Intent(this, AlarmReceiver.class);
intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId()));
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE));
showAlertHeader();
if(!set) {
alarmManager.cancel(pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, date, pendingIntent);
}
} else {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
/**
* There is the condition that user has input nothing (the note is
* not worthy saving), we have no note id, remind the user that he
@ -753,7 +1000,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
}
<<<<<<< HEAD
//切换至列表模式
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private void switchToListMode(String text) {
mEditTextList.removeAllViews();
String[] items = text.split("\n");
@ -788,7 +1038,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return spannable;
}
<<<<<<< HEAD
//获取列表项
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private View getListItem(String item, int index) {
View view = LayoutInflater.from(this).inflate(R.layout.note_edit_list_item, null);
final NoteEditText edit = (NoteEditText) view.findViewById(R.id.et_edit_text);
@ -869,7 +1122,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return hasChecked;
}
<<<<<<< HEAD
//保存便签
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private boolean saveNote() {
getWorkingText();
boolean saved = mWorkingNote.saveNote();
@ -921,7 +1177,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
}
<<<<<<< HEAD
//编辑小图标的标题
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private String makeShortcutIconTitle(String content) {
content = content.replace(TAG_CHECKED, "");
content = content.replace(TAG_UNCHECKED, "");

@ -37,7 +37,11 @@ import net.micode.notes.R;
import java.util.HashMap;
import java.util.Map;
<<<<<<< HEAD
public class NoteEditText extends EditText {//便签的文本编辑界面
=======
public class NoteEditText extends EditText {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = "NoteEditText";
private int mIndex;
private int mSelectionStartBeforeDelete;

@ -26,7 +26,11 @@ import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.tool.DataUtils;
<<<<<<< HEAD
public class NoteItemData {//便签项数据
=======
public class NoteItemData {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
static final String [] PROJECTION = new String [] {
NoteColumns.ID,
NoteColumns.ALERTED_DATE,

@ -79,7 +79,10 @@ import java.io.InputStreamReader;
import java.util.HashSet;
public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
<<<<<<< HEAD
//主界面,用于实现处理文件夹列表的活动
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
private static final int FOLDER_LIST_QUERY_TOKEN = 1;
@ -474,15 +477,25 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
new AsyncTask<Void, Void, HashSet<AppWidgetAttribute>>() {
protected HashSet<AppWidgetAttribute> doInBackground(Void... unused) {
HashSet<AppWidgetAttribute> widgets = mNotesListAdapter.getSelectedWidget();
<<<<<<< HEAD
if (mCurrentFolderId == Notes.ID_TRASH_FOLER){
// if in trash, really delete notes
=======
if (!isSyncMode()) {
// if not synced, delete notes directly
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter
.getSelectedItemIds())) {
} else {
Log.e(TAG, "Delete notes error, should not happens");
}
} else {
<<<<<<< HEAD
// move notes to trash
=======
// in sync mode, we'll move the deleted note into the trash
// folder
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (!DataUtils.batchMoveToFolder(mContentResolver, mNotesListAdapter
.getSelectedItemIds(), Notes.ID_TRASH_FOLER)) {
Log.e(TAG, "Move notes to trash folder error, should not happens");
@ -516,7 +529,17 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
ids.add(folderId);
HashSet<AppWidgetAttribute> widgets = DataUtils.getFolderNoteWidget(mContentResolver,
folderId);
<<<<<<< HEAD
DataUtils.batchDeleteNotes(mContentResolver, ids);
=======
if (!isSyncMode()) {
// if not synced, delete folder directly
DataUtils.batchDeleteNotes(mContentResolver, ids);
} else {
// in sync mode, we'll move the deleted folder into the trash folder
DataUtils.batchMoveToFolder(mContentResolver, ids, Notes.ID_TRASH_FOLER);
}
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
if (widgets != null) {
for (AppWidgetAttribute widget : widgets) {
if (widget.widgetId != AppWidgetManager.INVALID_APPWIDGET_ID
@ -806,18 +829,25 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
case R.id.menu_search:
onSearchRequested();
break;
<<<<<<< HEAD
case R.id.menu_recyclebin:
recycleBin();
break;
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
default:
break;
}
return true;
}
<<<<<<< HEAD
private void recycleBin() {
Intent intent=new Intent(NotesListActivity.this,RecycleBinActivity.class);
startActivity(intent);
}
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
@Override
public boolean onSearchRequested() {
startSearch(null, false, null /* appData */, false);

@ -31,7 +31,11 @@ import java.util.HashSet;
import java.util.Iterator;
<<<<<<< HEAD
public class NotesListAdapter extends CursorAdapter {//便签列表链接器(链接数据库)
=======
public class NotesListAdapter extends CursorAdapter {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
private static final String TAG = "NotesListAdapter";
private Context mContext;
private HashMap<Integer, Boolean> mSelectedIndex;

@ -48,7 +48,11 @@ import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
<<<<<<< HEAD
public class NotesPreferenceActivity extends PreferenceActivity {//便签同步的设置界面
=======
public class NotesPreferenceActivity extends PreferenceActivity {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static final String PREFERENCE_NAME = "notes_preferences";
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name";

@ -32,7 +32,11 @@ import net.micode.notes.tool.ResourceParser;
import net.micode.notes.ui.NoteEditActivity;
import net.micode.notes.ui.NotesListActivity;
<<<<<<< HEAD
public abstract class NoteWidgetProvider extends AppWidgetProvider {//桌面挂件
=======
public abstract class NoteWidgetProvider extends AppWidgetProvider {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
public static final String [] PROJECTION = new String [] {
NoteColumns.ID,
NoteColumns.BG_COLOR_ID,

@ -24,7 +24,11 @@ import net.micode.notes.data.Notes;
import net.micode.notes.tool.ResourceParser;
<<<<<<< HEAD
public class NoteWidgetProvider_2x extends NoteWidgetProvider {//2倍大小的桌面挂件
=======
public class NoteWidgetProvider_2x extends NoteWidgetProvider {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.update(context, appWidgetManager, appWidgetIds);

@ -24,7 +24,11 @@ import net.micode.notes.data.Notes;
import net.micode.notes.tool.ResourceParser;
<<<<<<< HEAD
public class NoteWidgetProvider_4x extends NoteWidgetProvider {//4倍大小的桌面挂件
=======
public class NoteWidgetProvider_4x extends NoteWidgetProvider {
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.update(context, appWidgetManager, appWidgetIds);

@ -33,8 +33,14 @@
android:id="@+id/menu_setting"
android:title="@string/menu_setting" />
<<<<<<< HEAD
<item android:title="@string/menu_search" />
<item
android:id="@+id/menu_recyclebin"
android:title="@string/menu_recyclebin"/>
=======
<item
android:id="@+id/menu_search"
android:title="@string/menu_search"/>
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
</menu>

@ -110,7 +110,10 @@
<string name="preferences_toast_cannot_change_account">正在同步中,不能修改同步帐号</string>
<string name="preferences_toast_success_set_accout">同步帐号已设置为%1$s</string>
<string name="preferences_bg_random_appear_title">新建便签背景颜色随机</string>
<<<<<<< HEAD
<string name="menu_recyclebin">回收站</string>
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<string name="button_delete">删除</string>
<string name="call_record_folder_name">通话便签</string>
<string name="hint_foler_name">请输入名称</string>

@ -15,7 +15,12 @@
limitations under the License.
-->
<<<<<<< HEAD
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
=======
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<string name="app_name">Notes</string>
<string name="app_widget2x2">Notes 2x2</string>
<string name="app_widget4x4">Notes 4x4</string>
@ -114,6 +119,10 @@
<string name="preferences_toast_cannot_change_account">Cannot change the account because sync is in progress</string>
<string name="preferences_toast_success_set_accout">%1$s has been set as the sync account</string>
<string name="preferences_bg_random_appear_title">New note background color random</string>
<<<<<<< HEAD
=======
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
<string name="button_delete">Delete</string>
<string name="call_record_folder_name">Call notes</string>
<string name="hint_foler_name">Input name</string>
@ -125,6 +134,7 @@
<string name="datetime_dialog_ok">set</string>
<string name="datetime_dialog_cancel">cancel</string>
<plurals name="search_results_title">
<<<<<<< HEAD
<item quantity="one"><xliff:g example="1" id="number">%1$s</xliff:g> result for \"<xliff:g example="???" id="search">%2$s</xliff:g>\"</item>
<!-- Case of 0 or 2 or more results. -->
<item quantity="other"><xliff:g example="15" id="number">%1$s</xliff:g> results for \"<xliff:g example="???" id="search">%2$s</xliff:g>\"</item>
@ -138,4 +148,11 @@
<string name="alert_message_recover" />
=======
<item quantity="one"><xliff:g id="number" example="1">%1$s</xliff:g> result for \"<xliff:g id="search" example="???">%2$s</xliff:g>\"</item>
<!-- Case of 0 or 2 or more results. -->
<item quantity="other"><xliff:g id="number" example="15">%1$s</xliff:g> results for \"<xliff:g id="search" example="???">%2$s</xliff:g>\"</item>
</plurals>
>>>>>>> eb3503841352f4e0b24e8be753535ca4439360d0
</resources>

Loading…
Cancel
Save