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);
             }