diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 11b861aef5aa3..22850b4bdb893 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -298,8 +298,11 @@ public class NetworkPolicyManager { cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); if (cycleDay > cal.getActualMaximum(Calendar.DAY_OF_MONTH)) { - cal.set(Calendar.DAY_OF_MONTH, 1); cal.add(Calendar.MONTH, 1); + cal.set(Calendar.DAY_OF_MONTH, 1); + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); cal.add(Calendar.SECOND, -1); } else { cal.set(Calendar.DAY_OF_MONTH, cycleDay); diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index ef95fb8f63540..a545af96da70f 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -446,6 +446,17 @@ public class NetworkPolicyManagerServiceTest { assertTimeEquals(expectedCycle, actualCycle); } + @Test + public void testLastCycleBoundaryJanuaryDST() throws Exception { + final long currentTime = parseTime("1989-01-26T21:00:00.000Z"); + final long expectedCycle = parseTime("1989-01-01T01:59:59.000Z"); + + final NetworkPolicy policy = new NetworkPolicy( + sTemplateWifi, 32, "America/Argentina/Buenos_Aires", 1024L, 1024L, false); + final long actualCycle = computeLastCycleBoundary(currentTime, policy); + assertTimeEquals(expectedCycle, actualCycle); + } + @Test public void testNetworkPolicyAppliedCycleLastMonth() throws Exception { NetworkState[] state = null;