Squashed commit of the following:

commit 9f451086c2
Author: zcx <1078327420@qq.com>
Date:   Sat Dec 23 16:04:43 2023 +0800

    12.23添加

commit e5572d51b9
Author: zcx <1078327420@qq.com>
Date:   Sat Dec 23 10:21:14 2023 +0800

    12.23

commit d09e80db11
Author: zcx <1078327420@qq.com>
Date:   Fri Dec 22 20:54:32 2023 +0800

    1

commit 4853527fe5
Author: zcx <1078327420@qq.com>
Date:   Thu Dec 21 21:16:22 2023 +0800

    1

commit b145d72307
Author: zcx <1078327420@qq.com>
Date:   Thu Dec 21 21:14:41 2023 +0800

    1

commit fcc509a830
Author: zcx <1078327420@qq.com>
Date:   Thu Dec 21 10:01:45 2023 +0800

    1

commit 197dfc861e
Author: zcx <1078327420@qq.com>
Date:   Tue Dec 19 11:54:49 2023 +0800

    1

commit ed719ab579
Author: zcx <1078327420@qq.com>
Date:   Tue Dec 19 11:47:13 2023 +0800

    最近标注

commit 48849a21d6
Merge: c7b8dfe d23da33
Author: zcx <1078327420@qq.com>
Date:   Tue Dec 19 07:38:32 2023 +0800

    Merge branch 'main' of https://bdgit.educoder.net/pq3fnjual/Minotes into 曾晨曦_branch

    # Conflicts:
    #	doc/实践模板-开源软件泛读、标注和维护报告文档.docx

commit c7b8dfe14a
Author: zcx <1078327420@qq.com>
Date:   Tue Dec 19 07:27:37 2023 +0800

    1

commit 781d628f8f
Author: zcx <1078327420@qq.com>
Date:   Sat Dec 16 08:03:54 2023 +0800

    标注

commit fe88fa8706
Merge: 40a106a 50cfb15
Author: zcx <1078327420@qq.com>
Date:   Sat Dec 16 08:02:00 2023 +0800

    Merge branch 'main' of https://bdgit.educoder.net/pq3fnjual/Minotes into 曾晨曦_branch

commit 40a106ab72
Author: zcx <1078327420@qq.com>
Date:   Thu Dec 14 18:50:49 2023 +0800

    1

commit a6bf1d5701
Author: zcx <1078327420@qq.com>
Date:   Thu Dec 14 18:36:19 2023 +0800

    UI包一部分

commit a99095dbf9
Author: zcx <1078327420@qq.com>
Date:   Thu Dec 14 18:25:02 2023 +0800

    data包

commit b7353d6c78
Merge: b5f43d0 0b1994e
Author: zcx <1078327420@qq.com>
Date:   Thu Dec 14 18:22:15 2023 +0800

    Merge branch 'main' of https://bdgit.educoder.net/pq3fnjual/Minotes into 曾晨曦_branch

    # Conflicts:
    #	.gitignore
    #	doc/实践模板-开源软件泛读、标注和维护报告文档.docx

commit b5f43d0721
Author: zcx <1078327420@qq.com>
Date:   Sun Dec 10 10:38:18 2023 +0800

    1

commit a8c79ccdc5
Author: zcx <1078327420@qq.com>
Date:   Mon Dec 4 21:09:41 2023 +0800

    。

# Conflicts:
#	doc/实践模板-开源软件泛读、标注和维护报告文档.docx
#	src/Notes-master/src/net/micode/notes/data/Contact.java
#	src/Notes-master/src/net/micode/notes/data/Notes.java
#	src/Notes-master/src/net/micode/notes/data/NotesDatabaseHelper.java
#	src/Notes-master/src/net/micode/notes/ui/AlarmAlertActivity.java
#	src/Notes-master/src/net/micode/notes/ui/AlarmInitReceiver.java
#	src/Notes-master/src/net/micode/notes/ui/AlarmReceiver.java
#	src/Notes-master/src/net/micode/notes/ui/DateTimePicker.java
#	src/Notes-master/src/net/micode/notes/ui/NotesListItem.java
#	src/Notes-master/src/net/micode/notes/ui/NotesPreferenceActivity.java
main
zcx 2 years ago
parent 308392b156
commit a8c54644fe

