@@ -190,9 +191,47 @@ public class AllInOneActivity extends AbstractCalendarActivity implements EventH
}
}; + // XBH add patch start :
+ private void setDefaultAccount(ContentResolver cr) {
+ Log.d(TAG, "Set default account");
+ TimeZone timeZone = TimeZone.getDefault();
+ ContentValues value = new ContentValues();
+ value.put(Calendars.NAME, "XBH");
+
+ value.put(Calendars.ACCOUNT_NAME, "xbhgmailaddress@gmail.com");
+ value.put(Calendars.ACCOUNT_TYPE, "com.android.exchange");
+ value.put(Calendars.CALENDAR_DISPLAY_NAME, "XBH");
+ value.put(Calendars.VISIBLE, 1);
+ value.put(Calendars.CALENDAR_COLOR, -9206951);
+ value.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER);
+ value.put(Calendars.SYNC_EVENTS, 1);
+ value.put(Calendars.CALENDAR_TIME_ZONE, timeZone.getID());
+ value.put(Calendars.OWNER_ACCOUNT, "xbhgmailaddress@gmail.com");
+ value.put(Calendars.CAN_ORGANIZER_RESPOND, 0);
+
+ Uri calendarUri = Calendars.CONTENT_URI;
+ calendarUri = calendarUri.buildUpon()
+ .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
+ .appendQueryParameter(Calendars.ACCOUNT_NAME, "xbhgmailaddress@gmail.com")
+ .appendQueryParameter(Calendars.ACCOUNT_TYPE, "com.android.exchange")
+ .build();
+
+ cr.insert(calendarUri, value);
+ }
+ // XBH add patch end.
+
private class QueryHandler extends AsyncQueryHandler {
public QueryHandler(ContentResolver cr) {
super(cr);
+ // XBH add patch start :
+ Cursor userCursor = cr.query(Calendars.CONTENT_URI, null, null, null, null);
+ if(userCursor != null && userCursor.getCount() == 0) {
+ //setDefaultAccount(cr);
+ Log.d(TAG, "userCursor.getCount() == 0");
+
+ }
+ Log.d(TAG, "userCursor.getCount()" + userCursor.getCount());
+ // XBH add patch end.
}

\packages\providers\CalendarProvider\src\com\android\providers\calendar\CalendarDatabaseHelper.java

    private void insertAccount(SQLiteDatabase db) {
Log.d(TAG, "insertAccount");
TimeZone timeZone = TimeZone.getDefault();
ContentValues value = new ContentValues();
value.put(Calendars.NAME, "XBH11");
value.put(Calendars.ACCOUNT_NAME, "xbhgmailaddress@gmail.com");
Log.i(TAG, "Calendars.ACCOUNT_NAME = " + Calendars.ACCOUNT_NAME);
value.put(Calendars.ACCOUNT_TYPE, "com.android.xbh.tv");
Log.i(TAG, "Calendars.ACCOUNT_TYPE = " + Calendars.ACCOUNT_TYPE);
value.put(Calendars.CALENDAR_DISPLAY_NAME, "XBH");
Log.i(TAG, "Calendars.CALENDAR_DISPLAY_NAME = " + Calendars.CALENDAR_DISPLAY_NAME);
value.put(Calendars.VISIBLE, 1);
Log.i(TAG, "Calendars.VISIBLE = " + Calendars.VISIBLE);
value.put(Calendars.CALENDAR_COLOR, -9206951);
Log.i(TAG, "Calendars.CALENDAR_COLOR = " + Calendars.CALENDAR_COLOR);
value.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER);
Log.i(TAG, "Calendars.CALENDAR_ACCESS_LEVEL = " + Calendars.CALENDAR_ACCESS_LEVEL);
value.put(Calendars.SYNC_EVENTS, 1);
Log.i(TAG, "Calendars.SYNC_EVENTS = " + Calendars.SYNC_EVENTS);
value.put(Calendars.CALENDAR_TIME_ZONE, timeZone.getID());
Log.i(TAG, "timeZone.getID() = " + timeZone.getID());
value.put(Calendars.OWNER_ACCOUNT, "xbhgmailaddress@gmail.com");
Log.i(TAG, "Calendars.OWNER_ACCOUNT = " + Calendars.OWNER_ACCOUNT);
value.put(Calendars.CAN_ORGANIZER_RESPOND, 0);
Log.i(TAG, "Calendars.CAN_ORGANIZER_RESPOND = " + Calendars.CAN_ORGANIZER_RESPOND); db.insert("Calendars", null, value);
}

或者

   //begin : added by xxx for calendar  demand
