diff options
2 files changed, 47 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/notification/EventConditionProvider.java b/services/core/java/com/android/server/notification/EventConditionProvider.java index ecc4cf72a1c3..308f299a117b 100644 --- a/services/core/java/com/android/server/notification/EventConditionProvider.java +++ b/services/core/java/com/android/server/notification/EventConditionProvider.java @@ -16,7 +16,6 @@ package com.android.server.notification; -import android.annotation.Nullable; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -68,7 +67,7 @@ public class EventConditionProvider extends SystemConditionProviderService { private final Handler mWorker; private final HandlerThread mThread; - @Nullable private UserHandle mCurrentUser; + private UserHandle mCurrentUser = UserHandle.SYSTEM; private boolean mConnected; private boolean mRegistered; private boolean mBootComplete; // don't hammer the calendar provider until boot completes. @@ -119,18 +118,19 @@ public class EventConditionProvider extends SystemConditionProviderService { @Override public void onReceive(Context context, Intent intent) { if (android.app.Flags.modesHsum()) { - if (mCurrentUser != null) { - // Possibly the intent signals a profile added on a different user, but it - // doesn't matter (except for a bit of wasted work here). We will reload - // trackers for that user when we switch. - reloadTrackers(mCurrentUser); - } + // Possibly the intent signals a profile added on a different user, but it + // doesn't matter (except for a bit of wasted work here). We will reload + // trackers for that user when we switch. + reloadTrackers(mCurrentUser); } else { reloadTrackers(); } } }, filter); - if (!android.app.Flags.modesHsum()) { + + if (android.app.Flags.modesHsum()) { + reloadTrackers(UserHandle.SYSTEM); + } else { reloadTrackers(); } } @@ -138,8 +138,10 @@ public class EventConditionProvider extends SystemConditionProviderService { @Override public void onUserSwitched(UserHandle user) { if (DEBUG) Slog.d(TAG, "onUserSwitched: " + user); - mCurrentUser = user; - reloadTrackers(user); + if (mCurrentUser.getIdentifier() != user.getIdentifier()) { + mCurrentUser = user; + reloadTrackers(user); + } } @Override @@ -274,12 +276,23 @@ public class EventConditionProvider extends SystemConditionProviderService { final int userId = EventInfo.resolveUserId(event.userId); final CalendarTracker tracker = mTrackers.get(userId); if (tracker == null) { - Slog.w(TAG, "No calendar tracker found for user " + userId); + Slog.w(TAG, + "No calendar tracker found for user " + userId + " and calendar = " + + event.calName); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_FALSE)); continue; } result = tracker.checkEvent(event, now); } + + if (result == null) { + Slog.e(TAG, "No CheckEventResult for userId=" + event.userId + ", calId=" + + event.calendarId + ", calName=" + event.calName + + "; trackers count is " + mTrackers.size()); + conditionsToNotify.add(createCondition(conditionId, Condition.STATE_FALSE)); + continue; + } + if (result.recheckAt != 0 && (reevaluateAt == 0 || result.recheckAt < reevaluateAt)) { reevaluateAt = result.recheckAt; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/EventConditionProviderTest.java b/services/tests/uiservicestests/src/com/android/server/notification/EventConditionProviderTest.java index 05210aca19dd..fa1372d9f4ef 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/EventConditionProviderTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/EventConditionProviderTest.java @@ -124,9 +124,12 @@ public class EventConditionProviderTest extends UiServiceTestCase { @Test @EnableFlags(android.app.Flags.FLAG_MODES_HSUM) - public void onBootComplete_waitsForUserSwitched() { + public void onBootComplete_loadsTrackersForSystemUser() { mService.onBootComplete(); - assertThat(mService.getTrackers().size()).isEqualTo(0); + + assertThat(mService.getTrackers().size()).isEqualTo(1); + assertThat(mService.getTrackers().keyAt(0)).isEqualTo(UserHandle.USER_SYSTEM); + assertThat(mService.getTrackers().valueAt(0).getUserId()).isEqualTo(UserHandle.USER_SYSTEM); } @Test @@ -158,4 +161,21 @@ public class EventConditionProviderTest extends UiServiceTestCase { assertThat(mService.getTrackers().keyAt(1)).isEqualTo(43); assertThat(mService.getTrackers().valueAt(1).getUserId()).isEqualTo(43); } + + @Test + @EnableFlags(android.app.Flags.FLAG_MODES_HSUM) + public void onUserSwitched_sameUser_doesNothing() { + UserHandle someUser = UserHandle.of(42); + when(mUserManager.getProfiles(eq(42))).thenReturn(List.of(new UserInfo(42, "user 42", 0))); + + mService.onUserSwitched(someUser); + assertThat(mService.getTrackers().size()).isEqualTo(1); + assertThat(mService.getTrackers().keyAt(0)).isEqualTo(42); + CalendarTracker originalTracker = mService.getTrackers().valueAt(0); + + mService.onUserSwitched(someUser); + assertThat(mService.getTrackers().size()).isEqualTo(1); + assertThat(mService.getTrackers().keyAt(0)).isEqualTo(42); + assertThat(mService.getTrackers().valueAt(0)).isSameInstanceAs(originalTracker); + } } |