联系人字段有Name,Photo,Email,Event等类型,联系人app支持新建联系人时根据这些类型扩展新的字段,添加一个Event类型的字段就可以实现添加生日信息,Event类型的字段支持设置事件的名字和事件的时间,添加好后点击就会跳到日历中
实现见FallbackAccountType.java 里的addDataKindEvent。
添加好后会显示在联系人信息的最下面,如果想显示在上面可以修改QuickContactActivity.java里的LEADING_MIMETYPES添加Event.CONTENT_ITEM_TYPE,生日信息就会和电话显示在一起。
点击生日信息会跳转到日历中,但不会在日历中插入提醒事件,如果想在生日时收到提醒通知,可以在保存联系人时插入提醒到日历
数据库中,代码在ContactSaveService.java里的updateBirthdayNotify,用日历数据库中的hasExtendedProperties字段存储这个提醒对应的联系人id,在更新联系人时更新对应的日历提醒
patch如下:
diff --git a/mediatek/proprietary/packages/apps/Contacts/AndroidManifest.xml b/mediatek/proprietary/packages/apps/Contacts/AndroidManifest.xml
index 2c5b382..1499a2a 100644
--- a/mediatek/proprietary/packages/apps/Contacts/AndroidManifest.xml
+++ b/mediatek/proprietary/packages/apps/Contacts/AndroidManifest.xml
@@ -53,6 +53,7 @@
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.READ_CALENDAR"/>
+ <uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL"/>
<!-- Following used for Contact metadata syncing -->
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
diff --git a/mediatek/proprietary/packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java b/mediatek/proprietary/packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java
index 9b8d5a5..032e9a0 100644
--- a/mediatek/proprietary/packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java
+++ b/mediatek/proprietary/packages/apps/Contacts/src/com/android/contacts/ContactSaveService.java
@@ -44,8 +44,10 @@ import android.os.Looper;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.SystemProperties;
+import android.provider.CalendarContract;
import android.provider.ContactsContract;
import android.provider.ContactsContract.AggregationExceptions;
+import android.provider.ContactsContract.CommonDataKinds.Event;
import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts;
@@ -72,10 +74,12 @@ import com.android.contacts.model.CPOWrapper;
import com.android.contacts.model.RawContactDelta;
import com.android.contacts.model.RawContactDeltaList;
import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
import com.android.contacts.model.account.AccountWithDataSet;
import com.android.contacts.preference.ContactsPreferences;
import com.android.contacts.util.ContactDisplayUtils;
import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.util.DateUtils;
import com.android.contacts.util.PermissionsUtil;
import com.android.contactsbind.FeedbackHelper;
@@ -86,7 +90,9 @@ import com.mediatek.contacts.ContactSaveServiceEx;
import com.mediatek.contacts.util.Log;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collection;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -557,6 +563,84 @@ public class ContactSaveService extends IntentService {
}
return serviceIntent;
}
+
+ // fangao cyj add for contact birthday start
+ private void updatecalendar(final long rawContactId, String datestr, String title) {
+ long date = 0;
+ boolean everyYear = false;
+ if (datestr != null) {
+ everyYear = datestr.startsWith("--");
+ final Calendar cal = DateUtils.parseDate(datestr, false);
+ if (cal != null) {
+ final Date nextAnniversary = DateUtils.getNextAnnualDate(cal);
+ date = nextAnniversary.getTime();
+ }
+ }
+ long hasExtendedProperties = rawContactId + 100;
+ Intent i = new Intent("fangao.intent.action.BIRTHDAY_NOTIFY");
+ i.setPackage("com.android.providers.calendar");
+ i.putExtra("contactId", hasExtendedProperties);
+ i.putExtra("date", date);
+ i.putExtra("title", title);
+ i.putExtra("everyYear", everyYear);
+ sendBroadcast(i);
+ }
+