private void updateOrInsert(SQLiteDatabase db, String table){
// check this value exsist or not.
String account_name = "Phone";
String account_type = "com.android.huawei.phone";
String calendar_displayName = "Phone";
Integer calendar_color = -12011288;
Integer calendar_access_level = 700;
Integer sync_events = 1;
String calendar_timeZone = "Asia/shanghai";
String ownerAccount = "Phone";
String[] columns = new String[]{"account_name","account_type"," calendar_displayName"};
String selection = " account_name=? and account_type=? and calendar_displayName=? ";
String[] selectionArgs = new String[]{account_name,account_type,calendar_displayName};
boolean alreadyExisted = false; // Cursor cursor = db.query(table, columns, selection, selectionArgs, null, null, null);
Cursor cursor = db.query(table, columns, selection, selectionArgs, null, null, null);
alreadyExisted = (null != cursor) && (cursor.getCount() > 0); /*
* an update statement like this:
* UPDATE secure SET value='com.android.inputmethod.latin/.LatinIME' where name='default_input_method'
* an insert statement like this:
* INSERT INTO secure(name,value) values('default_input_method','com.android.inputmethod.latin/.LatinIME')
*/
String stmt_update = "UPDATE "+table+" SET account_name='" + account_name + "'"+"calendar_displayName='"+ calendar_displayName +"'" + "where account_type='" + account_type + "'";
String stmt_insert = "INSERT INTO "+table+"(account_name,account_type,calendar_displayName,calendar_color,calendar_access_level,sync_events,calendar_timeZone,ownerAccount) values('" +
account_name + "','" + account_type + "','"+calendar_displayName + "','" + calendar_color + "','" + calendar_access_level + "','" + sync_events + "','" + calendar_timeZone + "','" + ownerAccount+ "')";
String stmt = alreadyExisted ? stmt_update : stmt_insert;
db.execSQL(stmt);
}
//end : added by xxx for calendar demand
    private void bootstrapDB(SQLiteDatabase db) {
Log.i(TAG, "Bootstrapping database"); mSyncState.createDatabase(db); createColorsTable(db); createCalendarsTable(db); updateOrInsert(db,"Calendars");
......
}

\packages\providers\CalendarProvider\src\com\android\providers\calendar\CalendarProvider2.java

                        if ((!validAccounts.contains(currAccount)) &&
(!c.getString(1).equalsIgnoreCase("com.android.xbh.tv"))) {
accountsToDelete.add(currAccount);
}

Android:系统日历添加默认账户的更多相关文章

  1. Android向系统日历添加日程提醒事件

    在项目开发过程中,有时会有预约提醒.定时提醒等需求,这时我们可以使用系统日历来辅助提醒.通过向系统日历中写入事件.设置提醒方式(闹钟),实现到达某个特定的时间自动提醒的功能.这样做的好处是由于提醒功能 ...

  2. 在Android系统中添加宏控制代码【原创】

    关键词:Android  宏控制 Androd.mk 平台信息:内核:linux3.4.39 系统:android/android5.1平台:S5P4418  作者:庄泽彬(欢迎转载,请注明作者) 邮 ...

  3. Android 向系统日历中添加事件

    查了一天半,总算有点大概了.以下是自己的理解,有错误的地方望指正. android系统有日历功能,应用程序可以根据一些接口开发自己的功能,即使是日历app也是根据这些接口开发的,所以我们可以利用程序向 ...

  4. 通过settings.db自定义Android系统默认设置

    Android的系统设置数据存放在/data/data/com.android.providers.settings/databases/settings.db 中 数据库结构如下: 数据库中的默认数 ...

  5. phonegap之android原生日历调用

    android日历调用首先第一步我们要添加权限 <uses-permission android:name="android.permission.READ_CALENDAR" ...

  6. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  7. Android系统中设置TextView的行间距(非行高)

    Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacin ...

  8. Android系统固件定制方式

    target_product.mkAndroid系统在构建关于某种产品的固件时,一般会根据特定于该产品的具体target_product.mk来配置生成整个Android系统./target_prod ...

  9. Android向系统日历中添加日程事件

    转自Android向系统日历中添加日程事件 总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: ...

随机推荐

  1. 2016年第六届蓝桥杯C/C++程序设计本科B组决赛 ——一步之遥(填空题题)

    一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退.按F,会 ...

  2. vue 下拉框单选、多选以及默认值

    背景: 单选框和多选框 都是使用了 el-select,但传给后端的值类型不一样,多选框传的值是 list类型: ['value1','value2'] ,单选框传值和其他类型一样:设置默认值也是如此 ...

  3. python_反射——根据字符串获取模块中的属性

    1.获取当前模块中的属性 class Person(object): def __init__(self,name,age): self.name = name self.age = age p = ...

  4. CentOS7.x安装mariadb-10.3

    1.配置mariadb yum源 vim /etc/yum.repos.d/mariadb.repo # 写入如下内容 [mariadb] name = MariaDB baseurl = http: ...

  5. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  6. nodeJs修改镜像源

    // 设置 淘宝镜像源npm config set registry https://registry.npm.taobao.org // 查看 使用的 镜像源npm config get regis ...

  7. collection,random,os,sys,序列化模块

    一.collection 模块 python拥有一些内置的数据类型,比如 str,list.tuple.dict.set等 collection模块在这些内置的数据类型的基础上,提供了额外的数据类型: ...

  8. 密码加密与微服务鉴权JWT详细使用

    [TOC] 1.1.了解微服务状态 微服务集群中的每个服务,对外提供的都是Rest风格的接口,而Rest风格的一个最重要的规范就是:服务的无状态性. 什么是无状态? 1.服务端不保存任何客户端请求者信 ...

  9. [cf920E][set+dfs]

    https://codeforc.es/contest/920/problem/E E. Connected Components? time limit per test 2 seconds mem ...

  10. [ Educational Codeforces Round 65 (Rated for Div. 2)][二分]

    https://codeforc.es/contest/1167/problem/E E. Range Deleting time limit per test 2 seconds memory li ...