am 407f625a
: Add new API to find out whether external storage is removable.
Merge commit '407f625a9b8e356e765a5ec587c443af1f3aadb5' into gingerbread-plus-aosp * commit '407f625a9b8e356e765a5ec587c443af1f3aadb5': Add new API to find out whether external storage is removable.
This commit is contained in:
@ -125396,6 +125396,17 @@
|
|||||||
visibility="public"
|
visibility="public"
|
||||||
>
|
>
|
||||||
</method>
|
</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"
|
<field name="DIRECTORY_ALARMS"
|
||||||
type="java.lang.String"
|
type="java.lang.String"
|
||||||
transient="false"
|
transient="false"
|
||||||
|
@ -18,6 +18,7 @@ package android.os;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.os.storage.IMountService;
|
import android.os.storage.IMountService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -116,6 +117,19 @@ public class Environment {
|
|||||||
* happened. You can determine its current state with
|
* happened. You can determine its current state with
|
||||||
* {@link #getExternalStorageState()}.
|
* {@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
|
* <p>Applications should not directly use this top-level directory, in
|
||||||
* order to avoid polluting the user's root namespace. Any files that are
|
* order to avoid polluting the user's root namespace. Any files that are
|
||||||
* private to the application should be placed in a directory returned
|
* private to the application should be placed in a directory returned
|
||||||
@ -130,6 +144,9 @@ public class Environment {
|
|||||||
*
|
*
|
||||||
* {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
|
* {@sample development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
|
||||||
* monitor_storage}
|
* monitor_storage}
|
||||||
|
*
|
||||||
|
* @see #getExternalStorageState()
|
||||||
|
* @see #isExternalStorageRemovable()
|
||||||
*/
|
*/
|
||||||
public static File getExternalStorageDirectory() {
|
public static File getExternalStorageDirectory() {
|
||||||
return EXTERNAL_STORAGE_DIRECTORY;
|
return EXTERNAL_STORAGE_DIRECTORY;
|
||||||
@ -359,11 +376,9 @@ public class Environment {
|
|||||||
public static final String MEDIA_UNMOUNTABLE = "unmountable";
|
public static final String MEDIA_UNMOUNTABLE = "unmountable";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current state of the external storage device.
|
* Gets the current state of the primary "external" storage device.
|
||||||
* Note: This call should be deprecated as it doesn't support
|
|
||||||
* multiple volumes.
|
|
||||||
*
|
*
|
||||||
* <p>See {@link #getExternalStorageDirectory()} for an example of its use.
|
* <p>See {@link #getExternalStorageDirectory()} for more information.
|
||||||
*/
|
*/
|
||||||
public static String getExternalStorageState() {
|
public static String getExternalStorageState() {
|
||||||
try {
|
try {
|
||||||
@ -377,6 +392,19 @@ public class Environment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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) {
|
static File getDirectory(String variableName, String defaultPath) {
|
||||||
String path = System.getenv(variableName);
|
String path = System.getenv(variableName);
|
||||||
return path == null ? new File(defaultPath) : new File(path);
|
return path == null ? new File(defaultPath) : new File(path);
|
||||||
|
@ -71,6 +71,15 @@
|
|||||||
when there's no network connection. If the scan doesn't timeout, use zero -->
|
when there's no network connection. If the scan doesn't timeout, use zero -->
|
||||||
<integer name="config_radioScanningTimeout">0</integer>
|
<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.
|
<!-- XXXXX NOTE THE FOLLOWING RESOURCES USE THE WRONG NAMING CONVENTION.
|
||||||
Please don't copy them, copy anything else. -->
|
Please don't copy them, copy anything else. -->
|
||||||
|
|
||||||
|
@ -782,7 +782,6 @@ status_t compileResourceFile(Bundle* bundle,
|
|||||||
const String16 translatable16("translatable");
|
const String16 translatable16("translatable");
|
||||||
const String16 formatted16("formatted");
|
const String16 formatted16("formatted");
|
||||||
const String16 false16("false");
|
const String16 false16("false");
|
||||||
const String16 product16("product");
|
|
||||||
|
|
||||||
const String16 myPackage(assets->getPackage());
|
const String16 myPackage(assets->getPackage());
|
||||||
|
|
||||||
@ -830,7 +829,6 @@ status_t compileResourceFile(Bundle* bundle,
|
|||||||
bool curIsStyled = false;
|
bool curIsStyled = false;
|
||||||
bool curIsPseudolocalizable = false;
|
bool curIsPseudolocalizable = false;
|
||||||
bool curIsFormatted = fileIsTranslatable;
|
bool curIsFormatted = fileIsTranslatable;
|
||||||
String16 curProduct;
|
|
||||||
bool localHasErrors = false;
|
bool localHasErrors = false;
|
||||||
|
|
||||||
if (strcmp16(block.getElementName(&len), skip16.string()) == 0) {
|
if (strcmp16(block.getElementName(&len), skip16.string()) == 0) {
|
||||||
@ -1228,8 +1226,6 @@ status_t compileResourceFile(Bundle* bundle,
|
|||||||
translatable.setTo(block.getAttributeStringValue(i, &length));
|
translatable.setTo(block.getAttributeStringValue(i, &length));
|
||||||
} else if (strcmp16(attr, formatted16.string()) == 0) {
|
} else if (strcmp16(attr, formatted16.string()) == 0) {
|
||||||
formatted.setTo(block.getAttributeStringValue(i, &length));
|
formatted.setTo(block.getAttributeStringValue(i, &length));
|
||||||
} else if (strcmp16(attr, product16.string()) == 0) {
|
|
||||||
curProduct.setTo(block.getAttributeStringValue(i, &length));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1356,6 +1352,12 @@ status_t compileResourceFile(Bundle* bundle,
|
|||||||
hasErrors = localHasErrors = true;
|
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);
|
String16 comment(block.getComment(&len) ? block.getComment(&len) : nulStr);
|
||||||
|
|
||||||
if (curIsBag) {
|
if (curIsBag) {
|
||||||
@ -1447,7 +1449,7 @@ status_t compileResourceFile(Bundle* bundle,
|
|||||||
|
|
||||||
err = parseAndAddBag(bundle, in, &block, curParams, myPackage, curType,
|
err = parseAndAddBag(bundle, in, &block, curParams, myPackage, curType,
|
||||||
ident, parentIdent, itemIdent, curFormat, curIsFormatted,
|
ident, parentIdent, itemIdent, curFormat, curIsFormatted,
|
||||||
curProduct, false, overwrite, outTable);
|
product, false, overwrite, outTable);
|
||||||
if (err == NO_ERROR) {
|
if (err == NO_ERROR) {
|
||||||
if (curIsPseudolocalizable && localeIsDefined(curParams)
|
if (curIsPseudolocalizable && localeIsDefined(curParams)
|
||||||
&& bundle->getPseudolocalize()) {
|
&& bundle->getPseudolocalize()) {
|
||||||
@ -1456,7 +1458,7 @@ status_t compileResourceFile(Bundle* bundle,
|
|||||||
block.setPosition(parserPosition);
|
block.setPosition(parserPosition);
|
||||||
err = parseAndAddBag(bundle, in, &block, pseudoParams, myPackage,
|
err = parseAndAddBag(bundle, in, &block, pseudoParams, myPackage,
|
||||||
curType, ident, parentIdent, itemIdent, curFormat,
|
curType, ident, parentIdent, itemIdent, curFormat,
|
||||||
curIsFormatted, curProduct, true, overwrite, outTable);
|
curIsFormatted, product, true, overwrite, outTable);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1480,7 +1482,7 @@ status_t compileResourceFile(Bundle* bundle,
|
|||||||
|
|
||||||
err = parseAndAddEntry(bundle, in, &block, curParams, myPackage, curType, ident,
|
err = parseAndAddEntry(bundle, in, &block, curParams, myPackage, curType, ident,
|
||||||
*curTag, curIsStyled, curFormat, curIsFormatted,
|
*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?
|
if (err < NO_ERROR) { // Why err < NO_ERROR instead of err != NO_ERROR?
|
||||||
hasErrors = localHasErrors = true;
|
hasErrors = localHasErrors = true;
|
||||||
@ -1492,7 +1494,7 @@ status_t compileResourceFile(Bundle* bundle,
|
|||||||
block.setPosition(parserPosition);
|
block.setPosition(parserPosition);
|
||||||
err = parseAndAddEntry(bundle, in, &block, pseudoParams, myPackage, curType,
|
err = parseAndAddEntry(bundle, in, &block, pseudoParams, myPackage, curType,
|
||||||
ident, *curTag, curIsStyled, curFormat,
|
ident, *curTag, curIsStyled, curFormat,
|
||||||
curIsFormatted, curProduct,
|
curIsFormatted, product,
|
||||||
true, overwrite, outTable);
|
true, overwrite, outTable);
|
||||||
if (err != NO_ERROR) {
|
if (err != NO_ERROR) {
|
||||||
hasErrors = localHasErrors = true;
|
hasErrors = localHasErrors = true;
|
||||||
|
Reference in New Issue
Block a user