@ -28,6 +28,7 @@ import android.telephony.PhoneNumberUtils;
import android.util.Log;//引用android.util.Log import android.util.Log;//引用android.util.Log
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
import java.util.HashMap;//引用java.util.HashMap import java.util.HashMap;//引用java.util.HashMap
@ -36,12 +37,17 @@ public class Contact {
======= =======
======= =======
>>>>>>> _branch >>>>>>> _branch
=======
>>>>>>> _branch
import java.util.HashMap;//引用java.util.HashMap import java.util.HashMap;//引用java.util.HashMap
//联系人 //联系人
public class Contact { public class Contact {
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
>>>>>>> _branch
=======
>>>>>>> _branch >>>>>>> _branch
======= =======
>>>>>>> _branch >>>>>>> _branch
@ -84,12 +90,17 @@ public class Contact {
// moveToFirst()返回第一条 // moveToFirst()返回第一条
if (cursor != null && cursor.moveToFirst()) { if (cursor != null && cursor.moveToFirst()) {
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
try { try {
======= =======
// 找到相关信息 // 找到相关信息
try { try {
>>>>>>> _branch >>>>>>> _branch
=======
// 找到相关信息
try {
>>>>>>> _branch
======= =======
// 找到相关信息 // 找到相关信息
try { try {
@ -101,11 +112,15 @@ public class Contact {
} catch (IndexOutOfBoundsException e) { } catch (IndexOutOfBoundsException e) {
Log.e(TAG, " Cursor get string error " + e.toString()); Log.e(TAG, " Cursor get string error " + e.toString());
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
//输出相关string error错误信息 //输出相关string error错误信息
======= =======
//输出相关string error错误信息 //输出相关string error错误信息
>>>>>>> _branch >>>>>>> _branch
=======
//输出相关string error错误信息
>>>>>>> _branch
======= =======
//输出相关string error错误信息 //输出相关string error错误信息
>>>>>>> _branch >>>>>>> _branch
@ -117,11 +132,15 @@ public class Contact {
} else { } else {
Log.d(TAG, "No contact matched with number:" + phoneNumber); Log.d(TAG, "No contact matched with number:" + phoneNumber);
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
//输出No contact matched错误信息 //输出No contact matched错误信息
======= =======
//输出No contact matched错误信息 //输出No contact matched错误信息
>>>>>>> _branch >>>>>>> _branch
=======
//输出No contact matched错误信息
>>>>>>> _branch
======= =======
//输出No contact matched错误信息 //输出No contact matched错误信息
>>>>>>> _branch >>>>>>> _branch

@ -17,23 +17,31 @@
package net.micode.notes.data;//此类在文件中的位置 package net.micode.notes.data;//此类在文件中的位置
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
======= =======
>>>>>>> _branch >>>>>>> _branch
======= =======
>>>>>>> _branch
=======
>>>>>>> _branch >>>>>>> _branch
import android.content.ContentUris;//引用android.content.ContentUris import android.content.ContentUris;//引用android.content.ContentUris
import android.net.Uri;//引用android.net.Uri import android.net.Uri;//引用android.net.Uri
// Notes 类中定义了很多常量这些常量大多是int型和string型 // Notes 类中定义了很多常量这些常量大多是int型和string型
public class Notes { public class Notes {
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
//定义两个常量 //定义两个常量
======= =======
//定义两个常量 //定义两个常量
>>>>>>> _branch >>>>>>> _branch
=======
//定义两个常量
>>>>>>> _branch
======= =======
//定义两个常量 //定义两个常量
>>>>>>> _branch >>>>>>> _branch
@ -56,6 +64,7 @@ public class Notes {
public static final int ID_CALL_RECORD_FOLDER = -2; public static final int ID_CALL_RECORD_FOLDER = -2;
public static final int ID_TRASH_FOLER = -3; public static final int ID_TRASH_FOLER = -3;
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
public static final String INTENT_EXTRA_ALERT_DATE = public static final String INTENT_EXTRA_ALERT_DATE =
@ -80,6 +89,8 @@ public class Notes {
//定义使用widget挂件的常量 //定义使用widget挂件的常量
======= =======
======= =======
>>>>>>> _branch
=======
>>>>>>> _branch >>>>>>> _branch
public static final String INTENT_EXTRA_ALERT_DATE = public static final String INTENT_EXTRA_ALERT_DATE =
@ -103,6 +114,9 @@ public class Notes {
//定义使用widget挂件的常量 //定义使用widget挂件的常量
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
>>>>>>> _branch
=======
>>>>>>> _branch >>>>>>> _branch
======= =======
>>>>>>> _branch >>>>>>> _branch
@ -119,6 +133,7 @@ public class Notes {
* 便 URI * 便 URI
*/ */
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" +
@ -127,6 +142,8 @@ AUTHORITY + "/note");//定义查询便签和文件夹的指针。
======= =======
======= =======
>>>>>>> _branch
=======
>>>>>>> _branch >>>>>>> _branch
public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" + public static final Uri CONTENT_NOTE_URI = Uri.parse("content://" +
@ -134,6 +151,9 @@ AUTHORITY + "/note");//定义查询便签和文件夹的指针。
public static final Uri my_URI = ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI , 10); public static final Uri my_URI = ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI , 10);
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
>>>>>>> _branch
=======
>>>>>>> _branch >>>>>>> _branch
======= =======
>>>>>>> _branch >>>>>>> _branch

@ -206,11 +206,15 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
" SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER + " SET " + NoteColumns.PARENT_ID + "=" + Notes.ID_TRASH_FOLER +
" WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" + " WHERE " + NoteColumns.PARENT_ID + "=old." + NoteColumns.ID + ";" +
<<<<<<< HEAD <<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD <<<<<<< HEAD
" END"; " END";
======= =======
" END"; " END";
>>>>>>> _branch >>>>>>> _branch
=======
" END";
>>>>>>> _branch
======= =======
" END"; " END";
>>>>>>> _branch >>>>>>> _branch

@ -75,15 +75,14 @@ public class AlarmAlertActivity extends Activity implements OnClickListener, OnD
*/ */
try { try {
mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1)); mNoteId = Long.valueOf(intent.getData().getPathSegments().get(1));
mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId); mSnippet = DataUtils.getSnippetById(this.getContentResolver(), mNoteId);//根据ID从数据库中获取标签的内容getContentResolver是实现数据共享实例存储
//根据ID从数据库中获取标签的内容
//getContentResolver是实现数据共享实例存储。
mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0, mSnippet = mSnippet.length() > SNIPPET_PREW_MAX_LEN ? mSnippet.substring(0,
SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info) SNIPPET_PREW_MAX_LEN) + getResources().getString(R.string.notelist_string_info)
: mSnippet; : mSnippet;//判断标签片段是否达到符合长度
//判断标签片段是否达到符合长度
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
e.printStackTrace(); e.printStackTrace();//打印出异常,并且输出在哪里出现的异常
return; return;
} }

@ -35,8 +35,8 @@ public class AlarmInitReceiver extends BroadcastReceiver {
NoteColumns.ID, NoteColumns.ID,
NoteColumns.ALERTED_DATE NoteColumns.ALERTED_DATE
}; };
private static final int COLUMN_ID = 0; private static final int COLUMN_ID = 0;//设置ID
private static final int COLUMN_ALERTED_DATE = 1; private static final int COLUMN_ALERTED_DATE = 1;//设置时间常量
//Broadcast Receiver是Android中的四大组件之一。 AlarmInitReceiver的配置“android.intent.action.BOOT_COMPLETED”表明 //Broadcast Receiver是Android中的四大组件之一。 AlarmInitReceiver的配置“android.intent.action.BOOT_COMPLETED”表明
//Android手机开机后会发送android.intent.action.BOOT_COMPLETED广播监听这个广播就能监听开机。 //Android手机开机后会发送android.intent.action.BOOT_COMPLETED广播监听这个广播就能监听开机。
@ -67,8 +67,8 @@ public class AlarmInitReceiver extends BroadcastReceiver {
} while (c.moveToNext()); } while (c.moveToNext());
} }
c.close(); c.close();
} }
//通过网上查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤 //通过查找资料发现,对于闹钟机制的启动,通常需要上面的几个步骤
//如新建Intent、PendingIntent以及AlarmManager等 //如新建Intent、PendingIntent以及AlarmManager等
} }
} }

@ -20,14 +20,15 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
//功能:接收闹钟触发的广播接收器
//实现接收到闹钟触发的广播时被调用在onReceive方法中我们可以执行操作
public class AlarmReceiver extends BroadcastReceiver { public class AlarmReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
intent.setClass(context, AlarmAlertActivity.class); //启动AlarmAlertActivity intent.setClass(context, AlarmAlertActivity.class); //启动AlarmAlertActivity
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//activity要存在于activity的栈中而非activity的途径启动activity时必然不存在一个activity的栈
//所以要新起一个栈装入启动的activity context.startActivity(intent);//activity要存在于activity的栈中而非activity的途径启动activity时必然不存在一个activity的栈所以要新起一个栈装入启动的activity
context.startActivity(intent);
} }
} }

