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"
|
||||
>
|
||||
</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"
|
||||
|
@ -18,6 +18,7 @@ package android.os;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.os.storage.IMountService;
|
||||
|
||||
/**
|
||||
@ -116,6 +117,19 @@ public class Environment {
|
||||
* 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 @@ public class Environment {
|
||||
*
|
||||
* {@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 class Environment {
|
||||
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 @@ 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) {
|
||||
String path = System.getenv(variableName);
|
||||
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 -->
|
||||
<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. -->
|
||||
|
||||
|
@ -782,7 +782,6 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
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 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
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 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
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 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
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 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
|
||||
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 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
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 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
|
||||
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 @@ status_t compileResourceFile(Bundle* bundle,
|
||||
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;
|
||||
|
Reference in New Issue
Block a user