From be6d3524b64f9149cf9c9ab9198f6a18c045c68d Mon Sep 17 00:00:00 2001 From: Beverly Date: Mon, 20 Nov 2017 11:01:59 -0500 Subject: [PATCH] Public access to static methods in ZenModeConfig Edits to ScheduleCalendar and ScheduleConditionProvider tests Test: runtest -x frameworks/base/services/tests/notification/src/com/android/server/notification/ScheduleCalendarTest.java runtest -x frameworks/base/services/tests/notification/src/com/android/server/notification/ScheduleConditionProviderTest.java$ Bug: 63077372 Change-Id: I0662c230f1f2df867f9b64d69aab3bcb88696b61 --- .../notification/ScheduleCalendar.java | 50 ++++++++++++++++--- .../service/notification/ZenModeConfig.java | 30 +++++++++-- .../ScheduleConditionProvider.java | 14 +----- .../notification/ScheduleCalendarTest.java | 2 +- .../ScheduleConditionProviderTest.java | 5 +- 5 files changed, 77 insertions(+), 24 deletions(-) rename {services/core/java/com/android/server => core/java/android/service}/notification/ScheduleCalendar.java (77%) diff --git a/services/core/java/com/android/server/notification/ScheduleCalendar.java b/core/java/android/service/notification/ScheduleCalendar.java similarity index 77% rename from services/core/java/com/android/server/notification/ScheduleCalendar.java rename to core/java/android/service/notification/ScheduleCalendar.java index 5ff0e21078af7..8a7ff4da26e3d 100644 --- a/services/core/java/com/android/server/notification/ScheduleCalendar.java +++ b/core/java/android/service/notification/ScheduleCalendar.java @@ -1,11 +1,11 @@ -/** - * 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. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -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; @@ -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 mDays = new ArraySet(); private final Calendar mCalendar = Calendar.getInstance(); @@ -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 @@ -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); @@ -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); @@ -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; diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index 1ec24061eb989..512f2df9747e0 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -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; /** @@ -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; @@ -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"); @@ -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); @@ -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); diff --git a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java index c5f80bb63d2db..ba7fe78465070 100644 --- a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java +++ b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java @@ -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; @@ -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. @@ -134,7 +133,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService { return; } synchronized (mSubscriptions) { - mSubscriptions.put(conditionId, toScheduleCalendar(conditionId)); + mSubscriptions.put(conditionId, ZenModeConfig.toScheduleCalendar(conditionId)); } evaluateSubscriptions(); } @@ -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); diff --git a/services/tests/notification/src/com/android/server/notification/ScheduleCalendarTest.java b/services/tests/notification/src/com/android/server/notification/ScheduleCalendarTest.java index cbda12da1a6fe..4eb42201f072e 100644 --- a/services/tests/notification/src/com/android/server/notification/ScheduleCalendarTest.java +++ b/services/tests/notification/src/com/android/server/notification/ScheduleCalendarTest.java @@ -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; diff --git a/services/tests/notification/src/com/android/server/notification/ScheduleConditionProviderTest.java b/services/tests/notification/src/com/android/server/notification/ScheduleConditionProviderTest.java index ddf46a052e405..ba5ad81590298 100644 --- a/services/tests/notification/src/com/android/server/notification/ScheduleConditionProviderTest.java +++ b/services/tests/notification/src/com/android/server/notification/ScheduleConditionProviderTest.java @@ -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; @@ -34,7 +35,9 @@ public class ScheduleConditionProviderTest extends ServiceTestCase