Loading services/core/java/com/android/server/notification/ScheduleCalendar.java→core/java/android/service/notification/ScheduleCalendar.java +43 −7 Original line number Diff line number Diff line /** * Copyright (c) 2014, The Android Open Source Project /* * Copyright (c) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package com.android.server.notification; package android.service.notification; import android.service.notification.ZenModeConfig.ScheduleInfo; import android.util.ArraySet; Loading @@ -24,7 +24,12 @@ import java.util.Calendar; import java.util.Objects; import java.util.TimeZone; /** * @hide */ public class ScheduleCalendar { public static final String TAG = "ScheduleCalendar"; public static final boolean DEBUG = Log.isLoggable("ConditionProviders", Log.DEBUG); private final ArraySet<Integer> mDays = new ArraySet<Integer>(); private final Calendar mCalendar = Calendar.getInstance(); Loading @@ -35,12 +40,28 @@ public class ScheduleCalendar { return "ScheduleCalendar[mDays=" + mDays + ", mSchedule=" + mSchedule + "]"; } /** * @return true if schedule will exit on alarm, else false */ public boolean exitAtAlarm() { return mSchedule.exitAtAlarm; } /** * Sets schedule information */ public void setSchedule(ScheduleInfo schedule) { if (Objects.equals(mSchedule, schedule)) return; mSchedule = schedule; updateDays(); } /** * Sets next alarm of the schedule if the saved next alarm has passed or is further * in the future than given nextAlarm * @param now current time in milliseconds * @param nextAlarm time of next alarm in milliseconds */ public void maybeSetNextAlarm(long now, long nextAlarm) { if (mSchedule != null && mSchedule.exitAtAlarm) { // alarm canceled Loading @@ -56,19 +77,26 @@ public class ScheduleCalendar { mSchedule.nextAlarm = Math.min(mSchedule.nextAlarm, nextAlarm); } } else if (mSchedule.nextAlarm < now) { if (ScheduleConditionProvider.DEBUG) { Log.d(ScheduleConditionProvider.TAG, "All alarms are in the past " + mSchedule.nextAlarm); if (DEBUG) { Log.d(TAG, "All alarms are in the past " + mSchedule.nextAlarm); } mSchedule.nextAlarm = 0; } } } /** * Set calendar time zone to tz * @param tz current time zone */ public void setTimeZone(TimeZone tz) { mCalendar.setTimeZone(tz); } /** * @param now current time in milliseconds * @return next time this rule changes (starts or ends) */ public long getNextChangeTime(long now) { if (mSchedule == null) return 0; final long nextStart = getNextTime(now, mSchedule.startHour, mSchedule.startMinute); Loading @@ -92,6 +120,10 @@ public class ScheduleCalendar { return mCalendar.getTimeInMillis(); } /** * @param time milliseconds since Epoch * @return true if time is within the schedule, else false */ public boolean isInSchedule(long time) { if (mSchedule == null || mDays.size() == 0) return false; final long start = getTime(time, mSchedule.startHour, mSchedule.startMinute); Loading @@ -102,6 +134,10 @@ public class ScheduleCalendar { return isInSchedule(-1, time, start, end) || isInSchedule(0, time, start, end); } /** * @param time milliseconds since Epoch * @return true if should exit at time for next alarm, else false */ public boolean shouldExitForAlarm(long time) { if (mSchedule == null) { return false; Loading core/java/android/service/notification/ZenModeConfig.java +27 −3 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import java.util.Objects; import java.util.TimeZone; import java.util.UUID; /** Loading Loading @@ -692,6 +693,20 @@ public class ZenModeConfig implements Parcelable { suppressedVisualEffects); } /** * Creates scheduleCalendar from a condition id * @param conditionId * @return ScheduleCalendar with info populated with conditionId */ public static ScheduleCalendar toScheduleCalendar(Uri conditionId) { final ScheduleInfo schedule = ZenModeConfig.tryParseScheduleConditionId(conditionId); if (schedule == null || schedule.days == null || schedule.days.length == 0) return null; final ScheduleCalendar sc = new ScheduleCalendar(); sc.setSchedule(schedule); sc.setTimeZone(TimeZone.getDefault()); return sc; } private static int sourceToPrioritySenders(int source, int def) { switch (source) { case SOURCE_ANYONE: return Policy.PRIORITY_SENDERS_ANY; Loading Loading @@ -793,7 +808,10 @@ public class ZenModeConfig implements Parcelable { Condition.FLAG_RELEVANT_NOW); } private static CharSequence getFormattedTime(Context context, long time, boolean isSameDay, /** * Creates readable time from time in milliseconds */ public static CharSequence getFormattedTime(Context context, long time, boolean isSameDay, int userHandle) { String skeleton = (!isSameDay ? "EEE " : "") + (DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma"); Loading @@ -801,7 +819,10 @@ public class ZenModeConfig implements Parcelable { return DateFormat.format(pattern, time); } private static boolean isToday(long time) { /** * Determines whether a time in milliseconds is today or not */ public static boolean isToday(long time) { GregorianCalendar now = new GregorianCalendar(); GregorianCalendar endTime = new GregorianCalendar(); endTime.setTimeInMillis(time); Loading Loading @@ -1081,7 +1102,10 @@ public class ZenModeConfig implements Parcelable { return UUID.randomUUID().toString().replace("-", ""); } private static String getOwnerCaption(Context context, String owner) { /** * Gets the name of the app associated with owner */ public static String getOwnerCaption(Context context, String owner) { final PackageManager pm = context.getPackageManager(); try { final ApplicationInfo info = pm.getApplicationInfo(owner, 0); Loading services/core/java/com/android/server/notification/ScheduleConditionProvider.java +2 −12 Original line number Diff line number Diff line Loading @@ -29,8 +29,8 @@ import android.os.Binder; import android.provider.Settings; import android.service.notification.Condition; import android.service.notification.IConditionProvider; import android.service.notification.ScheduleCalendar; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig.ScheduleInfo; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; Loading @@ -45,7 +45,6 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.TimeZone; /** * Built-in zen condition provider for daily scheduled time-based conditions. Loading Loading @@ -134,7 +133,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService { return; } synchronized (mSubscriptions) { mSubscriptions.put(conditionId, toScheduleCalendar(conditionId)); mSubscriptions.put(conditionId, ZenModeConfig.toScheduleCalendar(conditionId)); } evaluateSubscriptions(); } Loading Loading @@ -243,15 +242,6 @@ public class ScheduleConditionProvider extends SystemConditionProviderService { return cal != null && cal.isInSchedule(time); } private static ScheduleCalendar toScheduleCalendar(Uri conditionId) { final ScheduleInfo schedule = ZenModeConfig.tryParseScheduleConditionId(conditionId); if (schedule == null || schedule.days == null || schedule.days.length == 0) return null; final ScheduleCalendar sc = new ScheduleCalendar(); sc.setSchedule(schedule); sc.setTimeZone(TimeZone.getDefault()); return sc; } private void setRegistered(boolean registered) { if (mRegistered == registered) return; if (DEBUG) Slog.d(TAG, "setRegistered " + registered); Loading services/tests/notification/src/com/android/server/notification/ScheduleCalendarTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -21,10 +21,10 @@ import static junit.framework.Assert.assertFalse; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import android.service.notification.ScheduleCalendar; import android.service.notification.ZenModeConfig; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.SmallTest; import android.util.Slog; import org.junit.Before; import org.junit.Test; Loading services/tests/notification/src/com/android/server/notification/ScheduleConditionProviderTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Looper; import android.service.notification.Condition; import android.service.notification.ScheduleCalendar; import android.service.notification.ZenModeConfig; import android.support.test.InstrumentationRegistry; import android.test.ServiceTestCase; Loading Loading @@ -34,7 +35,9 @@ public class ScheduleConditionProviderTest extends ServiceTestCase<ScheduleCondi @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); if (Looper.myLooper() == null) { Looper.prepare(); } Intent startIntent = new Intent("com.android.server.notification.ScheduleConditionProvider"); Loading Loading
services/core/java/com/android/server/notification/ScheduleCalendar.java→core/java/android/service/notification/ScheduleCalendar.java +43 −7 Original line number Diff line number Diff line /** * Copyright (c) 2014, The Android Open Source Project /* * Copyright (c) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package com.android.server.notification; package android.service.notification; import android.service.notification.ZenModeConfig.ScheduleInfo; import android.util.ArraySet; Loading @@ -24,7 +24,12 @@ import java.util.Calendar; import java.util.Objects; import java.util.TimeZone; /** * @hide */ public class ScheduleCalendar { public static final String TAG = "ScheduleCalendar"; public static final boolean DEBUG = Log.isLoggable("ConditionProviders", Log.DEBUG); private final ArraySet<Integer> mDays = new ArraySet<Integer>(); private final Calendar mCalendar = Calendar.getInstance(); Loading @@ -35,12 +40,28 @@ public class ScheduleCalendar { return "ScheduleCalendar[mDays=" + mDays + ", mSchedule=" + mSchedule + "]"; } /** * @return true if schedule will exit on alarm, else false */ public boolean exitAtAlarm() { return mSchedule.exitAtAlarm; } /** * Sets schedule information */ public void setSchedule(ScheduleInfo schedule) { if (Objects.equals(mSchedule, schedule)) return; mSchedule = schedule; updateDays(); } /** * Sets next alarm of the schedule if the saved next alarm has passed or is further * in the future than given nextAlarm * @param now current time in milliseconds * @param nextAlarm time of next alarm in milliseconds */ public void maybeSetNextAlarm(long now, long nextAlarm) { if (mSchedule != null && mSchedule.exitAtAlarm) { // alarm canceled Loading @@ -56,19 +77,26 @@ public class ScheduleCalendar { mSchedule.nextAlarm = Math.min(mSchedule.nextAlarm, nextAlarm); } } else if (mSchedule.nextAlarm < now) { if (ScheduleConditionProvider.DEBUG) { Log.d(ScheduleConditionProvider.TAG, "All alarms are in the past " + mSchedule.nextAlarm); if (DEBUG) { Log.d(TAG, "All alarms are in the past " + mSchedule.nextAlarm); } mSchedule.nextAlarm = 0; } } } /** * Set calendar time zone to tz * @param tz current time zone */ public void setTimeZone(TimeZone tz) { mCalendar.setTimeZone(tz); } /** * @param now current time in milliseconds * @return next time this rule changes (starts or ends) */ public long getNextChangeTime(long now) { if (mSchedule == null) return 0; final long nextStart = getNextTime(now, mSchedule.startHour, mSchedule.startMinute); Loading @@ -92,6 +120,10 @@ public class ScheduleCalendar { return mCalendar.getTimeInMillis(); } /** * @param time milliseconds since Epoch * @return true if time is within the schedule, else false */ public boolean isInSchedule(long time) { if (mSchedule == null || mDays.size() == 0) return false; final long start = getTime(time, mSchedule.startHour, mSchedule.startMinute); Loading @@ -102,6 +134,10 @@ public class ScheduleCalendar { return isInSchedule(-1, time, start, end) || isInSchedule(0, time, start, end); } /** * @param time milliseconds since Epoch * @return true if should exit at time for next alarm, else false */ public boolean shouldExitForAlarm(long time) { if (mSchedule == null) { return false; Loading
core/java/android/service/notification/ZenModeConfig.java +27 −3 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import java.util.Objects; import java.util.TimeZone; import java.util.UUID; /** Loading Loading @@ -692,6 +693,20 @@ public class ZenModeConfig implements Parcelable { suppressedVisualEffects); } /** * Creates scheduleCalendar from a condition id * @param conditionId * @return ScheduleCalendar with info populated with conditionId */ public static ScheduleCalendar toScheduleCalendar(Uri conditionId) { final ScheduleInfo schedule = ZenModeConfig.tryParseScheduleConditionId(conditionId); if (schedule == null || schedule.days == null || schedule.days.length == 0) return null; final ScheduleCalendar sc = new ScheduleCalendar(); sc.setSchedule(schedule); sc.setTimeZone(TimeZone.getDefault()); return sc; } private static int sourceToPrioritySenders(int source, int def) { switch (source) { case SOURCE_ANYONE: return Policy.PRIORITY_SENDERS_ANY; Loading Loading @@ -793,7 +808,10 @@ public class ZenModeConfig implements Parcelable { Condition.FLAG_RELEVANT_NOW); } private static CharSequence getFormattedTime(Context context, long time, boolean isSameDay, /** * Creates readable time from time in milliseconds */ public static CharSequence getFormattedTime(Context context, long time, boolean isSameDay, int userHandle) { String skeleton = (!isSameDay ? "EEE " : "") + (DateFormat.is24HourFormat(context, userHandle) ? "Hm" : "hma"); Loading @@ -801,7 +819,10 @@ public class ZenModeConfig implements Parcelable { return DateFormat.format(pattern, time); } private static boolean isToday(long time) { /** * Determines whether a time in milliseconds is today or not */ public static boolean isToday(long time) { GregorianCalendar now = new GregorianCalendar(); GregorianCalendar endTime = new GregorianCalendar(); endTime.setTimeInMillis(time); Loading Loading @@ -1081,7 +1102,10 @@ public class ZenModeConfig implements Parcelable { return UUID.randomUUID().toString().replace("-", ""); } private static String getOwnerCaption(Context context, String owner) { /** * Gets the name of the app associated with owner */ public static String getOwnerCaption(Context context, String owner) { final PackageManager pm = context.getPackageManager(); try { final ApplicationInfo info = pm.getApplicationInfo(owner, 0); Loading
services/core/java/com/android/server/notification/ScheduleConditionProvider.java +2 −12 Original line number Diff line number Diff line Loading @@ -29,8 +29,8 @@ import android.os.Binder; import android.provider.Settings; import android.service.notification.Condition; import android.service.notification.IConditionProvider; import android.service.notification.ScheduleCalendar; import android.service.notification.ZenModeConfig; import android.service.notification.ZenModeConfig.ScheduleInfo; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; Loading @@ -45,7 +45,6 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.TimeZone; /** * Built-in zen condition provider for daily scheduled time-based conditions. Loading Loading @@ -134,7 +133,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService { return; } synchronized (mSubscriptions) { mSubscriptions.put(conditionId, toScheduleCalendar(conditionId)); mSubscriptions.put(conditionId, ZenModeConfig.toScheduleCalendar(conditionId)); } evaluateSubscriptions(); } Loading Loading @@ -243,15 +242,6 @@ public class ScheduleConditionProvider extends SystemConditionProviderService { return cal != null && cal.isInSchedule(time); } private static ScheduleCalendar toScheduleCalendar(Uri conditionId) { final ScheduleInfo schedule = ZenModeConfig.tryParseScheduleConditionId(conditionId); if (schedule == null || schedule.days == null || schedule.days.length == 0) return null; final ScheduleCalendar sc = new ScheduleCalendar(); sc.setSchedule(schedule); sc.setTimeZone(TimeZone.getDefault()); return sc; } private void setRegistered(boolean registered) { if (mRegistered == registered) return; if (DEBUG) Slog.d(TAG, "setRegistered " + registered); Loading
services/tests/notification/src/com/android/server/notification/ScheduleCalendarTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -21,10 +21,10 @@ import static junit.framework.Assert.assertFalse; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import android.service.notification.ScheduleCalendar; import android.service.notification.ZenModeConfig; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.SmallTest; import android.util.Slog; import org.junit.Before; import org.junit.Test; Loading
services/tests/notification/src/com/android/server/notification/ScheduleConditionProviderTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Looper; import android.service.notification.Condition; import android.service.notification.ScheduleCalendar; import android.service.notification.ZenModeConfig; import android.support.test.InstrumentationRegistry; import android.test.ServiceTestCase; Loading Loading @@ -34,7 +35,9 @@ public class ScheduleConditionProviderTest extends ServiceTestCase<ScheduleCondi @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); if (Looper.myLooper() == null) { Looper.prepare(); } Intent startIntent = new Intent("com.android.server.notification.ScheduleConditionProvider"); Loading