Merge "Fix 2-pixel offset unlock jog tab" into gingerbread
diff --git a/api/current.xml b/api/current.xml
index 03fc03a..bffdccc 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -123739,6 +123739,17 @@
visibility="public"
>
</method>
+<method name="isExternalStorageRemovable"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<field name="DIRECTORY_ALARMS"
type="java.lang.String"
transient="false"
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index c7cbed6..e8ae7e6 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -18,6 +18,7 @@
import java.io.File;
+import android.content.res.Resources;
import android.os.storage.IMountService;
/**
@@ -116,6 +117,19 @@
* happened. You can determine its current state with
* {@link #getExternalStorageState()}.
*
+ * <p><em>Note: don't be confused by the word "external" here. This
+ * directory can better be thought as media/shared storage. It is a
+ * filesystem that can hold a relatively large amount of data and that
+ * is shared across all applications (does not enforce permissions).
+ * Traditionally this is an SD card, but it may also be implemented as
+ * built-in storage in a device that is distinct from the protected
+ * internal storage and can be mounted as a filesystem on a computer.</em></p>
+ *
+ * <p>In devices with multiple "external" storage directories (such as
+ * both secure app storage and mountable shared storage), this directory
+ * represents the "primary" external storage that the user will interact
+ * with.</p>
+ *
* <p>Applications should not directly use this top-level directory, in
* order to avoid polluting the user's root namespace. Any files that are
* private to the application should be placed in a directory returned
@@ -130,6 +144,9 @@
*
* {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
* monitor_storage}
+ *
+ * @see #getExternalStorageState()
+ * @see #isExternalStorageRemovable()
*/
public static File getExternalStorageDirectory() {
return EXTERNAL_STORAGE_DIRECTORY;
@@ -359,11 +376,9 @@
public static final String MEDIA_UNMOUNTABLE = "unmountable";
/**
- * Gets the current state of the external storage device.
- * Note: This call should be deprecated as it doesn't support
- * multiple volumes.
+ * Gets the current state of the primary "external" storage device.
*
- * <p>See {@link #getExternalStorageDirectory()} for an example of its use.
+ * <p>See {@link #getExternalStorageDirectory()} for more information.
*/
public static String getExternalStorageState() {
try {
@@ -377,6 +392,19 @@
}
}
+ /**
+ * Returns whether the primary "external" storage device is removable.
+ * If true is returned, this device is for example an SD card that the
+ * user can remove. If false is returned, the storage is built into
+ * the device and can not be physically removed.
+ *
+ * <p>See {@link #getExternalStorageDirectory()} for more information.
+ */
+ public static boolean isExternalStorageRemovable() {
+ return Resources.getSystem().getBoolean(
+ com.android.internal.R.bool.config_externalStorageRemovable);
+ }
+
static File getDirectory(String variableName, String defaultPath) {
String path = System.getenv(variableName);
return path == null ? new File(defaultPath) : new File(path);
diff --git a/core/res/res/drawable-hdpi/quickcontact_badge_pressed.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_pressed.9.png
index 0cfd09d..75c8162 100644
--- a/core/res/res/drawable-hdpi/quickcontact_badge_pressed.9.png
+++ b/core/res/res/drawable-hdpi/quickcontact_badge_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/quickcontact_badge_small_pressed.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_small_pressed.9.png
index ee030fbe..aebfa29 100644
--- a/core/res/res/drawable-hdpi/quickcontact_badge_small_pressed.9.png
+++ b/core/res/res/drawable-hdpi/quickcontact_badge_small_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/quickcontact_badge_small_unpressed.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_small_unpressed.9.png
index 7140957..ed416f1 100644
--- a/core/res/res/drawable-hdpi/quickcontact_badge_small_unpressed.9.png
+++ b/core/res/res/drawable-hdpi/quickcontact_badge_small_unpressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/quickcontact_badge_unpressed.9.png b/core/res/res/drawable-hdpi/quickcontact_badge_unpressed.9.png
index 1eeabf4..d063229 100644
--- a/core/res/res/drawable-hdpi/quickcontact_badge_unpressed.9.png
+++ b/core/res/res/drawable-hdpi/quickcontact_badge_unpressed.9.png
Binary files differ
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index d120dd0..6e6dc26 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -71,6 +71,15 @@
when there's no network connection. If the scan doesn't timeout, use zero -->
<integer name="config_radioScanningTimeout">0</integer>
+ <!-- A product with no SD card == not removable. -->
+ <bool name="config_externalStorageRemovable" product="nosdcard">false</bool>
+ <!-- Configures whether the primary external storage device is
+ removable. For example, if external storage is on an SD card,
+ it is removable; if it is built in to the device, it is not removable.
+ The default product has external storage on an SD card, which is
+ removable. -->
+ <bool name="config_externalStorageRemovable" product="default">true</bool>
+
<!-- XXXXX NOTE THE FOLLOWING RESOURCES USE THE WRONG NAMING CONVENTION.
Please don't copy them, copy anything else. -->
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index c92fc8c..a8cd7ce 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -572,7 +572,7 @@
</style>
<style name="Widget.QuickContactBadge">
- <item name="android:layout_width">50dip</item>
+ <item name="android:layout_width">47.33333dip</item>
<item name="android:layout_height">56dip</item>
<item name="android:background">@android:drawable/quickcontact_badge</item>
<item name="android:clickable">true</item>
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 532fb65..29644a6 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -782,7 +782,6 @@
const String16 translatable16("translatable");
const String16 formatted16("formatted");
const String16 false16("false");
- const String16 product16("product");
const String16 myPackage(assets->getPackage());
@@ -830,7 +829,6 @@
bool curIsStyled = false;
bool curIsPseudolocalizable = false;
bool curIsFormatted = fileIsTranslatable;
- String16 curProduct;
bool localHasErrors = false;
if (strcmp16(block.getElementName(&len), skip16.string()) == 0) {
@@ -1228,8 +1226,6 @@
translatable.setTo(block.getAttributeStringValue(i, &length));
} else if (strcmp16(attr, formatted16.string()) == 0) {
formatted.setTo(block.getAttributeStringValue(i, &length));
- } else if (strcmp16(attr, product16.string()) == 0) {
- curProduct.setTo(block.getAttributeStringValue(i, &length));
}
}
@@ -1356,6 +1352,12 @@
hasErrors = localHasErrors = true;
}
+ String16 product;
+ identIdx = block.indexOfAttribute(NULL, "product");
+ if (identIdx >= 0) {
+ product = String16(block.getAttributeStringValue(identIdx, &len));
+ }
+
String16 comment(block.getComment(&len) ? block.getComment(&len) : nulStr);
if (curIsBag) {
@@ -1447,7 +1449,7 @@
err = parseAndAddBag(bundle, in, &block, curParams, myPackage, curType,
ident, parentIdent, itemIdent, curFormat, curIsFormatted,
- curProduct, false, overwrite, outTable);
+ product, false, overwrite, outTable);
if (err == NO_ERROR) {
if (curIsPseudolocalizable && localeIsDefined(curParams)
&& bundle->getPseudolocalize()) {
@@ -1456,7 +1458,7 @@
block.setPosition(parserPosition);
err = parseAndAddBag(bundle, in, &block, pseudoParams, myPackage,
curType, ident, parentIdent, itemIdent, curFormat,
- curIsFormatted, curProduct, true, overwrite, outTable);
+ curIsFormatted, product, true, overwrite, outTable);
#endif
}
}
@@ -1480,7 +1482,7 @@
err = parseAndAddEntry(bundle, in, &block, curParams, myPackage, curType, ident,
*curTag, curIsStyled, curFormat, curIsFormatted,
- curProduct, false, overwrite, outTable);
+ product, false, overwrite, outTable);
if (err < NO_ERROR) { // Why err < NO_ERROR instead of err != NO_ERROR?
hasErrors = localHasErrors = true;
@@ -1492,7 +1494,7 @@
block.setPosition(parserPosition);
err = parseAndAddEntry(bundle, in, &block, pseudoParams, myPackage, curType,
ident, *curTag, curIsStyled, curFormat,
- curIsFormatted, curProduct,
+ curIsFormatted, product,
true, overwrite, outTable);
if (err != NO_ERROR) {
hasErrors = localHasErrors = true;