Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df1450c5 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "EventConditionProvider: Ensure that reloadTrackers precedes evaluateSubscriptions" into main

parents 6a9297de db82c35b
Loading
Loading
Loading
Loading
+25 −12
Original line number Diff line number Diff line
@@ -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);
                    }
                } else {
                    reloadTrackers();
                }
            }
        }, filter);
        if (!android.app.Flags.modesHsum()) {

        if (android.app.Flags.modesHsum()) {
            reloadTrackers(UserHandle.SYSTEM);
        } else {
            reloadTrackers();
        }
    }
@@ -138,9 +138,11 @@ public class EventConditionProvider extends SystemConditionProviderService {
    @Override
    public void onUserSwitched(UserHandle user) {
        if (DEBUG) Slog.d(TAG, "onUserSwitched: " + user);
        if (mCurrentUser.getIdentifier() != user.getIdentifier()) {
            mCurrentUser = user;
            reloadTrackers(user);
        }
    }

    @Override
    public void onConnected() {
@@ -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;
+22 −2
Original line number Diff line number Diff line
@@ -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);
    }
}