Loading services/core/java/com/android/server/notification/EventConditionProvider.java +64 −52 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import com.android.server.notification.CalendarTracker.CheckEventResult; import com.android.server.notification.NotificationManagerService.DumpFilter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * Built-in zen condition provider for calendar event-based conditions. Loading Loading @@ -96,11 +98,13 @@ public class EventConditionProvider extends SystemConditionProviderService { pw.print(" mRegistered="); pw.println(mRegistered); pw.print(" mBootComplete="); pw.println(mBootComplete); dumpUpcomingTime(pw, "mNextAlarmTime", mNextAlarmTime, System.currentTimeMillis()); synchronized (mSubscriptions) { pw.println(" mSubscriptions="); for (Uri conditionId : mSubscriptions) { pw.print(" "); pw.println(conditionId); } } pw.println(" mTrackers="); for (int i = 0; i < mTrackers.size(); i++) { pw.print(" user="); pw.println(mTrackers.keyAt(i)); Loading Loading @@ -142,21 +146,25 @@ public class EventConditionProvider extends SystemConditionProviderService { public void onSubscribe(Uri conditionId) { if (DEBUG) Slog.d(TAG, "onSubscribe " + conditionId); if (!ZenModeConfig.isValidEventConditionId(conditionId)) { notifyCondition(conditionId, Condition.STATE_FALSE, "badCondition"); notifyCondition(createCondition(conditionId, Condition.STATE_FALSE)); return; } synchronized (mSubscriptions) { if (mSubscriptions.add(conditionId)) { evaluateSubscriptions(); } } } @Override public void onUnsubscribe(Uri conditionId) { if (DEBUG) Slog.d(TAG, "onUnsubscribe " + conditionId); synchronized (mSubscriptions) { if (mSubscriptions.remove(conditionId)) { evaluateSubscriptions(); } } } @Override public void attachBase(Context base) { Loading Loading @@ -198,15 +206,18 @@ public class EventConditionProvider extends SystemConditionProviderService { return; } final long now = System.currentTimeMillis(); List<Condition> conditionsToNotify = new ArrayList<>(); synchronized (mSubscriptions) { for (int i = 0; i < mTrackers.size(); i++) { mTrackers.valueAt(i).setCallback(mSubscriptions.isEmpty() ? null : mTrackerCallback); mTrackers.valueAt(i).setCallback( mSubscriptions.isEmpty() ? null : mTrackerCallback); } setRegistered(!mSubscriptions.isEmpty()); long reevaluateAt = 0; for (Uri conditionId : mSubscriptions) { final EventInfo event = ZenModeConfig.tryParseEventConditionId(conditionId); if (event == null) { notifyCondition(conditionId, Condition.STATE_FALSE, "badConditionId"); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_FALSE)); continue; } CheckEventResult result = null; Loading @@ -228,21 +239,28 @@ public class EventConditionProvider extends SystemConditionProviderService { final CalendarTracker tracker = mTrackers.get(userId); if (tracker == null) { Slog.w(TAG, "No calendar tracker found for user " + userId); notifyCondition(conditionId, Condition.STATE_FALSE, "badUserId"); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_FALSE)); continue; } result = tracker.checkEvent(event, now); } if (result.recheckAt != 0 && (reevaluateAt == 0 || result.recheckAt < reevaluateAt)) { if (result.recheckAt != 0 && (reevaluateAt == 0 || result.recheckAt < reevaluateAt)) { reevaluateAt = result.recheckAt; } if (!result.inEvent) { notifyCondition(conditionId, Condition.STATE_FALSE, "!inEventNow"); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_FALSE)); continue; } notifyCondition(conditionId, Condition.STATE_TRUE, "inEventNow"); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_TRUE)); } rescheduleAlarm(now, reevaluateAt); } for (Condition condition : conditionsToNotify) { if (condition != null) { notifyCondition(condition); } } if (DEBUG) Slog.d(TAG, "evaluateSubscriptions took " + (System.currentTimeMillis() - now)); } Loading @@ -266,12 +284,6 @@ public class EventConditionProvider extends SystemConditionProviderService { alarms.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent); } private void notifyCondition(Uri conditionId, int state, String reason) { if (DEBUG) Slog.d(TAG, "notifyCondition " + conditionId + " " + Condition.stateToString(state) + " reason=" + reason); notifyCondition(createCondition(conditionId, state)); } private Condition createCondition(Uri id, int state) { final String summary = NOT_SHOWN; final String line1 = NOT_SHOWN; Loading Loading
services/core/java/com/android/server/notification/EventConditionProvider.java +64 −52 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ import com.android.server.notification.CalendarTracker.CheckEventResult; import com.android.server.notification.NotificationManagerService.DumpFilter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * Built-in zen condition provider for calendar event-based conditions. Loading Loading @@ -96,11 +98,13 @@ public class EventConditionProvider extends SystemConditionProviderService { pw.print(" mRegistered="); pw.println(mRegistered); pw.print(" mBootComplete="); pw.println(mBootComplete); dumpUpcomingTime(pw, "mNextAlarmTime", mNextAlarmTime, System.currentTimeMillis()); synchronized (mSubscriptions) { pw.println(" mSubscriptions="); for (Uri conditionId : mSubscriptions) { pw.print(" "); pw.println(conditionId); } } pw.println(" mTrackers="); for (int i = 0; i < mTrackers.size(); i++) { pw.print(" user="); pw.println(mTrackers.keyAt(i)); Loading Loading @@ -142,21 +146,25 @@ public class EventConditionProvider extends SystemConditionProviderService { public void onSubscribe(Uri conditionId) { if (DEBUG) Slog.d(TAG, "onSubscribe " + conditionId); if (!ZenModeConfig.isValidEventConditionId(conditionId)) { notifyCondition(conditionId, Condition.STATE_FALSE, "badCondition"); notifyCondition(createCondition(conditionId, Condition.STATE_FALSE)); return; } synchronized (mSubscriptions) { if (mSubscriptions.add(conditionId)) { evaluateSubscriptions(); } } } @Override public void onUnsubscribe(Uri conditionId) { if (DEBUG) Slog.d(TAG, "onUnsubscribe " + conditionId); synchronized (mSubscriptions) { if (mSubscriptions.remove(conditionId)) { evaluateSubscriptions(); } } } @Override public void attachBase(Context base) { Loading Loading @@ -198,15 +206,18 @@ public class EventConditionProvider extends SystemConditionProviderService { return; } final long now = System.currentTimeMillis(); List<Condition> conditionsToNotify = new ArrayList<>(); synchronized (mSubscriptions) { for (int i = 0; i < mTrackers.size(); i++) { mTrackers.valueAt(i).setCallback(mSubscriptions.isEmpty() ? null : mTrackerCallback); mTrackers.valueAt(i).setCallback( mSubscriptions.isEmpty() ? null : mTrackerCallback); } setRegistered(!mSubscriptions.isEmpty()); long reevaluateAt = 0; for (Uri conditionId : mSubscriptions) { final EventInfo event = ZenModeConfig.tryParseEventConditionId(conditionId); if (event == null) { notifyCondition(conditionId, Condition.STATE_FALSE, "badConditionId"); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_FALSE)); continue; } CheckEventResult result = null; Loading @@ -228,21 +239,28 @@ public class EventConditionProvider extends SystemConditionProviderService { final CalendarTracker tracker = mTrackers.get(userId); if (tracker == null) { Slog.w(TAG, "No calendar tracker found for user " + userId); notifyCondition(conditionId, Condition.STATE_FALSE, "badUserId"); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_FALSE)); continue; } result = tracker.checkEvent(event, now); } if (result.recheckAt != 0 && (reevaluateAt == 0 || result.recheckAt < reevaluateAt)) { if (result.recheckAt != 0 && (reevaluateAt == 0 || result.recheckAt < reevaluateAt)) { reevaluateAt = result.recheckAt; } if (!result.inEvent) { notifyCondition(conditionId, Condition.STATE_FALSE, "!inEventNow"); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_FALSE)); continue; } notifyCondition(conditionId, Condition.STATE_TRUE, "inEventNow"); conditionsToNotify.add(createCondition(conditionId, Condition.STATE_TRUE)); } rescheduleAlarm(now, reevaluateAt); } for (Condition condition : conditionsToNotify) { if (condition != null) { notifyCondition(condition); } } if (DEBUG) Slog.d(TAG, "evaluateSubscriptions took " + (System.currentTimeMillis() - now)); } Loading @@ -266,12 +284,6 @@ public class EventConditionProvider extends SystemConditionProviderService { alarms.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent); } private void notifyCondition(Uri conditionId, int state, String reason) { if (DEBUG) Slog.d(TAG, "notifyCondition " + conditionId + " " + Condition.stateToString(state) + " reason=" + reason); notifyCondition(createCondition(conditionId, state)); } private Condition createCondition(Uri id, int state) { final String summary = NOT_SHOWN; final String line1 = NOT_SHOWN; Loading