diff options
| author | 2017-12-05 21:34:42 +0000 | |
|---|---|---|
| committer | 2017-12-05 21:34:42 +0000 | |
| commit | b0021b386fcdf132d4f700363d522089c19dd1ed (patch) | |
| tree | 555b0d2981bf2fd7df299fcc7f182a264eb4feef | |
| parent | 1523386d85517ce655ff5c4ffb30c70c27bc3fc6 (diff) | |
| parent | be6d3524b64f9149cf9c9ab9198f6a18c045c68d (diff) | |
Merge "Public access to static methods in ZenModeConfig"
| -rw-r--r-- | core/java/android/service/notification/ScheduleCalendar.java (renamed from services/core/java/com/android/server/notification/ScheduleCalendar.java) | 50 | ||||
| -rw-r--r-- | core/java/android/service/notification/ZenModeConfig.java | 30 | ||||
| -rw-r--r-- | services/core/java/com/android/server/notification/ScheduleConditionProvider.java | 14 | ||||
| -rw-r--r-- | services/tests/notification/src/com/android/server/notification/ScheduleCalendarTest.java | 2 | ||||
| -rw-r--r-- | services/tests/notification/src/com/android/server/notification/ScheduleConditionProviderTest.java | 5 |
5 files changed, 77 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/notification/ScheduleCalendar.java b/core/java/android/service/notification/ScheduleCalendar.java index 5ff0e21078af..8a7ff4da26e3 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<Integer> mDays = new ArraySet<Integer>(); 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 1ec24061eb98..512f2df9747e 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 c5f80bb63d2d..ba7fe7846507 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 cbda12da1a6f..4eb42201f072 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 ddf46a052e40..ba5ad8159029 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<ScheduleCondi @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - Looper.prepare(); + if (Looper.myLooper() == null) { + Looper.prepare(); + } Intent startIntent = new Intent("com.android.server.notification.ScheduleConditionProvider"); |