From 20ee85dd9eeac34a92a04676a4350051fb8aeeb9 Mon Sep 17 00:00:00 2001 From: mz48ty3wg <2363882464@qq.com> Date: Fri, 7 Apr 2023 14:31:17 +0800 Subject: [PATCH 1/5] ADD file via upload --- ...米便签开源代码的泛读报告.docx | Bin 0 -> 216950 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/小米便签开源代码的泛读报告.docx diff --git a/doc/小米便签开源代码的泛读报告.docx b/doc/小米便签开源代码的泛读报告.docx new file mode 100644 index 0000000000000000000000000000000000000000..78ab019e85790ab2cc59d0d6109c3949c13b7982 GIT binary patch literal 216950 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 Sfy6iu{$+!r&(*-Z!}wo5E8T|x literal 0 HcmV?d00001 From 730ce1f43e671940589e65a3d623cd1e223d71b9 Mon Sep 17 00:00:00 2001 From: sxg <2363882464@qq.com> Date: Thu, 20 Apr 2023 22:18:52 +0800 Subject: [PATCH 2/5] 1 --- two/AlarmAlertActivity.java | 177 +++++++++++++ two/AlarmInitReceiver.java | 66 +++++ two/AlarmReceiver.java | 30 +++ two/BackupUtils.java | 351 ++++++++++++++++++++++++++ two/DataUtils.java | 303 ++++++++++++++++++++++ two/DateTimePicker.java | 490 ++++++++++++++++++++++++++++++++++++ two/GTaskStringUtils.java | 113 +++++++++ two/Note.java | 266 ++++++++++++++++++++ two/ResourceParser.java | 183 ++++++++++++++ two/WorkingNote.java | 377 +++++++++++++++++++++++++++ 10 files changed, 2356 insertions(+) create mode 100644 two/AlarmAlertActivity.java create mode 100644 two/AlarmInitReceiver.java create mode 100644 two/AlarmReceiver.java create mode 100644 two/BackupUtils.java create mode 100644 two/DataUtils.java create mode 100644 two/DateTimePicker.java create mode 100644 two/GTaskStringUtils.java create mode 100644 two/Note.java create mode 100644 two/ResourceParser.java create mode 100644 two/WorkingNote.java diff --git a/two/AlarmAlertActivity.java b/two/AlarmAlertActivity.java new file mode 100644 index 0000000..59cc2fa --- /dev/null +++ b/two/AlarmAlertActivity.java @@ -0,0 +1,177 @@ +/* + * 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. + */ + +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;//便签内容在数据库存储的ID + private String mSnippet;//闹钟出现的内容 + private static final int SNIPPET_PREW_MAX_LEN = 60; + MediaPlayer mPlayer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + /** + * Bundle在Android开发中非常常见,它的作用主要时用于传递数据。 + * Bundle传递的数据包括:string、int、boolean、byte、float、long、double等基本类型或它们对应的数组,也可以是对象或对象数组。 + * 当Bundle传递的是对象或对象数组时,必须实现Serialiable或Parcelable接口。 + */ + + 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();//闹钟完成 + } + } + + private boolean isScreenOn() {//判断屏幕是否锁屏,调用系统函数判断,最后返回值是boolean值(Ture或False) + 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();//开始播放 + /** + * MediaPlayer 类是媒体框架最重要的组成部分之一。 + * 此类的对象能够获取、解码以及播放音频和视频,而且只需极少量设置。它支持多种不同的媒体源 + * 比如本地资源、内部 URI,例如您可能从内容解析器那获取的 URI、外部网址(流式传输) + */ + } 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); + } + /** + * AlertDialog可以在当前的界面上显示一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般是用于提示一些非常重要的内容或者警告信息。 + * 1.创建构造器AlertDialog.Builder的对象; + * 2.通过构造器对象调用setTitle、setMessage、setIcon等方法构造对话框的标题、信息和图标等内容; + * 3.根据需要调用setPositive/Negative/NeutralButton()方法设置正面按钮、负面按钮和中立按钮; + * 4.调用构造器对象的create方法创建AlertDialog对象; + * 5.AlertDialog对象调用show方法,让对话框在界面上显示。 + */ + + public void onClick(DialogInterface dialog, int which) { + switch (which) {//选择click后下一步的操作 + case DialogInterface.BUTTON_NEGATIVE://取消 + Intent intent = new Intent(this, NoteEditActivity.class);//两个类间的数据传输 + intent.setAction(Intent.ACTION_VIEW);//动作属性 + intent.putExtra(Intent.EXTRA_UID, mNoteId);//实现key-value对,EXTRA_UID为key,mNoteId为键 + startActivity(intent);//开始 + break; + default: + break; + } + } + + public void onDismiss(DialogInterface dialog) { + stopAlarmSound();//暂停闹钟声音 + finish(); + } + + private void stopAlarmSound() { + if (mPlayer != null) { + mPlayer.stop();//停止播放 + mPlayer.release();//释放MediaPlayer对象相关的资源 + mPlayer = null; + } + } +} diff --git a/two/AlarmInitReceiver.java b/two/AlarmInitReceiver.java new file mode 100644 index 0000000..7ba989c --- /dev/null +++ b/two/AlarmInitReceiver.java @@ -0,0 +1,66 @@ +/* + * 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. + */ + +package net.micode.notes.ui; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ContentUris; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; + + +public class AlarmInitReceiver extends BroadcastReceiver { + + private static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.ALERTED_DATE + }; + //调用便签ID和闹钟时间 + private static final int COLUMN_ID = 0; + private static final int COLUMN_ALERTED_DATE = 1; + + @Override + public void onReceive(Context context, Intent intent) { + long currentDate = System.currentTimeMillis(); + Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, + PROJECTION, + NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, + new String[] { String.valueOf(currentDate) },//将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(); + }//根据数据库里的闹钟时间创建一个闹钟 + } +} diff --git a/two/AlarmReceiver.java b/two/AlarmReceiver.java new file mode 100644 index 0000000..67a16d5 --- /dev/null +++ b/two/AlarmReceiver.java @@ -0,0 +1,30 @@ +/* + * 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. + */ + +package net.micode.notes.ui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class AlarmReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + intent.setClass(context, AlarmAlertActivity.class);//启动AlarmAlertActivity + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈,所以要新建一个栈装入启动的activity + context.startActivity(intent); + } +}//这是实现alarm这个功能最接近用户层的包,基于AlarmAlertActivity和AlarmInitReceiver \ No newline at end of file diff --git a/two/BackupUtils.java b/two/BackupUtils.java new file mode 100644 index 0000000..ca7c9d9 --- /dev/null +++ b/two/BackupUtils.java @@ -0,0 +1,351 @@ +/* + * 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. + */ + +package net.micode.notes.tool; + +import android.content.Context; +import android.database.Cursor; +import android.os.Environment; +import android.text.TextUtils; +import android.text.format.DateFormat; +import android.util.Log; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; + + +public class BackupUtils { + private static final String TAG = "BackupUtils"; + // Singleton stuff + private static BackupUtils sInstance; + + public static synchronized BackupUtils getInstance(Context context) { + /** + * synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: + *   1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; + *   2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; + *   3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; + *   4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。 + */ + if (sInstance == null) {//如果当前备份不存在,则新建一个 + sInstance = new BackupUtils(context); + } + return sInstance; + } + + /** + * Following states are signs to represents backup or restore + * status + */ + // Currently, the sdcard is not mounted + public static final int STATE_SD_CARD_UNMOUONTED = 0; + // The backup file not exist 备份文件夹不存在 + public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; + // The data is not well formated, may be changed by other programs 数据未被格式化,可能被其他应用修改 + public static final int STATE_DATA_DESTROIED = 2; + // Some run-time exception which causes restore or backup fails 访问超时 + public static final int STATE_SYSTEM_ERROR = 3; + // Backup or restore success 成功储存 + public static final int STATE_SUCCESS = 4; + + private TextExport mTextExport; + + private BackupUtils(Context context) {//初始化函数 + mTextExport = new TextExport(context); + } + + private static boolean externalStorageAvailable() {//检查外部存储功能是否可用 + return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); + } + + public int exportToText() { + return mTextExport.exportToText(); + } + + public String getExportedTextFileName() { + return mTextExport.mFileName; + } + + public String getExportedTextFileDir() { + return mTextExport.mFileDirectory; + } + + private static class TextExport { + private static final String[] NOTE_PROJECTION = { + NoteColumns.ID, + NoteColumns.MODIFIED_DATE, + NoteColumns.SNIPPET, + NoteColumns.TYPE + }; + + private static final int NOTE_COLUMN_ID = 0; + + private static final int NOTE_COLUMN_MODIFIED_DATE = 1; + + private static final int NOTE_COLUMN_SNIPPET = 2; + + private static final String[] DATA_PROJECTION = { + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + private static final int DATA_COLUMN_CONTENT = 0; + + private static final int DATA_COLUMN_MIME_TYPE = 1; + + private static final int DATA_COLUMN_CALL_DATE = 2; + + private static final int DATA_COLUMN_PHONE_NUMBER = 4; + + private final String [] TEXT_FORMAT; + private static final int FORMAT_FOLDER_NAME = 0; + private static final int FORMAT_NOTE_DATE = 1; + private static final int FORMAT_NOTE_CONTENT = 2; + + private Context mContext; + private String mFileName; + private String mFileDirectory; + + public TextExport(Context context) { + TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); + mContext = context; + mFileName = ""; + mFileDirectory = ""; + } + + private String getFormat(int id) {//获取文本的组成部分 + return TEXT_FORMAT[id]; + } + + /** + * Export the folder identified by folder id to text + */ + private void exportFolderToText(String folderId, PrintStream ps) { + // Query notes belong to this folder 通过查询亲代ID是文件夹ID的Note来选出制定ID文件夹下的Note + Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { + folderId + }, null); + + if (notesCursor != null) { + if (notesCursor.moveToFirst()) { + do { + // Print note's last modified date 里面保存了这份Note的最后修改日期 + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = notesCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps);//将便签导出成text文档 + } while (notesCursor.moveToNext()); + } + notesCursor.close(); + } + } + + /** + * Export note identified by id to a print stream + */ + private void exportNoteToText(String noteId, PrintStream ps) { + Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, + DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { + noteId + }, null); + + if (dataCursor != null) {//利用光标来扫描内容,区别为callnote和note两种,靠ps.printline输出 + if (dataCursor.moveToFirst()) { + do { + String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); + if (DataConstants.CALL_NOTE.equals(mimeType)) { + // Print phone number + String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); + long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); + String location = dataCursor.getString(DATA_COLUMN_CONTENT); + + if (!TextUtils.isEmpty(phoneNumber)) {//判断电话号码是否为空字符 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + phoneNumber)); + } + // Print call date 输出拨号日期 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat + .format(mContext.getString(R.string.format_datetime_mdhm), + callDate))); + // Print call attachment location 输出电话号码附件位置 + if (!TextUtils.isEmpty(location)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + location)); + } + } else if (DataConstants.NOTE.equals(mimeType)) { + String content = dataCursor.getString(DATA_COLUMN_CONTENT); + if (!TextUtils.isEmpty(content)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + content)); + } + } + } while (dataCursor.moveToNext()); + } + dataCursor.close(); + } + // print a line separator between note + try { + ps.write(new byte[] { + Character.LINE_SEPARATOR, Character.LETTER_NUMBER + }); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + } + + /** + * Note will be exported as text which is user readable + */ + public int exportToText() {//新建函数,调用exportFolder和exportNote + if (!externalStorageAvailable()) { + Log.d(TAG, "Media was not mounted"); + return STATE_SD_CARD_UNMOUONTED; + } + + PrintStream ps = getExportToTextPrintStream(); + if (ps == null) { + Log.e(TAG, "get print stream error"); + return STATE_SYSTEM_ERROR; + } + // First export folder and its notes 导出文件夹 + Cursor folderCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " + + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); + + if (folderCursor != null) { + if (folderCursor.moveToFirst()) { + do { + // Print folder's name 输出文件夹名称 + String folderName = ""; + if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { + folderName = mContext.getString(R.string.call_record_folder_name); + } else { + folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); + } + if (!TextUtils.isEmpty(folderName)) { + ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); + } + String folderId = folderCursor.getString(NOTE_COLUMN_ID); + exportFolderToText(folderId, ps); + } while (folderCursor.moveToNext()); + } + folderCursor.close(); + } + + // Export notes in root's folder 导出根目录里的便签 + Cursor noteCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID + + "=0", null, null); + + if (noteCursor != null) { + if (noteCursor.moveToFirst()) { + do { + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = noteCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (noteCursor.moveToNext()); + } + noteCursor.close(); + } + ps.close(); + + return STATE_SUCCESS; + } + + /** + * Get a print stream pointed to the file {@generateExportedTextFile} + */ + private PrintStream getExportToTextPrintStream() { + File file = generateFileMountedOnSDcard(mContext, R.string.file_path, + R.string.file_name_txt_format); + if (file == null) { + Log.e(TAG, "create file to exported failed"); + return null; + } + mFileName = file.getName(); + mFileDirectory = mContext.getString(R.string.file_path); + PrintStream ps = null; + try { + FileOutputStream fos = new FileOutputStream(file); + ps = new PrintStream(fos);//将ps输出到特定的文件,目的就是导出到文件 + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (NullPointerException e) { + e.printStackTrace(); + return null; + } + return ps; + } + } + + /** + * Generate the text file to store imported data + */ + private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory());//外部存储路径 + sb.append(context.getString(filePathResId));//文件存储路径 + File filedir = new File(sb.toString());//存储路径信息 + sb.append(context.getString( + fileNameFormatResId, + DateFormat.format(context.getString(R.string.format_date_ymd), + System.currentTimeMillis()))); + File file = new File(sb.toString()); + + try {//若文件不存在,就新建一个 + if (!filedir.exists()) { + filedir.mkdir(); + } + if (!file.exists()) { + file.createNewFile(); + } + return file; + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + return null; + } +} + + diff --git a/two/DataUtils.java b/two/DataUtils.java new file mode 100644 index 0000000..80ef312 --- /dev/null +++ b/two/DataUtils.java @@ -0,0 +1,303 @@ +/* + * 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. + */ + +package net.micode.notes.tool; + +import android.content.ContentProviderOperation; +import android.content.ContentProviderResult; +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.OperationApplicationException; +import android.database.Cursor; +import android.os.RemoteException; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; + +import java.util.ArrayList; +import java.util.HashSet; + + +public class DataUtils { + public static final String TAG = "DataUtils"; + public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) {//删除多个笔记 + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + if (ids.size() == 0) { + Log.d(TAG, "no id is in the hashset"); + return true; + } + + ArrayList operationList = new ArrayList();//任务列表 + for (long id : ids) { + if(id == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Don't delete system folder root"); + continue; + }//如果是根目录,则不删除 + ContentProviderOperation.Builder builder = ContentProviderOperation + .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));//用newDelete实现删除功能 + operationList.add(builder.build()); + } + /** + * 对于这种批量访问提供程序的操作 + * 例如插入大量行或者通过同一个方法调用在多个表中插入行,或者通常以事务(原子操作)的形式跨进程边界执行一组操作 + * 通常可以使用ContentProviderOperation来执行 + */ + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); + //数据库事务,数据库事务是由一组数据库操作序列组成,事务作为一个整体被执行 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.PARENT_ID, desFolderId); + values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); + //更新需要移动的便签,然后用update实现 + } + + public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, + long folderId) { + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + + ArrayList operationList = new ArrayList(); + for (long id : ids) { + ContentProviderOperation.Builder builder = ContentProviderOperation + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));//使用withAppendedId为Uri加上ID + builder.withValue(NoteColumns.PARENT_ID, folderId); + builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); + operationList.add(builder.build()); + }//将IDS里包含的每一列的数据逐个加入到operationList里面,等待最后的批量处理 + + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); + //applyBatch一次性处理一个操作列表 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + /** + * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} + */ + public static int getUserFolderCount(ContentResolver resolver) { + Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { "COUNT(*)" }, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, + null);//筛选条件:源文件不为trash folder + + int count = 0; + if(cursor != null) { + if(cursor.moveToFirst()) { + try { + count = cursor.getInt(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "get folder count failed:" + e.toString()); + } finally { + cursor.close(); + } + } + } + return count; + } + + public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),//通过withAppendedId为Uri加上ID + null, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, + new String [] {String.valueOf(type)}, + null);//查询条件:type适宜,且不属于无用文件夹 + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) {//用getCount判断cursor值是否为空 + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null, + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.SNIPPET + "=?", + new String[] { name }, null);//通过文件名字来查询文件是否存在 + boolean exist = false; + if(cursor != null) { + if(cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { + Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, + NoteColumns.PARENT_ID + "=?", + new String[] { String.valueOf(folderId) }, + null);//查询条件:父ID是传入的文件夹ID + + HashSet set = null; + if (c != null) { + if (c.moveToFirst()) { + set = new HashSet(); + do { + try { + AppWidgetAttribute widget = new AppWidgetAttribute(); + widget.widgetId = c.getInt(0);//0对应NoteColumns.WIDGET_ID + widget.widgetType = c.getInt(1);//1对应NoteColumns.WIDGET_TYPE + set.add(widget); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, e.toString()); + } + } while (c.moveToNext());//查询下一条项目 + } + c.close(); + } + return set; + } + + public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.PHONE_NUMBER }, + CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", + new String [] { String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE }, + null);//通过数据库查询,查询条件是callDate和phoneNumber匹配传入参数的值 + + if (cursor != null && cursor.moveToFirst()) { + try { + return cursor.getString(0);//CallNote.NOTE_ID + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call number fails " + e.toString()); + } finally { + cursor.close(); + } + } + return ""; + } + + public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.NOTE_ID }, + CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" + + CallNote.PHONE_NUMBER + ",?)", + new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, + null);//查询条件:便签ID + + if (cursor != null) { + if (cursor.moveToFirst()) { + try { + return cursor.getLong(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call note id fails " + e.toString()); + } + } + cursor.close(); + } + return 0; + } + + public static String getSnippetById(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, + new String [] { NoteColumns.SNIPPET }, + NoteColumns.ID + "=?", + new String [] { String.valueOf(noteId)}, + null); + + if (cursor != null) { + String snippet = ""; + if (cursor.moveToFirst()) { + snippet = cursor.getString(0); + } + cursor.close(); + return snippet; + } + throw new IllegalArgumentException("Note is not found with id: " + noteId); + } + + public static String getFormattedSnippet(String snippet) {//对字符串进行格式化处理,去掉字符串两头的空格和换行符 + if (snippet != null) { + snippet = snippet.trim(); + int index = snippet.indexOf('\n'); + if (index != -1) { + snippet = snippet.substring(0, index); + } + } + return snippet; + } +} diff --git a/two/DateTimePicker.java b/two/DateTimePicker.java new file mode 100644 index 0000000..813e324 --- /dev/null +++ b/two/DateTimePicker.java @@ -0,0 +1,490 @@ +/* + * 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. + */ + +package net.micode.notes.ui; + +import java.text.DateFormatSymbols; +import java.util.Calendar; + +import net.micode.notes.R; + + +import android.content.Context; +import android.text.format.DateFormat; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.NumberPicker; + +public class DateTimePicker extends FrameLayout { + //初始化控件 + private static final boolean DEFAULT_ENABLE_STATE = true; + + private static final int HOURS_IN_HALF_DAY = 12; + private static final int HOURS_IN_ALL_DAY = 24; + private static final int DAYS_IN_ALL_WEEK = 7; + private static final int DATE_SPINNER_MIN_VAL = 0; + private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; + private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; + private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; + private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; + private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; + private static final int MINUT_SPINNER_MIN_VAL = 0; + 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; + + //设置闹钟时需要选择的变量 + private final NumberPicker mDateSpinner; + private final NumberPicker mHourSpinner; + private final NumberPicker mMinuteSpinner; + private final NumberPicker mAmPmSpinner; + private Calendar mDate;//定义了Calendar类型的变量mDate,用于操作时间 + //Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。 + + private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; + + private boolean mIsAm; + + private boolean mIs24HourView; + + private boolean mIsEnabled = DEFAULT_ENABLE_STATE; + + private boolean mInitialising; + + private OnDateTimeChangedListener mOnDateTimeChangedListener; + + private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); + updateDateControl(); + onDateTimeChanged(); + } + };//OnValueChangeListener,这是时间改变监视器,这里主要是对日期的监视 + //将现在日期的值传递给mDate;updateDateControl是同步操作 + + private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {//监视Hour + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + boolean isDateChanged = false; + Calendar cal = Calendar.getInstance(); + 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;//选择12小时制时,晚上12点之后日期的更改 + } 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; + }//选择12小时制时,凌晨12点之后对日期的更改 + 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(); + }//选择12小时制时,中午12点之后对AM和PM的更改 + } else { + if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true;//选择24小时制时,晚上12点之后日期的更改 + } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true;//选择24小时制时,凌晨12点之后对日期的更改 + } + } + int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY);//通过数字选择器给newHour赋值 + mDate.set(Calendar.HOUR_OF_DAY, newHour);//通过set将Hour值传给mDate + onDateTimeChanged(); + if (isDateChanged) { + setCurrentYear(cal.get(Calendar.YEAR)); + setCurrentMonth(cal.get(Calendar.MONTH)); + setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); + } + } + }; + + private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() {//这里是对分钟改变的监视 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + int minValue = mMinuteSpinner.getMinValue(); + int maxValue = mMinuteSpinner.getMaxValue(); + int offset = 0;//设置offset,作为小时改变的一个记录数据 + if (oldVal == maxValue && newVal == minValue) { + offset += 1; + } else if (oldVal == minValue && newVal == maxValue) { + offset -= 1; + }//如果原来值为59,新值为0,则offset加1 + //如果原来值为0,新值为59,则offset减1 + + if (offset != 0) { + mDate.add(Calendar.HOUR_OF_DAY, offset); + mHourSpinner.setValue(getCurrentHour()); + updateDateControl(); + int newHour = getCurrentHourOfDay(); + if (newHour >= HOURS_IN_HALF_DAY) { + mIsAm = false; + updateAmPmControl(); + } else { + mIsAm = true; + updateAmPmControl(); + } + } + mDate.set(Calendar.MINUTE, newVal); + onDateTimeChanged(); + } + }; + + private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() {//对AM和PM的监视 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mIsAm = !mIsAm; + if (mIsAm) { + mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); + } else { + mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); + } + updateAmPmControl(); + onDateTimeChanged(); + } + }; + + public interface OnDateTimeChangedListener { + void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute); + } + + public DateTimePicker(Context context) { + this(context, System.currentTimeMillis()); + }//获取当前的系统时间 + + public DateTimePicker(Context context, long date) { + this(context, date, DateFormat.is24HourFormat(context)); + }//DateFormat上面函数的得到的数据 + + public DateTimePicker(Context context, long date, boolean is24HourView) { + super(context);//获取系统时间 + mDate = Calendar.getInstance(); + mInitialising = true; + mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; + inflate(context, R.layout.datetime_picker, this); + + 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); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); + mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); + mMinuteSpinner.setOnLongPressUpdateInterval(100); + mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); + + String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); + mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); + mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); + mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); + mAmPmSpinner.setDisplayedValues(stringsForAmPm); + mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); + + // update controls to initial state + updateDateControl(); + updateHourControl(); + updateAmPmControl(); + + set24HourView(is24HourView); + + // set to current time + setCurrentDate(date); + + setEnabled(isEnabled()); + + // set the content descriptions + mInitialising = false; + } + + @Override + public void setEnabled(boolean enabled) { + if (mIsEnabled == enabled) { + return; + } + super.setEnabled(enabled); + mDateSpinner.setEnabled(enabled); + mMinuteSpinner.setEnabled(enabled); + mHourSpinner.setEnabled(enabled); + mAmPmSpinner.setEnabled(enabled); + mIsEnabled = enabled; + } + + @Override + public boolean isEnabled() { + return mIsEnabled; + } + + /** + * Get the current date in millis + * + * @return the current date in millis + */ + public long getCurrentDateInTimeMillis() { + return mDate.getTimeInMillis(); + }//获取当前的秒数 + + /** + * Set the current date + * + * @param date The current date in millis + */ + public void setCurrentDate(long date) { + Calendar cal = Calendar.getInstance(); + 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)); + }//设置当前的日期 + + /** + * Set the current date + * + * @param year The current year + * @param month The current month + * @param dayOfMonth The current dayOfMonth + * @param hourOfDay The current hourOfDay + * @param minute The current minute + */ + public void setCurrentDate(int year, int month, + int dayOfMonth, int hourOfDay, int minute) { + setCurrentYear(year); + setCurrentMonth(month); + setCurrentDay(dayOfMonth); + setCurrentHour(hourOfDay); + setCurrentMinute(minute); + }//设置当前的时间:年月日时分 + + /** + * Get current year + * + * @return The current year + */ + public int getCurrentYear() { + return mDate.get(Calendar.YEAR); + } + + /** + * Set current year + * + * @param year The current year + */ + public void setCurrentYear(int year) { + if (!mInitialising && year == getCurrentYear()) { + return; + } + mDate.set(Calendar.YEAR, year); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current month in the year + * + * @return The current month in the year + */ + public int getCurrentMonth() { + return mDate.get(Calendar.MONTH); + } + + /** + * Set current month in the year + * + * @param month The month in the year + */ + public void setCurrentMonth(int month) { + if (!mInitialising && month == getCurrentMonth()) { + return; + } + mDate.set(Calendar.MONTH, month); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current day of the month + * + * @return The day of the month + */ + public int getCurrentDay() { + return mDate.get(Calendar.DAY_OF_MONTH); + } + + /** + * Set current day of the month + * + * @param dayOfMonth The day of the month + */ + public void setCurrentDay(int dayOfMonth) { + if (!mInitialising && dayOfMonth == getCurrentDay()) { + return; + } + mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current hour in 24 hour mode, in the range (0~23) + * @return The current hour in 24 hour mode + */ + public int getCurrentHourOfDay() { + return mDate.get(Calendar.HOUR_OF_DAY); + } + + private int getCurrentHour() { + if (mIs24HourView){ + return getCurrentHourOfDay(); + } else { + int hour = getCurrentHourOfDay(); + if (hour > HOURS_IN_HALF_DAY) { + return hour - HOURS_IN_HALF_DAY; + } else { + return hour == 0 ? HOURS_IN_HALF_DAY : hour; + } + } + } + + /** + * Set current hour in 24 hour mode, in the range (0~23) + * + * @param hourOfDay + */ + public void setCurrentHour(int hourOfDay) { + if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { + return; + } + mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + if (!mIs24HourView) { + if (hourOfDay >= HOURS_IN_HALF_DAY) { + mIsAm = false; + if (hourOfDay > HOURS_IN_HALF_DAY) { + hourOfDay -= HOURS_IN_HALF_DAY; + } + } else { + mIsAm = true; + if (hourOfDay == 0) { + hourOfDay = HOURS_IN_HALF_DAY; + } + } + updateAmPmControl(); + } + mHourSpinner.setValue(hourOfDay); + onDateTimeChanged(); + } + + /** + * Get currentMinute + * + * @return The Current Minute + */ + public int getCurrentMinute() { + return mDate.get(Calendar.MINUTE); + } + + /** + * Set current minute + */ + public void setCurrentMinute(int minute) { + if (!mInitialising && minute == getCurrentMinute()) { + return; + } + mMinuteSpinner.setValue(minute); + mDate.set(Calendar.MINUTE, minute); + onDateTimeChanged(); + } + + /** + * @return true if this is in 24 hour view else false. + */ + public boolean is24HourView () { + return mIs24HourView; + } + + /** + * Set whether in 24 hour or AM/PM mode. + * + * @param is24HourView True for 24 hour mode. False for AM/PM mode. + */ + public void set24HourView(boolean is24HourView) { + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + int hour = getCurrentHourOfDay(); + updateHourControl(); + setCurrentHour(hour); + updateAmPmControl(); + } + + private void updateDateControl() { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); + mDateSpinner.setDisplayedValues(null); + for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { + cal.add(Calendar.DAY_OF_YEAR, 1); + mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); + } + mDateSpinner.setDisplayedValues(mDateDisplayValues); + mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); + mDateSpinner.invalidate(); + }//确定周几 + + private void updateAmPmControl() { + if (mIs24HourView) { + mAmPmSpinner.setVisibility(View.GONE); + } else { + int index = mIsAm ? Calendar.AM : Calendar.PM; + mAmPmSpinner.setValue(index); + mAmPmSpinner.setVisibility(View.VISIBLE); + } + }//确定AM和PM + + private void updateHourControl() { + if (mIs24HourView) { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); + } else { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); + } + }//计算小时 + + /** + * Set the callback that indicates the 'Set' button has been pressed. + * @param callback the callback, if null will do nothing + */ + public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { + mOnDateTimeChangedListener = callback; + } + + private void onDateTimeChanged() { + if (mOnDateTimeChangedListener != null) { + mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), + getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); + } + } +} diff --git a/two/GTaskStringUtils.java b/two/GTaskStringUtils.java new file mode 100644 index 0000000..344998c --- /dev/null +++ b/two/GTaskStringUtils.java @@ -0,0 +1,113 @@ +/* + * 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. + */ + +package net.micode.notes.tool; + +public class GTaskStringUtils {//定义大量变量,为jsonObject提供Key,把这些定义全部写到一个类里,方便查看管理 + + public final static String GTASK_JSON_ACTION_ID = "action_id"; + + public final static String GTASK_JSON_ACTION_LIST = "action_list"; + + public final static String GTASK_JSON_ACTION_TYPE = "action_type"; + + public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; + + public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; + + public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; + + public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; + + public final static String GTASK_JSON_CREATOR_ID = "creator_id"; + + public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; + + public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; + + public final static String GTASK_JSON_COMPLETED = "completed"; + + public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; + + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; + + public final static String GTASK_JSON_DELETED = "deleted"; + + public final static String GTASK_JSON_DEST_LIST = "dest_list"; + + public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; + + public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; + + public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; + + public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; + + public final static String GTASK_JSON_GET_DELETED = "get_deleted"; + + public final static String GTASK_JSON_ID = "id"; + + public final static String GTASK_JSON_INDEX = "index"; + + public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; + + public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; + + public final static String GTASK_JSON_LIST_ID = "list_id"; + + public final static String GTASK_JSON_LISTS = "lists"; + + public final static String GTASK_JSON_NAME = "name"; + + public final static String GTASK_JSON_NEW_ID = "new_id"; + + public final static String GTASK_JSON_NOTES = "notes"; + + public final static String GTASK_JSON_PARENT_ID = "parent_id"; + + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; + + public final static String GTASK_JSON_RESULTS = "results"; + + public final static String GTASK_JSON_SOURCE_LIST = "source_list"; + + public final static String GTASK_JSON_TASKS = "tasks"; + + public final static String GTASK_JSON_TYPE = "type"; + + public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; + + public final static String GTASK_JSON_TYPE_TASK = "TASK"; + + public final static String GTASK_JSON_USER = "user"; + + public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; + + public final static String FOLDER_DEFAULT = "Default"; + + public final static String FOLDER_CALL_NOTE = "Call_Note"; + + public final static String FOLDER_META = "METADATA"; + + public final static String META_HEAD_GTASK_ID = "meta_gid"; + + public final static String META_HEAD_NOTE = "meta_note"; + + public final static String META_HEAD_DATA = "meta_data"; + + public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; + +} diff --git a/two/Note.java b/two/Note.java new file mode 100644 index 0000000..a1fc706 --- /dev/null +++ b/two/Note.java @@ -0,0 +1,266 @@ +/* + * 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. + */ + +package net.micode.notes.model; +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;//输出日志 + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; + +import java.rmi.RemoteException; +import java.util.ArrayList; + + +public class Note { + private ContentValues mNoteDiffValues; + private NoteData mNoteData; + private static final String TAG = "Note"; + //为数据库添加的新便签创建一个新ID + + public static synchronized long getNewNoteId(Context context, long folderId) { + //在数据库中创建新便签 + ContentValues values = new ContentValues(); + 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); + //ContentResolver用于外部应用(比如输入法等软件)对ContentProvider中的数据进行增删查改等操作 + long noteId = 0; + try { + noteId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + noteId = 0; + }//采用 try catch 语句来捕获输入便签ID异常并处理 + if (noteId == -1) { + throw new IllegalStateException("Wrong note id:" + noteId);//非法状态警告:"ID错误" + } + return noteId; + } + + public Note() { + mNoteDiffValues = new ContentValues(); + mNoteData = new NoteData(); + }//定义两个变量来存储新便签数据,mNoteDiffValues:便签属性、mNoteData:便签数据 + + public void setNoteValue(String key, String value) {//设置便签种类 + mNoteDiffValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + }//新建标签属性的数据 + + public void setTextData(String key, String value) { + mNoteData.setTextData(key, value); + } + //便签文本内容数据 + + public void setTextDataId(long id) { + mNoteData.setTextDataId(id); + } + //文本数据ID + + public long getTextDataId() { + return mNoteData.mTextDataId; + } + //获取文本数据ID + + public void setCallDataId(long id) { + mNoteData.setCallDataId(id); + } + //电话号码数据ID + + public void setCallData(String key, String value) { + mNoteData.setCallData(key, value); + } + //获取电话号码数据ID + + public boolean isLocalModified() { + return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); + }//判断便签是否有修改 + /** + * Boolean变量存储为16位的数值形式,但只能是True或False。 + * 当其他的数值类型转换为Boolean类型时,0变False,其他值变True。当Boolean值转换为其他的数据类型时,False变0,而True变-1 + */ + + public boolean syncNote(Context context, long noteId) { + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + }//修改后的便签ID错误判断;IllegalArgumentException:不合法的参数异常 + + if (!isLocalModified()) { + return true; + } + + /** + * 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 + */ + 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 + } + mNoteDiffValues.clear(); + + if (mNoteData.isLocalModified() + && (mNoteData.pushIntoContentResolver(context, noteId) == null)) { + return false; + } + + return true; + }//判断数据有没有同步 + + private class NoteData {//定义便签内容的数据类:文本数据:ContentValues类;电话号码:ContentValues类 + private long mTextDataId; + + private ContentValues mTextDataValues; + /** + * Contentvalues类只能存储基本类型的数据 + * Contentvalues类中有很多用于存放数据的Put方法,但是这些put方法只会接收基本数据类型的参数,因此存储的时候也就只能存储基本数据类型。 + */ + private long mCallDataId; + + private ContentValues mCallDataValues; + + private static final String TAG = "NoteData"; + + public NoteData() { + mTextDataValues = new ContentValues(); + mCallDataValues = new ContentValues(); + mTextDataId = 0; + mCallDataId = 0; + } + + boolean isLocalModified() {//实现修改便签的函数 + return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; + } + + void setTextDataId(long id) { + if(id <= 0) { + throw new IllegalArgumentException("Text data id should larger than 0"); + } + mTextDataId = id; + } + + void setCallDataId(long id) { + if (id <= 0) { + throw new IllegalArgumentException("Call data id should larger than 0"); + } + mCallDataId = id; + } + + void setCallData(String key, String value) { + mCallDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + void setTextData(String key, String value) { + mTextDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + Uri pushIntoContentResolver(Context context, long noteId) {//将修改的便签数据通过Uri存储到数据库 + /** + * Check for safety + */ + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + } + + ArrayList operationList = new ArrayList(); + 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); + try { + setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new text data fail with noteId" + noteId); + mTextDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mTextDataId)); + builder.withValues(mTextDataValues); + operationList.add(builder.build()); + } + mTextDataValues.clear(); + }//将便签文本数据存储至DataColumns + + if(mCallDataValues.size() > 0) { + mCallDataValues.put(DataColumns.NOTE_ID, noteId); + if (mCallDataId == 0) { + mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, + mCallDataValues); + try { + setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new call data fail with noteId" + noteId); + mCallDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mCallDataId)); + builder.withValues(mCallDataValues); + operationList.add(builder.build()); + } + mCallDataValues.clear(); + }//将便签电话号码数据存储至DataColumns + + if (operationList.size() > 0) { + try { + ContentProviderResult[] results = context.getContentResolver().applyBatch( + 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) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + return null; + } + }//存储异常处理办法 + return null; + } + } +} diff --git a/two/ResourceParser.java b/two/ResourceParser.java new file mode 100644 index 0000000..57c5265 --- /dev/null +++ b/two/ResourceParser.java @@ -0,0 +1,183 @@ +/* + * 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. + */ + +package net.micode.notes.tool; + +import android.content.Context; +import android.preference.PreferenceManager; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesPreferenceActivity; + +public class ResourceParser { + + //背景颜色ID设置 + public static final int YELLOW = 0; + public static final int BLUE = 1; + public static final int WHITE = 2; + public static final int GREEN = 3; + public static final int RED = 4; + + public static final int BG_DEFAULT_COLOR = YELLOW;//默认背景颜色 + + //文本字体大小ID设置 + public static final int TEXT_SMALL = 0; + public static final int TEXT_MEDIUM = 1; + public static final int TEXT_LARGE = 2; + public static final int TEXT_SUPER = 3; + + public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;//默认文本字体大小 + + public static class NoteBgResources { + private final static int [] BG_EDIT_RESOURCES = new int [] { + R.drawable.edit_yellow, + R.drawable.edit_blue, + R.drawable.edit_white, + R.drawable.edit_green, + R.drawable.edit_red + }; + + private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] {//标题颜色 + R.drawable.edit_title_yellow, + R.drawable.edit_title_blue, + R.drawable.edit_title_white, + R.drawable.edit_title_green, + R.drawable.edit_title_red + }; + + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + }//获取并返回背景颜色ID + + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[id]; + }//获取并返回标题颜色ID + } + + public static int getDefaultBgId(Context context) {//获取默认的背景颜色 + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { + return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); + } else { + return BG_DEFAULT_COLOR; + } + } + + public static class NoteItemBgResources { + private final static int [] BG_FIRST_RESOURCES = new int [] { + R.drawable.list_yellow_up, + R.drawable.list_blue_up, + R.drawable.list_white_up, + R.drawable.list_green_up, + R.drawable.list_red_up + }; + + private final static int [] BG_NORMAL_RESOURCES = new int [] { + R.drawable.list_yellow_middle, + R.drawable.list_blue_middle, + R.drawable.list_white_middle, + R.drawable.list_green_middle, + R.drawable.list_red_middle + }; + + private final static int [] BG_LAST_RESOURCES = new int [] { + R.drawable.list_yellow_down, + R.drawable.list_blue_down, + R.drawable.list_white_down, + R.drawable.list_green_down, + R.drawable.list_red_down, + }; + + private final static int [] BG_SINGLE_RESOURCES = new int [] { + R.drawable.list_yellow_single, + R.drawable.list_blue_single, + R.drawable.list_white_single, + R.drawable.list_green_single, + R.drawable.list_red_single + }; + + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + public static int getNoteBgNormalRes(int id) { + return BG_NORMAL_RESOURCES[id]; + } + + public static int getFolderBgRes() { + return R.drawable.list_folder; + } + } + + public static class WidgetBgResources { + private final static int [] BG_2X_RESOURCES = new int [] { + R.drawable.widget_2x_yellow, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, + }; + + public static int getWidget2xBgResource(int id) { + return BG_2X_RESOURCES[id]; + } + + private final static int [] BG_4X_RESOURCES = new int [] { + R.drawable.widget_4x_yellow, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red + }; + + public static int getWidget4xBgResource(int id) { + return BG_4X_RESOURCES[id]; + } + } + + public static class TextAppearanceResources { + private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper + }; + + public static int getTexAppearanceResource(int id) {//容错函数,防止输入的ID大于资源总量,若如此,则自动返回默认的设置结果 + /** + * HACKME: Fix bug of store the resource id in shared preference. + * The id may larger than the length of resources, in this case, + * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} + */ + if (id >= TEXTAPPEARANCE_RESOURCES.length) { + return BG_DEFAULT_FONT_SIZE; + } + return TEXTAPPEARANCE_RESOURCES[id]; + } + + public static int getResourcesSize() { + return TEXTAPPEARANCE_RESOURCES.length; + } + } +} diff --git a/two/WorkingNote.java b/two/WorkingNote.java new file mode 100644 index 0000000..894a7d1 --- /dev/null +++ b/two/WorkingNote.java @@ -0,0 +1,377 @@ +/* + * 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. + */ + +package net.micode.notes.model; + +import android.appwidget.AppWidgetManager; +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; +import android.util.Log; +/** + android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。 + Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("",""); + Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择. + Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息 + Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。 + Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。 + */ + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; +import net.micode.notes.tool.ResourceParser.NoteBgResources; + + +public class WorkingNote { + // Note for the working note + private Note mNote; + // Note Id + private long mNoteId; + // Note content + private String mContent; + // Note mode + private int mMode; + + private long mAlertDate; + + private long mModifiedDate; + + private int mBgColorId; + + private int mWidgetId; + + private int mWidgetType; + + private long mFolderId; + + private Context mContext; + + private static final String TAG = "WorkingNote"; + + private boolean mIsDeleted; + + private NoteSettingChangedListener mNoteSettingStatusListener; + + public static final String[] DATA_PROJECTION = new String[] { + DataColumns.ID, + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + };//新建字符串数组DATA_PROJECTION + + public static final String[] NOTE_PROJECTION = new String[] { + NoteColumns.PARENT_ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + NoteColumns.MODIFIED_DATE + };//新建字符串数组NOTE_PROJECTION + + private static final int DATA_ID_COLUMN = 0; + + private static final int DATA_CONTENT_COLUMN = 1; + + private static final int DATA_MIME_TYPE_COLUMN = 2; + + private static final int DATA_MODE_COLUMN = 3; + + private static final int NOTE_PARENT_ID_COLUMN = 0; + + private static final int NOTE_ALERTED_DATE_COLUMN = 1; + + private static final int NOTE_BG_COLOR_ID_COLUMN = 2; + + private static final int NOTE_WIDGET_ID_COLUMN = 3; + + private static final int NOTE_WIDGET_TYPE_COLUMN = 4; + + private static final int NOTE_MODIFIED_DATE_COLUMN = 5; + + // New note construct + private WorkingNote(Context context, long folderId) { + mContext = context; + mAlertDate = 0; + mModifiedDate = System.currentTimeMillis(); + mFolderId = folderId; + mNote = new Note(); + mNoteId = 0; + mIsDeleted = false; + mMode = 0; + mWidgetType = Notes.TYPE_WIDGET_INVALIDE; + } + + // Existing note construct + private WorkingNote(Context context, long noteId, long folderId) {//构造函数 + mContext = context; + mNoteId = noteId; + mFolderId = folderId; + mIsDeleted = false; + mNote = new Note(); + loadNote(); + } + + private void loadNote() {//加载便签调用query函数找到第一个项目 + Cursor cursor = mContext.getContentResolver().query( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, + null, null); + //query是一个查询参数类,封装了查询条件,分页,排序等功能 + + if (cursor != null) { + if (cursor.moveToFirst()) { + mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); + mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); + mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); + mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); + mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); + }//便签存在时储存信息 + cursor.close(); + } else { + Log.e(TAG, "No note with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note with id " + mNoteId); + }//便签不存在时报错 + loadNoteData(); + } + + private void loadNoteData() {//加载便签数据 + Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, + DataColumns.NOTE_ID + "=?", new String[] { + String.valueOf(mNoteId) + }, null); + + if (cursor != null) {//便签存在 + if (cursor.moveToFirst()) { + do { + String type = cursor.getString(DATA_MIME_TYPE_COLUMN); + if (DataConstants.NOTE.equals(type)) { + mContent = cursor.getString(DATA_CONTENT_COLUMN); + mMode = cursor.getInt(DATA_MODE_COLUMN); + mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); + } else if (DataConstants.CALL_NOTE.equals(type)) { + mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); + } else { + Log.d(TAG, "Wrong note type with type:" + type); + } + } while (cursor.moveToNext()); + }//do-while循环查阅所有信息,直到cursor.moveToNext()值为空 + cursor.close(); + } else { + Log.e(TAG, "No data with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); + } + } + + public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, + int widgetType, int defaultBgColorId) { + WorkingNote note = new WorkingNote(context, folderId); + note.setBgColorId(defaultBgColorId); + note.setWidgetId(widgetId); + note.setWidgetType(widgetType); + return note; + }//创建一个空便签并传输参数:文本,文件夹名称,窗口样式,背景颜色 + + public static WorkingNote load(Context context, long id) { + return new WorkingNote(context, id, 0); + } + + public synchronized boolean saveNote() { + if (isWorthSaving()) {//调用isWorthSaving类 + if (!existInDatabase()) { + if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { + Log.e(TAG, "Create new note fail with id:" + mNoteId); + return false; + } + } + + mNote.syncNote(mContext, mNoteId); + + /** + * Update widget content if there exist any widget of this note + */ + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE + && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged(); + } + return true; + } else { + return false; + } + } + + public boolean existInDatabase() { + return mNoteId > 0; + } + + private boolean isWorthSaving() {//判断便签是否能保存 + if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) + || (existInDatabase() && !mNote.isLocalModified())) {//被删除、内容为空、已经保存过了 + return false; + } else { + return true; + } + } + + public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) {//设置便签的设置列表 + mNoteSettingStatusListener = l; + } + + public void setAlertDate(long date, boolean set) {//设置警报数据 + if (date != mAlertDate) { + mAlertDate = date; + mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate)); + } + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onClockAlertChanged(date, set); + } + } + + public void markDeleted(boolean mark) {//设置删除标记 + mIsDeleted = mark; + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged();//调用mNoteSettingStatusListener + } + } + + public void setBgColorId(int id) {//shezhi背景颜色 + if (id != mBgColorId) { + mBgColorId = id; + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onBackgroundColorChanged(); + } + mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); + } + } + + public void setCheckListMode(int mode) {//设置检查列表模式 + if (mMode != mode) { + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); + } + mMode = mode; + mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); + } + } + + public void setWidgetType(int type) {//设置窗口小部件样式 + if (type != mWidgetType) { + mWidgetType = type; + mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); + } + } + + public void setWidgetId(int id) {//设置窗口小部件ID + if (id != mWidgetId) { + mWidgetId = id; + mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); + } + } + + public void setWorkingText(String text) {//设置WorkingText + if (!TextUtils.equals(mContent, text)) { + mContent = text; + mNote.setTextData(DataColumns.CONTENT, mContent); + } + } + + public void convertToCallNote(String phoneNumber, long callDate) {//转变电话号码的信息:phoneNumber,callDate + mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); + mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); + mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); + } + + public boolean hasClockAlert() {//判断是否有时钟 + return (mAlertDate > 0 ? true : false); + } + + public String getContent() {//获取便签内容 + return mContent; + } + + public long getAlertDate() {//获取警报数据 + return mAlertDate; + } + + public long getModifiedDate() {//获取修改后的数据 + return mModifiedDate; + } + + public int getBgColorResId() {//获取背景颜色ID来源 + return NoteBgResources.getNoteBgResource(mBgColorId); + } + + public int getBgColorId() {//获取背景颜色ID + return mBgColorId; + } + + public int getTitleBgResId() {//获取标题颜色ID + return NoteBgResources.getNoteTitleBgResource(mBgColorId); + } + + public int getCheckListMode() {//获取检查列表模式 + return mMode; + } + + public long getNoteId() {//获取便签ID + return mNoteId; + } + + public long getFolderId() {//获取文件夹ID + return mFolderId; + } + + public int getWidgetId() {//获取窗口小部件ID + return mWidgetId; + } + + public int getWidgetType() {//获取窗口小部件样式 + return mWidgetType; + } + + public interface NoteSettingChangedListener {//创建接口NoteSettingChangedListener,监视便签更改 + /** + * Called when the background color of current note has just changed + */ + void onBackgroundColorChanged(); + + /** + * Called when user set clock + */ + void onClockAlertChanged(long date, boolean set); + + /** + * Call when user create note from widget + */ + void onWidgetChanged(); + + /** + * Call when switch between check list mode and normal mode + * @param oldMode is previous mode before change + * @param newMode is new mode + */ + void onCheckListModeChanged(int oldMode, int newMode); + } +} From 6cf30e6f75bc8529042e7a507e0b22b0e57d4624 Mon Sep 17 00:00:00 2001 From: sxg <2363882464@qq.com> Date: Thu, 20 Apr 2023 22:27:42 +0800 Subject: [PATCH 3/5] 1 --- ...米便签开源代码的泛读报告.docx | Bin 216950 -> 0 bytes two/AlarmAlertActivity.java | 177 ------- two/AlarmInitReceiver.java | 66 --- two/AlarmReceiver.java | 30 -- two/BackupUtils.java | 351 ------------- two/DataUtils.java | 303 ----------- two/DateTimePicker.java | 490 ------------------ two/GTaskStringUtils.java | 113 ---- two/Note.java | 266 ---------- two/ResourceParser.java | 183 ------- two/WorkingNote.java | 377 -------------- 11 files changed, 2356 deletions(-) delete mode 100644 doc/小米便签开源代码的泛读报告.docx delete mode 100644 two/AlarmAlertActivity.java delete mode 100644 two/AlarmInitReceiver.java delete mode 100644 two/AlarmReceiver.java delete mode 100644 two/BackupUtils.java delete mode 100644 two/DataUtils.java delete mode 100644 two/DateTimePicker.java delete mode 100644 two/GTaskStringUtils.java delete mode 100644 two/Note.java delete mode 100644 two/ResourceParser.java delete mode 100644 two/WorkingNote.java diff --git a/doc/小米便签开源代码的泛读报告.docx b/doc/小米便签开源代码的泛读报告.docx deleted file mode 100644 index 78ab019e85790ab2cc59d0d6109c3949c13b7982..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216950 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 Sfy6iu{$+!r&(*-Z!}wo5E8T|x diff --git a/two/AlarmAlertActivity.java b/two/AlarmAlertActivity.java deleted file mode 100644 index 59cc2fa..0000000 --- a/two/AlarmAlertActivity.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * 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. - */ - -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;//便签内容在数据库存储的ID - private String mSnippet;//闹钟出现的内容 - private static final int SNIPPET_PREW_MAX_LEN = 60; - MediaPlayer mPlayer; - - @Override - protected void onCreate(Bundle savedInstanceState) { - /** - * Bundle在Android开发中非常常见,它的作用主要时用于传递数据。 - * Bundle传递的数据包括:string、int、boolean、byte、float、long、double等基本类型或它们对应的数组,也可以是对象或对象数组。 - * 当Bundle传递的是对象或对象数组时,必须实现Serialiable或Parcelable接口。 - */ - - 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();//闹钟完成 - } - } - - private boolean isScreenOn() {//判断屏幕是否锁屏,调用系统函数判断,最后返回值是boolean值(Ture或False) - 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();//开始播放 - /** - * MediaPlayer 类是媒体框架最重要的组成部分之一。 - * 此类的对象能够获取、解码以及播放音频和视频,而且只需极少量设置。它支持多种不同的媒体源 - * 比如本地资源、内部 URI,例如您可能从内容解析器那获取的 URI、外部网址(流式传输) - */ - } 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); - } - /** - * AlertDialog可以在当前的界面上显示一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般是用于提示一些非常重要的内容或者警告信息。 - * 1.创建构造器AlertDialog.Builder的对象; - * 2.通过构造器对象调用setTitle、setMessage、setIcon等方法构造对话框的标题、信息和图标等内容; - * 3.根据需要调用setPositive/Negative/NeutralButton()方法设置正面按钮、负面按钮和中立按钮; - * 4.调用构造器对象的create方法创建AlertDialog对象; - * 5.AlertDialog对象调用show方法,让对话框在界面上显示。 - */ - - public void onClick(DialogInterface dialog, int which) { - switch (which) {//选择click后下一步的操作 - case DialogInterface.BUTTON_NEGATIVE://取消 - Intent intent = new Intent(this, NoteEditActivity.class);//两个类间的数据传输 - intent.setAction(Intent.ACTION_VIEW);//动作属性 - intent.putExtra(Intent.EXTRA_UID, mNoteId);//实现key-value对,EXTRA_UID为key,mNoteId为键 - startActivity(intent);//开始 - break; - default: - break; - } - } - - public void onDismiss(DialogInterface dialog) { - stopAlarmSound();//暂停闹钟声音 - finish(); - } - - private void stopAlarmSound() { - if (mPlayer != null) { - mPlayer.stop();//停止播放 - mPlayer.release();//释放MediaPlayer对象相关的资源 - mPlayer = null; - } - } -} diff --git a/two/AlarmInitReceiver.java b/two/AlarmInitReceiver.java deleted file mode 100644 index 7ba989c..0000000 --- a/two/AlarmInitReceiver.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.ui; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.ContentUris; -import android.content.Context; -import android.content.Intent; -import android.database.Cursor; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.NoteColumns; - - -public class AlarmInitReceiver extends BroadcastReceiver { - - private static final String [] PROJECTION = new String [] { - NoteColumns.ID, - NoteColumns.ALERTED_DATE - }; - //调用便签ID和闹钟时间 - private static final int COLUMN_ID = 0; - private static final int COLUMN_ALERTED_DATE = 1; - - @Override - public void onReceive(Context context, Intent intent) { - long currentDate = System.currentTimeMillis(); - Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, - PROJECTION, - NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, - new String[] { String.valueOf(currentDate) },//将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(); - }//根据数据库里的闹钟时间创建一个闹钟 - } -} diff --git a/two/AlarmReceiver.java b/two/AlarmReceiver.java deleted file mode 100644 index 67a16d5..0000000 --- a/two/AlarmReceiver.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.ui; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -public class AlarmReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - intent.setClass(context, AlarmAlertActivity.class);//启动AlarmAlertActivity - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈,所以要新建一个栈装入启动的activity - context.startActivity(intent); - } -}//这是实现alarm这个功能最接近用户层的包,基于AlarmAlertActivity和AlarmInitReceiver \ No newline at end of file diff --git a/two/BackupUtils.java b/two/BackupUtils.java deleted file mode 100644 index ca7c9d9..0000000 --- a/two/BackupUtils.java +++ /dev/null @@ -1,351 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.tool; - -import android.content.Context; -import android.database.Cursor; -import android.os.Environment; -import android.text.TextUtils; -import android.text.format.DateFormat; -import android.util.Log; - -import net.micode.notes.R; -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.DataConstants; -import net.micode.notes.data.Notes.NoteColumns; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; - - -public class BackupUtils { - private static final String TAG = "BackupUtils"; - // Singleton stuff - private static BackupUtils sInstance; - - public static synchronized BackupUtils getInstance(Context context) { - /** - * synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: - *   1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; - *   2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; - *   3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; - *   4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。 - */ - if (sInstance == null) {//如果当前备份不存在,则新建一个 - sInstance = new BackupUtils(context); - } - return sInstance; - } - - /** - * Following states are signs to represents backup or restore - * status - */ - // Currently, the sdcard is not mounted - public static final int STATE_SD_CARD_UNMOUONTED = 0; - // The backup file not exist 备份文件夹不存在 - public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; - // The data is not well formated, may be changed by other programs 数据未被格式化,可能被其他应用修改 - public static final int STATE_DATA_DESTROIED = 2; - // Some run-time exception which causes restore or backup fails 访问超时 - public static final int STATE_SYSTEM_ERROR = 3; - // Backup or restore success 成功储存 - public static final int STATE_SUCCESS = 4; - - private TextExport mTextExport; - - private BackupUtils(Context context) {//初始化函数 - mTextExport = new TextExport(context); - } - - private static boolean externalStorageAvailable() {//检查外部存储功能是否可用 - return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); - } - - public int exportToText() { - return mTextExport.exportToText(); - } - - public String getExportedTextFileName() { - return mTextExport.mFileName; - } - - public String getExportedTextFileDir() { - return mTextExport.mFileDirectory; - } - - private static class TextExport { - private static final String[] NOTE_PROJECTION = { - NoteColumns.ID, - NoteColumns.MODIFIED_DATE, - NoteColumns.SNIPPET, - NoteColumns.TYPE - }; - - private static final int NOTE_COLUMN_ID = 0; - - private static final int NOTE_COLUMN_MODIFIED_DATE = 1; - - private static final int NOTE_COLUMN_SNIPPET = 2; - - private static final String[] DATA_PROJECTION = { - DataColumns.CONTENT, - DataColumns.MIME_TYPE, - DataColumns.DATA1, - DataColumns.DATA2, - DataColumns.DATA3, - DataColumns.DATA4, - }; - - private static final int DATA_COLUMN_CONTENT = 0; - - private static final int DATA_COLUMN_MIME_TYPE = 1; - - private static final int DATA_COLUMN_CALL_DATE = 2; - - private static final int DATA_COLUMN_PHONE_NUMBER = 4; - - private final String [] TEXT_FORMAT; - private static final int FORMAT_FOLDER_NAME = 0; - private static final int FORMAT_NOTE_DATE = 1; - private static final int FORMAT_NOTE_CONTENT = 2; - - private Context mContext; - private String mFileName; - private String mFileDirectory; - - public TextExport(Context context) { - TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); - mContext = context; - mFileName = ""; - mFileDirectory = ""; - } - - private String getFormat(int id) {//获取文本的组成部分 - return TEXT_FORMAT[id]; - } - - /** - * Export the folder identified by folder id to text - */ - private void exportFolderToText(String folderId, PrintStream ps) { - // Query notes belong to this folder 通过查询亲代ID是文件夹ID的Note来选出制定ID文件夹下的Note - Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, - NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { - folderId - }, null); - - if (notesCursor != null) { - if (notesCursor.moveToFirst()) { - do { - // Print note's last modified date 里面保存了这份Note的最后修改日期 - ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( - mContext.getString(R.string.format_datetime_mdhm), - notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // Query data belong to this note - String noteId = notesCursor.getString(NOTE_COLUMN_ID); - exportNoteToText(noteId, ps);//将便签导出成text文档 - } while (notesCursor.moveToNext()); - } - notesCursor.close(); - } - } - - /** - * Export note identified by id to a print stream - */ - private void exportNoteToText(String noteId, PrintStream ps) { - Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, - DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { - noteId - }, null); - - if (dataCursor != null) {//利用光标来扫描内容,区别为callnote和note两种,靠ps.printline输出 - if (dataCursor.moveToFirst()) { - do { - String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); - if (DataConstants.CALL_NOTE.equals(mimeType)) { - // Print phone number - String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); - long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); - String location = dataCursor.getString(DATA_COLUMN_CONTENT); - - if (!TextUtils.isEmpty(phoneNumber)) {//判断电话号码是否为空字符 - ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), - phoneNumber)); - } - // Print call date 输出拨号日期 - ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat - .format(mContext.getString(R.string.format_datetime_mdhm), - callDate))); - // Print call attachment location 输出电话号码附件位置 - if (!TextUtils.isEmpty(location)) { - ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), - location)); - } - } else if (DataConstants.NOTE.equals(mimeType)) { - String content = dataCursor.getString(DATA_COLUMN_CONTENT); - if (!TextUtils.isEmpty(content)) { - ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), - content)); - } - } - } while (dataCursor.moveToNext()); - } - dataCursor.close(); - } - // print a line separator between note - try { - ps.write(new byte[] { - Character.LINE_SEPARATOR, Character.LETTER_NUMBER - }); - } catch (IOException e) { - Log.e(TAG, e.toString()); - } - } - - /** - * Note will be exported as text which is user readable - */ - public int exportToText() {//新建函数,调用exportFolder和exportNote - if (!externalStorageAvailable()) { - Log.d(TAG, "Media was not mounted"); - return STATE_SD_CARD_UNMOUONTED; - } - - PrintStream ps = getExportToTextPrintStream(); - if (ps == null) { - Log.e(TAG, "get print stream error"); - return STATE_SYSTEM_ERROR; - } - // First export folder and its notes 导出文件夹 - Cursor folderCursor = mContext.getContentResolver().query( - Notes.CONTENT_NOTE_URI, - NOTE_PROJECTION, - "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " - + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " - + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); - - if (folderCursor != null) { - if (folderCursor.moveToFirst()) { - do { - // Print folder's name 输出文件夹名称 - String folderName = ""; - if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { - folderName = mContext.getString(R.string.call_record_folder_name); - } else { - folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); - } - if (!TextUtils.isEmpty(folderName)) { - ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); - } - String folderId = folderCursor.getString(NOTE_COLUMN_ID); - exportFolderToText(folderId, ps); - } while (folderCursor.moveToNext()); - } - folderCursor.close(); - } - - // Export notes in root's folder 导出根目录里的便签 - Cursor noteCursor = mContext.getContentResolver().query( - Notes.CONTENT_NOTE_URI, - NOTE_PROJECTION, - NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID - + "=0", null, null); - - if (noteCursor != null) { - if (noteCursor.moveToFirst()) { - do { - ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( - mContext.getString(R.string.format_datetime_mdhm), - noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); - // Query data belong to this note - String noteId = noteCursor.getString(NOTE_COLUMN_ID); - exportNoteToText(noteId, ps); - } while (noteCursor.moveToNext()); - } - noteCursor.close(); - } - ps.close(); - - return STATE_SUCCESS; - } - - /** - * Get a print stream pointed to the file {@generateExportedTextFile} - */ - private PrintStream getExportToTextPrintStream() { - File file = generateFileMountedOnSDcard(mContext, R.string.file_path, - R.string.file_name_txt_format); - if (file == null) { - Log.e(TAG, "create file to exported failed"); - return null; - } - mFileName = file.getName(); - mFileDirectory = mContext.getString(R.string.file_path); - PrintStream ps = null; - try { - FileOutputStream fos = new FileOutputStream(file); - ps = new PrintStream(fos);//将ps输出到特定的文件,目的就是导出到文件 - } catch (FileNotFoundException e) { - e.printStackTrace(); - return null; - } catch (NullPointerException e) { - e.printStackTrace(); - return null; - } - return ps; - } - } - - /** - * Generate the text file to store imported data - */ - private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { - StringBuilder sb = new StringBuilder(); - sb.append(Environment.getExternalStorageDirectory());//外部存储路径 - sb.append(context.getString(filePathResId));//文件存储路径 - File filedir = new File(sb.toString());//存储路径信息 - sb.append(context.getString( - fileNameFormatResId, - DateFormat.format(context.getString(R.string.format_date_ymd), - System.currentTimeMillis()))); - File file = new File(sb.toString()); - - try {//若文件不存在,就新建一个 - if (!filedir.exists()) { - filedir.mkdir(); - } - if (!file.exists()) { - file.createNewFile(); - } - return file; - } catch (SecurityException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - return null; - } -} - - diff --git a/two/DataUtils.java b/two/DataUtils.java deleted file mode 100644 index 80ef312..0000000 --- a/two/DataUtils.java +++ /dev/null @@ -1,303 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.tool; - -import android.content.ContentProviderOperation; -import android.content.ContentProviderResult; -import android.content.ContentResolver; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.OperationApplicationException; -import android.database.Cursor; -import android.os.RemoteException; -import android.util.Log; - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.CallNote; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; - -import java.util.ArrayList; -import java.util.HashSet; - - -public class DataUtils { - public static final String TAG = "DataUtils"; - public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) {//删除多个笔记 - if (ids == null) { - Log.d(TAG, "the ids is null"); - return true; - } - if (ids.size() == 0) { - Log.d(TAG, "no id is in the hashset"); - return true; - } - - ArrayList operationList = new ArrayList();//任务列表 - for (long id : ids) { - if(id == Notes.ID_ROOT_FOLDER) { - Log.e(TAG, "Don't delete system folder root"); - continue; - }//如果是根目录,则不删除 - ContentProviderOperation.Builder builder = ContentProviderOperation - .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));//用newDelete实现删除功能 - operationList.add(builder.build()); - } - /** - * 对于这种批量访问提供程序的操作 - * 例如插入大量行或者通过同一个方法调用在多个表中插入行,或者通常以事务(原子操作)的形式跨进程边界执行一组操作 - * 通常可以使用ContentProviderOperation来执行 - */ - try { - ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); - //数据库事务,数据库事务是由一组数据库操作序列组成,事务作为一个整体被执行 - if (results == null || results.length == 0 || results[0] == null) { - Log.d(TAG, "delete notes failed, ids:" + ids.toString()); - return false; - } - return true; - } catch (RemoteException e) { - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); - } catch (OperationApplicationException e) { - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); - } - return false; - } - - public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { - ContentValues values = new ContentValues(); - values.put(NoteColumns.PARENT_ID, desFolderId); - values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); - values.put(NoteColumns.LOCAL_MODIFIED, 1); - resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); - //更新需要移动的便签,然后用update实现 - } - - public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, - long folderId) { - if (ids == null) { - Log.d(TAG, "the ids is null"); - return true; - } - - ArrayList operationList = new ArrayList(); - for (long id : ids) { - ContentProviderOperation.Builder builder = ContentProviderOperation - .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));//使用withAppendedId为Uri加上ID - builder.withValue(NoteColumns.PARENT_ID, folderId); - builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); - operationList.add(builder.build()); - }//将IDS里包含的每一列的数据逐个加入到operationList里面,等待最后的批量处理 - - try { - ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); - //applyBatch一次性处理一个操作列表 - if (results == null || results.length == 0 || results[0] == null) { - Log.d(TAG, "delete notes failed, ids:" + ids.toString()); - return false; - } - return true; - } catch (RemoteException e) { - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); - } catch (OperationApplicationException e) { - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); - } - return false; - } - - /** - * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} - */ - public static int getUserFolderCount(ContentResolver resolver) { - Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, - new String[] { "COUNT(*)" }, - NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?", - new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, - null);//筛选条件:源文件不为trash folder - - int count = 0; - if(cursor != null) { - if(cursor.moveToFirst()) { - try { - count = cursor.getInt(0); - } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "get folder count failed:" + e.toString()); - } finally { - cursor.close(); - } - } - } - return count; - } - - public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),//通过withAppendedId为Uri加上ID - null, - NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, - new String [] {String.valueOf(type)}, - null);//查询条件:type适宜,且不属于无用文件夹 - - boolean exist = false; - if (cursor != null) { - if (cursor.getCount() > 0) {//用getCount判断cursor值是否为空 - exist = true; - } - cursor.close(); - } - return exist; - } - - public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), - null, null, null, null); - - boolean exist = false; - if (cursor != null) { - if (cursor.getCount() > 0) { - exist = true; - } - cursor.close(); - } - return exist; - } - - public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { - Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), - null, null, null, null); - - boolean exist = false; - if (cursor != null) { - if (cursor.getCount() > 0) { - exist = true; - } - cursor.close(); - } - return exist; - } - - public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { - Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null, - NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + - " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + - " AND " + NoteColumns.SNIPPET + "=?", - new String[] { name }, null);//通过文件名字来查询文件是否存在 - boolean exist = false; - if(cursor != null) { - if(cursor.getCount() > 0) { - exist = true; - } - cursor.close(); - } - return exist; - } - - public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { - Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, - new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, - NoteColumns.PARENT_ID + "=?", - new String[] { String.valueOf(folderId) }, - null);//查询条件:父ID是传入的文件夹ID - - HashSet set = null; - if (c != null) { - if (c.moveToFirst()) { - set = new HashSet(); - do { - try { - AppWidgetAttribute widget = new AppWidgetAttribute(); - widget.widgetId = c.getInt(0);//0对应NoteColumns.WIDGET_ID - widget.widgetType = c.getInt(1);//1对应NoteColumns.WIDGET_TYPE - set.add(widget); - } catch (IndexOutOfBoundsException e) { - Log.e(TAG, e.toString()); - } - } while (c.moveToNext());//查询下一条项目 - } - c.close(); - } - return set; - } - - public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { - Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, - new String [] { CallNote.PHONE_NUMBER }, - CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", - new String [] { String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE }, - null);//通过数据库查询,查询条件是callDate和phoneNumber匹配传入参数的值 - - if (cursor != null && cursor.moveToFirst()) { - try { - return cursor.getString(0);//CallNote.NOTE_ID - } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "Get call number fails " + e.toString()); - } finally { - cursor.close(); - } - } - return ""; - } - - public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { - Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, - new String [] { CallNote.NOTE_ID }, - CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" - + CallNote.PHONE_NUMBER + ",?)", - new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, - null);//查询条件:便签ID - - if (cursor != null) { - if (cursor.moveToFirst()) { - try { - return cursor.getLong(0); - } catch (IndexOutOfBoundsException e) { - Log.e(TAG, "Get call note id fails " + e.toString()); - } - } - cursor.close(); - } - return 0; - } - - public static String getSnippetById(ContentResolver resolver, long noteId) { - Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, - new String [] { NoteColumns.SNIPPET }, - NoteColumns.ID + "=?", - new String [] { String.valueOf(noteId)}, - null); - - if (cursor != null) { - String snippet = ""; - if (cursor.moveToFirst()) { - snippet = cursor.getString(0); - } - cursor.close(); - return snippet; - } - throw new IllegalArgumentException("Note is not found with id: " + noteId); - } - - public static String getFormattedSnippet(String snippet) {//对字符串进行格式化处理,去掉字符串两头的空格和换行符 - if (snippet != null) { - snippet = snippet.trim(); - int index = snippet.indexOf('\n'); - if (index != -1) { - snippet = snippet.substring(0, index); - } - } - return snippet; - } -} diff --git a/two/DateTimePicker.java b/two/DateTimePicker.java deleted file mode 100644 index 813e324..0000000 --- a/two/DateTimePicker.java +++ /dev/null @@ -1,490 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.ui; - -import java.text.DateFormatSymbols; -import java.util.Calendar; - -import net.micode.notes.R; - - -import android.content.Context; -import android.text.format.DateFormat; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.NumberPicker; - -public class DateTimePicker extends FrameLayout { - //初始化控件 - private static final boolean DEFAULT_ENABLE_STATE = true; - - private static final int HOURS_IN_HALF_DAY = 12; - private static final int HOURS_IN_ALL_DAY = 24; - private static final int DAYS_IN_ALL_WEEK = 7; - private static final int DATE_SPINNER_MIN_VAL = 0; - private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; - private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; - private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; - private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; - private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; - private static final int MINUT_SPINNER_MIN_VAL = 0; - 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; - - //设置闹钟时需要选择的变量 - private final NumberPicker mDateSpinner; - private final NumberPicker mHourSpinner; - private final NumberPicker mMinuteSpinner; - private final NumberPicker mAmPmSpinner; - private Calendar mDate;//定义了Calendar类型的变量mDate,用于操作时间 - //Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。 - - private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; - - private boolean mIsAm; - - private boolean mIs24HourView; - - private boolean mIsEnabled = DEFAULT_ENABLE_STATE; - - private boolean mInitialising; - - private OnDateTimeChangedListener mOnDateTimeChangedListener; - - private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); - updateDateControl(); - onDateTimeChanged(); - } - };//OnValueChangeListener,这是时间改变监视器,这里主要是对日期的监视 - //将现在日期的值传递给mDate;updateDateControl是同步操作 - - private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {//监视Hour - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - boolean isDateChanged = false; - Calendar cal = Calendar.getInstance(); - 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;//选择12小时制时,晚上12点之后日期的更改 - } 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; - }//选择12小时制时,凌晨12点之后对日期的更改 - 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(); - }//选择12小时制时,中午12点之后对AM和PM的更改 - } else { - if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, 1); - isDateChanged = true;//选择24小时制时,晚上12点之后日期的更改 - } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, -1); - isDateChanged = true;//选择24小时制时,凌晨12点之后对日期的更改 - } - } - int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY);//通过数字选择器给newHour赋值 - mDate.set(Calendar.HOUR_OF_DAY, newHour);//通过set将Hour值传给mDate - onDateTimeChanged(); - if (isDateChanged) { - setCurrentYear(cal.get(Calendar.YEAR)); - setCurrentMonth(cal.get(Calendar.MONTH)); - setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); - } - } - }; - - private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() {//这里是对分钟改变的监视 - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - int minValue = mMinuteSpinner.getMinValue(); - int maxValue = mMinuteSpinner.getMaxValue(); - int offset = 0;//设置offset,作为小时改变的一个记录数据 - if (oldVal == maxValue && newVal == minValue) { - offset += 1; - } else if (oldVal == minValue && newVal == maxValue) { - offset -= 1; - }//如果原来值为59,新值为0,则offset加1 - //如果原来值为0,新值为59,则offset减1 - - if (offset != 0) { - mDate.add(Calendar.HOUR_OF_DAY, offset); - mHourSpinner.setValue(getCurrentHour()); - updateDateControl(); - int newHour = getCurrentHourOfDay(); - if (newHour >= HOURS_IN_HALF_DAY) { - mIsAm = false; - updateAmPmControl(); - } else { - mIsAm = true; - updateAmPmControl(); - } - } - mDate.set(Calendar.MINUTE, newVal); - onDateTimeChanged(); - } - }; - - private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() {//对AM和PM的监视 - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - mIsAm = !mIsAm; - if (mIsAm) { - mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); - } else { - mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); - } - updateAmPmControl(); - onDateTimeChanged(); - } - }; - - public interface OnDateTimeChangedListener { - void onDateTimeChanged(DateTimePicker view, int year, int month, - int dayOfMonth, int hourOfDay, int minute); - } - - public DateTimePicker(Context context) { - this(context, System.currentTimeMillis()); - }//获取当前的系统时间 - - public DateTimePicker(Context context, long date) { - this(context, date, DateFormat.is24HourFormat(context)); - }//DateFormat上面函数的得到的数据 - - public DateTimePicker(Context context, long date, boolean is24HourView) { - super(context);//获取系统时间 - mDate = Calendar.getInstance(); - mInitialising = true; - mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; - inflate(context, R.layout.datetime_picker, this); - - 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); - mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); - mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); - mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); - mMinuteSpinner.setOnLongPressUpdateInterval(100); - mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); - - String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); - mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); - mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); - mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); - mAmPmSpinner.setDisplayedValues(stringsForAmPm); - mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); - - // update controls to initial state - updateDateControl(); - updateHourControl(); - updateAmPmControl(); - - set24HourView(is24HourView); - - // set to current time - setCurrentDate(date); - - setEnabled(isEnabled()); - - // set the content descriptions - mInitialising = false; - } - - @Override - public void setEnabled(boolean enabled) { - if (mIsEnabled == enabled) { - return; - } - super.setEnabled(enabled); - mDateSpinner.setEnabled(enabled); - mMinuteSpinner.setEnabled(enabled); - mHourSpinner.setEnabled(enabled); - mAmPmSpinner.setEnabled(enabled); - mIsEnabled = enabled; - } - - @Override - public boolean isEnabled() { - return mIsEnabled; - } - - /** - * Get the current date in millis - * - * @return the current date in millis - */ - public long getCurrentDateInTimeMillis() { - return mDate.getTimeInMillis(); - }//获取当前的秒数 - - /** - * Set the current date - * - * @param date The current date in millis - */ - public void setCurrentDate(long date) { - Calendar cal = Calendar.getInstance(); - 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)); - }//设置当前的日期 - - /** - * Set the current date - * - * @param year The current year - * @param month The current month - * @param dayOfMonth The current dayOfMonth - * @param hourOfDay The current hourOfDay - * @param minute The current minute - */ - public void setCurrentDate(int year, int month, - int dayOfMonth, int hourOfDay, int minute) { - setCurrentYear(year); - setCurrentMonth(month); - setCurrentDay(dayOfMonth); - setCurrentHour(hourOfDay); - setCurrentMinute(minute); - }//设置当前的时间:年月日时分 - - /** - * Get current year - * - * @return The current year - */ - public int getCurrentYear() { - return mDate.get(Calendar.YEAR); - } - - /** - * Set current year - * - * @param year The current year - */ - public void setCurrentYear(int year) { - if (!mInitialising && year == getCurrentYear()) { - return; - } - mDate.set(Calendar.YEAR, year); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current month in the year - * - * @return The current month in the year - */ - public int getCurrentMonth() { - return mDate.get(Calendar.MONTH); - } - - /** - * Set current month in the year - * - * @param month The month in the year - */ - public void setCurrentMonth(int month) { - if (!mInitialising && month == getCurrentMonth()) { - return; - } - mDate.set(Calendar.MONTH, month); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current day of the month - * - * @return The day of the month - */ - public int getCurrentDay() { - return mDate.get(Calendar.DAY_OF_MONTH); - } - - /** - * Set current day of the month - * - * @param dayOfMonth The day of the month - */ - public void setCurrentDay(int dayOfMonth) { - if (!mInitialising && dayOfMonth == getCurrentDay()) { - return; - } - mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); - updateDateControl(); - onDateTimeChanged(); - } - - /** - * Get current hour in 24 hour mode, in the range (0~23) - * @return The current hour in 24 hour mode - */ - public int getCurrentHourOfDay() { - return mDate.get(Calendar.HOUR_OF_DAY); - } - - private int getCurrentHour() { - if (mIs24HourView){ - return getCurrentHourOfDay(); - } else { - int hour = getCurrentHourOfDay(); - if (hour > HOURS_IN_HALF_DAY) { - return hour - HOURS_IN_HALF_DAY; - } else { - return hour == 0 ? HOURS_IN_HALF_DAY : hour; - } - } - } - - /** - * Set current hour in 24 hour mode, in the range (0~23) - * - * @param hourOfDay - */ - public void setCurrentHour(int hourOfDay) { - if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { - return; - } - mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); - if (!mIs24HourView) { - if (hourOfDay >= HOURS_IN_HALF_DAY) { - mIsAm = false; - if (hourOfDay > HOURS_IN_HALF_DAY) { - hourOfDay -= HOURS_IN_HALF_DAY; - } - } else { - mIsAm = true; - if (hourOfDay == 0) { - hourOfDay = HOURS_IN_HALF_DAY; - } - } - updateAmPmControl(); - } - mHourSpinner.setValue(hourOfDay); - onDateTimeChanged(); - } - - /** - * Get currentMinute - * - * @return The Current Minute - */ - public int getCurrentMinute() { - return mDate.get(Calendar.MINUTE); - } - - /** - * Set current minute - */ - public void setCurrentMinute(int minute) { - if (!mInitialising && minute == getCurrentMinute()) { - return; - } - mMinuteSpinner.setValue(minute); - mDate.set(Calendar.MINUTE, minute); - onDateTimeChanged(); - } - - /** - * @return true if this is in 24 hour view else false. - */ - public boolean is24HourView () { - return mIs24HourView; - } - - /** - * Set whether in 24 hour or AM/PM mode. - * - * @param is24HourView True for 24 hour mode. False for AM/PM mode. - */ - public void set24HourView(boolean is24HourView) { - if (mIs24HourView == is24HourView) { - return; - } - mIs24HourView = is24HourView; - mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); - int hour = getCurrentHourOfDay(); - updateHourControl(); - setCurrentHour(hour); - updateAmPmControl(); - } - - private void updateDateControl() { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(mDate.getTimeInMillis()); - cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); - mDateSpinner.setDisplayedValues(null); - for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { - cal.add(Calendar.DAY_OF_YEAR, 1); - mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); - } - mDateSpinner.setDisplayedValues(mDateDisplayValues); - mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); - mDateSpinner.invalidate(); - }//确定周几 - - private void updateAmPmControl() { - if (mIs24HourView) { - mAmPmSpinner.setVisibility(View.GONE); - } else { - int index = mIsAm ? Calendar.AM : Calendar.PM; - mAmPmSpinner.setValue(index); - mAmPmSpinner.setVisibility(View.VISIBLE); - } - }//确定AM和PM - - private void updateHourControl() { - if (mIs24HourView) { - mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); - mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); - } else { - mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); - mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); - } - }//计算小时 - - /** - * Set the callback that indicates the 'Set' button has been pressed. - * @param callback the callback, if null will do nothing - */ - public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { - mOnDateTimeChangedListener = callback; - } - - private void onDateTimeChanged() { - if (mOnDateTimeChangedListener != null) { - mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), - getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); - } - } -} diff --git a/two/GTaskStringUtils.java b/two/GTaskStringUtils.java deleted file mode 100644 index 344998c..0000000 --- a/two/GTaskStringUtils.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.tool; - -public class GTaskStringUtils {//定义大量变量,为jsonObject提供Key,把这些定义全部写到一个类里,方便查看管理 - - public final static String GTASK_JSON_ACTION_ID = "action_id"; - - public final static String GTASK_JSON_ACTION_LIST = "action_list"; - - public final static String GTASK_JSON_ACTION_TYPE = "action_type"; - - public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; - - public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; - - public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; - - public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; - - public final static String GTASK_JSON_CREATOR_ID = "creator_id"; - - public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; - - public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; - - public final static String GTASK_JSON_COMPLETED = "completed"; - - public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; - - public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; - - public final static String GTASK_JSON_DELETED = "deleted"; - - public final static String GTASK_JSON_DEST_LIST = "dest_list"; - - public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; - - public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; - - public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; - - public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; - - public final static String GTASK_JSON_GET_DELETED = "get_deleted"; - - public final static String GTASK_JSON_ID = "id"; - - public final static String GTASK_JSON_INDEX = "index"; - - public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; - - public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; - - public final static String GTASK_JSON_LIST_ID = "list_id"; - - public final static String GTASK_JSON_LISTS = "lists"; - - public final static String GTASK_JSON_NAME = "name"; - - public final static String GTASK_JSON_NEW_ID = "new_id"; - - public final static String GTASK_JSON_NOTES = "notes"; - - public final static String GTASK_JSON_PARENT_ID = "parent_id"; - - public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; - - public final static String GTASK_JSON_RESULTS = "results"; - - public final static String GTASK_JSON_SOURCE_LIST = "source_list"; - - public final static String GTASK_JSON_TASKS = "tasks"; - - public final static String GTASK_JSON_TYPE = "type"; - - public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; - - public final static String GTASK_JSON_TYPE_TASK = "TASK"; - - public final static String GTASK_JSON_USER = "user"; - - public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; - - public final static String FOLDER_DEFAULT = "Default"; - - public final static String FOLDER_CALL_NOTE = "Call_Note"; - - public final static String FOLDER_META = "METADATA"; - - public final static String META_HEAD_GTASK_ID = "meta_gid"; - - public final static String META_HEAD_NOTE = "meta_note"; - - public final static String META_HEAD_DATA = "meta_data"; - - public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; - -} diff --git a/two/Note.java b/two/Note.java deleted file mode 100644 index a1fc706..0000000 --- a/two/Note.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.model; -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;//输出日志 - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.CallNote; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.data.Notes.TextNote; - -import java.rmi.RemoteException; -import java.util.ArrayList; - - -public class Note { - private ContentValues mNoteDiffValues; - private NoteData mNoteData; - private static final String TAG = "Note"; - //为数据库添加的新便签创建一个新ID - - public static synchronized long getNewNoteId(Context context, long folderId) { - //在数据库中创建新便签 - ContentValues values = new ContentValues(); - 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); - //ContentResolver用于外部应用(比如输入法等软件)对ContentProvider中的数据进行增删查改等操作 - long noteId = 0; - try { - noteId = Long.valueOf(uri.getPathSegments().get(1)); - } catch (NumberFormatException e) { - Log.e(TAG, "Get note id error :" + e.toString()); - noteId = 0; - }//采用 try catch 语句来捕获输入便签ID异常并处理 - if (noteId == -1) { - throw new IllegalStateException("Wrong note id:" + noteId);//非法状态警告:"ID错误" - } - return noteId; - } - - public Note() { - mNoteDiffValues = new ContentValues(); - mNoteData = new NoteData(); - }//定义两个变量来存储新便签数据,mNoteDiffValues:便签属性、mNoteData:便签数据 - - public void setNoteValue(String key, String value) {//设置便签种类 - mNoteDiffValues.put(key, value); - mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); - mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); - }//新建标签属性的数据 - - public void setTextData(String key, String value) { - mNoteData.setTextData(key, value); - } - //便签文本内容数据 - - public void setTextDataId(long id) { - mNoteData.setTextDataId(id); - } - //文本数据ID - - public long getTextDataId() { - return mNoteData.mTextDataId; - } - //获取文本数据ID - - public void setCallDataId(long id) { - mNoteData.setCallDataId(id); - } - //电话号码数据ID - - public void setCallData(String key, String value) { - mNoteData.setCallData(key, value); - } - //获取电话号码数据ID - - public boolean isLocalModified() { - return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); - }//判断便签是否有修改 - /** - * Boolean变量存储为16位的数值形式,但只能是True或False。 - * 当其他的数值类型转换为Boolean类型时,0变False,其他值变True。当Boolean值转换为其他的数据类型时,False变0,而True变-1 - */ - - public boolean syncNote(Context context, long noteId) { - if (noteId <= 0) { - throw new IllegalArgumentException("Wrong note id:" + noteId); - }//修改后的便签ID错误判断;IllegalArgumentException:不合法的参数异常 - - if (!isLocalModified()) { - return true; - } - - /** - * 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 - */ - 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 - } - mNoteDiffValues.clear(); - - if (mNoteData.isLocalModified() - && (mNoteData.pushIntoContentResolver(context, noteId) == null)) { - return false; - } - - return true; - }//判断数据有没有同步 - - private class NoteData {//定义便签内容的数据类:文本数据:ContentValues类;电话号码:ContentValues类 - private long mTextDataId; - - private ContentValues mTextDataValues; - /** - * Contentvalues类只能存储基本类型的数据 - * Contentvalues类中有很多用于存放数据的Put方法,但是这些put方法只会接收基本数据类型的参数,因此存储的时候也就只能存储基本数据类型。 - */ - private long mCallDataId; - - private ContentValues mCallDataValues; - - private static final String TAG = "NoteData"; - - public NoteData() { - mTextDataValues = new ContentValues(); - mCallDataValues = new ContentValues(); - mTextDataId = 0; - mCallDataId = 0; - } - - boolean isLocalModified() {//实现修改便签的函数 - return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; - } - - void setTextDataId(long id) { - if(id <= 0) { - throw new IllegalArgumentException("Text data id should larger than 0"); - } - mTextDataId = id; - } - - void setCallDataId(long id) { - if (id <= 0) { - throw new IllegalArgumentException("Call data id should larger than 0"); - } - mCallDataId = id; - } - - void setCallData(String key, String value) { - mCallDataValues.put(key, value); - mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); - mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); - } - - void setTextData(String key, String value) { - mTextDataValues.put(key, value); - mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); - mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); - } - - Uri pushIntoContentResolver(Context context, long noteId) {//将修改的便签数据通过Uri存储到数据库 - /** - * Check for safety - */ - if (noteId <= 0) { - throw new IllegalArgumentException("Wrong note id:" + noteId); - } - - ArrayList operationList = new ArrayList(); - 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); - try { - setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); - } catch (NumberFormatException e) { - Log.e(TAG, "Insert new text data fail with noteId" + noteId); - mTextDataValues.clear(); - return null; - } - } else { - builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( - Notes.CONTENT_DATA_URI, mTextDataId)); - builder.withValues(mTextDataValues); - operationList.add(builder.build()); - } - mTextDataValues.clear(); - }//将便签文本数据存储至DataColumns - - if(mCallDataValues.size() > 0) { - mCallDataValues.put(DataColumns.NOTE_ID, noteId); - if (mCallDataId == 0) { - mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); - Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, - mCallDataValues); - try { - setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); - } catch (NumberFormatException e) { - Log.e(TAG, "Insert new call data fail with noteId" + noteId); - mCallDataValues.clear(); - return null; - } - } else { - builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( - Notes.CONTENT_DATA_URI, mCallDataId)); - builder.withValues(mCallDataValues); - operationList.add(builder.build()); - } - mCallDataValues.clear(); - }//将便签电话号码数据存储至DataColumns - - if (operationList.size() > 0) { - try { - ContentProviderResult[] results = context.getContentResolver().applyBatch( - 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) { - Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); - return null; - } - }//存储异常处理办法 - return null; - } - } -} diff --git a/two/ResourceParser.java b/two/ResourceParser.java deleted file mode 100644 index 57c5265..0000000 --- a/two/ResourceParser.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.tool; - -import android.content.Context; -import android.preference.PreferenceManager; - -import net.micode.notes.R; -import net.micode.notes.ui.NotesPreferenceActivity; - -public class ResourceParser { - - //背景颜色ID设置 - public static final int YELLOW = 0; - public static final int BLUE = 1; - public static final int WHITE = 2; - public static final int GREEN = 3; - public static final int RED = 4; - - public static final int BG_DEFAULT_COLOR = YELLOW;//默认背景颜色 - - //文本字体大小ID设置 - public static final int TEXT_SMALL = 0; - public static final int TEXT_MEDIUM = 1; - public static final int TEXT_LARGE = 2; - public static final int TEXT_SUPER = 3; - - public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;//默认文本字体大小 - - public static class NoteBgResources { - private final static int [] BG_EDIT_RESOURCES = new int [] { - R.drawable.edit_yellow, - R.drawable.edit_blue, - R.drawable.edit_white, - R.drawable.edit_green, - R.drawable.edit_red - }; - - private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] {//标题颜色 - R.drawable.edit_title_yellow, - R.drawable.edit_title_blue, - R.drawable.edit_title_white, - R.drawable.edit_title_green, - R.drawable.edit_title_red - }; - - public static int getNoteBgResource(int id) { - return BG_EDIT_RESOURCES[id]; - }//获取并返回背景颜色ID - - public static int getNoteTitleBgResource(int id) { - return BG_EDIT_TITLE_RESOURCES[id]; - }//获取并返回标题颜色ID - } - - public static int getDefaultBgId(Context context) {//获取默认的背景颜色 - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( - NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { - return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); - } else { - return BG_DEFAULT_COLOR; - } - } - - public static class NoteItemBgResources { - private final static int [] BG_FIRST_RESOURCES = new int [] { - R.drawable.list_yellow_up, - R.drawable.list_blue_up, - R.drawable.list_white_up, - R.drawable.list_green_up, - R.drawable.list_red_up - }; - - private final static int [] BG_NORMAL_RESOURCES = new int [] { - R.drawable.list_yellow_middle, - R.drawable.list_blue_middle, - R.drawable.list_white_middle, - R.drawable.list_green_middle, - R.drawable.list_red_middle - }; - - private final static int [] BG_LAST_RESOURCES = new int [] { - R.drawable.list_yellow_down, - R.drawable.list_blue_down, - R.drawable.list_white_down, - R.drawable.list_green_down, - R.drawable.list_red_down, - }; - - private final static int [] BG_SINGLE_RESOURCES = new int [] { - R.drawable.list_yellow_single, - R.drawable.list_blue_single, - R.drawable.list_white_single, - R.drawable.list_green_single, - R.drawable.list_red_single - }; - - public static int getNoteBgFirstRes(int id) { - return BG_FIRST_RESOURCES[id]; - } - - public static int getNoteBgLastRes(int id) { - return BG_LAST_RESOURCES[id]; - } - - public static int getNoteBgSingleRes(int id) { - return BG_SINGLE_RESOURCES[id]; - } - - public static int getNoteBgNormalRes(int id) { - return BG_NORMAL_RESOURCES[id]; - } - - public static int getFolderBgRes() { - return R.drawable.list_folder; - } - } - - public static class WidgetBgResources { - private final static int [] BG_2X_RESOURCES = new int [] { - R.drawable.widget_2x_yellow, - R.drawable.widget_2x_blue, - R.drawable.widget_2x_white, - R.drawable.widget_2x_green, - R.drawable.widget_2x_red, - }; - - public static int getWidget2xBgResource(int id) { - return BG_2X_RESOURCES[id]; - } - - private final static int [] BG_4X_RESOURCES = new int [] { - R.drawable.widget_4x_yellow, - R.drawable.widget_4x_blue, - R.drawable.widget_4x_white, - R.drawable.widget_4x_green, - R.drawable.widget_4x_red - }; - - public static int getWidget4xBgResource(int id) { - return BG_4X_RESOURCES[id]; - } - } - - public static class TextAppearanceResources { - private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { - R.style.TextAppearanceNormal, - R.style.TextAppearanceMedium, - R.style.TextAppearanceLarge, - R.style.TextAppearanceSuper - }; - - public static int getTexAppearanceResource(int id) {//容错函数,防止输入的ID大于资源总量,若如此,则自动返回默认的设置结果 - /** - * HACKME: Fix bug of store the resource id in shared preference. - * The id may larger than the length of resources, in this case, - * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} - */ - if (id >= TEXTAPPEARANCE_RESOURCES.length) { - return BG_DEFAULT_FONT_SIZE; - } - return TEXTAPPEARANCE_RESOURCES[id]; - } - - public static int getResourcesSize() { - return TEXTAPPEARANCE_RESOURCES.length; - } - } -} diff --git a/two/WorkingNote.java b/two/WorkingNote.java deleted file mode 100644 index 894a7d1..0000000 --- a/two/WorkingNote.java +++ /dev/null @@ -1,377 +0,0 @@ -/* - * 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. - */ - -package net.micode.notes.model; - -import android.appwidget.AppWidgetManager; -import android.content.ContentUris; -import android.content.Context; -import android.database.Cursor; -import android.text.TextUtils; -import android.util.Log; -/** - android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。 - Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("",""); - Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择. - Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息 - Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。 - Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。 - */ - -import net.micode.notes.data.Notes; -import net.micode.notes.data.Notes.CallNote; -import net.micode.notes.data.Notes.DataColumns; -import net.micode.notes.data.Notes.DataConstants; -import net.micode.notes.data.Notes.NoteColumns; -import net.micode.notes.data.Notes.TextNote; -import net.micode.notes.tool.ResourceParser.NoteBgResources; - - -public class WorkingNote { - // Note for the working note - private Note mNote; - // Note Id - private long mNoteId; - // Note content - private String mContent; - // Note mode - private int mMode; - - private long mAlertDate; - - private long mModifiedDate; - - private int mBgColorId; - - private int mWidgetId; - - private int mWidgetType; - - private long mFolderId; - - private Context mContext; - - private static final String TAG = "WorkingNote"; - - private boolean mIsDeleted; - - private NoteSettingChangedListener mNoteSettingStatusListener; - - public static final String[] DATA_PROJECTION = new String[] { - DataColumns.ID, - DataColumns.CONTENT, - DataColumns.MIME_TYPE, - DataColumns.DATA1, - DataColumns.DATA2, - DataColumns.DATA3, - DataColumns.DATA4, - };//新建字符串数组DATA_PROJECTION - - public static final String[] NOTE_PROJECTION = new String[] { - NoteColumns.PARENT_ID, - NoteColumns.ALERTED_DATE, - NoteColumns.BG_COLOR_ID, - NoteColumns.WIDGET_ID, - NoteColumns.WIDGET_TYPE, - NoteColumns.MODIFIED_DATE - };//新建字符串数组NOTE_PROJECTION - - private static final int DATA_ID_COLUMN = 0; - - private static final int DATA_CONTENT_COLUMN = 1; - - private static final int DATA_MIME_TYPE_COLUMN = 2; - - private static final int DATA_MODE_COLUMN = 3; - - private static final int NOTE_PARENT_ID_COLUMN = 0; - - private static final int NOTE_ALERTED_DATE_COLUMN = 1; - - private static final int NOTE_BG_COLOR_ID_COLUMN = 2; - - private static final int NOTE_WIDGET_ID_COLUMN = 3; - - private static final int NOTE_WIDGET_TYPE_COLUMN = 4; - - private static final int NOTE_MODIFIED_DATE_COLUMN = 5; - - // New note construct - private WorkingNote(Context context, long folderId) { - mContext = context; - mAlertDate = 0; - mModifiedDate = System.currentTimeMillis(); - mFolderId = folderId; - mNote = new Note(); - mNoteId = 0; - mIsDeleted = false; - mMode = 0; - mWidgetType = Notes.TYPE_WIDGET_INVALIDE; - } - - // Existing note construct - private WorkingNote(Context context, long noteId, long folderId) {//构造函数 - mContext = context; - mNoteId = noteId; - mFolderId = folderId; - mIsDeleted = false; - mNote = new Note(); - loadNote(); - } - - private void loadNote() {//加载便签调用query函数找到第一个项目 - Cursor cursor = mContext.getContentResolver().query( - ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, - null, null); - //query是一个查询参数类,封装了查询条件,分页,排序等功能 - - if (cursor != null) { - if (cursor.moveToFirst()) { - mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); - mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); - mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); - mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); - mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); - mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); - }//便签存在时储存信息 - cursor.close(); - } else { - Log.e(TAG, "No note with id:" + mNoteId); - throw new IllegalArgumentException("Unable to find note with id " + mNoteId); - }//便签不存在时报错 - loadNoteData(); - } - - private void loadNoteData() {//加载便签数据 - Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, - DataColumns.NOTE_ID + "=?", new String[] { - String.valueOf(mNoteId) - }, null); - - if (cursor != null) {//便签存在 - if (cursor.moveToFirst()) { - do { - String type = cursor.getString(DATA_MIME_TYPE_COLUMN); - if (DataConstants.NOTE.equals(type)) { - mContent = cursor.getString(DATA_CONTENT_COLUMN); - mMode = cursor.getInt(DATA_MODE_COLUMN); - mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); - } else if (DataConstants.CALL_NOTE.equals(type)) { - mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); - } else { - Log.d(TAG, "Wrong note type with type:" + type); - } - } while (cursor.moveToNext()); - }//do-while循环查阅所有信息,直到cursor.moveToNext()值为空 - cursor.close(); - } else { - Log.e(TAG, "No data with id:" + mNoteId); - throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); - } - } - - public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, - int widgetType, int defaultBgColorId) { - WorkingNote note = new WorkingNote(context, folderId); - note.setBgColorId(defaultBgColorId); - note.setWidgetId(widgetId); - note.setWidgetType(widgetType); - return note; - }//创建一个空便签并传输参数:文本,文件夹名称,窗口样式,背景颜色 - - public static WorkingNote load(Context context, long id) { - return new WorkingNote(context, id, 0); - } - - public synchronized boolean saveNote() { - if (isWorthSaving()) {//调用isWorthSaving类 - if (!existInDatabase()) { - if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { - Log.e(TAG, "Create new note fail with id:" + mNoteId); - return false; - } - } - - mNote.syncNote(mContext, mNoteId); - - /** - * Update widget content if there exist any widget of this note - */ - if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID - && mWidgetType != Notes.TYPE_WIDGET_INVALIDE - && mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onWidgetChanged(); - } - return true; - } else { - return false; - } - } - - public boolean existInDatabase() { - return mNoteId > 0; - } - - private boolean isWorthSaving() {//判断便签是否能保存 - if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) - || (existInDatabase() && !mNote.isLocalModified())) {//被删除、内容为空、已经保存过了 - return false; - } else { - return true; - } - } - - public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) {//设置便签的设置列表 - mNoteSettingStatusListener = l; - } - - public void setAlertDate(long date, boolean set) {//设置警报数据 - if (date != mAlertDate) { - mAlertDate = date; - mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate)); - } - if (mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onClockAlertChanged(date, set); - } - } - - public void markDeleted(boolean mark) {//设置删除标记 - mIsDeleted = mark; - if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID - && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onWidgetChanged();//调用mNoteSettingStatusListener - } - } - - public void setBgColorId(int id) {//shezhi背景颜色 - if (id != mBgColorId) { - mBgColorId = id; - if (mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onBackgroundColorChanged(); - } - mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); - } - } - - public void setCheckListMode(int mode) {//设置检查列表模式 - if (mMode != mode) { - if (mNoteSettingStatusListener != null) { - mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); - } - mMode = mode; - mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); - } - } - - public void setWidgetType(int type) {//设置窗口小部件样式 - if (type != mWidgetType) { - mWidgetType = type; - mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); - } - } - - public void setWidgetId(int id) {//设置窗口小部件ID - if (id != mWidgetId) { - mWidgetId = id; - mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); - } - } - - public void setWorkingText(String text) {//设置WorkingText - if (!TextUtils.equals(mContent, text)) { - mContent = text; - mNote.setTextData(DataColumns.CONTENT, mContent); - } - } - - public void convertToCallNote(String phoneNumber, long callDate) {//转变电话号码的信息:phoneNumber,callDate - mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); - mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); - mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); - } - - public boolean hasClockAlert() {//判断是否有时钟 - return (mAlertDate > 0 ? true : false); - } - - public String getContent() {//获取便签内容 - return mContent; - } - - public long getAlertDate() {//获取警报数据 - return mAlertDate; - } - - public long getModifiedDate() {//获取修改后的数据 - return mModifiedDate; - } - - public int getBgColorResId() {//获取背景颜色ID来源 - return NoteBgResources.getNoteBgResource(mBgColorId); - } - - public int getBgColorId() {//获取背景颜色ID - return mBgColorId; - } - - public int getTitleBgResId() {//获取标题颜色ID - return NoteBgResources.getNoteTitleBgResource(mBgColorId); - } - - public int getCheckListMode() {//获取检查列表模式 - return mMode; - } - - public long getNoteId() {//获取便签ID - return mNoteId; - } - - public long getFolderId() {//获取文件夹ID - return mFolderId; - } - - public int getWidgetId() {//获取窗口小部件ID - return mWidgetId; - } - - public int getWidgetType() {//获取窗口小部件样式 - return mWidgetType; - } - - public interface NoteSettingChangedListener {//创建接口NoteSettingChangedListener,监视便签更改 - /** - * Called when the background color of current note has just changed - */ - void onBackgroundColorChanged(); - - /** - * Called when user set clock - */ - void onClockAlertChanged(long date, boolean set); - - /** - * Call when user create note from widget - */ - void onWidgetChanged(); - - /** - * Call when switch between check list mode and normal mode - * @param oldMode is previous mode before change - * @param newMode is new mode - */ - void onCheckListModeChanged(int oldMode, int newMode); - } -} From 38130e55ce51bc144ca2424a0d3cd5c676203361 Mon Sep 17 00:00:00 2001 From: sxg <2363882464@qq.com> Date: Thu, 20 Apr 2023 22:29:20 +0800 Subject: [PATCH 4/5] 1 --- doc/标注/210340071_舒小刚.docx | 0 two/model/Note.java | 266 +++++++++++++++ two/model/WorkingNote.java | 377 +++++++++++++++++++++ two/tool/BackupUtils.java | 351 ++++++++++++++++++++ two/tool/DataUtils.java | 303 +++++++++++++++++ two/tool/GTaskStringUtils.java | 113 +++++++ two/tool/ResourceParser.java | 183 +++++++++++ two/ui/AlarmAlertActivity.java | 177 ++++++++++ two/ui/AlarmInitReceiver.java | 66 ++++ two/ui/AlarmReceiver.java | 30 ++ two/ui/DateTimePicker.java | 490 ++++++++++++++++++++++++++++ 11 files changed, 2356 insertions(+) create mode 100644 doc/标注/210340071_舒小刚.docx create mode 100644 two/model/Note.java create mode 100644 two/model/WorkingNote.java create mode 100644 two/tool/BackupUtils.java create mode 100644 two/tool/DataUtils.java create mode 100644 two/tool/GTaskStringUtils.java create mode 100644 two/tool/ResourceParser.java create mode 100644 two/ui/AlarmAlertActivity.java create mode 100644 two/ui/AlarmInitReceiver.java create mode 100644 two/ui/AlarmReceiver.java create mode 100644 two/ui/DateTimePicker.java diff --git a/doc/标注/210340071_舒小刚.docx b/doc/标注/210340071_舒小刚.docx new file mode 100644 index 0000000..e69de29 diff --git a/two/model/Note.java b/two/model/Note.java new file mode 100644 index 0000000..a1fc706 --- /dev/null +++ b/two/model/Note.java @@ -0,0 +1,266 @@ +/* + * 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. + */ + +package net.micode.notes.model; +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;//输出日志 + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; + +import java.rmi.RemoteException; +import java.util.ArrayList; + + +public class Note { + private ContentValues mNoteDiffValues; + private NoteData mNoteData; + private static final String TAG = "Note"; + //为数据库添加的新便签创建一个新ID + + public static synchronized long getNewNoteId(Context context, long folderId) { + //在数据库中创建新便签 + ContentValues values = new ContentValues(); + 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); + //ContentResolver用于外部应用(比如输入法等软件)对ContentProvider中的数据进行增删查改等操作 + long noteId = 0; + try { + noteId = Long.valueOf(uri.getPathSegments().get(1)); + } catch (NumberFormatException e) { + Log.e(TAG, "Get note id error :" + e.toString()); + noteId = 0; + }//采用 try catch 语句来捕获输入便签ID异常并处理 + if (noteId == -1) { + throw new IllegalStateException("Wrong note id:" + noteId);//非法状态警告:"ID错误" + } + return noteId; + } + + public Note() { + mNoteDiffValues = new ContentValues(); + mNoteData = new NoteData(); + }//定义两个变量来存储新便签数据,mNoteDiffValues:便签属性、mNoteData:便签数据 + + public void setNoteValue(String key, String value) {//设置便签种类 + mNoteDiffValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + }//新建标签属性的数据 + + public void setTextData(String key, String value) { + mNoteData.setTextData(key, value); + } + //便签文本内容数据 + + public void setTextDataId(long id) { + mNoteData.setTextDataId(id); + } + //文本数据ID + + public long getTextDataId() { + return mNoteData.mTextDataId; + } + //获取文本数据ID + + public void setCallDataId(long id) { + mNoteData.setCallDataId(id); + } + //电话号码数据ID + + public void setCallData(String key, String value) { + mNoteData.setCallData(key, value); + } + //获取电话号码数据ID + + public boolean isLocalModified() { + return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified(); + }//判断便签是否有修改 + /** + * Boolean变量存储为16位的数值形式,但只能是True或False。 + * 当其他的数值类型转换为Boolean类型时,0变False,其他值变True。当Boolean值转换为其他的数据类型时,False变0,而True变-1 + */ + + public boolean syncNote(Context context, long noteId) { + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + }//修改后的便签ID错误判断;IllegalArgumentException:不合法的参数异常 + + if (!isLocalModified()) { + return true; + } + + /** + * 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 + */ + 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 + } + mNoteDiffValues.clear(); + + if (mNoteData.isLocalModified() + && (mNoteData.pushIntoContentResolver(context, noteId) == null)) { + return false; + } + + return true; + }//判断数据有没有同步 + + private class NoteData {//定义便签内容的数据类:文本数据:ContentValues类;电话号码:ContentValues类 + private long mTextDataId; + + private ContentValues mTextDataValues; + /** + * Contentvalues类只能存储基本类型的数据 + * Contentvalues类中有很多用于存放数据的Put方法,但是这些put方法只会接收基本数据类型的参数,因此存储的时候也就只能存储基本数据类型。 + */ + private long mCallDataId; + + private ContentValues mCallDataValues; + + private static final String TAG = "NoteData"; + + public NoteData() { + mTextDataValues = new ContentValues(); + mCallDataValues = new ContentValues(); + mTextDataId = 0; + mCallDataId = 0; + } + + boolean isLocalModified() {//实现修改便签的函数 + return mTextDataValues.size() > 0 || mCallDataValues.size() > 0; + } + + void setTextDataId(long id) { + if(id <= 0) { + throw new IllegalArgumentException("Text data id should larger than 0"); + } + mTextDataId = id; + } + + void setCallDataId(long id) { + if (id <= 0) { + throw new IllegalArgumentException("Call data id should larger than 0"); + } + mCallDataId = id; + } + + void setCallData(String key, String value) { + mCallDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + void setTextData(String key, String value) { + mTextDataValues.put(key, value); + mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1); + mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis()); + } + + Uri pushIntoContentResolver(Context context, long noteId) {//将修改的便签数据通过Uri存储到数据库 + /** + * Check for safety + */ + if (noteId <= 0) { + throw new IllegalArgumentException("Wrong note id:" + noteId); + } + + ArrayList operationList = new ArrayList(); + 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); + try { + setTextDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new text data fail with noteId" + noteId); + mTextDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mTextDataId)); + builder.withValues(mTextDataValues); + operationList.add(builder.build()); + } + mTextDataValues.clear(); + }//将便签文本数据存储至DataColumns + + if(mCallDataValues.size() > 0) { + mCallDataValues.put(DataColumns.NOTE_ID, noteId); + if (mCallDataId == 0) { + mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE); + Uri uri = context.getContentResolver().insert(Notes.CONTENT_DATA_URI, + mCallDataValues); + try { + setCallDataId(Long.valueOf(uri.getPathSegments().get(1))); + } catch (NumberFormatException e) { + Log.e(TAG, "Insert new call data fail with noteId" + noteId); + mCallDataValues.clear(); + return null; + } + } else { + builder = ContentProviderOperation.newUpdate(ContentUris.withAppendedId( + Notes.CONTENT_DATA_URI, mCallDataId)); + builder.withValues(mCallDataValues); + operationList.add(builder.build()); + } + mCallDataValues.clear(); + }//将便签电话号码数据存储至DataColumns + + if (operationList.size() > 0) { + try { + ContentProviderResult[] results = context.getContentResolver().applyBatch( + 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) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + return null; + } + }//存储异常处理办法 + return null; + } + } +} diff --git a/two/model/WorkingNote.java b/two/model/WorkingNote.java new file mode 100644 index 0000000..894a7d1 --- /dev/null +++ b/two/model/WorkingNote.java @@ -0,0 +1,377 @@ +/* + * 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. + */ + +package net.micode.notes.model; + +import android.appwidget.AppWidgetManager; +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; +import android.util.Log; +/** + android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。 + Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("",""); + Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择. + Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息 + Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。 + Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。 + */ + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.data.Notes.TextNote; +import net.micode.notes.tool.ResourceParser.NoteBgResources; + + +public class WorkingNote { + // Note for the working note + private Note mNote; + // Note Id + private long mNoteId; + // Note content + private String mContent; + // Note mode + private int mMode; + + private long mAlertDate; + + private long mModifiedDate; + + private int mBgColorId; + + private int mWidgetId; + + private int mWidgetType; + + private long mFolderId; + + private Context mContext; + + private static final String TAG = "WorkingNote"; + + private boolean mIsDeleted; + + private NoteSettingChangedListener mNoteSettingStatusListener; + + public static final String[] DATA_PROJECTION = new String[] { + DataColumns.ID, + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + };//新建字符串数组DATA_PROJECTION + + public static final String[] NOTE_PROJECTION = new String[] { + NoteColumns.PARENT_ID, + NoteColumns.ALERTED_DATE, + NoteColumns.BG_COLOR_ID, + NoteColumns.WIDGET_ID, + NoteColumns.WIDGET_TYPE, + NoteColumns.MODIFIED_DATE + };//新建字符串数组NOTE_PROJECTION + + private static final int DATA_ID_COLUMN = 0; + + private static final int DATA_CONTENT_COLUMN = 1; + + private static final int DATA_MIME_TYPE_COLUMN = 2; + + private static final int DATA_MODE_COLUMN = 3; + + private static final int NOTE_PARENT_ID_COLUMN = 0; + + private static final int NOTE_ALERTED_DATE_COLUMN = 1; + + private static final int NOTE_BG_COLOR_ID_COLUMN = 2; + + private static final int NOTE_WIDGET_ID_COLUMN = 3; + + private static final int NOTE_WIDGET_TYPE_COLUMN = 4; + + private static final int NOTE_MODIFIED_DATE_COLUMN = 5; + + // New note construct + private WorkingNote(Context context, long folderId) { + mContext = context; + mAlertDate = 0; + mModifiedDate = System.currentTimeMillis(); + mFolderId = folderId; + mNote = new Note(); + mNoteId = 0; + mIsDeleted = false; + mMode = 0; + mWidgetType = Notes.TYPE_WIDGET_INVALIDE; + } + + // Existing note construct + private WorkingNote(Context context, long noteId, long folderId) {//构造函数 + mContext = context; + mNoteId = noteId; + mFolderId = folderId; + mIsDeleted = false; + mNote = new Note(); + loadNote(); + } + + private void loadNote() {//加载便签调用query函数找到第一个项目 + Cursor cursor = mContext.getContentResolver().query( + ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId), NOTE_PROJECTION, null, + null, null); + //query是一个查询参数类,封装了查询条件,分页,排序等功能 + + if (cursor != null) { + if (cursor.moveToFirst()) { + mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN); + mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN); + mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN); + mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN); + mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN); + mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN); + }//便签存在时储存信息 + cursor.close(); + } else { + Log.e(TAG, "No note with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note with id " + mNoteId); + }//便签不存在时报错 + loadNoteData(); + } + + private void loadNoteData() {//加载便签数据 + Cursor cursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, DATA_PROJECTION, + DataColumns.NOTE_ID + "=?", new String[] { + String.valueOf(mNoteId) + }, null); + + if (cursor != null) {//便签存在 + if (cursor.moveToFirst()) { + do { + String type = cursor.getString(DATA_MIME_TYPE_COLUMN); + if (DataConstants.NOTE.equals(type)) { + mContent = cursor.getString(DATA_CONTENT_COLUMN); + mMode = cursor.getInt(DATA_MODE_COLUMN); + mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); + } else if (DataConstants.CALL_NOTE.equals(type)) { + mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN)); + } else { + Log.d(TAG, "Wrong note type with type:" + type); + } + } while (cursor.moveToNext()); + }//do-while循环查阅所有信息,直到cursor.moveToNext()值为空 + cursor.close(); + } else { + Log.e(TAG, "No data with id:" + mNoteId); + throw new IllegalArgumentException("Unable to find note's data with id " + mNoteId); + } + } + + public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId, + int widgetType, int defaultBgColorId) { + WorkingNote note = new WorkingNote(context, folderId); + note.setBgColorId(defaultBgColorId); + note.setWidgetId(widgetId); + note.setWidgetType(widgetType); + return note; + }//创建一个空便签并传输参数:文本,文件夹名称,窗口样式,背景颜色 + + public static WorkingNote load(Context context, long id) { + return new WorkingNote(context, id, 0); + } + + public synchronized boolean saveNote() { + if (isWorthSaving()) {//调用isWorthSaving类 + if (!existInDatabase()) { + if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) { + Log.e(TAG, "Create new note fail with id:" + mNoteId); + return false; + } + } + + mNote.syncNote(mContext, mNoteId); + + /** + * Update widget content if there exist any widget of this note + */ + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE + && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged(); + } + return true; + } else { + return false; + } + } + + public boolean existInDatabase() { + return mNoteId > 0; + } + + private boolean isWorthSaving() {//判断便签是否能保存 + if (mIsDeleted || (!existInDatabase() && TextUtils.isEmpty(mContent)) + || (existInDatabase() && !mNote.isLocalModified())) {//被删除、内容为空、已经保存过了 + return false; + } else { + return true; + } + } + + public void setOnSettingStatusChangedListener(NoteSettingChangedListener l) {//设置便签的设置列表 + mNoteSettingStatusListener = l; + } + + public void setAlertDate(long date, boolean set) {//设置警报数据 + if (date != mAlertDate) { + mAlertDate = date; + mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate)); + } + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onClockAlertChanged(date, set); + } + } + + public void markDeleted(boolean mark) {//设置删除标记 + mIsDeleted = mark; + if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID + && mWidgetType != Notes.TYPE_WIDGET_INVALIDE && mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onWidgetChanged();//调用mNoteSettingStatusListener + } + } + + public void setBgColorId(int id) {//shezhi背景颜色 + if (id != mBgColorId) { + mBgColorId = id; + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onBackgroundColorChanged(); + } + mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id)); + } + } + + public void setCheckListMode(int mode) {//设置检查列表模式 + if (mMode != mode) { + if (mNoteSettingStatusListener != null) { + mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode); + } + mMode = mode; + mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); + } + } + + public void setWidgetType(int type) {//设置窗口小部件样式 + if (type != mWidgetType) { + mWidgetType = type; + mNote.setNoteValue(NoteColumns.WIDGET_TYPE, String.valueOf(mWidgetType)); + } + } + + public void setWidgetId(int id) {//设置窗口小部件ID + if (id != mWidgetId) { + mWidgetId = id; + mNote.setNoteValue(NoteColumns.WIDGET_ID, String.valueOf(mWidgetId)); + } + } + + public void setWorkingText(String text) {//设置WorkingText + if (!TextUtils.equals(mContent, text)) { + mContent = text; + mNote.setTextData(DataColumns.CONTENT, mContent); + } + } + + public void convertToCallNote(String phoneNumber, long callDate) {//转变电话号码的信息:phoneNumber,callDate + mNote.setCallData(CallNote.CALL_DATE, String.valueOf(callDate)); + mNote.setCallData(CallNote.PHONE_NUMBER, phoneNumber); + mNote.setNoteValue(NoteColumns.PARENT_ID, String.valueOf(Notes.ID_CALL_RECORD_FOLDER)); + } + + public boolean hasClockAlert() {//判断是否有时钟 + return (mAlertDate > 0 ? true : false); + } + + public String getContent() {//获取便签内容 + return mContent; + } + + public long getAlertDate() {//获取警报数据 + return mAlertDate; + } + + public long getModifiedDate() {//获取修改后的数据 + return mModifiedDate; + } + + public int getBgColorResId() {//获取背景颜色ID来源 + return NoteBgResources.getNoteBgResource(mBgColorId); + } + + public int getBgColorId() {//获取背景颜色ID + return mBgColorId; + } + + public int getTitleBgResId() {//获取标题颜色ID + return NoteBgResources.getNoteTitleBgResource(mBgColorId); + } + + public int getCheckListMode() {//获取检查列表模式 + return mMode; + } + + public long getNoteId() {//获取便签ID + return mNoteId; + } + + public long getFolderId() {//获取文件夹ID + return mFolderId; + } + + public int getWidgetId() {//获取窗口小部件ID + return mWidgetId; + } + + public int getWidgetType() {//获取窗口小部件样式 + return mWidgetType; + } + + public interface NoteSettingChangedListener {//创建接口NoteSettingChangedListener,监视便签更改 + /** + * Called when the background color of current note has just changed + */ + void onBackgroundColorChanged(); + + /** + * Called when user set clock + */ + void onClockAlertChanged(long date, boolean set); + + /** + * Call when user create note from widget + */ + void onWidgetChanged(); + + /** + * Call when switch between check list mode and normal mode + * @param oldMode is previous mode before change + * @param newMode is new mode + */ + void onCheckListModeChanged(int oldMode, int newMode); + } +} diff --git a/two/tool/BackupUtils.java b/two/tool/BackupUtils.java new file mode 100644 index 0000000..ca7c9d9 --- /dev/null +++ b/two/tool/BackupUtils.java @@ -0,0 +1,351 @@ +/* + * 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. + */ + +package net.micode.notes.tool; + +import android.content.Context; +import android.database.Cursor; +import android.os.Environment; +import android.text.TextUtils; +import android.text.format.DateFormat; +import android.util.Log; + +import net.micode.notes.R; +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.DataColumns; +import net.micode.notes.data.Notes.DataConstants; +import net.micode.notes.data.Notes.NoteColumns; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; + + +public class BackupUtils { + private static final String TAG = "BackupUtils"; + // Singleton stuff + private static BackupUtils sInstance; + + public static synchronized BackupUtils getInstance(Context context) { + /** + * synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: + *   1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; + *   2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; + *   3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; + *   4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。 + */ + if (sInstance == null) {//如果当前备份不存在,则新建一个 + sInstance = new BackupUtils(context); + } + return sInstance; + } + + /** + * Following states are signs to represents backup or restore + * status + */ + // Currently, the sdcard is not mounted + public static final int STATE_SD_CARD_UNMOUONTED = 0; + // The backup file not exist 备份文件夹不存在 + public static final int STATE_BACKUP_FILE_NOT_EXIST = 1; + // The data is not well formated, may be changed by other programs 数据未被格式化,可能被其他应用修改 + public static final int STATE_DATA_DESTROIED = 2; + // Some run-time exception which causes restore or backup fails 访问超时 + public static final int STATE_SYSTEM_ERROR = 3; + // Backup or restore success 成功储存 + public static final int STATE_SUCCESS = 4; + + private TextExport mTextExport; + + private BackupUtils(Context context) {//初始化函数 + mTextExport = new TextExport(context); + } + + private static boolean externalStorageAvailable() {//检查外部存储功能是否可用 + return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); + } + + public int exportToText() { + return mTextExport.exportToText(); + } + + public String getExportedTextFileName() { + return mTextExport.mFileName; + } + + public String getExportedTextFileDir() { + return mTextExport.mFileDirectory; + } + + private static class TextExport { + private static final String[] NOTE_PROJECTION = { + NoteColumns.ID, + NoteColumns.MODIFIED_DATE, + NoteColumns.SNIPPET, + NoteColumns.TYPE + }; + + private static final int NOTE_COLUMN_ID = 0; + + private static final int NOTE_COLUMN_MODIFIED_DATE = 1; + + private static final int NOTE_COLUMN_SNIPPET = 2; + + private static final String[] DATA_PROJECTION = { + DataColumns.CONTENT, + DataColumns.MIME_TYPE, + DataColumns.DATA1, + DataColumns.DATA2, + DataColumns.DATA3, + DataColumns.DATA4, + }; + + private static final int DATA_COLUMN_CONTENT = 0; + + private static final int DATA_COLUMN_MIME_TYPE = 1; + + private static final int DATA_COLUMN_CALL_DATE = 2; + + private static final int DATA_COLUMN_PHONE_NUMBER = 4; + + private final String [] TEXT_FORMAT; + private static final int FORMAT_FOLDER_NAME = 0; + private static final int FORMAT_NOTE_DATE = 1; + private static final int FORMAT_NOTE_CONTENT = 2; + + private Context mContext; + private String mFileName; + private String mFileDirectory; + + public TextExport(Context context) { + TEXT_FORMAT = context.getResources().getStringArray(R.array.format_for_exported_note); + mContext = context; + mFileName = ""; + mFileDirectory = ""; + } + + private String getFormat(int id) {//获取文本的组成部分 + return TEXT_FORMAT[id]; + } + + /** + * Export the folder identified by folder id to text + */ + private void exportFolderToText(String folderId, PrintStream ps) { + // Query notes belong to this folder 通过查询亲代ID是文件夹ID的Note来选出制定ID文件夹下的Note + Cursor notesCursor = mContext.getContentResolver().query(Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, NoteColumns.PARENT_ID + "=?", new String[] { + folderId + }, null); + + if (notesCursor != null) { + if (notesCursor.moveToFirst()) { + do { + // Print note's last modified date 里面保存了这份Note的最后修改日期 + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + notesCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = notesCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps);//将便签导出成text文档 + } while (notesCursor.moveToNext()); + } + notesCursor.close(); + } + } + + /** + * Export note identified by id to a print stream + */ + private void exportNoteToText(String noteId, PrintStream ps) { + Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI, + DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] { + noteId + }, null); + + if (dataCursor != null) {//利用光标来扫描内容,区别为callnote和note两种,靠ps.printline输出 + if (dataCursor.moveToFirst()) { + do { + String mimeType = dataCursor.getString(DATA_COLUMN_MIME_TYPE); + if (DataConstants.CALL_NOTE.equals(mimeType)) { + // Print phone number + String phoneNumber = dataCursor.getString(DATA_COLUMN_PHONE_NUMBER); + long callDate = dataCursor.getLong(DATA_COLUMN_CALL_DATE); + String location = dataCursor.getString(DATA_COLUMN_CONTENT); + + if (!TextUtils.isEmpty(phoneNumber)) {//判断电话号码是否为空字符 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + phoneNumber)); + } + // Print call date 输出拨号日期 + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), DateFormat + .format(mContext.getString(R.string.format_datetime_mdhm), + callDate))); + // Print call attachment location 输出电话号码附件位置 + if (!TextUtils.isEmpty(location)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + location)); + } + } else if (DataConstants.NOTE.equals(mimeType)) { + String content = dataCursor.getString(DATA_COLUMN_CONTENT); + if (!TextUtils.isEmpty(content)) { + ps.println(String.format(getFormat(FORMAT_NOTE_CONTENT), + content)); + } + } + } while (dataCursor.moveToNext()); + } + dataCursor.close(); + } + // print a line separator between note + try { + ps.write(new byte[] { + Character.LINE_SEPARATOR, Character.LETTER_NUMBER + }); + } catch (IOException e) { + Log.e(TAG, e.toString()); + } + } + + /** + * Note will be exported as text which is user readable + */ + public int exportToText() {//新建函数,调用exportFolder和exportNote + if (!externalStorageAvailable()) { + Log.d(TAG, "Media was not mounted"); + return STATE_SD_CARD_UNMOUONTED; + } + + PrintStream ps = getExportToTextPrintStream(); + if (ps == null) { + Log.e(TAG, "get print stream error"); + return STATE_SYSTEM_ERROR; + } + // First export folder and its notes 导出文件夹 + Cursor folderCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND " + + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + ") OR " + + NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null); + + if (folderCursor != null) { + if (folderCursor.moveToFirst()) { + do { + // Print folder's name 输出文件夹名称 + String folderName = ""; + if(folderCursor.getLong(NOTE_COLUMN_ID) == Notes.ID_CALL_RECORD_FOLDER) { + folderName = mContext.getString(R.string.call_record_folder_name); + } else { + folderName = folderCursor.getString(NOTE_COLUMN_SNIPPET); + } + if (!TextUtils.isEmpty(folderName)) { + ps.println(String.format(getFormat(FORMAT_FOLDER_NAME), folderName)); + } + String folderId = folderCursor.getString(NOTE_COLUMN_ID); + exportFolderToText(folderId, ps); + } while (folderCursor.moveToNext()); + } + folderCursor.close(); + } + + // Export notes in root's folder 导出根目录里的便签 + Cursor noteCursor = mContext.getContentResolver().query( + Notes.CONTENT_NOTE_URI, + NOTE_PROJECTION, + NoteColumns.TYPE + "=" + +Notes.TYPE_NOTE + " AND " + NoteColumns.PARENT_ID + + "=0", null, null); + + if (noteCursor != null) { + if (noteCursor.moveToFirst()) { + do { + ps.println(String.format(getFormat(FORMAT_NOTE_DATE), DateFormat.format( + mContext.getString(R.string.format_datetime_mdhm), + noteCursor.getLong(NOTE_COLUMN_MODIFIED_DATE)))); + // Query data belong to this note + String noteId = noteCursor.getString(NOTE_COLUMN_ID); + exportNoteToText(noteId, ps); + } while (noteCursor.moveToNext()); + } + noteCursor.close(); + } + ps.close(); + + return STATE_SUCCESS; + } + + /** + * Get a print stream pointed to the file {@generateExportedTextFile} + */ + private PrintStream getExportToTextPrintStream() { + File file = generateFileMountedOnSDcard(mContext, R.string.file_path, + R.string.file_name_txt_format); + if (file == null) { + Log.e(TAG, "create file to exported failed"); + return null; + } + mFileName = file.getName(); + mFileDirectory = mContext.getString(R.string.file_path); + PrintStream ps = null; + try { + FileOutputStream fos = new FileOutputStream(file); + ps = new PrintStream(fos);//将ps输出到特定的文件,目的就是导出到文件 + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (NullPointerException e) { + e.printStackTrace(); + return null; + } + return ps; + } + } + + /** + * Generate the text file to store imported data + */ + private static File generateFileMountedOnSDcard(Context context, int filePathResId, int fileNameFormatResId) { + StringBuilder sb = new StringBuilder(); + sb.append(Environment.getExternalStorageDirectory());//外部存储路径 + sb.append(context.getString(filePathResId));//文件存储路径 + File filedir = new File(sb.toString());//存储路径信息 + sb.append(context.getString( + fileNameFormatResId, + DateFormat.format(context.getString(R.string.format_date_ymd), + System.currentTimeMillis()))); + File file = new File(sb.toString()); + + try {//若文件不存在,就新建一个 + if (!filedir.exists()) { + filedir.mkdir(); + } + if (!file.exists()) { + file.createNewFile(); + } + return file; + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + return null; + } +} + + diff --git a/two/tool/DataUtils.java b/two/tool/DataUtils.java new file mode 100644 index 0000000..80ef312 --- /dev/null +++ b/two/tool/DataUtils.java @@ -0,0 +1,303 @@ +/* + * 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. + */ + +package net.micode.notes.tool; + +import android.content.ContentProviderOperation; +import android.content.ContentProviderResult; +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.OperationApplicationException; +import android.database.Cursor; +import android.os.RemoteException; +import android.util.Log; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.CallNote; +import net.micode.notes.data.Notes.NoteColumns; +import net.micode.notes.ui.NotesListAdapter.AppWidgetAttribute; + +import java.util.ArrayList; +import java.util.HashSet; + + +public class DataUtils { + public static final String TAG = "DataUtils"; + public static boolean batchDeleteNotes(ContentResolver resolver, HashSet ids) {//删除多个笔记 + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + if (ids.size() == 0) { + Log.d(TAG, "no id is in the hashset"); + return true; + } + + ArrayList operationList = new ArrayList();//任务列表 + for (long id : ids) { + if(id == Notes.ID_ROOT_FOLDER) { + Log.e(TAG, "Don't delete system folder root"); + continue; + }//如果是根目录,则不删除 + ContentProviderOperation.Builder builder = ContentProviderOperation + .newDelete(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));//用newDelete实现删除功能 + operationList.add(builder.build()); + } + /** + * 对于这种批量访问提供程序的操作 + * 例如插入大量行或者通过同一个方法调用在多个表中插入行,或者通常以事务(原子操作)的形式跨进程边界执行一组操作 + * 通常可以使用ContentProviderOperation来执行 + */ + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); + //数据库事务,数据库事务是由一组数据库操作序列组成,事务作为一个整体被执行 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + public static void moveNoteToFoler(ContentResolver resolver, long id, long srcFolderId, long desFolderId) { + ContentValues values = new ContentValues(); + values.put(NoteColumns.PARENT_ID, desFolderId); + values.put(NoteColumns.ORIGIN_PARENT_ID, srcFolderId); + values.put(NoteColumns.LOCAL_MODIFIED, 1); + resolver.update(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id), values, null, null); + //更新需要移动的便签,然后用update实现 + } + + public static boolean batchMoveToFolder(ContentResolver resolver, HashSet ids, + long folderId) { + if (ids == null) { + Log.d(TAG, "the ids is null"); + return true; + } + + ArrayList operationList = new ArrayList(); + for (long id : ids) { + ContentProviderOperation.Builder builder = ContentProviderOperation + .newUpdate(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, id));//使用withAppendedId为Uri加上ID + builder.withValue(NoteColumns.PARENT_ID, folderId); + builder.withValue(NoteColumns.LOCAL_MODIFIED, 1); + operationList.add(builder.build()); + }//将IDS里包含的每一列的数据逐个加入到operationList里面,等待最后的批量处理 + + try { + ContentProviderResult[] results = resolver.applyBatch(Notes.AUTHORITY, operationList); + //applyBatch一次性处理一个操作列表 + if (results == null || results.length == 0 || results[0] == null) { + Log.d(TAG, "delete notes failed, ids:" + ids.toString()); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } catch (OperationApplicationException e) { + Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage())); + } + return false; + } + + /** + * Get the all folder count except system folders {@link Notes#TYPE_SYSTEM}} + */ + public static int getUserFolderCount(ContentResolver resolver) { + Cursor cursor =resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { "COUNT(*)" }, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>?", + new String[] { String.valueOf(Notes.TYPE_FOLDER), String.valueOf(Notes.ID_TRASH_FOLER)}, + null);//筛选条件:源文件不为trash folder + + int count = 0; + if(cursor != null) { + if(cursor.moveToFirst()) { + try { + count = cursor.getInt(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "get folder count failed:" + e.toString()); + } finally { + cursor.close(); + } + } + } + return count; + } + + public static boolean visibleInNoteDatabase(ContentResolver resolver, long noteId, int type) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),//通过withAppendedId为Uri加上ID + null, + NoteColumns.TYPE + "=? AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER, + new String [] {String.valueOf(type)}, + null);//查询条件:type适宜,且不属于无用文件夹 + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) {//用getCount判断cursor值是否为空 + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInNoteDatabase(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean existInDataDatabase(ContentResolver resolver, long dataId) { + Cursor cursor = resolver.query(ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, dataId), + null, null, null, null); + + boolean exist = false; + if (cursor != null) { + if (cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static boolean checkVisibleFolderName(ContentResolver resolver, String name) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null, + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + + " AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER + + " AND " + NoteColumns.SNIPPET + "=?", + new String[] { name }, null);//通过文件名字来查询文件是否存在 + boolean exist = false; + if(cursor != null) { + if(cursor.getCount() > 0) { + exist = true; + } + cursor.close(); + } + return exist; + } + + public static HashSet getFolderNoteWidget(ContentResolver resolver, long folderId) { + Cursor c = resolver.query(Notes.CONTENT_NOTE_URI, + new String[] { NoteColumns.WIDGET_ID, NoteColumns.WIDGET_TYPE }, + NoteColumns.PARENT_ID + "=?", + new String[] { String.valueOf(folderId) }, + null);//查询条件:父ID是传入的文件夹ID + + HashSet set = null; + if (c != null) { + if (c.moveToFirst()) { + set = new HashSet(); + do { + try { + AppWidgetAttribute widget = new AppWidgetAttribute(); + widget.widgetId = c.getInt(0);//0对应NoteColumns.WIDGET_ID + widget.widgetType = c.getInt(1);//1对应NoteColumns.WIDGET_TYPE + set.add(widget); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, e.toString()); + } + } while (c.moveToNext());//查询下一条项目 + } + c.close(); + } + return set; + } + + public static String getCallNumberByNoteId(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.PHONE_NUMBER }, + CallNote.NOTE_ID + "=? AND " + CallNote.MIME_TYPE + "=?", + new String [] { String.valueOf(noteId), CallNote.CONTENT_ITEM_TYPE }, + null);//通过数据库查询,查询条件是callDate和phoneNumber匹配传入参数的值 + + if (cursor != null && cursor.moveToFirst()) { + try { + return cursor.getString(0);//CallNote.NOTE_ID + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call number fails " + e.toString()); + } finally { + cursor.close(); + } + } + return ""; + } + + public static long getNoteIdByPhoneNumberAndCallDate(ContentResolver resolver, String phoneNumber, long callDate) { + Cursor cursor = resolver.query(Notes.CONTENT_DATA_URI, + new String [] { CallNote.NOTE_ID }, + CallNote.CALL_DATE + "=? AND " + CallNote.MIME_TYPE + "=? AND PHONE_NUMBERS_EQUAL(" + + CallNote.PHONE_NUMBER + ",?)", + new String [] { String.valueOf(callDate), CallNote.CONTENT_ITEM_TYPE, phoneNumber }, + null);//查询条件:便签ID + + if (cursor != null) { + if (cursor.moveToFirst()) { + try { + return cursor.getLong(0); + } catch (IndexOutOfBoundsException e) { + Log.e(TAG, "Get call note id fails " + e.toString()); + } + } + cursor.close(); + } + return 0; + } + + public static String getSnippetById(ContentResolver resolver, long noteId) { + Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, + new String [] { NoteColumns.SNIPPET }, + NoteColumns.ID + "=?", + new String [] { String.valueOf(noteId)}, + null); + + if (cursor != null) { + String snippet = ""; + if (cursor.moveToFirst()) { + snippet = cursor.getString(0); + } + cursor.close(); + return snippet; + } + throw new IllegalArgumentException("Note is not found with id: " + noteId); + } + + public static String getFormattedSnippet(String snippet) {//对字符串进行格式化处理,去掉字符串两头的空格和换行符 + if (snippet != null) { + snippet = snippet.trim(); + int index = snippet.indexOf('\n'); + if (index != -1) { + snippet = snippet.substring(0, index); + } + } + return snippet; + } +} diff --git a/two/tool/GTaskStringUtils.java b/two/tool/GTaskStringUtils.java new file mode 100644 index 0000000..344998c --- /dev/null +++ b/two/tool/GTaskStringUtils.java @@ -0,0 +1,113 @@ +/* + * 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. + */ + +package net.micode.notes.tool; + +public class GTaskStringUtils {//定义大量变量,为jsonObject提供Key,把这些定义全部写到一个类里,方便查看管理 + + public final static String GTASK_JSON_ACTION_ID = "action_id"; + + public final static String GTASK_JSON_ACTION_LIST = "action_list"; + + public final static String GTASK_JSON_ACTION_TYPE = "action_type"; + + public final static String GTASK_JSON_ACTION_TYPE_CREATE = "create"; + + public final static String GTASK_JSON_ACTION_TYPE_GETALL = "get_all"; + + public final static String GTASK_JSON_ACTION_TYPE_MOVE = "move"; + + public final static String GTASK_JSON_ACTION_TYPE_UPDATE = "update"; + + public final static String GTASK_JSON_CREATOR_ID = "creator_id"; + + public final static String GTASK_JSON_CHILD_ENTITY = "child_entity"; + + public final static String GTASK_JSON_CLIENT_VERSION = "client_version"; + + public final static String GTASK_JSON_COMPLETED = "completed"; + + public final static String GTASK_JSON_CURRENT_LIST_ID = "current_list_id"; + + public final static String GTASK_JSON_DEFAULT_LIST_ID = "default_list_id"; + + public final static String GTASK_JSON_DELETED = "deleted"; + + public final static String GTASK_JSON_DEST_LIST = "dest_list"; + + public final static String GTASK_JSON_DEST_PARENT = "dest_parent"; + + public final static String GTASK_JSON_DEST_PARENT_TYPE = "dest_parent_type"; + + public final static String GTASK_JSON_ENTITY_DELTA = "entity_delta"; + + public final static String GTASK_JSON_ENTITY_TYPE = "entity_type"; + + public final static String GTASK_JSON_GET_DELETED = "get_deleted"; + + public final static String GTASK_JSON_ID = "id"; + + public final static String GTASK_JSON_INDEX = "index"; + + public final static String GTASK_JSON_LAST_MODIFIED = "last_modified"; + + public final static String GTASK_JSON_LATEST_SYNC_POINT = "latest_sync_point"; + + public final static String GTASK_JSON_LIST_ID = "list_id"; + + public final static String GTASK_JSON_LISTS = "lists"; + + public final static String GTASK_JSON_NAME = "name"; + + public final static String GTASK_JSON_NEW_ID = "new_id"; + + public final static String GTASK_JSON_NOTES = "notes"; + + public final static String GTASK_JSON_PARENT_ID = "parent_id"; + + public final static String GTASK_JSON_PRIOR_SIBLING_ID = "prior_sibling_id"; + + public final static String GTASK_JSON_RESULTS = "results"; + + public final static String GTASK_JSON_SOURCE_LIST = "source_list"; + + public final static String GTASK_JSON_TASKS = "tasks"; + + public final static String GTASK_JSON_TYPE = "type"; + + public final static String GTASK_JSON_TYPE_GROUP = "GROUP"; + + public final static String GTASK_JSON_TYPE_TASK = "TASK"; + + public final static String GTASK_JSON_USER = "user"; + + public final static String MIUI_FOLDER_PREFFIX = "[MIUI_Notes]"; + + public final static String FOLDER_DEFAULT = "Default"; + + public final static String FOLDER_CALL_NOTE = "Call_Note"; + + public final static String FOLDER_META = "METADATA"; + + public final static String META_HEAD_GTASK_ID = "meta_gid"; + + public final static String META_HEAD_NOTE = "meta_note"; + + public final static String META_HEAD_DATA = "meta_data"; + + public final static String META_NOTE_NAME = "[META INFO] DON'T UPDATE AND DELETE"; + +} diff --git a/two/tool/ResourceParser.java b/two/tool/ResourceParser.java new file mode 100644 index 0000000..57c5265 --- /dev/null +++ b/two/tool/ResourceParser.java @@ -0,0 +1,183 @@ +/* + * 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. + */ + +package net.micode.notes.tool; + +import android.content.Context; +import android.preference.PreferenceManager; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesPreferenceActivity; + +public class ResourceParser { + + //背景颜色ID设置 + public static final int YELLOW = 0; + public static final int BLUE = 1; + public static final int WHITE = 2; + public static final int GREEN = 3; + public static final int RED = 4; + + public static final int BG_DEFAULT_COLOR = YELLOW;//默认背景颜色 + + //文本字体大小ID设置 + public static final int TEXT_SMALL = 0; + public static final int TEXT_MEDIUM = 1; + public static final int TEXT_LARGE = 2; + public static final int TEXT_SUPER = 3; + + public static final int BG_DEFAULT_FONT_SIZE = TEXT_MEDIUM;//默认文本字体大小 + + public static class NoteBgResources { + private final static int [] BG_EDIT_RESOURCES = new int [] { + R.drawable.edit_yellow, + R.drawable.edit_blue, + R.drawable.edit_white, + R.drawable.edit_green, + R.drawable.edit_red + }; + + private final static int [] BG_EDIT_TITLE_RESOURCES = new int [] {//标题颜色 + R.drawable.edit_title_yellow, + R.drawable.edit_title_blue, + R.drawable.edit_title_white, + R.drawable.edit_title_green, + R.drawable.edit_title_red + }; + + public static int getNoteBgResource(int id) { + return BG_EDIT_RESOURCES[id]; + }//获取并返回背景颜色ID + + public static int getNoteTitleBgResource(int id) { + return BG_EDIT_TITLE_RESOURCES[id]; + }//获取并返回标题颜色ID + } + + public static int getDefaultBgId(Context context) {//获取默认的背景颜色 + if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + NotesPreferenceActivity.PREFERENCE_SET_BG_COLOR_KEY, false)) { + return (int) (Math.random() * NoteBgResources.BG_EDIT_RESOURCES.length); + } else { + return BG_DEFAULT_COLOR; + } + } + + public static class NoteItemBgResources { + private final static int [] BG_FIRST_RESOURCES = new int [] { + R.drawable.list_yellow_up, + R.drawable.list_blue_up, + R.drawable.list_white_up, + R.drawable.list_green_up, + R.drawable.list_red_up + }; + + private final static int [] BG_NORMAL_RESOURCES = new int [] { + R.drawable.list_yellow_middle, + R.drawable.list_blue_middle, + R.drawable.list_white_middle, + R.drawable.list_green_middle, + R.drawable.list_red_middle + }; + + private final static int [] BG_LAST_RESOURCES = new int [] { + R.drawable.list_yellow_down, + R.drawable.list_blue_down, + R.drawable.list_white_down, + R.drawable.list_green_down, + R.drawable.list_red_down, + }; + + private final static int [] BG_SINGLE_RESOURCES = new int [] { + R.drawable.list_yellow_single, + R.drawable.list_blue_single, + R.drawable.list_white_single, + R.drawable.list_green_single, + R.drawable.list_red_single + }; + + public static int getNoteBgFirstRes(int id) { + return BG_FIRST_RESOURCES[id]; + } + + public static int getNoteBgLastRes(int id) { + return BG_LAST_RESOURCES[id]; + } + + public static int getNoteBgSingleRes(int id) { + return BG_SINGLE_RESOURCES[id]; + } + + public static int getNoteBgNormalRes(int id) { + return BG_NORMAL_RESOURCES[id]; + } + + public static int getFolderBgRes() { + return R.drawable.list_folder; + } + } + + public static class WidgetBgResources { + private final static int [] BG_2X_RESOURCES = new int [] { + R.drawable.widget_2x_yellow, + R.drawable.widget_2x_blue, + R.drawable.widget_2x_white, + R.drawable.widget_2x_green, + R.drawable.widget_2x_red, + }; + + public static int getWidget2xBgResource(int id) { + return BG_2X_RESOURCES[id]; + } + + private final static int [] BG_4X_RESOURCES = new int [] { + R.drawable.widget_4x_yellow, + R.drawable.widget_4x_blue, + R.drawable.widget_4x_white, + R.drawable.widget_4x_green, + R.drawable.widget_4x_red + }; + + public static int getWidget4xBgResource(int id) { + return BG_4X_RESOURCES[id]; + } + } + + public static class TextAppearanceResources { + private final static int [] TEXTAPPEARANCE_RESOURCES = new int [] { + R.style.TextAppearanceNormal, + R.style.TextAppearanceMedium, + R.style.TextAppearanceLarge, + R.style.TextAppearanceSuper + }; + + public static int getTexAppearanceResource(int id) {//容错函数,防止输入的ID大于资源总量,若如此,则自动返回默认的设置结果 + /** + * HACKME: Fix bug of store the resource id in shared preference. + * The id may larger than the length of resources, in this case, + * return the {@link ResourceParser#BG_DEFAULT_FONT_SIZE} + */ + if (id >= TEXTAPPEARANCE_RESOURCES.length) { + return BG_DEFAULT_FONT_SIZE; + } + return TEXTAPPEARANCE_RESOURCES[id]; + } + + public static int getResourcesSize() { + return TEXTAPPEARANCE_RESOURCES.length; + } + } +} diff --git a/two/ui/AlarmAlertActivity.java b/two/ui/AlarmAlertActivity.java new file mode 100644 index 0000000..59cc2fa --- /dev/null +++ b/two/ui/AlarmAlertActivity.java @@ -0,0 +1,177 @@ +/* + * 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. + */ + +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;//便签内容在数据库存储的ID + private String mSnippet;//闹钟出现的内容 + private static final int SNIPPET_PREW_MAX_LEN = 60; + MediaPlayer mPlayer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + /** + * Bundle在Android开发中非常常见,它的作用主要时用于传递数据。 + * Bundle传递的数据包括:string、int、boolean、byte、float、long、double等基本类型或它们对应的数组,也可以是对象或对象数组。 + * 当Bundle传递的是对象或对象数组时,必须实现Serialiable或Parcelable接口。 + */ + + 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();//闹钟完成 + } + } + + private boolean isScreenOn() {//判断屏幕是否锁屏,调用系统函数判断,最后返回值是boolean值(Ture或False) + 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();//开始播放 + /** + * MediaPlayer 类是媒体框架最重要的组成部分之一。 + * 此类的对象能够获取、解码以及播放音频和视频,而且只需极少量设置。它支持多种不同的媒体源 + * 比如本地资源、内部 URI,例如您可能从内容解析器那获取的 URI、外部网址(流式传输) + */ + } 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); + } + /** + * AlertDialog可以在当前的界面上显示一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般是用于提示一些非常重要的内容或者警告信息。 + * 1.创建构造器AlertDialog.Builder的对象; + * 2.通过构造器对象调用setTitle、setMessage、setIcon等方法构造对话框的标题、信息和图标等内容; + * 3.根据需要调用setPositive/Negative/NeutralButton()方法设置正面按钮、负面按钮和中立按钮; + * 4.调用构造器对象的create方法创建AlertDialog对象; + * 5.AlertDialog对象调用show方法,让对话框在界面上显示。 + */ + + public void onClick(DialogInterface dialog, int which) { + switch (which) {//选择click后下一步的操作 + case DialogInterface.BUTTON_NEGATIVE://取消 + Intent intent = new Intent(this, NoteEditActivity.class);//两个类间的数据传输 + intent.setAction(Intent.ACTION_VIEW);//动作属性 + intent.putExtra(Intent.EXTRA_UID, mNoteId);//实现key-value对,EXTRA_UID为key,mNoteId为键 + startActivity(intent);//开始 + break; + default: + break; + } + } + + public void onDismiss(DialogInterface dialog) { + stopAlarmSound();//暂停闹钟声音 + finish(); + } + + private void stopAlarmSound() { + if (mPlayer != null) { + mPlayer.stop();//停止播放 + mPlayer.release();//释放MediaPlayer对象相关的资源 + mPlayer = null; + } + } +} diff --git a/two/ui/AlarmInitReceiver.java b/two/ui/AlarmInitReceiver.java new file mode 100644 index 0000000..7ba989c --- /dev/null +++ b/two/ui/AlarmInitReceiver.java @@ -0,0 +1,66 @@ +/* + * 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. + */ + +package net.micode.notes.ui; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ContentUris; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; + +import net.micode.notes.data.Notes; +import net.micode.notes.data.Notes.NoteColumns; + + +public class AlarmInitReceiver extends BroadcastReceiver { + + private static final String [] PROJECTION = new String [] { + NoteColumns.ID, + NoteColumns.ALERTED_DATE + }; + //调用便签ID和闹钟时间 + private static final int COLUMN_ID = 0; + private static final int COLUMN_ALERTED_DATE = 1; + + @Override + public void onReceive(Context context, Intent intent) { + long currentDate = System.currentTimeMillis(); + Cursor c = context.getContentResolver().query(Notes.CONTENT_NOTE_URI, + PROJECTION, + NoteColumns.ALERTED_DATE + ">? AND " + NoteColumns.TYPE + "=" + Notes.TYPE_NOTE, + new String[] { String.valueOf(currentDate) },//将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(); + }//根据数据库里的闹钟时间创建一个闹钟 + } +} diff --git a/two/ui/AlarmReceiver.java b/two/ui/AlarmReceiver.java new file mode 100644 index 0000000..67a16d5 --- /dev/null +++ b/two/ui/AlarmReceiver.java @@ -0,0 +1,30 @@ +/* + * 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. + */ + +package net.micode.notes.ui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class AlarmReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + intent.setClass(context, AlarmAlertActivity.class);//启动AlarmAlertActivity + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈,所以要新建一个栈装入启动的activity + context.startActivity(intent); + } +}//这是实现alarm这个功能最接近用户层的包,基于AlarmAlertActivity和AlarmInitReceiver \ No newline at end of file diff --git a/two/ui/DateTimePicker.java b/two/ui/DateTimePicker.java new file mode 100644 index 0000000..813e324 --- /dev/null +++ b/two/ui/DateTimePicker.java @@ -0,0 +1,490 @@ +/* + * 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. + */ + +package net.micode.notes.ui; + +import java.text.DateFormatSymbols; +import java.util.Calendar; + +import net.micode.notes.R; + + +import android.content.Context; +import android.text.format.DateFormat; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.NumberPicker; + +public class DateTimePicker extends FrameLayout { + //初始化控件 + private static final boolean DEFAULT_ENABLE_STATE = true; + + private static final int HOURS_IN_HALF_DAY = 12; + private static final int HOURS_IN_ALL_DAY = 24; + private static final int DAYS_IN_ALL_WEEK = 7; + private static final int DATE_SPINNER_MIN_VAL = 0; + private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1; + private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0; + private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23; + private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1; + private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12; + private static final int MINUT_SPINNER_MIN_VAL = 0; + 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; + + //设置闹钟时需要选择的变量 + private final NumberPicker mDateSpinner; + private final NumberPicker mHourSpinner; + private final NumberPicker mMinuteSpinner; + private final NumberPicker mAmPmSpinner; + private Calendar mDate;//定义了Calendar类型的变量mDate,用于操作时间 + //Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。 + + private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; + + private boolean mIsAm; + + private boolean mIs24HourView; + + private boolean mIsEnabled = DEFAULT_ENABLE_STATE; + + private boolean mInitialising; + + private OnDateTimeChangedListener mOnDateTimeChangedListener; + + private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal); + updateDateControl(); + onDateTimeChanged(); + } + };//OnValueChangeListener,这是时间改变监视器,这里主要是对日期的监视 + //将现在日期的值传递给mDate;updateDateControl是同步操作 + + private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {//监视Hour + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + boolean isDateChanged = false; + Calendar cal = Calendar.getInstance(); + 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;//选择12小时制时,晚上12点之后日期的更改 + } 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; + }//选择12小时制时,凌晨12点之后对日期的更改 + 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(); + }//选择12小时制时,中午12点之后对AM和PM的更改 + } else { + if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, 1); + isDateChanged = true;//选择24小时制时,晚上12点之后日期的更改 + } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -1); + isDateChanged = true;//选择24小时制时,凌晨12点之后对日期的更改 + } + } + int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY);//通过数字选择器给newHour赋值 + mDate.set(Calendar.HOUR_OF_DAY, newHour);//通过set将Hour值传给mDate + onDateTimeChanged(); + if (isDateChanged) { + setCurrentYear(cal.get(Calendar.YEAR)); + setCurrentMonth(cal.get(Calendar.MONTH)); + setCurrentDay(cal.get(Calendar.DAY_OF_MONTH)); + } + } + }; + + private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() {//这里是对分钟改变的监视 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + int minValue = mMinuteSpinner.getMinValue(); + int maxValue = mMinuteSpinner.getMaxValue(); + int offset = 0;//设置offset,作为小时改变的一个记录数据 + if (oldVal == maxValue && newVal == minValue) { + offset += 1; + } else if (oldVal == minValue && newVal == maxValue) { + offset -= 1; + }//如果原来值为59,新值为0,则offset加1 + //如果原来值为0,新值为59,则offset减1 + + if (offset != 0) { + mDate.add(Calendar.HOUR_OF_DAY, offset); + mHourSpinner.setValue(getCurrentHour()); + updateDateControl(); + int newHour = getCurrentHourOfDay(); + if (newHour >= HOURS_IN_HALF_DAY) { + mIsAm = false; + updateAmPmControl(); + } else { + mIsAm = true; + updateAmPmControl(); + } + } + mDate.set(Calendar.MINUTE, newVal); + onDateTimeChanged(); + } + }; + + private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() {//对AM和PM的监视 + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mIsAm = !mIsAm; + if (mIsAm) { + mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); + } else { + mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); + } + updateAmPmControl(); + onDateTimeChanged(); + } + }; + + public interface OnDateTimeChangedListener { + void onDateTimeChanged(DateTimePicker view, int year, int month, + int dayOfMonth, int hourOfDay, int minute); + } + + public DateTimePicker(Context context) { + this(context, System.currentTimeMillis()); + }//获取当前的系统时间 + + public DateTimePicker(Context context, long date) { + this(context, date, DateFormat.is24HourFormat(context)); + }//DateFormat上面函数的得到的数据 + + public DateTimePicker(Context context, long date, boolean is24HourView) { + super(context);//获取系统时间 + mDate = Calendar.getInstance(); + mInitialising = true; + mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; + inflate(context, R.layout.datetime_picker, this); + + 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); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); + mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); + mMinuteSpinner.setOnLongPressUpdateInterval(100); + mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener); + + String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings(); + mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm); + mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL); + mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL); + mAmPmSpinner.setDisplayedValues(stringsForAmPm); + mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener); + + // update controls to initial state + updateDateControl(); + updateHourControl(); + updateAmPmControl(); + + set24HourView(is24HourView); + + // set to current time + setCurrentDate(date); + + setEnabled(isEnabled()); + + // set the content descriptions + mInitialising = false; + } + + @Override + public void setEnabled(boolean enabled) { + if (mIsEnabled == enabled) { + return; + } + super.setEnabled(enabled); + mDateSpinner.setEnabled(enabled); + mMinuteSpinner.setEnabled(enabled); + mHourSpinner.setEnabled(enabled); + mAmPmSpinner.setEnabled(enabled); + mIsEnabled = enabled; + } + + @Override + public boolean isEnabled() { + return mIsEnabled; + } + + /** + * Get the current date in millis + * + * @return the current date in millis + */ + public long getCurrentDateInTimeMillis() { + return mDate.getTimeInMillis(); + }//获取当前的秒数 + + /** + * Set the current date + * + * @param date The current date in millis + */ + public void setCurrentDate(long date) { + Calendar cal = Calendar.getInstance(); + 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)); + }//设置当前的日期 + + /** + * Set the current date + * + * @param year The current year + * @param month The current month + * @param dayOfMonth The current dayOfMonth + * @param hourOfDay The current hourOfDay + * @param minute The current minute + */ + public void setCurrentDate(int year, int month, + int dayOfMonth, int hourOfDay, int minute) { + setCurrentYear(year); + setCurrentMonth(month); + setCurrentDay(dayOfMonth); + setCurrentHour(hourOfDay); + setCurrentMinute(minute); + }//设置当前的时间:年月日时分 + + /** + * Get current year + * + * @return The current year + */ + public int getCurrentYear() { + return mDate.get(Calendar.YEAR); + } + + /** + * Set current year + * + * @param year The current year + */ + public void setCurrentYear(int year) { + if (!mInitialising && year == getCurrentYear()) { + return; + } + mDate.set(Calendar.YEAR, year); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current month in the year + * + * @return The current month in the year + */ + public int getCurrentMonth() { + return mDate.get(Calendar.MONTH); + } + + /** + * Set current month in the year + * + * @param month The month in the year + */ + public void setCurrentMonth(int month) { + if (!mInitialising && month == getCurrentMonth()) { + return; + } + mDate.set(Calendar.MONTH, month); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current day of the month + * + * @return The day of the month + */ + public int getCurrentDay() { + return mDate.get(Calendar.DAY_OF_MONTH); + } + + /** + * Set current day of the month + * + * @param dayOfMonth The day of the month + */ + public void setCurrentDay(int dayOfMonth) { + if (!mInitialising && dayOfMonth == getCurrentDay()) { + return; + } + mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth); + updateDateControl(); + onDateTimeChanged(); + } + + /** + * Get current hour in 24 hour mode, in the range (0~23) + * @return The current hour in 24 hour mode + */ + public int getCurrentHourOfDay() { + return mDate.get(Calendar.HOUR_OF_DAY); + } + + private int getCurrentHour() { + if (mIs24HourView){ + return getCurrentHourOfDay(); + } else { + int hour = getCurrentHourOfDay(); + if (hour > HOURS_IN_HALF_DAY) { + return hour - HOURS_IN_HALF_DAY; + } else { + return hour == 0 ? HOURS_IN_HALF_DAY : hour; + } + } + } + + /** + * Set current hour in 24 hour mode, in the range (0~23) + * + * @param hourOfDay + */ + public void setCurrentHour(int hourOfDay) { + if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { + return; + } + mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); + if (!mIs24HourView) { + if (hourOfDay >= HOURS_IN_HALF_DAY) { + mIsAm = false; + if (hourOfDay > HOURS_IN_HALF_DAY) { + hourOfDay -= HOURS_IN_HALF_DAY; + } + } else { + mIsAm = true; + if (hourOfDay == 0) { + hourOfDay = HOURS_IN_HALF_DAY; + } + } + updateAmPmControl(); + } + mHourSpinner.setValue(hourOfDay); + onDateTimeChanged(); + } + + /** + * Get currentMinute + * + * @return The Current Minute + */ + public int getCurrentMinute() { + return mDate.get(Calendar.MINUTE); + } + + /** + * Set current minute + */ + public void setCurrentMinute(int minute) { + if (!mInitialising && minute == getCurrentMinute()) { + return; + } + mMinuteSpinner.setValue(minute); + mDate.set(Calendar.MINUTE, minute); + onDateTimeChanged(); + } + + /** + * @return true if this is in 24 hour view else false. + */ + public boolean is24HourView () { + return mIs24HourView; + } + + /** + * Set whether in 24 hour or AM/PM mode. + * + * @param is24HourView True for 24 hour mode. False for AM/PM mode. + */ + public void set24HourView(boolean is24HourView) { + if (mIs24HourView == is24HourView) { + return; + } + mIs24HourView = is24HourView; + mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); + int hour = getCurrentHourOfDay(); + updateHourControl(); + setCurrentHour(hour); + updateAmPmControl(); + } + + private void updateDateControl() { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(mDate.getTimeInMillis()); + cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); + mDateSpinner.setDisplayedValues(null); + for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { + cal.add(Calendar.DAY_OF_YEAR, 1); + mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); + } + mDateSpinner.setDisplayedValues(mDateDisplayValues); + mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); + mDateSpinner.invalidate(); + }//确定周几 + + private void updateAmPmControl() { + if (mIs24HourView) { + mAmPmSpinner.setVisibility(View.GONE); + } else { + int index = mIsAm ? Calendar.AM : Calendar.PM; + mAmPmSpinner.setValue(index); + mAmPmSpinner.setVisibility(View.VISIBLE); + } + }//确定AM和PM + + private void updateHourControl() { + if (mIs24HourView) { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); + } else { + mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); + mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); + } + }//计算小时 + + /** + * Set the callback that indicates the 'Set' button has been pressed. + * @param callback the callback, if null will do nothing + */ + public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { + mOnDateTimeChangedListener = callback; + } + + private void onDateTimeChanged() { + if (mOnDateTimeChangedListener != null) { + mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), + getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); + } + } +} From db8bf601a1918c73f891761082dbe140391f7191 Mon Sep 17 00:00:00 2001 From: sxg <2363882464@qq.com> Date: Thu, 20 Apr 2023 22:58:03 +0800 Subject: [PATCH 5/5] 1 --- doc/标注/210340071_舒小刚.docx | Bin 0 -> 51930 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/标注/210340071_舒小刚.docx b/doc/标注/210340071_舒小刚.docx index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1ac27224dc1efb42abe1c93acdbed0a458280628 100644 GIT binary patch literal 51930 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