Merge change 26517 into eclair
* changes:
Add a new IResourceValue that knows about the density.
diff --git a/api/current.xml b/api/current.xml
index 68a1c76..581d2c4 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -8259,6 +8259,17 @@
visibility="public"
>
</field>
+<field name="thumbnail"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843429"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="tileMode"
type="int"
transient="false"
diff --git a/core/java/android/app/WallpaperInfo.java b/core/java/android/app/WallpaperInfo.java
index 5e44bc7..587e8f9 100644
--- a/core/java/android/app/WallpaperInfo.java
+++ b/core/java/android/app/WallpaperInfo.java
@@ -40,6 +40,11 @@
final String mSettingsActivityName;
/**
+ * Resource identifier for this wallpaper's thumbnail image.
+ */
+ final int mThumbnailResource;
+
+ /**
* Constructor.
*
* @param context The Context in which we are parsing the wallpaper.
@@ -53,6 +58,7 @@
PackageManager pm = context.getPackageManager();
String settingsActivityComponent = null;
+ int thumbnailRes = -1;
XmlResourceParser parser = null;
try {
@@ -79,16 +85,23 @@
com.android.internal.R.styleable.Wallpaper);
settingsActivityComponent = sa.getString(
com.android.internal.R.styleable.Wallpaper_settingsActivity);
+
+ thumbnailRes = sa.getResourceId(
+ com.android.internal.R.styleable.Wallpaper_thumbnail,
+ -1);
+
sa.recycle();
} finally {
if (parser != null) parser.close();
}
mSettingsActivityName = settingsActivityComponent;
+ mThumbnailResource = thumbnailRes;
}
WallpaperInfo(Parcel source) {
mSettingsActivityName = source.readString();
+ mThumbnailResource = source.readInt();
mService = ResolveInfo.CREATOR.createFromParcel(source);
}
@@ -144,6 +157,20 @@
}
/**
+ * Load the thumbnail image for this wallpaper.
+ *
+ * @param pm Supply a PackageManager used to load the wallpaper's
+ * resources.
+ */
+ public Drawable loadThumbnail(PackageManager pm) {
+ if (mThumbnailResource < 0) return null;
+
+ return pm.getDrawable(mService.serviceInfo.packageName,
+ mThumbnailResource,
+ null);
+ }
+
+ /**
* Return the class name of an activity that provides a settings UI for
* the wallpaper. You can launch this activity be starting it with
* an {@link android.content.Intent} whose action is MAIN and with an
@@ -178,6 +205,7 @@
*/
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mSettingsActivityName);
+ dest.writeInt(mThumbnailResource);
mService.writeToParcel(dest, flags);
}
diff --git a/core/java/android/content/SyncStatusInfo.java b/core/java/android/content/SyncStatusInfo.java
index 6687fcb..b8fda03 100644
--- a/core/java/android/content/SyncStatusInfo.java
+++ b/core/java/android/content/SyncStatusInfo.java
@@ -38,6 +38,7 @@
public String lastFailureMesg;
public long initialFailureTime;
public boolean pending;
+ public boolean initialize;
SyncStatusInfo(int authorityId) {
this.authorityId = authorityId;
@@ -73,6 +74,7 @@
parcel.writeString(lastFailureMesg);
parcel.writeLong(initialFailureTime);
parcel.writeInt(pending ? 1 : 0);
+ parcel.writeInt(initialize ? 1 : 0);
}
SyncStatusInfo(Parcel parcel) {
@@ -94,6 +96,7 @@
lastFailureMesg = parcel.readString();
initialFailureTime = parcel.readLong();
pending = parcel.readInt() != 0;
+ initialize = parcel.readInt() != 0;
}
public static final Creator<SyncStatusInfo> CREATOR = new Creator<SyncStatusInfo>() {
diff --git a/core/java/android/content/SyncStorageEngine.java b/core/java/android/content/SyncStorageEngine.java
index 6e312d2..fbdd5ae 100644
--- a/core/java/android/content/SyncStorageEngine.java
+++ b/core/java/android/content/SyncStorageEngine.java
@@ -511,6 +511,9 @@
SyncStatusInfo status = getOrCreateSyncStatusLocked(authority.ident);
status.pending = true;
+ status.initialize = op.extras != null &&
+ op.extras.containsKey(ContentResolver.SYNC_EXTRAS_INITIALIZE) &&
+ op.extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE);
}
reportChange(ContentResolver.SYNC_OBSERVER_TYPE_PENDING);
diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java
index 4e6f9ca..c782c8c 100644
--- a/core/java/com/android/internal/os/RuntimeInit.java
+++ b/core/java/com/android/internal/os/RuntimeInit.java
@@ -25,6 +25,7 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
+import android.os.Build;
import android.server.data.CrashData;
import android.util.Config;
import android.util.Log;
@@ -111,6 +112,12 @@
new AndroidConfig();
/*
+ * Sets the default HTTP User-Agent used by HttpURLConnection.
+ */
+ String userAgent = getDefaultUserAgent();
+ System.setProperty("http.agent", userAgent);
+
+ /*
* If we're running in an emulator launched with "-trace", put the
* VM into emulator trace profiling mode so that the user can hit
* F9/F10 at any time to capture traces. This has performance
@@ -126,6 +133,36 @@
}
/**
+ * Returns an HTTP user agent of the form
+ * "Dalvik/1.1.0 (Linux; U; Android Eclair Build/MASTER)".
+ */
+ private static String getDefaultUserAgent() {
+ StringBuilder result = new StringBuilder(64);
+ result.append("Dalvik/");
+ result.append(System.getProperty("java.vm.version")); // such as 1.1.0
+ result.append(" (Linux; U; Android ");
+
+ String version = Build.VERSION.RELEASE; // "1.0" or "3.4b5"
+ result.append(version.length() > 0 ? version : "1.0");
+
+ // add the model for the release build
+ if ("REL".equals(Build.VERSION.CODENAME)) {
+ String model = Build.MODEL;
+ if (model.length() > 0) {
+ result.append("; ");
+ result.append(model);
+ }
+ }
+ String id = Build.ID; // "MASTER" or "M4-rc20"
+ if (id.length() > 0) {
+ result.append(" Build/");
+ result.append(id);
+ }
+ result.append(")");
+ return result.toString();
+ }
+
+ /**
* Invokes a static "main(argv[]) method on class "className".
* Converts various failing exceptions into RuntimeExceptions, with
* the assumption that they will then cause the VM instance to exit.
diff --git a/core/java/com/google/android/mms/pdu/GenericPdu.java b/core/java/com/google/android/mms/pdu/GenericPdu.java
index 46c6e00..705de6a 100644
--- a/core/java/com/google/android/mms/pdu/GenericPdu.java
+++ b/core/java/com/google/android/mms/pdu/GenericPdu.java
@@ -89,4 +89,25 @@
public void setMmsVersion(int value) throws InvalidHeaderValueException {
mPduHeaders.setOctet(value, PduHeaders.MMS_VERSION);
}
+
+ /**
+ * Get From value.
+ * From-value = Value-length
+ * (Address-present-token Encoded-string-value | Insert-address-token)
+ *
+ * @return the value
+ */
+ public EncodedStringValue getFrom() {
+ return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
+ }
+
+ /**
+ * Set From value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setFrom(EncodedStringValue value) {
+ mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
+ }
}
diff --git a/core/java/com/google/android/mms/pdu/PduComposer.java b/core/java/com/google/android/mms/pdu/PduComposer.java
index 094e992..8b31936 100644
--- a/core/java/com/google/android/mms/pdu/PduComposer.java
+++ b/core/java/com/google/android/mms/pdu/PduComposer.java
@@ -450,6 +450,29 @@
appendQuotedString(str.getBytes());
}
+ private EncodedStringValue appendAddressType(EncodedStringValue address) {
+ EncodedStringValue temp = null;
+
+ try {
+ int addressType = checkAddressType(address.getString());
+ temp = EncodedStringValue.copy(address);
+ if (PDU_PHONE_NUMBER_ADDRESS_TYPE == addressType) {
+ // Phone number.
+ temp.appendTextString(STRING_PHONE_NUMBER_ADDRESS_TYPE.getBytes());
+ } else if (PDU_IPV4_ADDRESS_TYPE == addressType) {
+ // Ipv4 address.
+ temp.appendTextString(STRING_IPV4_ADDRESS_TYPE.getBytes());
+ } else if (PDU_IPV6_ADDRESS_TYPE == addressType) {
+ // Ipv6 address.
+ temp.appendTextString(STRING_IPV6_ADDRESS_TYPE.getBytes());
+ }
+ } catch (NullPointerException e) {
+ return null;
+ }
+
+ return temp;
+ }
+
/**
* Append header to mMessage.
*/
@@ -489,21 +512,8 @@
EncodedStringValue temp;
for (int i = 0; i < addr.length; i++) {
- try {
- int addressType = checkAddressType(addr[i].getString());
- temp = EncodedStringValue.copy(addr[i]);
- if (PDU_PHONE_NUMBER_ADDRESS_TYPE == addressType) {
- // Phone number.
- temp.appendTextString(
- STRING_PHONE_NUMBER_ADDRESS_TYPE.getBytes());
- } else if (PDU_IPV4_ADDRESS_TYPE == addressType) {
- // Ipv4 address.
- temp.appendTextString(STRING_IPV4_ADDRESS_TYPE.getBytes());
- } else if (PDU_IPV6_ADDRESS_TYPE == addressType) {
- // Ipv6 address.
- temp.appendTextString(STRING_IPV6_ADDRESS_TYPE.getBytes());
- }
- } catch (NullPointerException e) {
+ temp = appendAddressType(addr[i]);
+ if (temp == null) {
return PDU_COMPOSE_CONTENT_ERROR;
}
@@ -530,7 +540,13 @@
// Address-present-token = <Octet 128>
append(PduHeaders.FROM_ADDRESS_PRESENT_TOKEN);
- appendEncodedString(from);
+
+ temp = appendAddressType(from);
+ if (temp == null) {
+ return PDU_COMPOSE_CONTENT_ERROR;
+ }
+
+ appendEncodedString(temp);
int flen = fstart.getLength();
mStack.pop();
diff --git a/core/java/com/google/android/mms/pdu/ReadRecInd.java b/core/java/com/google/android/mms/pdu/ReadRecInd.java
index 0a4dbf0..880e3ac 100644
--- a/core/java/com/google/android/mms/pdu/ReadRecInd.java
+++ b/core/java/com/google/android/mms/pdu/ReadRecInd.java
@@ -73,27 +73,6 @@
}
/**
- * Get From value.
- * From-value = Value-length
- * (Address-present-token Encoded-string-value | Insert-address-token)
- *
- * @return the value
- */
- public EncodedStringValue getFrom() {
- return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
- }
-
- /**
- * Set From value.
- *
- * @param value the value
- * @throws NullPointerException if the value is null.
- */
- public void setFrom(EncodedStringValue value) {
- mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
- }
-
- /**
* Get Message-ID value.
*
* @return the value
diff --git a/core/java/com/google/android/mms/pdu/SendReq.java b/core/java/com/google/android/mms/pdu/SendReq.java
index 9ea6e47..597cd00 100644
--- a/core/java/com/google/android/mms/pdu/SendReq.java
+++ b/core/java/com/google/android/mms/pdu/SendReq.java
@@ -226,27 +226,6 @@
}
/**
- * Get From value.
- * From-value = Value-length
- * (Address-present-token Encoded-string-value | Insert-address-token)
- *
- * @return the value
- */
- public EncodedStringValue getFrom() {
- return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
- }
-
- /**
- * Set From value.
- *
- * @param value the value
- * @throws NullPointerException if the value is null.
- */
- public void setFrom(EncodedStringValue value) {
- mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
- }
-
- /**
* Get X-Mms-Message-Class value.
* Message-class-value = Class-identifier | Token-text
* Class-identifier = Personal | Advertisement | Informational | Auto
diff --git a/core/res/res/drawable-hdpi/fasttrack_badge.9.png b/core/res/res/drawable-hdpi/fasttrack_badge.9.png
new file mode 100644
index 0000000..1eeabf4
--- /dev/null
+++ b/core/res/res/drawable-hdpi/fasttrack_badge.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fasttrack_badge_pressed.9.png b/core/res/res/drawable-hdpi/fasttrack_badge_pressed.9.png
new file mode 100644
index 0000000..0cfd09d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/fasttrack_badge_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fasttrack_badge_small.9.png b/core/res/res/drawable-hdpi/fasttrack_badge_small.9.png
new file mode 100644
index 0000000..7140957
--- /dev/null
+++ b/core/res/res/drawable-hdpi/fasttrack_badge_small.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fasttrack_badge_small_pressed.9.png b/core/res/res/drawable-hdpi/fasttrack_badge_small_pressed.9.png
new file mode 100644
index 0000000..ee030fbe
--- /dev/null
+++ b/core/res/res/drawable-hdpi/fasttrack_badge_small_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fasttrack_badge.9.png b/core/res/res/drawable-mdpi/fasttrack_badge.9.png
new file mode 100644
index 0000000..d8dff34
--- /dev/null
+++ b/core/res/res/drawable-mdpi/fasttrack_badge.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fasttrack_badge_pressed.9.png b/core/res/res/drawable-mdpi/fasttrack_badge_pressed.9.png
new file mode 100644
index 0000000..c8ca33a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/fasttrack_badge_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fasttrack_badge_small.9.png b/core/res/res/drawable-mdpi/fasttrack_badge_small.9.png
new file mode 100644
index 0000000..38f14f7
--- /dev/null
+++ b/core/res/res/drawable-mdpi/fasttrack_badge_small.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fasttrack_badge_small_pressed.9.png b/core/res/res/drawable-mdpi/fasttrack_badge_small_pressed.9.png
new file mode 100644
index 0000000..b23e921
--- /dev/null
+++ b/core/res/res/drawable-mdpi/fasttrack_badge_small_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable/fasttrack_badge_dark.xml b/core/res/res/drawable/fasttrack_badge.xml
similarity index 86%
rename from core/res/res/drawable/fasttrack_badge_dark.xml
rename to core/res/res/drawable/fasttrack_badge.xml
index c60d403..89c63a1 100644
--- a/core/res/res/drawable/fasttrack_badge_dark.xml
+++ b/core/res/res/drawable/fasttrack_badge.xml
@@ -19,10 +19,10 @@
android:state_focused="false"
android:state_selected="false"
android:state_pressed="false"
- android:drawable="@drawable/fasttrack_badge_dark_normal" />
+ android:drawable="@drawable/fasttrack_badge" />
<item
android:state_pressed="true"
- android:drawable="@drawable/fasttrack_badge_dark_pressed" />
+ android:drawable="@drawable/fasttrack_badge_pressed" />
</selector>
diff --git a/core/res/res/drawable/fasttrack_badge_dark_normal.9.png b/core/res/res/drawable/fasttrack_badge_dark_normal.9.png
deleted file mode 100644
index 52bb08c..0000000
--- a/core/res/res/drawable/fasttrack_badge_dark_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/fasttrack_badge_dark_pressed.9.png b/core/res/res/drawable/fasttrack_badge_dark_pressed.9.png
deleted file mode 100644
index 84a6783..0000000
--- a/core/res/res/drawable/fasttrack_badge_dark_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/fasttrack_badge_light_normal.9.png b/core/res/res/drawable/fasttrack_badge_light_normal.9.png
deleted file mode 100644
index 595b179..0000000
--- a/core/res/res/drawable/fasttrack_badge_light_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/fasttrack_badge_light_pressed.9.png b/core/res/res/drawable/fasttrack_badge_light_pressed.9.png
deleted file mode 100644
index 8e3f557..0000000
--- a/core/res/res/drawable/fasttrack_badge_light_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/fasttrack_badge_middle_large.xml b/core/res/res/drawable/fasttrack_badge_middle_large.xml
deleted file mode 100644
index dd591bd..0000000
--- a/core/res/res/drawable/fasttrack_badge_middle_large.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_focused="false"
- android:state_selected="false"
- android:state_pressed="false"
- android:drawable="@drawable/fasttrack_badge_middle_large_normal" />
-
- <item
- android:state_pressed="true"
- android:drawable="@drawable/fasttrack_badge_middle_large_pressed" />
-
-</selector>
\ No newline at end of file
diff --git a/core/res/res/drawable/fasttrack_badge_middle_large_normal.9.png b/core/res/res/drawable/fasttrack_badge_middle_large_normal.9.png
deleted file mode 100644
index ca275cd..0000000
--- a/core/res/res/drawable/fasttrack_badge_middle_large_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/fasttrack_badge_middle_large_pressed.9.png b/core/res/res/drawable/fasttrack_badge_middle_large_pressed.9.png
deleted file mode 100644
index b69ccbd..0000000
--- a/core/res/res/drawable/fasttrack_badge_middle_large_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/fasttrack_badge_light.xml b/core/res/res/drawable/fasttrack_badge_small.xml
similarity index 87%
rename from core/res/res/drawable/fasttrack_badge_light.xml
rename to core/res/res/drawable/fasttrack_badge_small.xml
index fd81258..269e936 100644
--- a/core/res/res/drawable/fasttrack_badge_light.xml
+++ b/core/res/res/drawable/fasttrack_badge_small.xml
@@ -19,10 +19,10 @@
android:state_focused="false"
android:state_selected="false"
android:state_pressed="false"
- android:drawable="@drawable/fasttrack_badge_light_normal" />
+ android:drawable="@drawable/fasttrack_badge_small" />
<item
android:state_pressed="true"
- android:drawable="@drawable/fasttrack_badge_light_pressed" />
+ android:drawable="@drawable/fasttrack_badge_small_pressed" />
</selector>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index c3b7a2c9..193fdb2 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -396,14 +396,20 @@
<attr name="spinnerItemStyle" format="reference" />
<!-- Default MapView style. -->
<attr name="mapViewStyle" format="reference" />
- <!-- Dark Fasttrack badge style. -->
+ <!-- Default Fasttrack badge style. -->
<attr name="fasttrackBadgeWidgetStyle" format="reference" />
- <!-- Dark Fasttrack badge style with small fasttrack window. -->
+ <!-- Default Fasttrack badge style with small fasttrack window. -->
<attr name="fasttrackBadgeWidgetStyleWindowSmall" format="reference" />
- <!-- Dark Fasttrack badge style with medium fasttrack window. -->
+ <!-- Default Fasttrack badge style with medium fasttrack window. -->
<attr name="fasttrackBadgeWidgetStyleWindowMedium" format="reference" />
- <!-- Dark Fasttrack badge style with large fasttrack window. -->
+ <!-- Default Fasttrack badge style with large fasttrack window. -->
<attr name="fasttrackBadgeWidgetStyleWindowLarge" format="reference" />
+ <!-- Default Fasttrack badge style with small fasttrack window. -->
+ <attr name="fasttrackBadgeWidgetStyleSmallWindowSmall" format="reference" />
+ <!-- Default Fasttrack badge style with medium fasttrack window. -->
+ <attr name="fasttrackBadgeWidgetStyleSmallWindowMedium" format="reference" />
+ <!-- Default Fasttrack badge style with large fasttrack window. -->
+ <attr name="fasttrackBadgeWidgetStyleSmallWindowLarge" format="reference" />
<!-- =================== -->
<!-- Preference styles -->
@@ -3445,6 +3451,9 @@
<!-- Component name of an activity that allows the user to modify
the current settings for this wallpaper. -->
<attr name="settingsActivity" />
+
+ <!-- Reference to a the wallpaper's thumbnail bitmap. -->
+ <attr name="thumbnail" format="reference" />
</declare-styleable>
<!-- =============================== -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 7aeaec4..a32f519 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -79,12 +79,16 @@
<integer name="config_carDockRotation">-1</integer>
<!-- Control whether being in the desk dock (and powered) always
- keeps the screen on. By default it doesn't. Set to true to make it. -->
- <bool name="config_deskDockKeepsScreenOn">false</bool>
+ keeps the screen on. By default it stays on when plugged in to
+ AC. 0 will not keep it on; or together 1 to stay on when plugged
+ in to AC and 2 to stay on when plugged in to USB. (So 3 for both.) -->
+ <integer name="config_deskDockKeepsScreenOn">1</integer>
<!-- Control whether being in the car dock (and powered) always
- keeps the screen on. By default it does. Set to false to not keep on. -->
- <bool name="config_carDockKeepsScreenOn">true</bool>
+ keeps the screen on. By default it stays on when plugged in to
+ AC. 0 will not keep it on; or together 1 to stay on when plugged
+ in to AC and 2 to stay on when plugged in to USB. (So 3 for both.) -->
+ <integer name="config_carDockKeepsScreenOn">1</integer>
<!-- Control whether being in the desk dock should enable accelerometer based screen orientation -->
<bool name="config_deskDockEnablesAccelerometer">false</bool>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index b08a58a..4d23ef4 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1169,6 +1169,7 @@
<public type="attr" name="summaryColumn" />
<public type="attr" name="detailColumn" />
<public type="attr" name="detailSocialSummary" />
+ <public type="attr" name="thumbnail" />
<public type="style" name="Theme.Wallpaper" />
<public type="style" name="Theme.Wallpaper.NoTitleBar" />
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index bc8ec45..e78c213 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -538,9 +538,17 @@
</style>
<style name="Widget.FasttrackBadgeWidget">
- <item name="android:layout_width">48dip</item>
- <item name="android:layout_height">52dip</item>
- <item name="android:background">@android:drawable/fasttrack_badge_dark</item>
+ <item name="android:layout_width">50dip</item>
+ <item name="android:layout_height">56dip</item>
+ <item name="android:background">@android:drawable/fasttrack_badge</item>
+ <item name="android:clickable">true</item>
+ <item name="android:scaleType">fitCenter</item>
+ </style>
+
+ <style name="Widget.FasttrackBadgeWidgetSmall">
+ <item name="android:layout_width">39dip</item>
+ <item name="android:layout_height">42dip</item>
+ <item name="android:background">@android:drawable/fasttrack_badge_small</item>
<item name="android:clickable">true</item>
<item name="android:scaleType">fitCenter</item>
</style>
@@ -556,6 +564,18 @@
<style name="Widget.FasttrackBadgeWidget.WindowLarge">
<item name="android:fasttrackWindowSize">modeLarge</item>
</style>
+
+ <style name="Widget.FasttrackBadgeWidgetSmall.WindowSmall">
+ <item name="android:fasttrackWindowSize">modeSmall</item>
+ </style>
+
+ <style name="Widget.FasttrackBadgeWidgetSmall.WindowMedium">
+ <item name="android:fasttrackWindowSize">modeMedium</item>
+ </style>
+
+ <style name="Widget.FasttrackBadgeWidgetSmall.WindowLarge">
+ <item name="android:fasttrackWindowSize">modeLarge</item>
+ </style>
<!-- Text Appearances -->
<eat-comment />
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index fbdd247..c0ca21b 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -175,6 +175,9 @@
<item name="fasttrackBadgeWidgetStyleWindowSmall">@android:style/Widget.FasttrackBadgeWidget.WindowSmall</item>
<item name="fasttrackBadgeWidgetStyleWindowMedium">@android:style/Widget.FasttrackBadgeWidget.WindowMedium</item>
<item name="fasttrackBadgeWidgetStyleWindowLarge">@android:style/Widget.FasttrackBadgeWidget.WindowLarge</item>
+ <item name="fasttrackBadgeWidgetStyleSmallWindowSmall">@android:style/Widget.FasttrackBadgeWidgetSmall.WindowSmall</item>
+ <item name="fasttrackBadgeWidgetStyleSmallWindowMedium">@android:style/Widget.FasttrackBadgeWidgetSmall.WindowMedium</item>
+ <item name="fasttrackBadgeWidgetStyleSmallWindowLarge">@android:style/Widget.FasttrackBadgeWidgetSmall.WindowLarge</item>
<!-- Preference styles -->
<item name="preferenceScreenStyle">@android:style/Preference.PreferenceScreen</item>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index c4acf33..fb5e4e6 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -50,6 +50,7 @@
* List of settings that are backed up are stored in the Settings.java file
*/
public class SettingsBackupAgent extends BackupHelperAgent {
+ // STOPSHIP: set DEBUG to false
private static final boolean DEBUG = true;
private static final String KEY_SYSTEM = "system";
@@ -227,6 +228,14 @@
}
private void restoreSettings(BackupDataInput data, Uri contentUri) {
+ if (DEBUG) Log.i(TAG, "restoreSettings: " + contentUri);
+ String[] whitelist = null;
+ if (contentUri.equals(Settings.Secure.CONTENT_URI)) {
+ whitelist = Settings.Secure.SETTINGS_TO_BACKUP;
+ } else if (contentUri.equals(Settings.System.CONTENT_URI)) {
+ whitelist = Settings.System.SETTINGS_TO_BACKUP;
+ }
+
ContentValues cv = new ContentValues(2);
byte[] settings = new byte[data.getDataSize()];
try {
@@ -248,9 +257,8 @@
if (!TextUtils.isEmpty(settingName) && !TextUtils.isEmpty(settingValue)) {
//Log.i(TAG, "Restore " + settingName + " = " + settingValue);
- // TODO: versioning rather than just an ad hoc blacklist to handle
- // older varieties of backed-up data
- if (invalidSavedSetting(contentUri, settingName, settingValue)) {
+ // Only restore settings in our list of known-acceptable data
+ if (invalidSavedSetting(whitelist, settingName)) {
continue;
}
@@ -264,20 +272,23 @@
}
}
- private boolean invalidSavedSetting(Uri contentUri, String settingName, String settingValue) {
- // Even if these settings were stored, don't use them on restore
- if (contentUri.equals(Settings.Secure.CONTENT_URI)) {
- if (settingName.equals(Settings.Secure.PREFERRED_NETWORK_MODE)
- || settingName.equals(Settings.Secure.PREFERRED_TTY_MODE)
- || settingName.equals(Settings.Secure.CDMA_CELL_BROADCAST_SMS)
- || settingName.equals(Settings.Secure.PREFERRED_CDMA_SUBSCRIPTION)
- || settingName.equals(Settings.Secure.ENHANCED_VOICE_PRIVACY_ENABLED)) {
- if (DEBUG) Log.v(TAG, "Ignoring restore datum: " + settingName);
- return true;
+ // Returns 'true' if the given setting is one that we refuse to restore
+ private boolean invalidSavedSetting(String[] knownNames, String candidate) {
+ // no filter? allow everything
+ if (knownNames == null) {
+ return false;
+ }
+
+ // whitelisted setting? allow it
+ for (String name : knownNames) {
+ if (name.equals(candidate)) {
+ return false;
}
}
- return false;
+ // refuse everything else
+ if (DEBUG) Log.v(TAG, "Ignoring restore datum: " + candidate);
+ return true;
}
private String[] copyAndSort(String[] keys) {
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index d78d886..53edf31 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -267,6 +267,20 @@
logOutlier = true;
}
+ final boolean plugged = mPlugType != BATTERY_PLUGGED_NONE;
+ final boolean oldPlugged = mLastPlugType != BATTERY_PLUGGED_NONE;
+
+ /* The ACTION_BATTERY_LOW broadcast is sent in these situations:
+ * - is just un-plugged (previously was plugged) and battery level is under WARNING, or
+ * - is not plugged and battery level crosses the WARNING boundary (becomes < 15).
+ */
+ final boolean sendBatteryLow = !plugged
+ && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
+ && mBatteryLevel < BATTERY_LEVEL_WARNING
+ && (oldPlugged || mLastBatteryLevel >= BATTERY_LEVEL_WARNING);
+
+ sendIntent();
+
// Separate broadcast is sent for power connected / not connected
// since the standard intent will not wake any applications and some
// applications may want to have smart behavior based on this.
@@ -281,28 +295,6 @@
mContext.sendBroadcast(statusIntent);
}
- final boolean plugged = mPlugType != BATTERY_PLUGGED_NONE;
- final boolean oldPlugged = mLastPlugType != BATTERY_PLUGGED_NONE;
-
- /* The ACTION_BATTERY_LOW broadcast is sent in these situations:
- * - is just un-plugged (previously was plugged) and battery level is under WARNING, or
- * - is not plugged and battery level crosses the WARNING boundary (becomes < 15).
- */
- final boolean sendBatteryLow = !plugged
- && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
- && mBatteryLevel < BATTERY_LEVEL_WARNING
- && (oldPlugged || mLastBatteryLevel >= BATTERY_LEVEL_WARNING);
-
- mLastBatteryStatus = mBatteryStatus;
- mLastBatteryHealth = mBatteryHealth;
- mLastBatteryPresent = mBatteryPresent;
- mLastBatteryLevel = mBatteryLevel;
- mLastPlugType = mPlugType;
- mLastBatteryVoltage = mBatteryVoltage;
- mLastBatteryTemperature = mBatteryTemperature;
- mLastBatteryLevelCritical = mBatteryLevelCritical;
-
- sendIntent();
if (sendBatteryLow) {
mSentLowBatteryBroadcast = true;
statusIntent.setAction(Intent.ACTION_BATTERY_LOW);
@@ -317,6 +309,15 @@
if (logOutlier && dischargeDuration != 0) {
logOutlier(dischargeDuration);
}
+
+ mLastBatteryStatus = mBatteryStatus;
+ mLastBatteryHealth = mBatteryHealth;
+ mLastBatteryPresent = mBatteryPresent;
+ mLastBatteryLevel = mBatteryLevel;
+ mLastPlugType = mPlugType;
+ mLastBatteryVoltage = mBatteryVoltage;
+ mLastBatteryTemperature = mBatteryTemperature;
+ mLastBatteryLevelCritical = mBatteryLevelCritical;
}
}
diff --git a/tests/CoreTests/android/core/URLTest.java b/tests/CoreTests/android/core/URLTest.java
index 56f9f7b..5efcd5b 100644
--- a/tests/CoreTests/android/core/URLTest.java
+++ b/tests/CoreTests/android/core/URLTest.java
@@ -16,6 +16,7 @@
package android.core;
+import android.test.suitebuilder.annotation.Suppress;
import junit.framework.TestCase;
import java.io.BufferedReader;
@@ -29,10 +30,9 @@
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
+import java.util.HashMap;
+import java.util.Map;
-import android.test.suitebuilder.annotation.Suppress;
-
-@Suppress
public class URLTest extends TestCase {
private static void get(String u) throws IOException {
@@ -63,10 +63,12 @@
assertTrue(new String(data).indexOf("<html>") >= 0);
}
+ @Suppress
public void testGetHTTP() throws Exception {
get("http://www.google.com");
}
+ @Suppress
public void testGetHTTPS() throws Exception {
get("https://www.fortify.net/cgi/ssl_2.pl");
}
@@ -79,6 +81,7 @@
private static class DummyServer implements Runnable {
private int keepAliveCount;
+ private Map<String, String> headers = new HashMap<String, String>();
public DummyServer(int keepAliveCount) {
this.keepAliveCount = keepAliveCount;
@@ -93,9 +96,17 @@
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
try {
for (int i = 0; i < keepAliveCount; i++) {
- String header = reader.readLine();
- while (header != null && header.length() != 0) {
- header = reader.readLine();
+ reader.readLine();
+ headers.clear();
+ while (true) {
+ String header = reader.readLine();
+ if (header.length() == 0) {
+ break;
+ }
+ int colon = header.indexOf(":");
+ String key = header.substring(0, colon);
+ String value = header.substring(colon + 1).trim();
+ headers.put(key, value);
}
OutputStream output = socket.getOutputStream();
@@ -142,6 +153,7 @@
/**
* Test case for HTTP keep-alive behavior.
*/
+ @Suppress
public void testGetKeepAlive() throws Exception {
new Thread(new DummyServer(3)).start();
Thread.sleep(100);
@@ -160,9 +172,24 @@
}
}
+ @Suppress
+ public void testUserAgentHeader() throws Exception {
+ DummyServer server = new DummyServer(1);
+ new Thread(server).start();
+ Thread.sleep(100);
+
+ // We expect the request to work three times, then it fails.
+ request(new URL("http://localhost:8182"));
+
+ String userAgent = server.headers.get("User-Agent");
+ assertTrue("Unexpected User-Agent: " + userAgent, userAgent.matches(
+ "Dalvik/[\\d.]+ \\(Linux; U; Android \\w+(;.*)?( Build/\\w+)?\\)"));
+ }
+
/**
* Regression for issue 1001814.
*/
+ @Suppress
public void testHttpConnectionTimeout() throws Exception {
int timeout = 5000;
HttpURLConnection cn = null;
@@ -190,7 +217,8 @@
/**
* Regression test for issue 1158780 where using '{' and '}' in an URL threw
* an NPE. The RI accepts this URL and returns the status 404.
- */
+ */
+ @Suppress
public void testMalformedUrl() throws Exception {
URL url = new URL("http://www.google.com/cgi-bin/myscript?g={United+States}+Borders+Mexico+{Climate+change}+Marketing+{Automotive+industry}+News+Health+Internet");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();