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

Commit b81e5ee8 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Synchronize access of mSubscriptions and fix NPE"

parents de9c116e 6be6a075
Loading
Loading
Loading
Loading
+40 −30
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
        pw.print("      mRegistered="); pw.println(mRegistered);
        pw.println("      mSubscriptions=");
        final long now = System.currentTimeMillis();
        synchronized (mSubscriptions) {
            for (Uri conditionId : mSubscriptions.keySet()) {
                pw.print("        ");
                pw.print(meetsSchedule(mSubscriptions.get(conditionId), now) ? "* " : "  ");
@@ -90,6 +91,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
                pw.print("            ");
                pw.println(mSubscriptions.get(conditionId).toString());
            }
        }
        dumpUpcomingTime(pw, "mNextAlarmTime", mNextAlarmTime, now);
    }

@@ -118,14 +120,18 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
            notifyCondition(conditionId, Condition.STATE_FALSE, "badCondition");
            return;
        }
        synchronized (mSubscriptions) {
            mSubscriptions.put(conditionId, toScheduleCalendar(conditionId));
        }
        evaluateSubscriptions();
    }

    @Override
    public void onUnsubscribe(Uri conditionId) {
        if (DEBUG) Slog.d(TAG, "onUnsubscribe " + conditionId);
        synchronized (mSubscriptions) {
            mSubscriptions.remove(conditionId);
        }
        evaluateSubscriptions();
    }

@@ -143,8 +149,9 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
        if (mAlarmManager == null) {
            mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
        }
        setRegistered(!mSubscriptions.isEmpty());
        final long now = System.currentTimeMillis();
        synchronized (mSubscriptions) {
            setRegistered(!mSubscriptions.isEmpty());
            mNextAlarmTime = 0;
            long nextUserAlarmTime = getNextAlarm();
            for (Uri conditionId : mSubscriptions.keySet()) {
@@ -154,7 +161,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
                    cal.maybeSetNextAlarm(now, nextUserAlarmTime);
                } else {
                    notifyCondition(conditionId, Condition.STATE_FALSE, "!meetsSchedule");
                if (nextUserAlarmTime == 0) {
                    if ((cal != null) && (nextUserAlarmTime == 0)) {
                        cal.maybeSetNextAlarm(now, nextUserAlarmTime);
                    }
                }
@@ -167,6 +174,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
                    }
                }
            }
        }
        updateAlarm(now, mNextAlarmTime);
    }

@@ -241,6 +249,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (DEBUG) Slog.d(TAG, "onReceive " + intent.getAction());
            synchronized (mSubscriptions) {
                if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
                    for (Uri conditionId : mSubscriptions.keySet()) {
                        final ScheduleCalendar cal = mSubscriptions.get(conditionId);
@@ -249,6 +258,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
                        }
                    }
                }
            }
            evaluateSubscriptions();
        }
    };