Merge changes I1539580e,I8452e799 into pi-dev
am: 8ea760c815
Change-Id: I4273e08bb50ba9b509171ea65d32bb6757a4a2b7
This commit is contained in:
committed by
android-build-merger
commit
f0013528bc
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user