summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/net/NetworkPolicyManager.java81
-rw-r--r--core/java/android/widget/TabWidget.java6
-rw-r--r--services/java/com/android/server/net/NetworkPolicyManagerService.java50
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java2
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;