Merge changes I1539580e,I8452e799 into pi-dev

am: 8ea760c815

Change-Id: I4273e08bb50ba9b509171ea65d32bb6757a4a2b7
This commit is contained in:
android-build-team Robot
2018-05-08 09:56:11 -07:00
committed by android-build-merger
6 changed files with 132 additions and 35 deletions

View File

@@ -134,6 +134,24 @@ public class ScheduleCalendar {
return isInSchedule(-1, time, start, end) || isInSchedule(0, time, start, end);
}
/**
* @param alarm milliseconds since Epoch
* @param now milliseconds since Epoch
* @return true if alarm and now is within the schedule, else false
*/
public boolean isAlarmInSchedule(long alarm, long now) {
if (mSchedule == null || mDays.size() == 0) return false;
final long start = getTime(alarm, mSchedule.startHour, mSchedule.startMinute);
long end = getTime(alarm, mSchedule.endHour, mSchedule.endMinute);
if (end <= start) {
end = addDays(end, 1);
}
return (isInSchedule(-1, alarm, start, end)
&& isInSchedule(-1, now, start, end))
|| (isInSchedule(0, alarm, start, end)
&& isInSchedule(0, now, start, end));
}
/**
* @param time milliseconds since Epoch
* @return true if should exit at time for next alarm, else false
@@ -145,7 +163,7 @@ public class ScheduleCalendar {
return mSchedule.exitAtAlarm
&& mSchedule.nextAlarm != 0
&& time >= mSchedule.nextAlarm
&& isInSchedule(mSchedule.nextAlarm);
&& isAlarmInSchedule(mSchedule.nextAlarm, time);
}
private boolean isInSchedule(int daysOffset, long time, long start, long end) {

View File

@@ -53,7 +53,11 @@
android:layout_gravity="center"
android:soundEffectsEnabled="false" />
<include layout="@layout/volume_dnd_icon"/>
<include layout="@layout/volume_dnd_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/volume_dialog_stream_padding"
android:layout_marginTop="6dp"/>
</FrameLayout>
<LinearLayout
@@ -71,7 +75,9 @@
android:layout_height="wrap_content"
android:minWidth="@dimen/volume_dialog_panel_width"
android:gravity="center"
android:orientation="horizontal" >
android:orientation="horizontal"
android:paddingRight="@dimen/volume_dialog_stream_padding"
android:paddingLeft="@dimen/volume_dialog_stream_padding">
<!-- volume rows added and removed here! :-) -->
</LinearLayout>
<FrameLayout

View File

@@ -17,14 +17,13 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dnd_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:layout_marginTop="6dp">
<ImageView
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_marginTop="6dp"
android:layout_marginRight="6dp"
android:layout_gravity="right|top"
android:src="@drawable/ic_dnd"
android:tint="?android:attr/textColorTertiary"/>
</FrameLayout>
</FrameLayout>

View File

@@ -296,6 +296,8 @@
<dimen name="volume_dialog_panel_transparent_padding">20dp</dimen>
<dimen name="volume_dialog_stream_padding">8dp</dimen>
<!-- the amount the volume panel should be offset at the end from the view next to it (or
the screen edge, in portrait-->
<dimen name="volume_dialog_base_margin">8dp</dimen>

View File

@@ -695,26 +695,6 @@ public class VolumeDialogImpl implements VolumeDialog {
private void enableVolumeRowViewsH(VolumeRow row, boolean enable) {
boolean showDndIcon = !enable;
row.dndIcon.setVisibility(showDndIcon ? VISIBLE : GONE);
if (showDndIcon && getNumVisibleRows() == 1) {
row.dndIcon.setLayoutParams(new FrameLayout.LayoutParams(
mContext.getResources().getDimensionPixelSize(
R.dimen.volume_dialog_panel_width),
FrameLayout.LayoutParams.WRAP_CONTENT));
} else if (row.view.getVisibility() == VISIBLE) {
row.dndIcon.setLayoutParams(new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT));
}
}
private int getNumVisibleRows() {
int count = 0;
for (int i = 0; i < mRows.size(); i++) {
if (mRows.get(i).view.getVisibility() == VISIBLE) {
count++;
}
}
return count;
}
/**

View File

@@ -206,15 +206,14 @@ public class ScheduleCalendarTest extends UiServiceTestCase {
assertTrue(mScheduleCalendar.shouldExitForAlarm(1000));
}
@Ignore
@Test
public void testShouldExitForAlarm_oldAlarm() {
// Cal: today 2:15pm
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 14);
cal.set(Calendar.MINUTE, 15);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Calendar now = new GregorianCalendar();
now.set(Calendar.HOUR_OF_DAY, 14);
now.set(Calendar.MINUTE, 15);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
// ScheduleInfo: today 12:16pm - today 3:15pm
mScheduleInfo.days = new int[] {getTodayDay()};
@@ -226,10 +225,45 @@ public class ScheduleCalendarTest extends UiServiceTestCase {
mScheduleInfo.nextAlarm = 1000; // very old alarm
mScheduleCalendar.setSchedule(mScheduleInfo);
assertTrue(mScheduleCalendar.isInSchedule(cal.getTimeInMillis()));
assertTrue(mScheduleCalendar.isInSchedule(now.getTimeInMillis()));
// don't exit for an alarm if it's an old alarm
assertFalse(mScheduleCalendar.shouldExitForAlarm(1000));
assertFalse(mScheduleCalendar.shouldExitForAlarm(now.getTimeInMillis()));
}
@Test
public void testShouldExitForAlarm_oldAlarmInSchedule() {
// calNow: day 2 at 9pm
Calendar calNow = new GregorianCalendar();
calNow.set(Calendar.HOUR_OF_DAY, 21);
calNow.set(Calendar.MINUTE, 0);
calNow.set(Calendar.SECOND, 0);
calNow.set(Calendar.MILLISECOND, 0);
calNow.add(Calendar.DATE, 1); // add a day
// calAlarm: day 2 at 5am
Calendar calAlarm = new GregorianCalendar();
calAlarm.set(Calendar.HOUR_OF_DAY, 5);
calAlarm.set(Calendar.MINUTE, 0);
calAlarm.set(Calendar.SECOND, 0);
calAlarm.set(Calendar.MILLISECOND, 0);
calAlarm.add(Calendar.DATE, 1); // add a day
// ScheduleInfo: day 1, day 2: 9pm-7am
mScheduleInfo.days = new int[] {getTodayDay(), getTodayDay() + 1};
mScheduleInfo.startHour = 21;
mScheduleInfo.endHour = 7;
mScheduleInfo.startMinute = 0;
mScheduleInfo.endMinute = 0;
mScheduleInfo.exitAtAlarm = true;
mScheduleInfo.nextAlarm = calAlarm.getTimeInMillis(); // old alarm (5am day 2)
mScheduleCalendar.setSchedule(mScheduleInfo);
assertTrue(mScheduleCalendar.isInSchedule(calNow.getTimeInMillis()));
assertTrue(mScheduleCalendar.isInSchedule(calAlarm.getTimeInMillis()));
// don't exit for an alarm if it's an old alarm
assertFalse(mScheduleCalendar.shouldExitForAlarm(calNow.getTimeInMillis()));
}
@Test
@@ -369,6 +403,64 @@ public class ScheduleCalendarTest extends UiServiceTestCase {
assertFalse(mScheduleCalendar.isInSchedule(cal.getTimeInMillis()));
}
@Test
public void testIsAlarmInSchedule_alarmAndNowInSchedule_sameScheduleTrigger() {
Calendar alarm = new GregorianCalendar();
alarm.set(Calendar.HOUR_OF_DAY, 23);
alarm.set(Calendar.MINUTE, 15);
alarm.set(Calendar.SECOND, 0);
alarm.set(Calendar.MILLISECOND, 0);
Calendar now = new GregorianCalendar();
now.set(Calendar.HOUR_OF_DAY, 2);
now.set(Calendar.MINUTE, 15);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
now.add(Calendar.DATE, 1); // add a day
mScheduleInfo.days = new int[] {getTodayDay(), getTodayDay() + 1};
mScheduleInfo.startHour = 22;
mScheduleInfo.startMinute = 15;
mScheduleInfo.endHour = 3;
mScheduleInfo.endMinute = 15;
mScheduleCalendar.setSchedule(mScheduleInfo);
assertTrue(mScheduleCalendar.isInSchedule(alarm.getTimeInMillis()));
assertTrue(mScheduleCalendar.isInSchedule(now.getTimeInMillis()));
assertTrue(mScheduleCalendar.isAlarmInSchedule(alarm.getTimeInMillis(),
now.getTimeInMillis()));
}
@Test
public void testIsAlarmInSchedule_alarmAndNowInSchedule_differentScheduleTrigger() {
Calendar alarm = new GregorianCalendar();
alarm.set(Calendar.HOUR_OF_DAY, 23);
alarm.set(Calendar.MINUTE, 15);
alarm.set(Calendar.SECOND, 0);
alarm.set(Calendar.MILLISECOND, 0);
Calendar now = new GregorianCalendar();
now.set(Calendar.HOUR_OF_DAY, 23);
now.set(Calendar.MINUTE, 15);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
now.add(Calendar.DATE, 1); // add a day
mScheduleInfo.days = new int[] {getTodayDay(), getTodayDay() + 1};
mScheduleInfo.startHour = 22;
mScheduleInfo.startMinute = 15;
mScheduleInfo.endHour = 3;
mScheduleInfo.endMinute = 15;
mScheduleCalendar.setSchedule(mScheduleInfo);
// even though both alarm and now are in schedule, they are not in the same part of
// the schedule (alarm is in schedule for the previous day's schedule compared to now)
assertTrue(mScheduleCalendar.isInSchedule(alarm.getTimeInMillis()));
assertTrue(mScheduleCalendar.isInSchedule(now.getTimeInMillis()));
assertFalse(mScheduleCalendar.isAlarmInSchedule(alarm.getTimeInMillis(),
now.getTimeInMillis()));
}
private int getTodayDay() {
return new GregorianCalendar().get(Calendar.DAY_OF_WEEK);
}