diff options
4 files changed, 88 insertions, 51 deletions
diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 0f4dc9a..08b1a81 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -16,8 +16,11 @@ package android.net; +import static android.text.format.Time.MONTH_DAY; + import android.content.Context; import android.os.RemoteException; +import android.text.format.Time; import java.io.PrintWriter; @@ -88,7 +91,83 @@ public class NetworkPolicyManager { return POLICY_NONE; } } - + + /** + * Compute the last cycle boundary for the given {@link NetworkPolicy}. For + * example, if cycle day is 20th, and today is June 15th, it will return May + * 20th. When cycle day doesn't exist in current month, it snaps to the 1st + * of following month. + * + * @hide + */ + public static long computeLastCycleBoundary(long currentTime, NetworkPolicy policy) { + final Time now = new Time(Time.TIMEZONE_UTC); + now.set(currentTime); + + // first, find cycle boundary for current month + final Time cycle = new Time(now); + cycle.hour = cycle.minute = cycle.second = 0; + snapToCycleDay(cycle, policy.cycleDay); + + if (Time.compare(cycle, now) >= 0) { + // cycle boundary is beyond now, use last cycle boundary; start by + // pushing ourselves squarely into last month. + final Time lastMonth = new Time(now); + lastMonth.hour = lastMonth.minute = lastMonth.second = 0; + lastMonth.monthDay = 1; + lastMonth.month -= 1; + lastMonth.normalize(true); + + cycle.set(lastMonth); + snapToCycleDay(cycle, policy.cycleDay); + } + + return cycle.toMillis(true); + } + + /** {@hide} */ + public static long computeNextCycleBoundary(long currentTime, NetworkPolicy policy) { + final Time now = new Time(Time.TIMEZONE_UTC); + now.set(currentTime); + + // first, find cycle boundary for current month + final Time cycle = new Time(now); + cycle.hour = cycle.minute = cycle.second = 0; + snapToCycleDay(cycle, policy.cycleDay); + + if (Time.compare(cycle, now) <= 0) { + // cycle boundary is before now, use next cycle boundary; start by + // pushing ourselves squarely into next month. + final Time nextMonth = new Time(now); + nextMonth.hour = nextMonth.minute = nextMonth.second = 0; + nextMonth.monthDay = 1; + nextMonth.month += 1; + nextMonth.normalize(true); + + cycle.set(nextMonth); + snapToCycleDay(cycle, policy.cycleDay); + } + + return cycle.toMillis(true); + } + + /** + * Snap to the cycle day for the current month given; when cycle day doesn't + * exist, it snaps to 1st of following month. + * + * @hide + */ + public static void snapToCycleDay(Time time, int cycleDay) { + if (cycleDay > time.getActualMaximum(MONTH_DAY)) { + // cycle day isn't valid this month; snap to 1st of next month + time.month += 1; + time.monthDay = 1; + } else { + time.monthDay = cycleDay; + } + time.normalize(true); + } + /** {@hide} */ public static void dumpPolicy(PrintWriter fout, int policy) { fout.write("["); diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java index 1fe1f79..3d1dedc 100644 --- a/core/java/android/widget/TabWidget.java +++ b/core/java/android/widget/TabWidget.java @@ -514,6 +514,12 @@ public class TabWidget extends LinearLayout implements OnFocusChangeListener { } @Override + public void removeAllViews() { + super.removeAllViews(); + mSelectedTab = -1; + } + + @Override public void sendAccessibilityEventUnchecked(AccessibilityEvent event) { // this class fires events only when tabs are focused or selected if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED && isFocused()) { diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java index c8f617e..2766093 100644 --- a/services/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java @@ -25,10 +25,10 @@ import static android.net.NetworkPolicyManager.POLICY_NONE; import static android.net.NetworkPolicyManager.POLICY_REJECT_PAID_BACKGROUND; import static android.net.NetworkPolicyManager.RULE_ALLOW_ALL; import static android.net.NetworkPolicyManager.RULE_REJECT_PAID; +import static android.net.NetworkPolicyManager.computeLastCycleBoundary; import static android.net.NetworkPolicyManager.dumpPolicy; import static android.net.NetworkPolicyManager.dumpRules; import static android.text.format.DateUtils.DAY_IN_MILLIS; -import static android.text.format.Time.MONTH_DAY; import static com.android.internal.util.Preconditions.checkNotNull; import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT; import static org.xmlpull.v1.XmlPullParser.START_TAG; @@ -53,7 +53,6 @@ import android.os.HandlerThread; import android.os.IPowerManager; import android.os.RemoteCallbackList; import android.os.RemoteException; -import android.text.format.Time; import android.util.NtpTrustedTime; import android.util.Slog; import android.util.SparseArray; @@ -367,53 +366,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } - /** - * Compute the last cycle boundary for the given {@link NetworkPolicy}. For - * example, if cycle day is 20th, and today is June 15th, it will return May - * 20th. When cycle day doesn't exist in current month, it snaps to the 1st - * of following month. - */ - // @VisibleForTesting - public static long computeLastCycleBoundary(long currentTime, NetworkPolicy policy) { - final Time now = new Time(Time.TIMEZONE_UTC); - now.set(currentTime); - - // first, find cycle boundary for current month - final Time cycle = new Time(now); - cycle.hour = cycle.minute = cycle.second = 0; - snapToCycleDay(cycle, policy.cycleDay); - - if (cycle.after(now)) { - // cycle boundary is beyond now, use last cycle boundary; start by - // pushing ourselves squarely into last month. - final Time lastMonth = new Time(now); - lastMonth.hour = lastMonth.minute = lastMonth.second = 0; - lastMonth.monthDay = 1; - lastMonth.month -= 1; - lastMonth.normalize(true); - - cycle.set(lastMonth); - snapToCycleDay(cycle, policy.cycleDay); - } - - return cycle.toMillis(true); - } - - /** - * Snap to the cycle day for the current month given; when cycle day doesn't - * exist, it snaps to 1st of following month. - */ - private static void snapToCycleDay(Time time, int cycleDay) { - if (cycleDay > time.getActualMaximum(MONTH_DAY)) { - // cycle day isn't valid this month; snap to 1st of next month - time.month += 1; - time.monthDay = 1; - } else { - time.monthDay = cycleDay; - } - time.normalize(true); - } - private void readPolicyLocked() { if (LOGD) Slog.v(TAG, "readPolicyLocked()"); diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index c4ddb00..1eeb56b 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -22,9 +22,9 @@ import static android.net.NetworkPolicyManager.POLICY_NONE; import static android.net.NetworkPolicyManager.POLICY_REJECT_PAID_BACKGROUND; import static android.net.NetworkPolicyManager.RULE_ALLOW_ALL; import static android.net.NetworkPolicyManager.RULE_REJECT_PAID; +import static android.net.NetworkPolicyManager.computeLastCycleBoundary; import static android.net.NetworkStats.UID_ALL; import static android.net.TrafficStats.TEMPLATE_WIFI; -import static com.android.server.net.NetworkPolicyManagerService.computeLastCycleBoundary; import static org.easymock.EasyMock.capture; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.eq; |