@ -19,6 +19,7 @@ package net.micode.notes.ui;
import java.text.DateFormatSymbols; import java.text.DateFormatSymbols;
import java.util.Calendar; import java.util.Calendar;
import net.micode.notes.R; import net.micode.notes.R;
import net.micode.notes.ui.DateTimePicker.OnDateTimeChangedListener;
import android.content.Context; import android.content.Context;
import android.text.format.DateFormat; import android.text.format.DateFormat;
import android.view.View; import android.view.View;
@ -142,21 +143,24 @@ public class DateTimePicker extends FrameLayout {
} }
//hour改变对日期的影响 //hour改变对日期的影响
// 如果偏移量不为零,则通过添加偏移量(以小时为单位)来调整日期
if (offset != 0) { if (offset != 0) {
mDate.add(Calendar.HOUR_OF_DAY, offset); mDate.add(Calendar.HOUR_OF_DAY, offset);// 更新小时选择器以反映当前小时
mHourSpinner.setValue(getCurrentHour()); mHourSpinner.setValue(getCurrentHour());// 根据更改更新日期控件
updateDateControl(); updateDateControl();// 获取调整后的新小时
int newHour = getCurrentHourOfDay(); int newHour = getCurrentHourOfDay();
// 检查新小时是否在一天的后半部分
if (newHour >= HOURS_IN_HALF_DAY) { if (newHour >= HOURS_IN_HALF_DAY) {
mIsAm = false; mIsAm = false;// 将时间设置为下午
updateAmPmControl(); updateAmPmControl();// 更新上午/下午控件以反映更改
} else { } else {
mIsAm = true; mIsAm = true;
updateAmPmControl(); updateAmPmControl();
} }
} }
mDate.set(Calendar.MINUTE, newVal); mDate.set(Calendar.MINUTE, newVal);// 将日期中的分钟设置为新值
onDateTimeChanged(); onDateTimeChanged();//通知时间和日期已更改
} }
}; };
@ -165,11 +169,11 @@ public class DateTimePicker extends FrameLayout {
@Override @Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) { public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
mIsAm = !mIsAm; mIsAm = !mIsAm; // 切换上午和下午状态
if (mIsAm) { if (mIsAm) {
mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY); mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY);// 如果是上午,减去半天的小时数
} else { } else {
mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY); mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY);// 如果是下午,加上半天的小时数
} }
updateAmPmControl(); updateAmPmControl();
onDateTimeChanged(); onDateTimeChanged();
@ -249,12 +253,14 @@ public class DateTimePicker extends FrameLayout {
if (mIsEnabled == enabled) { if (mIsEnabled == enabled) {
return; return;
} }
// 设置日期、分钟、小时、上午/下午控件是否可用
super.setEnabled(enabled); super.setEnabled(enabled);
mDateSpinner.setEnabled(enabled); mDateSpinner.setEnabled(enabled);
mMinuteSpinner.setEnabled(enabled); mMinuteSpinner.setEnabled(enabled);
mHourSpinner.setEnabled(enabled); mHourSpinner.setEnabled(enabled);
mAmPmSpinner.setEnabled(enabled); mAmPmSpinner.setEnabled(enabled);
mIsEnabled = enabled;
mIsEnabled = enabled;// 更新控件状态
} }
@ -322,12 +328,16 @@ public class DateTimePicker extends FrameLayout {
onDateTimeChanged(); onDateTimeChanged();
} }
/*
*
*/
public int getCurrentMonth() { public int getCurrentMonth() {
return mDate.get(Calendar.MONTH); return mDate.get(Calendar.MONTH);
} }
/*
*
*/
public void setCurrentMonth(int month) { public void setCurrentMonth(int month) {
if (!mInitialising && month == getCurrentMonth()) { if (!mInitialising && month == getCurrentMonth()) {
return; return;
@ -337,12 +347,16 @@ public class DateTimePicker extends FrameLayout {
onDateTimeChanged(); onDateTimeChanged();
} }
/*
*
*/
public int getCurrentDay() { public int getCurrentDay() {
return mDate.get(Calendar.DAY_OF_MONTH); return mDate.get(Calendar.DAY_OF_MONTH);
} }
/*
*
*/
public void setCurrentDay(int dayOfMonth) { public void setCurrentDay(int dayOfMonth) {
if (!mInitialising && dayOfMonth == getCurrentDay()) { if (!mInitialising && dayOfMonth == getCurrentDay()) {
return; return;
@ -352,54 +366,68 @@ public class DateTimePicker extends FrameLayout {
onDateTimeChanged(); onDateTimeChanged();
} }
/*
*
*/
public int getCurrentHourOfDay() { public int getCurrentHourOfDay() {
return mDate.get(Calendar.HOUR_OF_DAY); return mDate.get(Calendar.HOUR_OF_DAY);
} }
/*
*
*/
private int getCurrentHour() { private int getCurrentHour() {
if (mIs24HourView){ if (mIs24HourView){
return getCurrentHourOfDay(); return getCurrentHourOfDay();// 如果是24小时制直接返回当前小时
} else { } else {
int hour = getCurrentHourOfDay(); int hour = getCurrentHourOfDay();
if (hour > HOURS_IN_HALF_DAY) { if (hour > HOURS_IN_HALF_DAY) {
return hour - HOURS_IN_HALF_DAY; return hour - HOURS_IN_HALF_DAY;// 如果当前小时大于半天的小时数,返回减去半天后的小时数
} else { } else {
return hour == 0 ? HOURS_IN_HALF_DAY : hour; return hour == 0 ? HOURS_IN_HALF_DAY : hour;// 如果当前小时为0则返回半天的小时数否则返回当前小时
} }
} }
} }
/*
*
*/
//24小时制 //24小时制
public void setCurrentHour(int hourOfDay) { public void setCurrentHour(int hourOfDay) {
// 如果不是初始化过程,并且要设置的小时等于当前小时,则不做任何操作
if (!mInitialising && hourOfDay == getCurrentHourOfDay()) { if (!mInitialising && hourOfDay == getCurrentHourOfDay()) {
return; return;
} }
mDate.set(Calendar.HOUR_OF_DAY, hourOfDay); mDate.set(Calendar.HOUR_OF_DAY, hourOfDay);// 将日期中的小时设置为新值
// 如果不是24小时制
if (!mIs24HourView) { if (!mIs24HourView) {
if (hourOfDay >= HOURS_IN_HALF_DAY) { if (hourOfDay >= HOURS_IN_HALF_DAY) {
mIsAm = false; mIsAm = false;// 设置为下午
if (hourOfDay > HOURS_IN_HALF_DAY) { if (hourOfDay > HOURS_IN_HALF_DAY) {
hourOfDay -= HOURS_IN_HALF_DAY; hourOfDay -= HOURS_IN_HALF_DAY;// 如果大于半天的小时数,减去半天的小时数
} }
} else { } else {
mIsAm = true; mIsAm = true;
if (hourOfDay == 0) { if (hourOfDay == 0) {
hourOfDay = HOURS_IN_HALF_DAY; hourOfDay = HOURS_IN_HALF_DAY;// 如果小时为0设置为半天的小时数
} }
} }
updateAmPmControl(); updateAmPmControl();
} }
mHourSpinner.setValue(hourOfDay); mHourSpinner.setValue(hourOfDay); // 设置小时控件的值为新值
onDateTimeChanged(); onDateTimeChanged();
} }
/*
*
*/
public int getCurrentMinute() { public int getCurrentMinute() {
return mDate.get(Calendar.MINUTE); return mDate.get(Calendar.MINUTE);
} }
/*
*
*/
public void setCurrentMinute(int minute) { public void setCurrentMinute(int minute) {
if (!mInitialising && minute == getCurrentMinute()) { if (!mInitialising && minute == getCurrentMinute()) {
return; return;
@ -417,29 +445,30 @@ public class DateTimePicker extends FrameLayout {
public void set24HourView(boolean is24HourView) { public void set24HourView(boolean is24HourView) {
if (mIs24HourView == is24HourView) { if (mIs24HourView == is24HourView) {
return; return; // 如果当前24小时制状态与要设置的状态相同则不做任何操作
} }
mIs24HourView = is24HourView; mIs24HourView = is24HourView;
mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE); mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE);// 根据24小时制状态设置上午/下午控件的可见性
int hour = getCurrentHourOfDay(); int hour = getCurrentHourOfDay();// 获取当前小时
updateHourControl(); updateHourControl();// 更新小时控件
setCurrentHour(hour); setCurrentHour(hour);// 设置当前小时
updateAmPmControl(); updateAmPmControl();// 更新上午/下午控件
} }
// 对于星期几的算法 // 对于星期几的算法
private void updateDateControl() { private void updateDateControl() {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(mDate.getTimeInMillis()); cal.setTimeInMillis(mDate.getTimeInMillis());// 获取当前时间
cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1); cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / 2 - 1);// 将时间向前推移半周减一天
mDateSpinner.setDisplayedValues(null); mDateSpinner.setDisplayedValues(null);// 清空日期控件的显示值
// 遍历一周的日期
for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) { for (int i = 0; i < DAYS_IN_ALL_WEEK; ++i) {
cal.add(Calendar.DAY_OF_YEAR, 1); cal.add(Calendar.DAY_OF_YEAR, 1);
mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal); mDateDisplayValues[i] = (String) DateFormat.format("MM.dd EEEE", cal);// 将日期格式化为"月.日 星期"的形式,并存入日期显示值数组
} }
mDateSpinner.setDisplayedValues(mDateDisplayValues); mDateSpinner.setDisplayedValues(mDateDisplayValues); //设置日期控件的显示值为日期显示值数组
mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2);//设置日期控件的初始值为一周的中间位置
mDateSpinner.invalidate(); mDateSpinner.invalidate();// 使日期控件失效,以便刷新显示
} }
// 对于AM\PM操作的算法 // 对于AM\PM操作的算法
@ -454,10 +483,14 @@ public class DateTimePicker extends FrameLayout {
} }
private void updateHourControl() { private void updateHourControl() {
//如果是24小时制
// 设置小时控件的最小值和最大值
if (mIs24HourView) { if (mIs24HourView) {
mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW); mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW);
mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW); mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW);
} else { } else {
// 如果是12小时制
// 设置小时控件的最小值和最大值
mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW);
mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW);
} }
@ -468,11 +501,13 @@ public class DateTimePicker extends FrameLayout {
* @param callback null * @param callback null
*/ */
public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) {
mOnDateTimeChangedListener = callback; mOnDateTimeChangedListener = callback;// 设置日期时间变化监听器的回调
} }
// 当日期时间发生变化时触发回调
private void onDateTimeChanged() { private void onDateTimeChanged() {
// 如果日期时间变化监听器不为空,则触发回调
if (mOnDateTimeChangedListener != null) { if (mOnDateTimeChangedListener != null) {
// 通过回调通知当前年、月、日、小时、分钟的变化
mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(), mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(),
getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute()); getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute());
} }

