Allow personal calendar app to listen to work calendar change.
Test: atest CalendarProvider2Test
Bug: 123631240
Change-Id: I9bbdedab5d890f403f057d0a8aa4d60071fe289a
diff --git a/src/com/android/providers/calendar/CalendarProvider2.java b/src/com/android/providers/calendar/CalendarProvider2.java
index c4d12bb..9a9a12a 100644
--- a/src/com/android/providers/calendar/CalendarProvider2.java
+++ b/src/com/android/providers/calendar/CalendarProvider2.java
@@ -462,6 +462,8 @@
private final ThreadLocal<Integer> mCallingUid = new ThreadLocal<>();
private final ProviderAccessStats mStats = new ProviderAccessStats();
+ private int mParentUserId;
+
/**
* Listens for timezone changes and disk-no-longer-full events
*/
@@ -545,6 +547,8 @@
// This is pulled out for testing
initCalendarAlarm();
+ mParentUserId = getParentUserId();
+
postInitialize();
return true;
@@ -808,12 +812,25 @@
mCalendarAlarm.rescheduleMissedAlarms();
}
+ @VisibleForTesting
+ protected int getParentUserId() {
+ final UserManager userManager = mContext.getSystemService(UserManager.class);
+ final UserInfo parentUser = userManager.getProfileParent(UserHandle.myUserId());
+ return parentUser == null ? UserHandle.USER_NULL : parentUser.id;
+ }
@Override
protected void notifyChange(boolean syncToNetwork) {
// Note that semantics are changed: notification is for CONTENT_URI, not the specific
// Uri that was modified.
mContentResolver.notifyChange(CalendarContract.CONTENT_URI, null, syncToNetwork);
+ // If this is a managed profile CalendarProvider, notify the content observers of
+ // enterprise uris in the parent profile.
+ if (mParentUserId != UserHandle.USER_NULL) {
+ mContentResolver.notifyChange(
+ CalendarContract.ENTERPRISE_CONTENT_URI,
+ /* observer = */ null, /* syncToNetwork = */ false, mParentUserId);
+ }
}
/**
diff --git a/tests/src/com/android/providers/calendar/CalendarProvider2Test.java b/tests/src/com/android/providers/calendar/CalendarProvider2Test.java
index 19a5c26..0183742 100644
--- a/tests/src/com/android/providers/calendar/CalendarProvider2Test.java
+++ b/tests/src/com/android/providers/calendar/CalendarProvider2Test.java
@@ -31,6 +31,7 @@
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
+import android.os.UserHandle;
import android.provider.BaseColumns;
import android.provider.CalendarContract;
import android.provider.CalendarContract.Calendars;
@@ -1013,6 +1014,11 @@
}
@Override
+ protected int getParentUserId() {
+ return UserHandle.USER_NULL;
+ }
+
+ @Override
protected void initCrossProfileCalendarHelper() {
mCrossProfileCalendarHelper = new MockCrossProfileCalendarHelper(mContext);
}
@@ -1023,6 +1029,16 @@
mWorkProfileProvider = new CalendarProvider2ForTesting() {
@Override
+ protected int getWorkProfileUserId() {
+ return UserHandle.USER_NULL;
+ }
+
+ @Override
+ protected int getParentUserId() {
+ return UserHandle.myUserId();
+ }
+
+ @Override
protected void initCrossProfileCalendarHelper() {
mCrossProfileCalendarHelper = new MockCrossProfileCalendarHelper(mContext);
}