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

Commit 6be6a075 authored by Shibin George's avatar Shibin George
Browse files

Synchronize access of mSubscriptions and fix NPE



Access mSubscriptions from within synchronized block. Also,
fix a NullPointerException on ScheduleCalendar object.

Change-Id: I7054328fa3787359411668e5c0e4a459eeed7136
Signed-off-by: default avatarShibin George <shibing@codeaurora.org>
parent 0813c5aa
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();
        }
    };