@ -62,20 +62,47 @@ public class NotesListItem extends LinearLayout {
mItemData = data; mItemData = data;
//下面的语句块设置控件属性一共三种情况由data的id和父id是否与保存到文件夹的id一致来决定 //下面的语句块设置控件属性一共三种情况由data的id和父id是否与保存到文件夹的id一致来决定
if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) {
mCallName.setVisibility(View.GONE); // 如果数据的ID为通话记录文件夹
mAlert.setVisibility(View.VISIBLE); // 隐藏通话名称视图,显示提醒视图
mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);//设置该textview的style mCallName.setVisibility(View.GONE);
mAlert.setVisibility(View.VISIBLE);
mTitle.setText(context.getString(R.string.call_record_folder_name)
+ context.getString(R.string.format_folder_files_count, data.getNotesCount()));//settext为设置内容 mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);// 设置标题文本外观样式
mAlert.setImageResource(R.drawable.call_record);
mTitle.setText(context.getString(R.string.call_record_folder_name)
+ context.getString(R.string.format_folder_files_count, data.getNotesCount()));// 设置标题文本内容为通话记录文件夹名称和文件数量
mAlert.setImageResource(R.drawable.call_record);// 设置提醒图标为通话记录图标
// 如果数据的父ID为通话记录文件夹
} else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) { } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) {
mCallName.setVisibility(View.VISIBLE); // 显示通话名称视图,并设置通话名称文本
mCallName.setText(data.getCallName()); mCallName.setVisibility(View.VISIBLE);
mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem); mCallName.setText(data.getCallName());
mTitle.setTextAppearance(context, R.style.TextAppearanceSecondaryItem); // 设置标题文本外观样式
mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet()));// 设置标题文本内容为格式化后的片段
// 如果数据有提醒,则显示提醒图标,否则隐藏
if (data.hasAlert()) {
mAlert.setImageResource(R.drawable.clock);
mAlert.setVisibility(View.VISIBLE);
} else {
mAlert.setVisibility(View.GONE);
}
} else {
// 其他情况
mCallName.setVisibility(View.GONE);// 隐藏通话名称视图
mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);// 设置标题文本外观样式
if (data.getType() == Notes.TYPE_FOLDER) {
mTitle.setText(data.getSnippet()
+ context.getString(R.string.format_folder_files_count,
data.getNotesCount()));// 如果数据类型为文件夹,则设置标题文本内容为文件夹片段和文件数量
mAlert.setVisibility(View.GONE);// 隐藏提醒图标
} else {
// 如果数据类型不为文件夹,则设置标题文本内容为格式化后的片段
mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet()));
// 如果数据有提醒,则显示提醒图标,否则隐藏
if (data.hasAlert()) { if (data.hasAlert()) {
mAlert.setImageResource(R.drawable.clock);//图片来源的设置 mAlert.setImageResource(R.drawable.clock);//图片来源的设置
mAlert.setVisibility(View.VISIBLE); mAlert.setVisibility(View.VISIBLE);
@ -105,6 +132,9 @@ public class NotesListItem extends LinearLayout {
setBackground(data); setBackground(data);
} }
mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate()));// 设置时间文本为相对时间跨度字符串,从数据的修改日期中获取
setBackground(data);// 设置背景
}
//根据data的文件属性来设置背景 //根据data的文件属性来设置背景
private void setBackground(NoteItemData data) { private void setBackground(NoteItemData data) {

@ -245,64 +245,62 @@ public class NotesPreferenceActivity extends PreferenceActivity {
//设置标题以及子标题的内容 //设置标题以及子标题的内容
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null); View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title); TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); titleTextView.setText(getString(R.string.preferences_dialog_select_account_title)); // 设置标题文本
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle); TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips)); // 设置子标题文本
dialogBuilder.setCustomTitle(titleView); dialogBuilder.setCustomTitle(titleView); // 设置自定义标题
dialogBuilder.setPositiveButton(null, null); dialogBuilder.setPositiveButton(null, null); // 设置积极按钮为空
//获取同步账户信息 // 获取同步账户信息
Account[] accounts = getGoogleAccounts(); Account[] accounts = getGoogleAccounts(); // 获取Google账户信息
String defAccount = getSyncAccountName(this); String defAccount = getSyncAccountName(this); // 获取默认同步账户名称
mOriAccounts = accounts; mOriAccounts = accounts; // 保存原始账户信息
mHasAddedAccount = false; mHasAddedAccount = false; // 将新加账户标志置为false
if (accounts.length > 0) { if (accounts.length > 0) {
CharSequence[] items = new CharSequence[accounts.length]; CharSequence[] items = new CharSequence[accounts.length]; // 创建一个CharSequence数组用于存储账户名称
final CharSequence[] itemMapping = items; final CharSequence[] itemMapping = items; // 创建一个最终的CharSequence数组用于映射
int checkedItem = -1; int checkedItem = -1; // 初始化选中的项为-1
int index = 0; int index = 0;
for (Account account : accounts) { for (Account account : accounts) {
if (TextUtils.equals(account.name, defAccount)) { if (TextUtils.equals(account.name, defAccount)) {
checkedItem = index; //在账户列表中查询到所需账户 checkedItem = index; // 如果找到默认账户,设置选中的项为当前索引
} }
items[index++] = account.name; items[index++] = account.name; // 将账户名称添加到数组中
} }
//设置点击后执行的事件,包括检录新同步账户和刷新标签界面 // 设置单选列表项,并为每一项设置点击事件
dialogBuilder.setSingleChoiceItems(items, checkedItem, dialogBuilder.setSingleChoiceItems(items, checkedItem,
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
setSyncAccount(itemMapping[which].toString()); setSyncAccount(itemMapping[which].toString()); // 设置选择的同步账户
dialog.dismiss();//取消对话框 dialog.dismiss(); // 关闭对话框
refreshUI(); // 刷新界面
refreshUI();
} }
}); });
} }
View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null); // 加载自定义的添加账户视图
dialogBuilder.setView(addAccountView);//给新加账户对话框设置自定义样式 dialogBuilder.setView(addAccountView); // 设置对话框的视图为添加账户视图
final AlertDialog dialog = dialogBuilder.show();//显示对话框 final AlertDialog dialog = dialogBuilder.show(); // 显示对话框
//建立新加账户对话框的监听器 // 设置添加账户视图的点击事件监听器
addAccountView.setOnClickListener(new View.OnClickListener() { addAccountView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
mHasAddedAccount = true;//将新加账户的hash置true mHasAddedAccount = true; // 将新加账户的标志置为true
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");//建立网络建立组件 Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS"); // 创建一个添加账户的意图
intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] { intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
"gmail-ls" "gmail-ls"
}); });
startActivityForResult(intent, -1);//跳回上一个选项 startActivityForResult(intent, -1); // 启动添加账户的界面,并等待结果返回
dialog.dismiss();//关闭一个Dialog对话框 dialog.dismiss(); // 关闭对话框
} }
}); });
@ -386,10 +384,10 @@ public class NotesPreferenceActivity extends PreferenceActivity {
//重置当地同步任务的信息 //重置当地同步任务的信息
new Thread(new Runnable() { new Thread(new Runnable() {
public void run() { public void run() {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();// 创建ContentValues对象用于存储要更新的列值
values.put(NoteColumns.GTASK_ID, ""); values.put(NoteColumns.GTASK_ID, "");// 将GTASK_ID列的值设置为空字符串
values.put(NoteColumns.SYNC_ID, 0); values.put(NoteColumns.SYNC_ID, 0);
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null); getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);// 调用getContentResolver().update方法更新数据库中的数据
} }
}).start(); }).start();
@ -493,8 +491,8 @@ public class NotesPreferenceActivity extends PreferenceActivity {
//在主页情况下在创建连接组件intent发出清空的信号并开始一个相应的activity //在主页情况下在创建连接组件intent发出清空的信号并开始一个相应的activity
case android.R.id.home: case android.R.id.home:
Intent intent = new Intent(this, NotesListActivity.class); Intent intent = new Intent(this, NotesListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);// 添加FLAG_ACTIVITY_CLEAR_TOP标志清除位于该Activity上方的所有Activity实例
startActivity(intent); startActivity(intent);// 启动NotesListActivity
return true; return true;
default: default:

Loading…
Cancel
Save