diff options
18 files changed, 210 insertions, 189 deletions
diff --git a/api/current.txt b/api/current.txt index 6fdd161..f4bfced 100644 --- a/api/current.txt +++ b/api/current.txt @@ -9065,6 +9065,7 @@ package android.graphics.drawable { method public int getMinimumWidth(); method public abstract int getOpacity(); method public boolean getPadding(android.graphics.Rect); + method public int getResolvedLayoutDirectionSelf(); method public int[] getState(); method public android.graphics.Region getTransparentRegion(); method public void inflate(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; @@ -9099,6 +9100,10 @@ package android.graphics.drawable { method public abstract void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); } + public static abstract interface Drawable.Callback2 implements android.graphics.drawable.Drawable.Callback { + method public abstract int getResolvedLayoutDirection(android.graphics.drawable.Drawable); + } + public static abstract class Drawable.ConstantState { ctor public Drawable.ConstantState(); method public abstract int getChangingConfigurations(); @@ -23109,7 +23114,7 @@ package android.view { method public void recycle(); } - public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback { + public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.graphics.drawable.Drawable.Callback2 android.view.KeyEvent.Callback { ctor public View(android.content.Context); ctor public View(android.content.Context, android.util.AttributeSet); ctor public View(android.content.Context, android.util.AttributeSet, int); diff --git a/core/java/android/net/NetworkPolicy.java b/core/java/android/net/NetworkPolicy.java index 04cf1a3..5b94784 100644 --- a/core/java/android/net/NetworkPolicy.java +++ b/core/java/android/net/NetworkPolicy.java @@ -36,6 +36,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { public final NetworkTemplate template; public int cycleDay; + public String cycleTimezone; public long warningBytes; public long limitBytes; public long lastWarningSnooze; @@ -44,15 +45,18 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { private static final long DEFAULT_MTU = 1500; - public NetworkPolicy(NetworkTemplate template, int cycleDay, long warningBytes, - long limitBytes, boolean metered) { - this(template, cycleDay, warningBytes, limitBytes, SNOOZE_NEVER, SNOOZE_NEVER, metered); + public NetworkPolicy(NetworkTemplate template, int cycleDay, String cycleTimezone, + long warningBytes, long limitBytes, boolean metered) { + this(template, cycleDay, cycleTimezone, warningBytes, limitBytes, SNOOZE_NEVER, + SNOOZE_NEVER, metered); } - public NetworkPolicy(NetworkTemplate template, int cycleDay, long warningBytes, - long limitBytes, long lastWarningSnooze, long lastLimitSnooze, boolean metered) { + public NetworkPolicy(NetworkTemplate template, int cycleDay, String cycleTimezone, + long warningBytes, long limitBytes, long lastWarningSnooze, long lastLimitSnooze, + boolean metered) { this.template = checkNotNull(template, "missing NetworkTemplate"); this.cycleDay = cycleDay; + this.cycleTimezone = checkNotNull(cycleTimezone, "missing cycleTimezone"); this.warningBytes = warningBytes; this.limitBytes = limitBytes; this.lastWarningSnooze = lastWarningSnooze; @@ -63,6 +67,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { public NetworkPolicy(Parcel in) { template = in.readParcelable(null); cycleDay = in.readInt(); + cycleTimezone = in.readString(); warningBytes = in.readLong(); limitBytes = in.readLong(); lastWarningSnooze = in.readLong(); @@ -70,10 +75,11 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { metered = in.readInt() != 0; } - /** {@inheritDoc} */ + @Override public void writeToParcel(Parcel dest, int flags) { dest.writeParcelable(template, flags); dest.writeInt(cycleDay); + dest.writeString(cycleTimezone); dest.writeLong(warningBytes); dest.writeLong(limitBytes); dest.writeLong(lastWarningSnooze); @@ -81,7 +87,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { dest.writeInt(metered ? 1 : 0); } - /** {@inheritDoc} */ + @Override public int describeContents() { return 0; } @@ -112,7 +118,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { lastLimitSnooze = SNOOZE_NEVER; } - /** {@inheritDoc} */ + @Override public int compareTo(NetworkPolicy another) { if (another == null || another.limitBytes == LIMIT_DISABLED) { // other value is missing or disabled; we win @@ -127,8 +133,8 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { @Override public int hashCode() { - return Objects.hashCode(template, cycleDay, warningBytes, limitBytes, lastWarningSnooze, - lastLimitSnooze, metered); + return Objects.hashCode(template, cycleDay, cycleTimezone, warningBytes, limitBytes, + lastWarningSnooze, lastLimitSnooze, metered); } @Override @@ -139,6 +145,7 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { && limitBytes == other.limitBytes && lastWarningSnooze == other.lastWarningSnooze && lastLimitSnooze == other.lastLimitSnooze && metered == other.metered + && Objects.equal(cycleTimezone, other.cycleTimezone) && Objects.equal(template, other.template); } return false; @@ -146,17 +153,19 @@ public class NetworkPolicy implements Parcelable, Comparable<NetworkPolicy> { @Override public String toString() { - return "NetworkPolicy[" + template + "]: cycleDay=" + cycleDay + ", warningBytes=" - + warningBytes + ", limitBytes=" + limitBytes + ", lastWarningSnooze=" - + lastWarningSnooze + ", lastLimitSnooze=" + lastLimitSnooze + ", metered=" - + metered; + return "NetworkPolicy[" + template + "]: cycleDay=" + cycleDay + ", cycleTimezone=" + + cycleTimezone + ", warningBytes=" + warningBytes + ", limitBytes=" + limitBytes + + ", lastWarningSnooze=" + lastWarningSnooze + ", lastLimitSnooze=" + + lastLimitSnooze + ", metered=" + metered; } public static final Creator<NetworkPolicy> CREATOR = new Creator<NetworkPolicy>() { + @Override public NetworkPolicy createFromParcel(Parcel in) { return new NetworkPolicy(in); } + @Override public NetworkPolicy[] newArray(int size) { return new NetworkPolicy[size]; } diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 9d253c7..7173751 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -131,7 +131,7 @@ public class NetworkPolicyManager { * @hide */ public static long computeLastCycleBoundary(long currentTime, NetworkPolicy policy) { - final Time now = new Time(Time.TIMEZONE_UTC); + final Time now = new Time(policy.cycleTimezone); now.set(currentTime); // first, find cycle boundary for current month @@ -157,7 +157,7 @@ public class NetworkPolicyManager { /** {@hide} */ public static long computeNextCycleBoundary(long currentTime, NetworkPolicy policy) { - final Time now = new Time(Time.TIMEZONE_UTC); + final Time now = new Time(policy.cycleTimezone); now.set(currentTime); // first, find cycle boundary for current month @@ -183,7 +183,7 @@ public class NetworkPolicyManager { /** * Snap to the cycle day for the current month given; when cycle day doesn't - * exist, it snaps to 1st of following month. + * exist, it snaps to last second of current month. * * @hide */ diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index 07ae93b..3001ea1 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -193,9 +193,6 @@ public class ImageView extends View { } } - /** - * @hide - */ @Override public int getResolvedLayoutDirection(Drawable dr) { return (dr == mDrawable) ? diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java index e298acb..3bc4f7f 100644 --- a/core/java/android/widget/ProgressBar.java +++ b/core/java/android/widget/ProgressBar.java @@ -910,9 +910,6 @@ public class ProgressBar extends View { } } - /** - * @hide - */ @Override public int getResolvedLayoutDirection(Drawable who) { return (who == mProgressDrawable || who == mIndeterminateDrawable) ? diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 4c89218..b8db848 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -1214,7 +1214,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (imm != null) imm.restartInput(this); } - if (mEditor != null) getEditor().mTextDisplayListIsValid = false; + if (mEditor != null) getEditor().invalidateTextDisplayList(); prepareCursorControllers(); // start or stop the cursor blinking as appropriate @@ -2328,7 +2328,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener public void setHighlightColor(int color) { if (mHighlightColor != color) { mHighlightColor = color; - if (mEditor != null) getEditor().mTextDisplayListIsValid = false; + if (mEditor != null) getEditor().invalidateTextDisplayList(); invalidate(); } } @@ -2349,7 +2349,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mShadowDx = dx; mShadowDy = dy; - if (mEditor != null) getEditor().mTextDisplayListIsValid = false; + if (mEditor != null) getEditor().invalidateTextDisplayList(); invalidate(); } @@ -2841,7 +2841,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } if (inval) { - if (mEditor != null) getEditor().mTextDisplayListIsValid = false; + if (mEditor != null) getEditor().invalidateTextDisplayList(); invalidate(); } } @@ -3334,7 +3334,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // Invalidate display list if hint will be used if (mEditor != null && mText.length() == 0 && mHint != null) { - getEditor().mTextDisplayListIsValid = false; + getEditor().invalidateTextDisplayList(); } } @@ -4396,9 +4396,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } - /** - * @hide - */ @Override public int getResolvedLayoutDirection(Drawable who) { if (who == null) return View.LAYOUT_DIRECTION_LTR; @@ -4429,13 +4426,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (dr.mDrawableStart != null) dr.mDrawableStart.mutate().setAlpha(alpha); if (dr.mDrawableEnd != null) dr.mDrawableEnd.mutate().setAlpha(alpha); } - if (mEditor != null) getEditor().mTextDisplayListIsValid = false; + if (mEditor != null) getEditor().invalidateTextDisplayList(); } return true; } if (mCurrentAlpha != 255) { - if (mEditor != null) getEditor().mTextDisplayListIsValid = false; + if (mEditor != null) getEditor().invalidateTextDisplayList(); } mCurrentAlpha = 255; return false; @@ -6292,7 +6289,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - if (changed && mEditor != null) getEditor().mTextDisplayListIsValid = false; + if (changed && mEditor != null) getEditor().invalidateTextDisplayList(); } private boolean isShowingHint() { @@ -7130,7 +7127,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } else { ims.mContentChanged = true; } - if (mEditor != null) getEditor().mTextDisplayListIsValid = false; + if (mEditor != null) getEditor().invalidateTextDisplayList(); } if (MetaKeyKeyListener.isMetaTracker(buf, what)) { @@ -8277,7 +8274,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (getEditor().mPositionListener != null) { getEditor().mPositionListener.onScrollChanged(); } - getEditor().mTextDisplayListIsValid = false; + getEditor().invalidateTextDisplayList(); } } @@ -11303,7 +11300,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener InputMethodState mInputMethodState; DisplayList mTextDisplayList; - boolean mTextDisplayListIsValid; boolean mFrozenWithFocus; boolean mSelectionMoved; @@ -11392,9 +11388,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener removeCallbacks(mShowSuggestionRunnable); } - if (mTextDisplayList != null) { - mTextDisplayList.invalidate(); - } + invalidateTextDisplayList(); if (mSpellChecker != null) { mSpellChecker.closeSession(); @@ -11551,7 +11545,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener void sendOnTextChanged(int start, int after) { updateSpellCheckSpans(start, start + after, false); - mTextDisplayListIsValid = false; + invalidateTextDisplayList(); // Hide the controllers as soon as text is modified (typing, procedural...) // We do not hide the span controllers, since they can be added when a new text is @@ -11708,8 +11702,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener layout.drawBackground(canvas, highlight, mHighlightPaint, cursorOffsetVertical, firstLine, lastLine); - if (mTextDisplayList == null || !mTextDisplayList.isValid() || - !mTextDisplayListIsValid) { + if (mTextDisplayList == null || !mTextDisplayList.isValid()) { if (mTextDisplayList == null) { mTextDisplayList = getHardwareRenderer().createDisplayList("Text"); } @@ -11726,7 +11719,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } finally { hardwareCanvas.onPostDraw(); mTextDisplayList.end(); - mTextDisplayListIsValid = true; } } canvas.translate(mScrollX, mScrollY); @@ -11744,6 +11736,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (translate) canvas.translate(0, -cursorOffsetVertical); } + private void invalidateTextDisplayList() { + if (mTextDisplayList != null) mTextDisplayList.invalidate(); + } + private void updateCursorsPositions() { if (mCursorDrawableRes == 0) { mCursorCount = 0; diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerStressTestRunner.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerStressTestRunner.java index 7233e7f..3ec9031 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerStressTestRunner.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerStressTestRunner.java @@ -42,17 +42,13 @@ public class ConnectivityManagerStressTestRunner extends InstrumentationTestRunn public int mSleepTime = 2 * 60 * 1000; public String mReconnectSsid = "securenetdhcp"; public String mReconnectPassword = "androidwifi"; + public boolean mWifiOnlyFlag = false; @Override public TestSuite getAllTests() { TestSuite suite = new InstrumentationTestSuite(this); - if (!UtilHelper.isWifiOnly(getContext())) { - suite.addTestSuite(WifiApStress.class); - suite.addTestSuite(WifiStressTest.class); - } else { - // only the wifi stress tests - suite.addTestSuite(WifiStressTest.class); - } + suite.addTestSuite(WifiApStress.class); + suite.addTestSuite(WifiStressTest.class); return suite; } @@ -64,13 +60,11 @@ public class ConnectivityManagerStressTestRunner extends InstrumentationTestRunn @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - if (!UtilHelper.isWifiOnly(getContext())) { - String valueStr = (String) icicle.get("softap_iterations"); - if (valueStr != null) { - int iteration = Integer.parseInt(valueStr); - if (iteration > 0) { - mSoftapIterations = iteration; - } + String valueStr = (String) icicle.get("softap_iterations"); + if (valueStr != null) { + int iteration = Integer.parseInt(valueStr); + if (iteration > 0) { + mSoftapIterations = iteration; } } @@ -107,5 +101,10 @@ public class ConnectivityManagerStressTestRunner extends InstrumentationTestRunn mSleepTime = 1000 * sleepTime; } } + + String wifiOnlyFlag = (String) icicle.get("wifi-only"); + if (wifiOnlyFlag != null) { + mWifiOnlyFlag = true; + } } } diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestRunner.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestRunner.java index 9c1922f..b94306a 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestRunner.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/ConnectivityManagerTestRunner.java @@ -35,23 +35,13 @@ import junit.framework.TestSuite; */ public class ConnectivityManagerTestRunner extends InstrumentationTestRunner { - public String TEST_SSID = null; + public boolean mWifiOnlyFlag = false; + public String mTestSsid = null; @Override public TestSuite getAllTests() { TestSuite suite = new InstrumentationTestSuite(this); - if (!UtilHelper.isWifiOnly(getContext())) { - suite.addTestSuite(ConnectivityManagerMobileTest.class); - } else { - // create a new test suite - suite.setName("ConnectivityManagerWifiOnlyFunctionalTests"); - String[] methodNames = {"testConnectToWifi", "testConnectToWifWithKnownAP", - "testDisconnectWifi", "testWifiStateChange"}; - Class<ConnectivityManagerMobileTest> testClass = ConnectivityManagerMobileTest.class; - for (String method: methodNames) { - suite.addTest(TestSuite.createTest(testClass, method)); - } - } + suite.addTestSuite(ConnectivityManagerMobileTest.class); suite.addTestSuite(WifiConnectionTest.class); return suite; } @@ -66,7 +56,11 @@ public class ConnectivityManagerTestRunner extends InstrumentationTestRunner { super.onCreate(icicle); String testSSID = (String) icicle.get("ssid"); if (testSSID != null) { - TEST_SSID = testSSID; + mTestSsid = testSSID; + } + String wifiOnlyFlag = (String) icicle.get("wifi-only"); + if (wifiOnlyFlag != null) { + mWifiOnlyFlag = true; } } } diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/UtilHelper.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/UtilHelper.java deleted file mode 100644 index b9fe6ed..0000000 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/UtilHelper.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.connectivitymanagertest; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.util.Log; - -public class UtilHelper { - - private static Boolean mIsWifiOnly = null; - private static final Object sLock = new Object(); - - /** - * Return true if device is a wifi only device. - */ - public static boolean isWifiOnly(Context context) { - synchronized (sLock) { - // cache the result from pkgMgr statically. It will never change, since its a - // device configuration setting - if (mIsWifiOnly == null) { - PackageManager pkgMgr = context.getPackageManager(); - mIsWifiOnly = Boolean.valueOf(!pkgMgr - .hasSystemFeature(PackageManager.FEATURE_TELEPHONY) - && pkgMgr.hasSystemFeature(PackageManager.FEATURE_WIFI)); - String deviceType = mIsWifiOnly ? "wifi-only" : "telephony"; - Log.d("ConnectivityManagerTest", String.format("detected a %s device", deviceType)); - } - } - return mIsWifiOnly; - } -} diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/ConnectivityManagerMobileTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/ConnectivityManagerMobileTest.java index 52326d5..bf188d3 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/ConnectivityManagerMobileTest.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/ConnectivityManagerMobileTest.java @@ -31,16 +31,15 @@ import android.util.Log; import com.android.connectivitymanagertest.ConnectivityManagerTestActivity; import com.android.connectivitymanagertest.ConnectivityManagerTestRunner; import com.android.connectivitymanagertest.NetworkState; -import com.android.connectivitymanagertest.UtilHelper; public class ConnectivityManagerMobileTest extends ActivityInstrumentationTestCase2<ConnectivityManagerTestActivity> { private static final String LOG_TAG = "ConnectivityManagerMobileTest"; - private String TEST_ACCESS_POINT; + private String mTestAccessPoint; private ConnectivityManagerTestActivity cmActivity; private WakeLock wl; - private boolean mIsWifiOnlyDevice; + private boolean mWifiOnlyFlag; public ConnectivityManagerMobileTest() { super(ConnectivityManagerTestActivity.class); @@ -52,7 +51,9 @@ public class ConnectivityManagerMobileTest extends cmActivity = getActivity(); ConnectivityManagerTestRunner mRunner = (ConnectivityManagerTestRunner)getInstrumentation(); - TEST_ACCESS_POINT = mRunner.TEST_SSID; + mTestAccessPoint = mRunner.mTestSsid; + mWifiOnlyFlag = mRunner.mWifiOnlyFlag; + PowerManager pm = (PowerManager)getInstrumentation(). getContext().getSystemService(Context.POWER_SERVICE); wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "CMWakeLock"); @@ -63,8 +64,8 @@ public class ConnectivityManagerMobileTest extends log("airplane is not disabled, disable it."); cmActivity.setAirplaneMode(getInstrumentation().getContext(), false); } - mIsWifiOnlyDevice = UtilHelper.isWifiOnly(mRunner.getTargetContext()); - if (!mIsWifiOnlyDevice) { + + if (!mWifiOnlyFlag) { if (!cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)) { // Note: When the test fails in setUp(), tearDown is not called. In that case, @@ -113,6 +114,10 @@ public class ConnectivityManagerMobileTest extends // event should be expected. @LargeTest public void test3GToWifiNotification() { + if (mWifiOnlyFlag) { + Log.v(LOG_TAG, this.getName() + " is excluded for wifi-only test"); + return; + } // Enable Wi-Fi to avoid initial UNKNOWN state cmActivity.enableWifi(); sleep(2 * ConnectivityManagerTestActivity.SHORT_TIMEOUT); @@ -159,9 +164,9 @@ public class ConnectivityManagerMobileTest extends // Test case 2: test connection to a given AP @LargeTest public void testConnectToWifi() { - assertNotNull("SSID is null", TEST_ACCESS_POINT); + assertNotNull("SSID is null", mTestAccessPoint); NetworkInfo networkInfo; - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { //Prepare for connectivity verification networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, @@ -172,15 +177,15 @@ public class ConnectivityManagerMobileTest extends NetworkState.TO_CONNECTION, State.CONNECTED); // Enable Wifi and connect to a test access point - assertTrue("failed to connect to " + TEST_ACCESS_POINT, - cmActivity.connectToWifi(TEST_ACCESS_POINT)); + assertTrue("failed to connect to " + mTestAccessPoint, + cmActivity.connectToWifi(mTestAccessPoint)); assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); log("wifi state is enabled"); assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); } @@ -192,7 +197,7 @@ public class ConnectivityManagerMobileTest extends cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); assertTrue(false); } - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { log("Mobile state transition validation failed."); log("reason: " + @@ -205,10 +210,10 @@ public class ConnectivityManagerMobileTest extends // Test case 3: connect to Wifi with known AP @LargeTest public void testConnectToWifWithKnownAP() { - assertNotNull("SSID is null", TEST_ACCESS_POINT); - // Connect to TEST_ACCESS_POINT - assertTrue("failed to connect to " + TEST_ACCESS_POINT, - cmActivity.connectToWifi(TEST_ACCESS_POINT)); + assertNotNull("SSID is null", mTestAccessPoint); + // Connect to mTestAccessPoint + assertTrue("failed to connect to " + mTestAccessPoint, + cmActivity.connectToWifi(mTestAccessPoint)); assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, @@ -227,13 +232,13 @@ public class ConnectivityManagerMobileTest extends ConnectivityManagerTestActivity.LONG_TIMEOUT)); assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); } NetworkInfo networkInfo; - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { //Prepare for connectivity state verification networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, @@ -253,7 +258,7 @@ public class ConnectivityManagerMobileTest extends // Wait for Wifi to be connected and mobile to be disconnected assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); } @@ -270,11 +275,11 @@ public class ConnectivityManagerMobileTest extends // Test case 4: test disconnect Wifi @LargeTest public void testDisconnectWifi() { - assertNotNull("SSID is null", TEST_ACCESS_POINT); + assertNotNull("SSID is null", mTestAccessPoint); // connect to Wifi - assertTrue("failed to connect to " + TEST_ACCESS_POINT, - cmActivity.connectToWifi(TEST_ACCESS_POINT)); + assertTrue("failed to connect to " + mTestAccessPoint, + cmActivity.connectToWifi(mTestAccessPoint)); assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); @@ -283,7 +288,7 @@ public class ConnectivityManagerMobileTest extends sleep(ConnectivityManagerTestActivity.SHORT_TIMEOUT); NetworkInfo networkInfo; - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, networkInfo.getState(), @@ -299,7 +304,7 @@ public class ConnectivityManagerMobileTest extends assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); } @@ -311,7 +316,7 @@ public class ConnectivityManagerMobileTest extends cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); assertTrue(false); } - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { log("Mobile state transition validation failed."); log("reason: " + @@ -324,6 +329,10 @@ public class ConnectivityManagerMobileTest extends // Test case 5: test connectivity from 3G to airplane mode, then to 3G again @LargeTest public void testDataConnectionWith3GToAmTo3G() { + if (mWifiOnlyFlag) { + Log.v(LOG_TAG, this.getName() + " is excluded for wifi-only test"); + return; + } //Prepare for state verification NetworkInfo networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); cmActivity.setStateTransitionCriteria(ConnectivityManager.TYPE_MOBILE, @@ -340,7 +349,9 @@ public class ConnectivityManagerMobileTest extends networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI); assertEquals(State.DISCONNECTED, networkInfo.getState()); - + // wait until mobile is turn off + assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, + State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { log("Mobile state transition validation failed."); log("reason: " + @@ -382,13 +393,17 @@ public class ConnectivityManagerMobileTest extends // Test case 6: test connectivity with airplane mode Wifi connected @LargeTest public void testDataConnectionOverAMWithWifi() { - assertNotNull("SSID is null", TEST_ACCESS_POINT); + if (mWifiOnlyFlag) { + Log.v(LOG_TAG, this.getName() + " is excluded for wifi-only test"); + return; + } + assertNotNull("SSID is null", mTestAccessPoint); // Eanble airplane mode log("Enable airplane mode"); cmActivity.setAirplaneMode(getInstrumentation().getContext(), true); NetworkInfo networkInfo; - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); networkInfo = cmActivity.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); @@ -402,8 +417,8 @@ public class ConnectivityManagerMobileTest extends NetworkState.TO_CONNECTION, State.CONNECTED); // Connect to Wifi - assertTrue("failed to connect to " + TEST_ACCESS_POINT, - cmActivity.connectToWifi(TEST_ACCESS_POINT)); + assertTrue("failed to connect to " + mTestAccessPoint, + cmActivity.connectToWifi(mTestAccessPoint)); assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); @@ -414,7 +429,7 @@ public class ConnectivityManagerMobileTest extends cmActivity.getTransitionFailureReason(ConnectivityManager.TYPE_WIFI)); assertTrue("State validation failed", false); } - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { if (!cmActivity.validateNetworkStates(ConnectivityManager.TYPE_MOBILE)) { log("state validation for Mobile failed"); log("reason: " + @@ -428,11 +443,15 @@ public class ConnectivityManagerMobileTest extends // Test case 7: test connectivity while transit from Wifi->AM->Wifi @LargeTest public void testDataConnectionWithWifiToAMToWifi () { - // Connect to TEST_ACCESS_POINT - assertNotNull("SSID is null", TEST_ACCESS_POINT); + if (mWifiOnlyFlag) { + Log.v(LOG_TAG, this.getName() + " is excluded for wifi-only test"); + return; + } + // Connect to mTestAccessPoint + assertNotNull("SSID is null", mTestAccessPoint); // Connect to Wifi - assertTrue("failed to connect to " + TEST_ACCESS_POINT, - cmActivity.connectToWifi(TEST_ACCESS_POINT)); + assertTrue("failed to connect to " + mTestAccessPoint, + cmActivity.connectToWifi(mTestAccessPoint)); assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); @@ -466,7 +485,7 @@ public class ConnectivityManagerMobileTest extends assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.DISCONNECTED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); } @@ -483,10 +502,10 @@ public class ConnectivityManagerMobileTest extends // Test case 8: test wifi state change while connecting/disconnecting to/from an AP @LargeTest public void testWifiStateChange () { - assertNotNull("SSID is null", TEST_ACCESS_POINT); - //Connect to TEST_ACCESS_POINT - assertTrue("failed to connect to " + TEST_ACCESS_POINT, - cmActivity.connectToWifi(TEST_ACCESS_POINT)); + assertNotNull("SSID is null", mTestAccessPoint); + //Connect to mTestAccessPoint + assertTrue("failed to connect to " + mTestAccessPoint, + cmActivity.connectToWifi(mTestAccessPoint)); assertTrue(cmActivity.waitForWifiState(WifiManager.WIFI_STATE_ENABLED, ConnectivityManagerTestActivity.LONG_TIMEOUT)); assertTrue(cmActivity.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED, @@ -503,7 +522,7 @@ public class ConnectivityManagerMobileTest extends // Disconnect from the current AP log("disconnect from the AP"); if (!cmActivity.disconnectAP()) { - log("failed to disconnect from " + TEST_ACCESS_POINT); + log("failed to disconnect from " + mTestAccessPoint); } // Verify the connectivity state for Wifi is DISCONNECTED diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiApStress.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiApStress.java index 41104fe..7e136be 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiApStress.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiApStress.java @@ -51,6 +51,7 @@ public class WifiApStress private int iterations; private BufferedWriter mOutputWriter = null; private int mLastIteration = 0; + private boolean mWifiOnlyFlag; public WifiApStress() { super(ConnectivityManagerTestActivity.class); @@ -63,6 +64,7 @@ public class WifiApStress ConnectivityManagerStressTestRunner mRunner = (ConnectivityManagerStressTestRunner)getInstrumentation(); iterations = mRunner.mSoftapIterations; + mWifiOnlyFlag = mRunner.mWifiOnlyFlag; mAct.turnScreenOn(); } @@ -79,6 +81,10 @@ public class WifiApStress @LargeTest public void testWifiHotSpot() { + if (mWifiOnlyFlag) { + Log.v(TAG, this.getName() + " is excluded for wi-fi only test"); + return; + } WifiConfiguration config = new WifiConfiguration(); config.SSID = NETWORK_ID; config.allowedKeyManagement.set(KeyMgmt.WPA_PSK); diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java index feb63cd..f46546f 100644 --- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java +++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java @@ -34,7 +34,6 @@ import android.util.Log; import com.android.connectivitymanagertest.ConnectivityManagerStressTestRunner; import com.android.connectivitymanagertest.ConnectivityManagerTestActivity; -import com.android.connectivitymanagertest.UtilHelper; import java.io.BufferedWriter; import java.io.File; @@ -75,7 +74,7 @@ public class WifiStressTest private String mPassword; private ConnectivityManagerStressTestRunner mRunner; private BufferedWriter mOutputWriter = null; - private boolean mIsWifiOnlyDevice; + private boolean mWifiOnlyFlag; public WifiStressTest() { super(ConnectivityManagerTestActivity.class); @@ -91,13 +90,13 @@ public class WifiStressTest mPassword = mRunner.mReconnectPassword; mScanIterations = mRunner.mScanIterations; mWifiSleepTime = mRunner.mSleepTime; + mWifiOnlyFlag = mRunner.mWifiOnlyFlag; log(String.format("mReconnectIterations(%d), mSsid(%s), mPassword(%s)," + "mScanIterations(%d), mWifiSleepTime(%d)", mReconnectIterations, mSsid, mPassword, mScanIterations, mWifiSleepTime)); mOutputWriter = new BufferedWriter(new FileWriter(new File( Environment.getExternalStorageDirectory(), OUTPUT_FILE), true)); mAct.turnScreenOn(); - mIsWifiOnlyDevice = UtilHelper.isWifiOnly(mRunner.getTargetContext()); if (!mAct.mWifiManager.isWifiEnabled()) { log("Enable wi-fi before stress tests."); if (!mAct.enableWifi()) { @@ -269,7 +268,7 @@ public class WifiStressTest assertTrue("Wait for Wi-Fi to idle timeout", mAct.waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.DISCONNECTED, 6 * ConnectivityManagerTestActivity.SHORT_TIMEOUT)); - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { // use long timeout as the pppd startup may take several retries. assertTrue("Wait for cellular connection timeout", mAct.waitForNetworkState(ConnectivityManager.TYPE_MOBILE, State.CONNECTED, @@ -280,7 +279,7 @@ public class WifiStressTest assertEquals("Wi-Fi is reconnected", State.DISCONNECTED, mAct.mCM.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState()); - if (!mIsWifiOnlyDevice) { + if (!mWifiOnlyFlag) { assertEquals("Cellular connection is down", State.CONNECTED, mAct.mCM.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState()); assertTrue("Mobile is connected, but no data connection.", mAct.pingTest(null)); diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java index 29edc04..c41dd07 100644 --- a/graphics/java/android/graphics/drawable/ClipDrawable.java +++ b/graphics/java/android/graphics/drawable/ClipDrawable.java @@ -24,7 +24,6 @@ import android.content.res.TypedArray; import android.graphics.*; import android.view.Gravity; import android.util.AttributeSet; -import android.view.View; import java.io.IOException; diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java index 4b9c98f..043adae 100644 --- a/graphics/java/android/graphics/drawable/Drawable.java +++ b/graphics/java/android/graphics/drawable/Drawable.java @@ -296,8 +296,6 @@ public abstract class Drawable { /** * Implement this interface if you want to create an drawable that is RTL aware - * - * @hide */ public static interface Callback2 extends Callback { /** @@ -387,8 +385,6 @@ public abstract class Drawable { /** * Use the current {@link android.graphics.drawable.Drawable.Callback2} implementation to get * the resolved layout direction of this Drawable. - * - * @hide */ public int getResolvedLayoutDirectionSelf() { final Callback callback = getCallback(); diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java index 5fd5a16..ccad250 100644 --- a/graphics/java/android/graphics/drawable/ScaleDrawable.java +++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java @@ -24,7 +24,6 @@ import android.content.res.TypedArray; import android.graphics.*; import android.view.Gravity; import android.util.AttributeSet; -import android.view.View; import java.io.IOException; diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 339ae0a..b4310ea 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1189,7 +1189,7 @@ void OpenGLRenderer::setupDrawPointUniforms() { } void OpenGLRenderer::setupDrawColorUniforms() { - if (mColorSet || (mShader && mSetShaderColor)) { + if ((mColorSet && !mShader) || (mShader && mSetShaderColor)) { mCaches.currentProgram->setColor(mColorR, mColorG, mColorB, mColorA); } } diff --git a/services/java/com/android/server/net/NetworkPolicyManagerService.java b/services/java/com/android/server/net/NetworkPolicyManagerService.java index a890068..2ad24e2 100644 --- a/services/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/java/com/android/server/net/NetworkPolicyManagerService.java @@ -156,6 +156,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final int VERSION_ADDED_RESTRICT_BACKGROUND = 3; private static final int VERSION_ADDED_METERED = 4; private static final int VERSION_SPLIT_SNOOZE = 5; + private static final int VERSION_ADDED_TIMEZONE = 6; // @VisibleForTesting public static final int TYPE_WARNING = 0x1; @@ -171,6 +172,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final String ATTR_NETWORK_TEMPLATE = "networkTemplate"; private static final String ATTR_SUBSCRIBER_ID = "subscriberId"; private static final String ATTR_CYCLE_DAY = "cycleDay"; + private static final String ATTR_CYCLE_TIMEZONE = "cycleTimezone"; private static final String ATTR_WARNING_BYTES = "warningBytes"; private static final String ATTR_LIMIT_BYTES = "limitBytes"; private static final String ATTR_LAST_SNOOZE = "lastSnooze"; @@ -922,13 +924,15 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { com.android.internal.R.integer.config_networkPolicyDefaultWarning) * MB_IN_BYTES; - final Time time = new Time(Time.TIMEZONE_UTC); + final Time time = new Time(); time.setToNow(); + final int cycleDay = time.monthDay; + final String cycleTimezone = time.timezone; final NetworkTemplate template = buildTemplateMobileAll(subscriberId); - mNetworkPolicy.put(template, new NetworkPolicy(template, cycleDay, warningBytes, - LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER, true)); + mNetworkPolicy.put(template, new NetworkPolicy(template, cycleDay, cycleTimezone, + warningBytes, LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER, true)); writePolicyLocked(); } } @@ -964,6 +968,12 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final int networkTemplate = readIntAttribute(in, ATTR_NETWORK_TEMPLATE); final String subscriberId = in.getAttributeValue(null, ATTR_SUBSCRIBER_ID); final int cycleDay = readIntAttribute(in, ATTR_CYCLE_DAY); + final String cycleTimezone; + if (version >= VERSION_ADDED_TIMEZONE) { + cycleTimezone = in.getAttributeValue(null, ATTR_CYCLE_TIMEZONE); + } else { + cycleTimezone = Time.TIMEZONE_UTC; + } final long warningBytes = readLongAttribute(in, ATTR_WARNING_BYTES); final long limitBytes = readLongAttribute(in, ATTR_LIMIT_BYTES); final long lastLimitSnooze; @@ -998,8 +1008,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final NetworkTemplate template = new NetworkTemplate( networkTemplate, subscriberId); mNetworkPolicy.put(template, new NetworkPolicy(template, cycleDay, - warningBytes, limitBytes, lastWarningSnooze, lastLimitSnooze, - metered)); + cycleTimezone, warningBytes, limitBytes, lastWarningSnooze, + lastLimitSnooze, metered)); } else if (TAG_UID_POLICY.equals(tag)) { final int uid = readIntAttribute(in, ATTR_UID); @@ -1054,7 +1064,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { out.startDocument(null, true); out.startTag(null, TAG_POLICY_LIST); - writeIntAttribute(out, ATTR_VERSION, VERSION_SPLIT_SNOOZE); + writeIntAttribute(out, ATTR_VERSION, VERSION_ADDED_TIMEZONE); writeBooleanAttribute(out, ATTR_RESTRICT_BACKGROUND, mRestrictBackground); // write all known network policies @@ -1068,6 +1078,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { out.attribute(null, ATTR_SUBSCRIBER_ID, subscriberId); } writeIntAttribute(out, ATTR_CYCLE_DAY, policy.cycleDay); + out.attribute(null, ATTR_CYCLE_TIMEZONE, policy.cycleTimezone); writeLongAttribute(out, ATTR_WARNING_BYTES, policy.warningBytes); writeLongAttribute(out, ATTR_LIMIT_BYTES, policy.limitBytes); writeLongAttribute(out, ATTR_LAST_WARNING_SNOOZE, policy.lastWarningSnooze); diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index e863f8b..b4fd55e 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -32,6 +32,7 @@ import static android.net.TrafficStats.KB_IN_BYTES; import static android.net.TrafficStats.MB_IN_BYTES; import static android.text.format.DateUtils.DAY_IN_MILLIS; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; +import static android.text.format.Time.TIMEZONE_UTC; import static com.android.server.net.NetworkPolicyManagerService.TYPE_LIMIT; import static com.android.server.net.NetworkPolicyManagerService.TYPE_LIMIT_SNOOZED; import static com.android.server.net.NetworkPolicyManagerService.TYPE_WARNING; @@ -439,7 +440,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { final long expectedCycle = parseTime("2007-11-05T00:00:00.000Z"); final NetworkPolicy policy = new NetworkPolicy( - sTemplateWifi, 5, 1024L, 1024L, false); + sTemplateWifi, 5, TIMEZONE_UTC, 1024L, 1024L, false); final long actualCycle = computeLastCycleBoundary(currentTime, policy); assertTimeEquals(expectedCycle, actualCycle); } @@ -450,7 +451,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { final long expectedCycle = parseTime("2007-10-20T00:00:00.000Z"); final NetworkPolicy policy = new NetworkPolicy( - sTemplateWifi, 20, 1024L, 1024L, false); + sTemplateWifi, 20, TIMEZONE_UTC, 1024L, 1024L, false); final long actualCycle = computeLastCycleBoundary(currentTime, policy); assertTimeEquals(expectedCycle, actualCycle); } @@ -461,7 +462,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { final long expectedCycle = parseTime("2007-01-30T00:00:00.000Z"); final NetworkPolicy policy = new NetworkPolicy( - sTemplateWifi, 30, 1024L, 1024L, false); + sTemplateWifi, 30, TIMEZONE_UTC, 1024L, 1024L, false); final long actualCycle = computeLastCycleBoundary(currentTime, policy); assertTimeEquals(expectedCycle, actualCycle); } @@ -472,14 +473,53 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { final long expectedCycle = parseTime("2007-02-28T23:59:59.000Z"); final NetworkPolicy policy = new NetworkPolicy( - sTemplateWifi, 30, 1024L, 1024L, false); + sTemplateWifi, 30, TIMEZONE_UTC, 1024L, 1024L, false); final long actualCycle = computeLastCycleBoundary(currentTime, policy); assertTimeEquals(expectedCycle, actualCycle); } + public void testCycleBoundaryLeapYear() throws Exception { + final NetworkPolicy policy = new NetworkPolicy( + sTemplateWifi, 29, TIMEZONE_UTC, 1024L, 1024L, false); + + assertTimeEquals(parseTime("2012-01-29T00:00:00.000Z"), + computeNextCycleBoundary(parseTime("2012-01-14T00:00:00.000Z"), policy)); + assertTimeEquals(parseTime("2012-02-29T00:00:00.000Z"), + computeNextCycleBoundary(parseTime("2012-02-14T00:00:00.000Z"), policy)); + assertTimeEquals(parseTime("2012-02-29T00:00:00.000Z"), + computeLastCycleBoundary(parseTime("2012-03-14T00:00:00.000Z"), policy)); + assertTimeEquals(parseTime("2012-03-29T00:00:00.000Z"), + computeNextCycleBoundary(parseTime("2012-03-14T00:00:00.000Z"), policy)); + + assertTimeEquals(parseTime("2007-01-29T00:00:00.000Z"), + computeNextCycleBoundary(parseTime("2007-01-14T00:00:00.000Z"), policy)); + assertTimeEquals(parseTime("2007-02-28T23:59:59.000Z"), + computeNextCycleBoundary(parseTime("2007-02-14T00:00:00.000Z"), policy)); + assertTimeEquals(parseTime("2007-02-28T23:59:59.000Z"), + computeLastCycleBoundary(parseTime("2007-03-14T00:00:00.000Z"), policy)); + assertTimeEquals(parseTime("2007-03-29T00:00:00.000Z"), + computeNextCycleBoundary(parseTime("2007-03-14T00:00:00.000Z"), policy)); + } + + public void testNextCycleTimezoneAfterUtc() throws Exception { + // US/Central is UTC-6 + final NetworkPolicy policy = new NetworkPolicy( + sTemplateWifi, 10, "US/Central", 1024L, 1024L, false); + assertTimeEquals(parseTime("2012-01-10T06:00:00.000Z"), + computeNextCycleBoundary(parseTime("2012-01-05T00:00:00.000Z"), policy)); + } + + public void testNextCycleTimezoneBeforeUtc() throws Exception { + // Israel is UTC+2 + final NetworkPolicy policy = new NetworkPolicy( + sTemplateWifi, 10, "Israel", 1024L, 1024L, false); + assertTimeEquals(parseTime("2012-01-09T22:00:00.000Z"), + computeNextCycleBoundary(parseTime("2012-01-05T00:00:00.000Z"), policy)); + } + public void testNextCycleSane() throws Exception { final NetworkPolicy policy = new NetworkPolicy( - sTemplateWifi, 31, WARNING_DISABLED, LIMIT_DISABLED, false); + sTemplateWifi, 31, TIMEZONE_UTC, WARNING_DISABLED, LIMIT_DISABLED, false); final LinkedHashSet<Long> seen = new LinkedHashSet<Long>(); // walk forwards, ensuring that cycle boundaries don't get stuck @@ -494,7 +534,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { public void testLastCycleSane() throws Exception { final NetworkPolicy policy = new NetworkPolicy( - sTemplateWifi, 31, WARNING_DISABLED, LIMIT_DISABLED, false); + sTemplateWifi, 31, TIMEZONE_UTC, WARNING_DISABLED, LIMIT_DISABLED, false); final LinkedHashSet<Long> seen = new LinkedHashSet<Long>(); // walk backwards, ensuring that cycle boundaries look sane @@ -552,7 +592,7 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { replay(); setNetworkPolicies(new NetworkPolicy( - sTemplateWifi, CYCLE_DAY, 1 * MB_IN_BYTES, 2 * MB_IN_BYTES, false)); + sTemplateWifi, CYCLE_DAY, TIMEZONE_UTC, 1 * MB_IN_BYTES, 2 * MB_IN_BYTES, false)); future.get(); verifyAndReset(); } @@ -609,8 +649,8 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { future = expectMeteredIfacesChanged(); replay(); - setNetworkPolicies(new NetworkPolicy(sTemplateWifi, CYCLE_DAY, 1 * MB_IN_BYTES, - 2 * MB_IN_BYTES, false)); + setNetworkPolicies(new NetworkPolicy(sTemplateWifi, CYCLE_DAY, TIMEZONE_UTC, 1 + * MB_IN_BYTES, 2 * MB_IN_BYTES, false)); future.get(); verifyAndReset(); } @@ -740,8 +780,9 @@ public class NetworkPolicyManagerServiceTest extends AndroidTestCase { future = expectMeteredIfacesChanged(TEST_IFACE); replay(); - setNetworkPolicies(new NetworkPolicy(sTemplateWifi, CYCLE_DAY, WARNING_DISABLED, - LIMIT_DISABLED, true)); + setNetworkPolicies(new NetworkPolicy( + sTemplateWifi, CYCLE_DAY, TIMEZONE_UTC, WARNING_DISABLED, LIMIT_DISABLED, + true)); future.get(); verifyAndReset(); } |
