Merge "DO NOT MERGE Add additional options and receiver to BT tests" into gingerbread
diff --git a/api/current.xml b/api/current.xml
index 0efc466..70f2bff 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -705,6 +705,17 @@
visibility="public"
>
</field>
+<field name="NFC"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""android.permission.NFC""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="PERSISTENT_ACTIVITY"
type="java.lang.String"
transient="false"
@@ -31092,6 +31103,17 @@
visibility="public"
>
</field>
+<field name="WIPE_EXTERNAL_STORAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
</class>
</package>
<package name="android.app.backup"
diff --git a/cmds/servicemanager/service_manager.c b/cmds/servicemanager/service_manager.c
index 22d5b39..a5a1f01 100644
--- a/cmds/servicemanager/service_manager.c
+++ b/cmds/servicemanager/service_manager.c
@@ -34,6 +34,7 @@
{ AID_MEDIA, "media.player" },
{ AID_MEDIA, "media.camera" },
{ AID_MEDIA, "media.audio_policy" },
+ { AID_NFC, "nfc" },
{ AID_RADIO, "radio.phone" },
{ AID_RADIO, "radio.sms" },
{ AID_RADIO, "radio.phonesubinfo" },
diff --git a/cmds/stagefright/Android.mk b/cmds/stagefright/Android.mk
index 9a97284..5b74007 100644
--- a/cmds/stagefright/Android.mk
+++ b/cmds/stagefright/Android.mk
@@ -13,7 +13,7 @@
$(JNI_H_INCLUDE) \
frameworks/base/media/libstagefright \
frameworks/base/media/libstagefright/include \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+ $(TOP)/frameworks/base/include/media/stagefright/openmax
LOCAL_CFLAGS += -Wno-multichar
@@ -37,7 +37,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
frameworks/base/media/libstagefright \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+ $(TOP)/frameworks/base/include/media/stagefright/openmax
LOCAL_CFLAGS += -Wno-multichar
@@ -61,7 +61,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
frameworks/base/media/libstagefright \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+ $(TOP)/frameworks/base/include/media/stagefright/openmax
LOCAL_CFLAGS += -Wno-multichar
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 4736404..5ae8a1f 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -763,6 +763,13 @@
public static final int FLAG_CANT_SAVE_STATE = 1<<0;
/**
+ * Constant for {@link #flags}: this process is associated with a
+ * persistent system app.
+ * @hide
+ */
+ public static final int FLAG_PERSISTENT = 1<<1;
+
+ /**
* Flags of information. May be any of
* {@link #FLAG_CANT_SAVE_STATE}.
* @hide
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index fda08f6..2dd5819 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -3140,6 +3140,7 @@
return;
}
XmlUtils.writeMapXml(mcr.mapToWriteToDisk, str);
+ FileUtils.sync(str);
str.close();
setFilePermissionsFromMode(mFile.getPath(), mMode, 0);
FileStatus stat = new FileStatus();
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 296d70a4..570351d 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -511,6 +511,12 @@
}
/**
+ * Flag for {@link #wipeData(int)}: also erase the device's external
+ * storage.
+ */
+ public static final int WIPE_EXTERNAL_STORAGE = 0x0001;
+
+ /**
* Ask the user date be wiped. This will cause the device to reboot,
* erasing all user data while next booting up. External storage such
* as SD cards will not be erased.
diff --git a/core/java/android/bluetooth/package.html b/core/java/android/bluetooth/package.html
index 5ff240c..9ac42dc 100644
--- a/core/java/android/bluetooth/package.html
+++ b/core/java/android/bluetooth/package.html
@@ -1,7 +1,11 @@
<HTML>
<BODY>
-Provides classes that manage Bluetooth functionality, such as scanning for
-devices, connecting with devices, and managing data transfer between devices.
+<p>Provides classes that manage Bluetooth functionality, such as scanning for
+devices, connecting with devices, and managing data transfer between devices.</p>
+
+<p>For a complete guide to using the Bluetooth APIs, see the <a
+href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
+{@more}
<p>The Bluetooth APIs let applications:</p>
<ul>
@@ -20,9 +24,6 @@
permission.
</p>
-<p>For a detailed guide to using the Bluetooth APIs, see the <a
-href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth Dev Guide topic</a>.</p>
-
<p class="note"><strong>Note:</strong>
Not all Android devices are guaranteed to have Bluetooth functionality.</p>
</BODY>
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 693be21..0dd2e4a 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -1555,16 +1555,6 @@
public static final String SIP_SERVICE = "sip";
/**
- * Use with {@link #getSystemService} to retrieve an
- * {@link com.trustedlogic.trustednfc.android.INfcManager.INfcManager} for
- * accessing NFC methods.
- *
- * @see #getSystemService
- * @hide
- */
- public static final String NFC_SERVICE = "nfc";
-
- /**
* Determine whether the given permission is allowed for a particular
* process and user ID running in the system.
*
diff --git a/core/java/android/content/res/ObbInfo.java b/core/java/android/content/res/ObbInfo.java
index 5d6ed44..b653f9f 100644
--- a/core/java/android/content/res/ObbInfo.java
+++ b/core/java/android/content/res/ObbInfo.java
@@ -48,6 +48,13 @@
*/
public int flags;
+ /**
+ * The salt for the encryption algorithm.
+ *
+ * @hide
+ */
+ public byte[] salt;
+
// Only allow things in this package to instantiate.
/* package */ ObbInfo() {
}
@@ -75,6 +82,7 @@
dest.writeString(packageName);
dest.writeInt(version);
dest.writeInt(flags);
+ dest.writeByteArray(salt);
}
public static final Parcelable.Creator<ObbInfo> CREATOR
@@ -93,5 +101,6 @@
packageName = source.readString();
version = source.readInt();
flags = source.readInt();
+ salt = source.createByteArray();
}
}
diff --git a/core/java/android/nfc/NdefMessage.java b/core/java/android/nfc/NdefMessage.java
index fcff2c9..378304e 100644
--- a/core/java/android/nfc/NdefMessage.java
+++ b/core/java/android/nfc/NdefMessage.java
@@ -21,10 +21,12 @@
import android.os.Parcelable;
/**
- * NDEF Message data.
- * <p>
- * Immutable data class. An NDEF message always contains zero or more NDEF
- * records.
+ * Represents an NDEF (NFC Data Exchange Format) data message that contains one or more {@link
+ * NdefRecord}s.
+ * <p>An NDEF message includes "records" that can contain different sets of data, such as
+ * MIME-type media, a URI, or one of the supported RTD types (see {@link NdefRecord}). An NDEF
+ * message always contains zero or more NDEF records.</p>
+ * <p>This is an immutable data class.
*/
public class NdefMessage implements Parcelable {
private static final byte FLAG_MB = (byte) 0x80;
diff --git a/core/java/android/nfc/NdefRecord.java b/core/java/android/nfc/NdefRecord.java
index c08f2ed..23fd2ca 100644
--- a/core/java/android/nfc/NdefRecord.java
+++ b/core/java/android/nfc/NdefRecord.java
@@ -22,20 +22,18 @@
import java.lang.UnsupportedOperationException;
/**
- * NDEF Record data.
- * <p>
- * Immutable data class. An NDEF record always contains
+ * Represents a logical (unchunked) NDEF (NFC Data Exchange Format) record.
+ * <p>An NDEF record always contains:
* <ul>
- * <li>3-bit TNF field
- * <li>Variable length type
- * <li>Variable length ID
- * <li>Variable length payload
+ * <li>3-bit TNF (Type Name Format) field: Indicates how to interpret the type field
+ * <li>Variable length type: Describes the record format
+ * <li>Variable length ID: A unique identifier for the record
+ * <li>Variable length payload: The actual data payload
* </ul>
- * The TNF (Type Name Format) field indicates how to interpret the type field.
- * <p>
- * This class represents a logical (unchunked) NDEF record. The underlying
+ * <p>The underlying record
* representation may be chunked across several NDEF records when the payload is
* large.
+ * <p>This is an immutable data class.
*/
public class NdefRecord implements Parcelable {
/**
@@ -170,6 +168,10 @@
throw new IllegalArgumentException("Illegal null argument");
}
+ if (tnf < 0 || tnf > 0x07) {
+ throw new IllegalArgumentException("TNF out of range " + tnf);
+ }
+
/* generate flag */
byte flags = FLAG_MB | FLAG_ME;
diff --git a/core/java/android/nfc/NdefTag.java b/core/java/android/nfc/NdefTag.java
index 25303c3..45cdc31 100644
--- a/core/java/android/nfc/NdefTag.java
+++ b/core/java/android/nfc/NdefTag.java
@@ -16,24 +16,24 @@
package android.nfc;
+import java.util.HashMap;
+
import android.os.Parcel;
import android.os.Parcelable;
/**
- * NdefTag is a Tag that has NDEF messages or can store NDEF messages.
+ * Represents a discovered tag that contains {@link NdefMessage}s (or a tag that can store them).
+ * In practice, a tag is a thing that an NFC-enabled device can communicate with. This
+ * class is a representation of such a tag and can contain the NDEF messages shared by the tag.
+ * <p>An NDEF tag can contain zero or more NDEF messages (represented by {@link NdefMessage}
+ * objects) in addition to the basic tag properties of UID and Type.
* <p>
- * NDEF Tag's contain zero or more NDEF Messages in addition to the basic
- * Tag properties of UID and Type.
- * <p>
- * NDEF Tag's that have been initialized will usually contain a single NDEF
- * Message (and that Message can contain multiple NDEF Records). However it
- * is possible for NDEF Tag's to contain multiple NDEF Messages.
- * <p>
- * This class is a immutable data class that contains the contents of the NDEF
- * Message(s) as read at Tag discovery time.
- * <p>
- * NfcAdapter.createNdefTagConnection() can be used to modify the contents of
- * some NDEF Tag's.
+ * {@link NdefTag}s that have been initialized will usually contain a single {@link NdefMessage}
+ * (and that Message can contain multiple {@link NdefRecord}s). However it
+ * is possible for {@link NdefTag}s to contain multiple {@link NdefMessage}s.
+ * <p>{@link NfcAdapter#createNdefTagConnection createNdefTagConnection()} can be used to modify the
+ * contents of some tags.
+ * <p>This is an immutable data class.
*/
public class NdefTag extends Tag implements Parcelable {
private final NdefMessage[] mMessages;
@@ -43,8 +43,8 @@
* tag is discovered and by Parcelable methods.
* @hide
*/
- public NdefTag(int type, byte[] uid, int nativeHandle, NdefMessage[] messages) {
- super(type, true, uid, nativeHandle);
+ public NdefTag(String typeName, byte[] uid, int nativeHandle, NdefMessage[] messages) {
+ super(typeName, true, uid, nativeHandle);
mMessages = messages.clone();
}
@@ -64,10 +64,22 @@
/**
* Get only the NDEF Messages from a single NDEF target on a tag.
+ * <p>
+ * This retrieves the NDEF Messages that were found on the Tag at discovery
+ * time. It does not cause any further RF activity, and does not block.
+ * <p>
+ * Most tags only contain a single NDEF message.
+ *
+ * @param target One of targets strings provided by getNdefTargets()
+ * @return NDEF Messages found at Tag discovery
*/
public NdefMessage[] getNdefMessages(String target) {
- //TODO(nxp): new api method
- throw new UnsupportedOperationException();
+ // TODO: handle multiprotocol
+ String[] localTypes = convertToNdefType(mTypeName);
+ if (!target.equals(localTypes[0])) {
+ throw new IllegalArgumentException();
+ }
+ return getNdefMessages();
}
/** TODO(npelly):
@@ -81,13 +93,35 @@
public static final String TARGET_MIFARE_CLASSIC = "type_mifare_classic";
public static final String TARGET_OTHER = "other";
+ private static final HashMap<String, String[]> NDEF_TYPES_CONVERTION_TABLE = new HashMap<String, String[]>() {
+ {
+ // TODO: handle multiprotocol
+ // TODO: move INTERNAL_TARGET_Type to TARGET_TYPE mapping to NFC service
+ put(Tag.INTERNAL_TARGET_TYPE_JEWEL, new String[] { NdefTag.TARGET_TYPE_1 });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_UL, new String[] { NdefTag.TARGET_TYPE_2 });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_1K, new String[] { NdefTag.TARGET_MIFARE_CLASSIC });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_4K, new String[] { NdefTag.TARGET_MIFARE_CLASSIC });
+ put(Tag.INTERNAL_TARGET_TYPE_FELICA, new String[] { NdefTag.TARGET_TYPE_3 });
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_4, new String[] { NdefTag.TARGET_TYPE_4 });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_DESFIRE, new String[] { NdefTag.TARGET_TYPE_4 });
+ }
+ };
+
+ private String[] convertToNdefType(String internalTypeName) {
+ String[] result = NDEF_TYPES_CONVERTION_TABLE.get(internalTypeName);
+ if (result == null) {
+ return new String[] { NdefTag.TARGET_OTHER };
+ }
+ return result;
+ }
+
/**
* Return the
*
* @return
*/
public String[] getNdefTargets() {
- throw new UnsupportedOperationException();
+ return convertToNdefType(mTypeName);
}
@Override
@@ -109,7 +143,7 @@
int messagesLength = in.readInt();
NdefMessage[] messages = new NdefMessage[messagesLength];
in.readTypedArray(messages, NdefMessage.CREATOR);
- return new NdefTag(tag.mType, tag.mUid, tag.mNativeHandle, messages);
+ return new NdefTag(tag.mTypeName, tag.mUid, tag.mNativeHandle, messages);
}
public NdefTag[] newArray(int size) {
return new NdefTag[size];
diff --git a/core/java/android/nfc/NdefTagConnection.java b/core/java/android/nfc/NdefTagConnection.java
index 0696b37..4795fa7 100644
--- a/core/java/android/nfc/NdefTagConnection.java
+++ b/core/java/android/nfc/NdefTagConnection.java
@@ -22,7 +22,12 @@
import android.util.Log;
/**
- * NdefTagConnection is a connection to an NDEF target on an NDEF tag.
+ * A connection to an NDEF target on an {@link NdefTag}.
+ * <p>You can acquire this kind of connection with {@link NfcAdapter#createNdefTagConnection
+ * createNdefTagConnection()}. Use the connection to read or write {@link NdefMessage}s.
+ * <p class="note"><strong>Note:</strong>
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
+ * permission.
*/
public class NdefTagConnection extends RawTagConnection {
public static final int NDEF_MODE_READ_ONCE = 1;
@@ -37,16 +42,37 @@
* Internal constructor, to be used by NfcAdapter
* @hide
*/
- NdefTagConnection(INfcAdapter service, NdefTag tag) throws RemoteException {
+ /* package private */ NdefTagConnection(INfcAdapter service, NdefTag tag, String target) throws RemoteException {
super(service, tag);
+ String[] targets = tag.getNdefTargets();
+ int i;
+
+ // Check target validity
+ for (i=0; i<targets.length; i++) {
+ if (target.equals(targets[i])) {
+ break;
+ }
+ }
+ if (i >= targets.length) {
+ // Target not found
+ throw new IllegalArgumentException();
+ }
+ }
+
+ /**
+ * Internal constructor, to be used by NfcAdapter
+ * @hide
+ */
+ /* package private */ NdefTagConnection(INfcAdapter service, NdefTag tag) throws RemoteException {
+ this(service, tag, tag.getNdefTargets()[0]);
}
/**
* Read NDEF message(s).
* This will always return the most up to date payload, and can block.
- * It can be canceled with close().
+ * It can be canceled with {@link RawTagConnection#close}.
* Most NDEF tags will contain just one NDEF message.
- * <p>
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @throws FormatException if the tag is not NDEF formatted
* @throws IOException if the target is lost or connection closed
* @throws FormatException
@@ -79,15 +105,16 @@
/**
* Attempt to write an NDEF message to a tag.
* This method will block until the data is written. It can be canceled
- * with close().
+ * with {@link RawTagConnection#close}.
* Many tags are write-once, so use this method carefully.
* Specification allows for multiple NDEF messages per NDEF tag, but it is
* encourage to only write one message, this so API only takes a single
- * message. Use NdefRecord to write several records to a single tag.
- * For write-many tags, use makeReadOnly() after this method to attempt
+ * message. Use {@link NdefRecord} to write several records to a single tag.
+ * For write-many tags, use {@link #makeReadOnly} after this method to attempt
* to prevent further modification. For write-once tags this is not
- * neccesary.
- * Requires NFC_WRITE permission.
+ * necessary.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
+ *
* @throws FormatException if the tag is not suitable for NDEF messages
* @throws IOException if the target is lost or connection closed or the
* write failed
@@ -114,8 +141,8 @@
/**
* Attempts to make the NDEF data in this tag read-only.
* This method will block until the action is complete. It can be canceled
- * with close().
- * Requires NFC_WRITE permission.
+ * with {@link RawTagConnection#close}.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @return true if the tag is now read-only
* @throws IOException if the target is lost, or connection closed
*/
@@ -141,7 +168,8 @@
/**
* Read/Write mode hint.
- * Provides a hint if further reads or writes are likely to suceed.
+ * Provides a hint if further reads or writes are likely to succeed.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @return one of NDEF_MODE
* @throws IOException if the target is lost or connection closed
*/
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 02b9fb71..d76ac41 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -15,16 +15,18 @@
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
+import android.app.ActivityThread;
import android.content.Context;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
import android.nfc.INfcAdapter;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
-//TODO(npelly) permission {@link android.Manifest.permission#NFC_MODIFY}
/**
- * Represents a local NFC Adapter.
+ * Represents the device's local NFC adapter.
* <p>
* Use the static {@link #getDefaultAdapter} method to get the default NFC
* Adapter for this Android device. Most Android devices will have only one NFC
@@ -35,7 +37,7 @@
* to NFC Tags.
* <p class="note">
* <strong>Note:</strong> Some methods require the
- * TODO permission.
+ * {@link android.Manifest.permission#NFC} permission.
*/
public final class NfcAdapter {
/**
@@ -153,6 +155,26 @@
}
/**
+ * Helper to check if this device has FEATURE_NFC, but without using
+ * a context.
+ * Equivalent to
+ * context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)
+ */
+ private static boolean hasNfcFeature() {
+ IPackageManager pm = ActivityThread.getPackageManager();
+ if (pm == null) {
+ Log.e(TAG, "Cannot get package manager, assuming no NFC feature");
+ return false;
+ }
+ try {
+ return pm.hasSystemFeature(PackageManager.FEATURE_NFC);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Package manager query failed, assuming no NFC feature", e);
+ return false;
+ }
+ }
+
+ /**
* Get a handle to the default NFC Adapter on this Android device.
* <p>
* Most Android devices will only have one NFC Adapter (NFC Controller).
@@ -166,10 +188,17 @@
}
sIsInitialized = true;
- // TODO(npelly): check which method to use here to get the service
- IBinder b = ServiceManager.getService(Context.NFC_SERVICE);
+ /* is this device meant to have NFC */
+ if (!hasNfcFeature()) {
+ Log.v(TAG, "this device does not have NFC support");
+ return null;
+ }
+
+ /* get a handle to NFC service */
+ IBinder b = ServiceManager.getService("nfc");
if (b == null) {
- return null; // This device does not have NFC
+ Log.e(TAG, "could not retrieve NFC service");
+ return null;
}
sAdapter = new NfcAdapter(INfcAdapter.Stub.asInterface(b));
@@ -231,8 +260,7 @@
* <li>provide the NDEF message on over LLCP to peer NFC adapters
* </ul>
* The NDEF message is preserved across reboot.
- * <p>
- * Requires NFC_WRITE permission
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*
* @param message NDEF message to make public
*/
@@ -246,8 +274,7 @@
/**
* Get the NDEF Message that this adapter appears as to Tag readers.
- * <p>
- * Requires NFC_WRITE permission
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*
* @return NDEF Message that is publicly readable
*/
@@ -262,6 +289,7 @@
/**
* Create a raw tag connection to the default Target
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public RawTagConnection createRawTagConnection(Tag tag) {
try {
@@ -274,14 +302,20 @@
/**
* Create a raw tag connection to the specified Target
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public RawTagConnection createRawTagConnection(Tag tag, String target) {
- //TODO
- throw new UnsupportedOperationException();
+ try {
+ return new RawTagConnection(mService, tag, target);
+ } catch (RemoteException e) {
+ Log.e(TAG, "NFC service died", e);
+ return null;
+ }
}
/**
* Create an NDEF tag connection to the default Target
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public NdefTagConnection createNdefTagConnection(NdefTag tag) {
try {
@@ -294,9 +328,14 @@
/**
* Create an NDEF tag connection to the specified Target
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public NdefTagConnection createNdefTagConnection(NdefTag tag, String target) {
- //TODO
- throw new UnsupportedOperationException();
+ try {
+ return new NdefTagConnection(mService, tag, target);
+ } catch (RemoteException e) {
+ Log.e(TAG, "NFC service died", e);
+ return null;
+ }
}
}
diff --git a/core/java/android/nfc/RawTagConnection.java b/core/java/android/nfc/RawTagConnection.java
index 67a836f..265eb1b 100644
--- a/core/java/android/nfc/RawTagConnection.java
+++ b/core/java/android/nfc/RawTagConnection.java
@@ -22,18 +22,16 @@
import android.util.Log;
/**
- * RawTagConnection is a low-level connection to a Tag.
+ * A low-level connection to a {@link Tag} target.
+ * <p>You can acquire this kind of connection with {@link NfcAdapter#createRawTagConnection
+ * createRawTagConnection()}. Use the connection to send and receive data with {@link #transceive
+ * transceive()}.
* <p>
- * The only data transfer method that TagConnection offers is transceive().
- * Applications must implement there own protocol stack on top of transceive().
- * <p>
- * Use NfcAdapter.createRawTagConnection() to create a RawTagConnection object.
+ * Applications must implement their own protocol stack on top of {@link #transceive transceive()}.
*
- * * <p class="note"><strong>Note:</strong>
- * Most methods require the {@link android.Manifest.permission#BLUETOOTH}
- * permission and some also require the
- * {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission.
-
+ * <p class="note"><strong>Note:</strong>
+ * Use of this class requires the {@link android.Manifest.permission#NFC}
+ * permission.
*/
public class RawTagConnection {
@@ -41,36 +39,60 @@
/*package*/ final INfcTag mTagService;
/*package*/ final Tag mTag;
/*package*/ boolean mIsConnected;
+ /*package*/ String mSelectedTarget;
private static final String TAG = "NFC";
- /* package private */ RawTagConnection(INfcAdapter service, Tag tag) throws RemoteException {
+ /* package private */ RawTagConnection(INfcAdapter service, Tag tag, String target) throws RemoteException {
+ String[] targets = tag.getRawTargets();
+ int i;
+
+ // Check target validity
+ for (i=0;i<targets.length;i++) {
+ if (target.equals(targets[i])) {
+ break;
+ }
+ }
+ if (i >= targets.length) {
+ // Target not found
+ throw new IllegalArgumentException();
+ }
+
mService = service;
mTagService = service.getNfcTagInterface();
mService.openTagConnection(tag); // TODO(nxp): don't connect until connect()
mTag = tag;
+ mSelectedTarget = target;
+ }
+
+ /* package private */ RawTagConnection(INfcAdapter service, Tag tag) throws RemoteException {
+ this(service, tag, tag.getRawTargets()[0]);
}
/**
- * Get the Tag this connection is associated with.
+ * Get the {@link Tag} this connection is associated with.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public Tag getTag() {
return mTag;
}
+ /**
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
+ */
public String getTagTarget() {
- //TODO
- throw new UnsupportedOperationException();
+ return mSelectedTarget;
}
/**
- * Helper to indicate if transceive() calls might succeed.
+ * Helper to indicate if {@link #transceive transceive()} calls might succeed.
* <p>
* Does not cause RF activity, and does not block.
- * <p>
- * Returns true if connect() has completed successfully, and the Tag is not
- * yet known to be out of range. Applications must still handle IOException
- * while using transceive().
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
+ * @return true if {@link #connect} has completed successfully and the {@link Tag} is believed
+ * to be within range. Applications must still handle {@link java.io.IOException}
+ * while using {@link #transceive transceive()}, in case connection is lost after this method
+ * returns true.
*/
public boolean isConnected() {
// TODO(nxp): update mIsConnected when tag goes out of range -
@@ -80,13 +102,13 @@
}
/**
- * Connect to tag.
+ * Connect to the {@link Tag} associated with this connection.
* <p>
* This method blocks until the connection is established.
* <p>
- * close() can be called from another thread to cancel this connection
+ * {@link #close} can be called from another thread to cancel this connection
* attempt.
- *
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
* @throws IOException if the target is lost, or connect canceled
*/
public void connect() throws IOException {
@@ -95,13 +117,14 @@
}
/**
- * Close tag connection.
+ * Close this connection.
* <p>
- * Causes blocking operations such as transceive() or connect() to
- * be canceled and immediately throw IOException.
+ * Causes blocking operations such as {@link #transceive transceive()} or {@link #connect} to
+ * be canceled and immediately throw {@link java.io.IOException}.
* <p>
- * This object cannot be re-used after calling close(). Further calls
- * to transceive() or connect() will fail.
+ * Once this method is called, this object cannot be re-used and should be discarded. Further
+ * calls to {@link #transceive transceive()} or {@link #connect} will fail.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*/
public void close() {
mIsConnected = false;
@@ -113,12 +136,11 @@
}
/**
- * Send data to a tag, and return the response.
+ * Send data to a tag and receive the response.
* <p>
* This method will block until the response is received. It can be canceled
- * with close().
- * <p>
- * Requires NFC_WRITE permission.
+ * with {@link #close}.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
*
* @param data bytes to send
* @return bytes received in response
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index 8f731e7..abf02b5 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -16,27 +16,30 @@
package android.nfc;
+import java.util.HashMap;
+
import android.os.Parcel;
import android.os.Parcelable;
/**
- * Immutable data class, represents a discovered tag.
+ * Represents a (generic) discovered tag.
* <p>
* A tag is a passive NFC element, such as NFC Forum Tag's, Mifare class Tags,
* Sony Felica Tags.
* <p>
* Tag's have a type and usually have a UID.
* <p>
- * Tag objects are passed to applications via the NfcAdapter.EXTRA_TAG extra
- * in NfcAdapter.ACTION_TAG_DISCOVERED intents. The Tag object is immutable
- * and represents the state of the Tag at the time of discovery. It can be
- * directly queried for its UID and Type, or used to create a TagConnection
- * (NfcAdapter.createTagConnection()).
+ * {@link Tag} objects are passed to applications via the {@link NfcAdapter#EXTRA_TAG} extra
+ * in {@link NfcAdapter#ACTION_TAG_DISCOVERED} intents. A {@link Tag} object is immutable
+ * and represents the state of the tag at the time of discovery. It can be
+ * directly queried for its UID and Type, or used to create a {@link RawTagConnection}
+ * (with {@link NfcAdapter#createRawTagConnection createRawTagConnection()}).
* <p>
- * This Tag object can only be used to create a TagConnection while it is in
- * range. If it is removed and then returned to range then the most recent
- * Tag object (in ACTION_TAG_DISCOVERED) should be used to create a
- * TagConnection.
+ * A {@link Tag} can be used to create a {@link RawTagConnection} only while the tag is in
+ * range. If it is removed and then returned to range, then the most recent
+ * {@link Tag} object (in {@link NfcAdapter#ACTION_TAG_DISCOVERED}) should be used to create a
+ * {@link RawTagConnection}.
+ * <p>This is an immutable data class.
*/
public class Tag implements Parcelable {
@@ -112,17 +115,73 @@
public static final String TARGET_OTHER = "other";
- /*package*/ final int mType;
+ /*package*/ final String mTypeName;
/*package*/ final boolean mIsNdef;
/*package*/ final byte[] mUid;
/*package*/ final int mNativeHandle;
+ /*package*/ static final String INTERNAL_TARGET_TYPE_ISO14443_3A = "Iso14443-3A";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_ISO14443_3B = "Iso14443-3B";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_ISO14443_4 = "Iso14443-4";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_UL = "MifareUL";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_1K = "Mifare1K";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_4K = "Mifare4K";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_DESFIRE = "MifareDESFIRE";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_MIFARE_UNKNOWN = "Unknown Mifare";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_FELICA = "Felica";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_JEWEL = "Jewel";
+ /*package*/ static final String INTERNAL_TARGET_TYPE_UNKNOWN = "Unknown Type";
+
+ private static final HashMap<String, Integer> INT_TYPES_CONVERTION_TABLE = new HashMap<String, Integer>() {
+ {
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_3A, Tag.NFC_TAG_ISO14443_A );
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_3B, Tag.NFC_TAG_ISO14443_B );
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_UL, Tag.NFC_TAG_MIFARE );
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_1K, Tag.NFC_TAG_MIFARE );
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_4K, Tag.NFC_TAG_MIFARE );
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_DESFIRE, Tag.NFC_TAG_MIFARE );
+ put(Tag.INTERNAL_TARGET_TYPE_FELICA, Tag.NFC_TAG_FELICA );
+ put(Tag.INTERNAL_TARGET_TYPE_JEWEL, Tag.NFC_TAG_JEWEL );
+ }
+ };
+
+ private int convertToInt(String internalTypeName) {
+ Integer result = INT_TYPES_CONVERTION_TABLE.get(internalTypeName);
+ if (result == null) {
+ return Tag.NFC_TAG_OTHER;
+ }
+ return result;
+ }
+
+ private static final HashMap<String, String[]> RAW_TYPES_CONVERTION_TABLE = new HashMap<String, String[]>() {
+ {
+ /* TODO: handle multiprotocol */
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_3A, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_ISO14443_3B, new String[] { Tag.TARGET_ISO_14443_3B });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_UL, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_1K, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_4K, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_DESFIRE, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_MIFARE_UNKNOWN, new String[] { Tag.TARGET_ISO_14443_3A });
+ put(Tag.INTERNAL_TARGET_TYPE_FELICA, new String[] { Tag.TARGET_JIS_X_6319_4 });
+ put(Tag.INTERNAL_TARGET_TYPE_JEWEL, new String[] { Tag.TARGET_TOPAZ });
+ }
+ };
+
+ private String[] convertToRaw(String internalTypeName) {
+ String[] result = RAW_TYPES_CONVERTION_TABLE.get(internalTypeName);
+ if (result == null) {
+ return new String[] { Tag.TARGET_OTHER };
+ }
+ return result;
+ }
+
/**
* Hidden constructor to be used by NFC service only.
* @hide
*/
- public Tag(int type, boolean isNdef, byte[] uid, int nativeHandle) {
- mType = type;
+ public Tag(String typeName, boolean isNdef, byte[] uid, int nativeHandle) {
+ mTypeName = typeName;
mIsNdef = isNdef;
mUid = uid.clone();
mNativeHandle = nativeHandle;
@@ -143,8 +202,7 @@
* @return
*/
public String[] getRawTargets() {
- //TODO
- throw new UnsupportedOperationException();
+ return convertToRaw(mTypeName);
}
/**
@@ -158,7 +216,7 @@
* @hide
*/
public int getType() {
- return mType;
+ return convertToInt(mTypeName);
}
/**
@@ -187,7 +245,7 @@
@Override
public void writeToParcel(Parcel dest, int flags) {
boolean[] booleans = new boolean[] {mIsNdef};
- dest.writeInt(mType);
+ dest.writeString(mTypeName);
dest.writeBooleanArray(booleans);
dest.writeInt(mUid.length);
dest.writeByteArray(mUid);
@@ -198,7 +256,7 @@
new Parcelable.Creator<Tag>() {
public Tag createFromParcel(Parcel in) {
boolean[] booleans = new boolean[1];
- int type = in.readInt();
+ String type = in.readString();
in.readBooleanArray(booleans);
boolean isNdef = booleans[0];
int uidLength = in.readInt();
diff --git a/core/java/android/nfc/package.html b/core/java/android/nfc/package.html
new file mode 100644
index 0000000..8754cb9
--- /dev/null
+++ b/core/java/android/nfc/package.html
@@ -0,0 +1,36 @@
+<HTML>
+<BODY>
+Provides access to Near Field Communication (NFC) functionality, allowing applications to connect
+to NFC tags, then transmit and recieving data. A "tag" may actually be another device that appears
+as a tag.
+
+<p>Here's a summary of the classes:</p>
+
+<dl>
+ <dt>{@link android.nfc.NfcAdapter}</dt>
+ <dd>This represents the device's NFC adapter, which is your entry-point to performing NFC
+operations. Once you acquire an instance with {@link android.nfc.NfcAdapter#getDefaultAdapter}, you
+can create connections to tags.</dd>
+ <dt>{@link android.nfc.NdefTag} and {@link android.nfc.Tag}</dt>
+ <dd>These objects represent a tag. A tag is a thing that the NFC-enabled device can
+communicate with when within range. Usually, you'll work with {@link android.nfc.NdefTag}, which
+represents a tag that's compliant with the NFC Data Exchange Format (NDEF); a {@link
+android.nfc.Tag} represents a generalized tag. Note that {@link android.nfc.NdefTag} extends
+{@link android.nfc.Tag}.</dd>
+ <dt>{@link android.nfc.NdefTagConnection} and {@link android.nfc.RawTagConnection}</dt>
+ <dd>These objects represent a connection to a tag, respective to the type of tag connected
+(either {@link android.nfc.NdefTag} or {@link android.nfc.Tag}). Note that {@link
+android.nfc.NdefTagConnection} extends {@link android.nfc.RawTagConnection}.</dd>
+ <dt>{@link android.nfc.NdefMessage}</dt>
+ <dd>Represents an NDEF data message, which is the standard format in which "records"
+carrying data are transmitted between devices and tags. Your application can receive these
+messages from an {@link android.nfc.NdefTagConnection}.</dd>
+ <dt>{@link android.nfc.NdefRecord}</dt>
+ <dd>Represents a record, which is delivered in a {@link android.nfc.NdefMessage} and describes the
+type of data being shared and carries the data itself.</dd>
+</dl>
+
+<p class="note"><strong>Note:</strong>
+Not all Android-powered devices provide NFC functionality.</p>
+</BODY>
+</HTML>
diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java
index a17b7fe..9b57873 100644
--- a/core/java/android/os/FileUtils.java
+++ b/core/java/android/os/FileUtils.java
@@ -91,7 +91,22 @@
* @return volume ID or -1
*/
public static native int getFatVolumeId(String mountPoint);
-
+
+ /**
+ * Perform an fsync on the given FileOutputStream. The stream at this
+ * point must be flushed but not yet closed.
+ */
+ public static boolean sync(FileOutputStream stream) {
+ try {
+ if (stream != null) {
+ stream.getFD().sync();
+ }
+ return true;
+ } catch (IOException e) {
+ }
+ return false;
+ }
+
// copy a file from srcFile to destFile, return true if succeed, return
// false if fail
public static boolean copyFile(File srcFile, File destFile) {
@@ -118,7 +133,7 @@
if (destFile.exists()) {
destFile.delete();
}
- OutputStream out = new FileOutputStream(destFile);
+ FileOutputStream out = new FileOutputStream(destFile);
try {
byte[] buffer = new byte[4096];
int bytesRead;
@@ -126,6 +141,11 @@
out.write(buffer, 0, bytesRead);
}
} finally {
+ out.flush();
+ try {
+ out.getFD().sync();
+ } catch (IOException e) {
+ }
out.close();
}
return true;
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index f695dbb..a718fc6 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -86,6 +86,12 @@
public static final int WIFI_UID = 1010;
/**
+ * Defines the UID/GID for the NFC service process.
+ * @hide
+ */
+ public static final int NFC_UID = 1022;
+
+ /**
* Defines the start of a range of UIDs (and GIDs), going from this
* number to {@link #LAST_APPLICATION_UID} that are reserved for assigning
* to applications.
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java
index 1895cf8..58ed986 100644
--- a/core/java/android/os/Vibrator.java
+++ b/core/java/android/os/Vibrator.java
@@ -16,6 +16,8 @@
package android.os;
+import android.util.Log;
+
/**
* Class that operates the vibrator on the device.
* <p>
@@ -23,6 +25,8 @@
*/
public class Vibrator
{
+ private static final String TAG = "Vibrator";
+
IVibratorService mService;
private final Binder mToken = new Binder();
@@ -40,9 +44,14 @@
*/
public void vibrate(long milliseconds)
{
+ if (mService == null) {
+ Log.w(TAG, "Failed to vibrate; no vibrator service.");
+ return;
+ }
try {
mService.vibrate(milliseconds, mToken);
- } catch (RemoteException e) {
+ } catch (Exception e) {
+ Log.w(TAG, "Failed to vibrate.", e);
}
}
@@ -61,13 +70,18 @@
*/
public void vibrate(long[] pattern, int repeat)
{
+ if (mService == null) {
+ Log.w(TAG, "Failed to vibrate; no vibrator service.");
+ return;
+ }
// catch this here because the server will do nothing. pattern may
// not be null, let that be checked, because the server will drop it
// anyway
if (repeat < pattern.length) {
try {
mService.vibratePattern(pattern, repeat, mToken);
- } catch (RemoteException e) {
+ } catch (Exception e) {
+ Log.w(TAG, "Failed to vibrate.", e);
}
} else {
throw new ArrayIndexOutOfBoundsException();
@@ -79,9 +93,13 @@
*/
public void cancel()
{
+ if (mService == null) {
+ return;
+ }
try {
mService.cancelVibrate(mToken);
} catch (RemoteException e) {
+ Log.w(TAG, "Failed to cancel vibration.", e);
}
}
}
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 7484964..9138da2 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -5543,6 +5543,14 @@
public static final int MODE_LARGE = 3;
/**
+ * Extra used to specify the last selected tab index of the Contacts app.
+ * If this is not given or -1
+ * @hide
+ */
+ public static final String EXTRA_SELECTED_CONTACTS_APP_TAB_INDEX =
+ "SELECTED_TAB_INDEX";
+
+ /**
* Trigger a dialog that lists the various methods of interacting with
* the requested {@link Contacts} entry. This may be based on available
* {@link ContactsContract.Data} rows under that contact, and may also
@@ -5567,6 +5575,16 @@
*/
public static void showQuickContact(Context context, View target, Uri lookupUri, int mode,
String[] excludeMimes) {
+ context.startActivity(getQuickContactIntent(context, target, lookupUri, mode,
+ excludeMimes));
+ }
+
+ /**
+ * Creates the Intent to launch Quick Contacts
+ * @hide
+ */
+ public static Intent getQuickContactIntent(Context context, View target, Uri lookupUri,
+ int mode, String[] excludeMimes) {
// Find location and bounds of target view, adjusting based on the
// assumed local density.
final float appScale = context.getResources().getCompatibilityInfo().applicationScale;
@@ -5580,7 +5598,7 @@
rect.bottom = (int) ((pos[1] + target.getHeight()) * appScale + 0.5f);
// Trigger with obtained rectangle
- showQuickContact(context, rect, lookupUri, mode, excludeMimes);
+ return getQuickContactIntent(context, rect, lookupUri, mode, excludeMimes);
}
/**
@@ -5611,6 +5629,16 @@
*/
public static void showQuickContact(Context context, Rect target, Uri lookupUri, int mode,
String[] excludeMimes) {
+ context.startActivity(getQuickContactIntent(context, target, lookupUri, mode,
+ excludeMimes));
+ }
+
+ /**
+ * Creates the Intent to launch Quick Contacts
+ * @hide
+ */
+ public static Intent getQuickContactIntent(Context context, Rect target, Uri lookupUri,
+ int mode, String[] excludeMimes) {
// Launch pivot dialog through intent for now
final Intent intent = new Intent(ACTION_QUICK_CONTACT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
@@ -5620,7 +5648,7 @@
intent.setSourceBounds(target);
intent.putExtra(EXTRA_MODE, mode);
intent.putExtra(EXTRA_EXCLUDE_MIMES, excludeMimes);
- context.startActivity(intent);
+ return intent;
}
}
diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java
index 5cbfe74..6e221c8 100644
--- a/core/java/android/server/BluetoothA2dpService.java
+++ b/core/java/android/server/BluetoothA2dpService.java
@@ -367,6 +367,11 @@
int state = getSinkState(device);
String path = mBluetoothService.getObjectPathFromAddress(device.getAddress());
+ switch (state) {
+ case BluetoothA2dp.STATE_DISCONNECTED:
+ case BluetoothA2dp.STATE_DISCONNECTING:
+ return false;
+ }
// State is CONNECTING or CONNECTED or PLAYING
handleSinkStateChange(device, state, BluetoothA2dp.STATE_DISCONNECTING);
if (!disconnectSinkNative(path)) {
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 9c4aefe..091844e 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -163,7 +163,8 @@
@ViewDebug.IntToString(from = TYPE_KEYGUARD_DIALOG, to = "TYPE_KEYGUARD_DIALOG"),
@ViewDebug.IntToString(from = TYPE_SYSTEM_ERROR, to = "TYPE_SYSTEM_ERROR"),
@ViewDebug.IntToString(from = TYPE_INPUT_METHOD, to = "TYPE_INPUT_METHOD"),
- @ViewDebug.IntToString(from = TYPE_INPUT_METHOD_DIALOG, to = "TYPE_INPUT_METHOD_DIALOG")
+ @ViewDebug.IntToString(from = TYPE_INPUT_METHOD_DIALOG, to = "TYPE_INPUT_METHOD_DIALOG"),
+ @ViewDebug.IntToString(from = TYPE_SECURE_SYSTEM_OVERLAY, to = "TYPE_SECURE_SYSTEM_OVERLAY")
})
public int type;
@@ -341,7 +342,19 @@
* Window type: panel that slides out from the status bar
*/
public static final int TYPE_STATUS_BAR_PANEL = FIRST_SYSTEM_WINDOW+14;
-
+
+ /**
+ * Window type: secure system overlay windows, which need to be displayed
+ * on top of everything else. These windows must not take input
+ * focus, or they will interfere with the keyguard.
+ *
+ * This is exactly like {@link #TYPE_SYSTEM_OVERLAY} except that only the
+ * system itself is allowed to create these overlays. Applications cannot
+ * obtain permission to create secure system overlays.
+ * @hide
+ */
+ public static final int TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15;
+
/**
* End of types of system windows.
*/
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index a2c80f2..84deeb0 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -71,6 +71,7 @@
// that if the UI thread posts any messages after the message
// queue has been cleared,they are ignored.
private boolean mBlockMessages = false;
+ private int mOrientation = -1;
// Is this frame the main frame?
private boolean mIsMainFrame;
@@ -473,7 +474,10 @@
}
case ORIENTATION_CHANGED: {
- nativeOrientationChanged(msg.arg1);
+ if (mOrientation != msg.arg1) {
+ mOrientation = msg.arg1;
+ nativeOrientationChanged(msg.arg1);
+ }
break;
}
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java
new file mode 100644
index 0000000..d292881
--- /dev/null
+++ b/core/java/android/webkit/HTML5Audio.java
@@ -0,0 +1,224 @@
+/*
+ * 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 android.webkit;
+
+import android.media.MediaPlayer;
+import android.media.MediaPlayer.OnBufferingUpdateListener;
+import android.media.MediaPlayer.OnCompletionListener;
+import android.media.MediaPlayer.OnErrorListener;
+import android.media.MediaPlayer.OnPreparedListener;
+import android.media.MediaPlayer.OnSeekCompleteListener;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+
+import java.io.IOException;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * <p>HTML5 support class for Audio.
+ */
+class HTML5Audio extends Handler
+ implements MediaPlayer.OnBufferingUpdateListener,
+ MediaPlayer.OnCompletionListener,
+ MediaPlayer.OnErrorListener,
+ MediaPlayer.OnPreparedListener,
+ MediaPlayer.OnSeekCompleteListener {
+ // Logging tag.
+ private static final String LOGTAG = "HTML5Audio";
+
+ private MediaPlayer mMediaPlayer;
+
+ // The C++ MediaPlayerPrivateAndroid object.
+ private int mNativePointer;
+
+ private static int IDLE = 0;
+ private static int INITIALIZED = 1;
+ private static int PREPARED = 2;
+ private static int STARTED = 4;
+ private static int COMPLETE = 5;
+ private static int PAUSED = 6;
+ private static int STOPPED = -2;
+ private static int ERROR = -1;
+
+ private int mState = IDLE;
+
+ private String mUrl;
+ private boolean mAskToPlay = false;
+
+ // Timer thread -> UI thread
+ private static final int TIMEUPDATE = 100;
+
+ // The spec says the timer should fire every 250 ms or less.
+ private static final int TIMEUPDATE_PERIOD = 250; // ms
+ // The timer for timeupate events.
+ // See http://www.whatwg.org/specs/web-apps/current-work/#event-media-timeupdate
+ private Timer mTimer;
+ private final class TimeupdateTask extends TimerTask {
+ public void run() {
+ HTML5Audio.this.obtainMessage(TIMEUPDATE).sendToTarget();
+ }
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case TIMEUPDATE: {
+ try {
+ if (mState != ERROR && mMediaPlayer.isPlaying()) {
+ int position = mMediaPlayer.getCurrentPosition();
+ nativeOnTimeupdate(position, mNativePointer);
+ }
+ } catch (IllegalStateException e) {
+ mState = ERROR;
+ }
+ }
+ }
+ }
+
+ // event listeners for MediaPlayer
+ // Those are called from the same thread we created the MediaPlayer
+ // (i.e. the webviewcore thread here)
+
+ // MediaPlayer.OnBufferingUpdateListener
+ public void onBufferingUpdate(MediaPlayer mp, int percent) {
+ nativeOnBuffering(percent, mNativePointer);
+ }
+
+ // MediaPlayer.OnCompletionListener;
+ public void onCompletion(MediaPlayer mp) {
+ resetMediaPlayer();
+ mState = IDLE;
+ nativeOnEnded(mNativePointer);
+ }
+
+ // MediaPlayer.OnErrorListener
+ public boolean onError(MediaPlayer mp, int what, int extra) {
+ mState = ERROR;
+ resetMediaPlayer();
+ mState = IDLE;
+ return false;
+ }
+
+ // MediaPlayer.OnPreparedListener
+ public void onPrepared(MediaPlayer mp) {
+ mState = PREPARED;
+ if (mTimer != null) {
+ mTimer.schedule(new TimeupdateTask(),
+ TIMEUPDATE_PERIOD, TIMEUPDATE_PERIOD);
+ }
+ nativeOnPrepared(mp.getDuration(), 0, 0, mNativePointer);
+ if (mAskToPlay) {
+ mAskToPlay = false;
+ play();
+ }
+ }
+
+ // MediaPlayer.OnSeekCompleteListener
+ public void onSeekComplete(MediaPlayer mp) {
+ nativeOnTimeupdate(mp.getCurrentPosition(), mNativePointer);
+ }
+
+
+ /**
+ * @param nativePtr is the C++ pointer to the MediaPlayerPrivate object.
+ */
+ public HTML5Audio(int nativePtr) {
+ // Save the native ptr
+ mNativePointer = nativePtr;
+ resetMediaPlayer();
+ }
+
+ private void resetMediaPlayer() {
+ if (mMediaPlayer == null) {
+ mMediaPlayer = new MediaPlayer();
+ } else {
+ mMediaPlayer.reset();
+ }
+ mMediaPlayer.setOnBufferingUpdateListener(this);
+ mMediaPlayer.setOnCompletionListener(this);
+ mMediaPlayer.setOnErrorListener(this);
+ mMediaPlayer.setOnPreparedListener(this);
+ mMediaPlayer.setOnSeekCompleteListener(this);
+
+ if (mTimer != null) {
+ mTimer.cancel();
+ }
+ mTimer = new Timer();
+ mState = IDLE;
+ }
+
+ private void setDataSource(String url) {
+ mUrl = url;
+ try {
+ if (mState != IDLE) {
+ resetMediaPlayer();
+ }
+ mMediaPlayer.setDataSource(url);
+ mState = INITIALIZED;
+ mMediaPlayer.prepareAsync();
+ } catch (IOException e) {
+ Log.e(LOGTAG, "couldn't load the resource: " + url + " exc: " + e);
+ resetMediaPlayer();
+ }
+ }
+
+ private void play() {
+ if ((mState == ERROR || mState == IDLE) && mUrl != null) {
+ resetMediaPlayer();
+ setDataSource(mUrl);
+ mAskToPlay = true;
+ }
+
+ if (mState >= PREPARED) {
+ mMediaPlayer.start();
+ mState = STARTED;
+ }
+ }
+
+ private void pause() {
+ if (mState == STARTED) {
+ if (mTimer != null) {
+ mTimer.purge();
+ }
+ mMediaPlayer.pause();
+ mState = PAUSED;
+ }
+ }
+
+ private void seek(int msec) {
+ if (mState >= PREPARED) {
+ mMediaPlayer.seekTo(msec);
+ }
+ }
+
+ private void teardown() {
+ mMediaPlayer.release();
+ mState = ERROR;
+ mNativePointer = 0;
+ }
+
+ private float getMaxTimeSeekable() {
+ return mMediaPlayer.getDuration() / 1000.0f;
+ }
+
+ private native void nativeOnBuffering(int percent, int nativePointer);
+ private native void nativeOnEnded(int nativePointer);
+ private native void nativeOnPrepared(int duration, int width, int height, int nativePointer);
+ private native void nativeOnTimeupdate(int position, int nativePointer);
+}
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index e82ed9f..f7afdb9 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -288,6 +288,21 @@
return ptr == mNodePointer;
}
+ /**
+ * Ensure that the underlying textfield is lined up with the WebTextView.
+ */
+ private void lineUpScroll() {
+ if (mWebView != null) {
+ float maxScrollX = Touch.getMaxScrollX(this, getLayout(), mScrollY);
+ if (DebugFlags.WEB_TEXT_VIEW) {
+ Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y="
+ + mScrollY + " maxX=" + maxScrollX);
+ }
+ mWebView.scrollFocusedTextInput(maxScrollX > 0 ?
+ mScrollX / maxScrollX : 0, mScrollY);
+ }
+ }
+
@Override public InputConnection onCreateInputConnection(
EditorInfo outAttrs) {
InputConnection connection = super.onCreateInputConnection(outAttrs);
@@ -359,6 +374,12 @@
}
@Override
+ protected void onScrollChanged(int l, int t, int oldl, int oldt) {
+ super.onScrollChanged(l, t, oldl, oldt);
+ lineUpScroll();
+ }
+
+ @Override
protected void onSelectionChanged(int selStart, int selEnd) {
if (mInSetTextAndKeepSelection) return;
// This code is copied from TextView.onDraw(). That code does not get
@@ -378,6 +399,7 @@
+ " selEnd=" + selEnd);
}
mWebView.setSelection(selStart, selEnd);
+ lineUpScroll();
}
}
@@ -481,16 +503,7 @@
// to big for the case of a small textfield.
int smallerSlop = slop/2;
if (dx > smallerSlop || dy > smallerSlop) {
- if (mWebView != null) {
- float maxScrollX = (float) Touch.getMaxScrollX(this,
- getLayout(), mScrollY);
- if (DebugFlags.WEB_TEXT_VIEW) {
- Log.v(LOGTAG, "onTouchEvent x=" + mScrollX + " y="
- + mScrollY + " maxX=" + maxScrollX);
- }
- mWebView.scrollFocusedTextInput(maxScrollX > 0 ?
- mScrollX / maxScrollX : 0, mScrollY);
- }
+ // Scrolling is handled in onScrollChanged.
mScrolled = true;
cancelLongPress();
return true;
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index bf4d95b..f54b207 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -28,6 +28,7 @@
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Region;
+import android.media.MediaFile;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
@@ -255,6 +256,13 @@
return mSettings;
}
+ /*
+ * Given mimeType, check whether it's supported in Android media framework.
+ * mimeType could be such as "audio/ogg" and "video/mp4".
+ */
+ /* package */ static boolean supportsMimeType(String mimeType) {
+ return MediaFile.getFileTypeForMimeType(mimeType) > 0;
+ }
/**
* Add an error message to the client's console.
* @param message The message to add
diff --git a/core/java/android/widget/QuickContactBadge.java b/core/java/android/widget/QuickContactBadge.java
index 4bbb540..e7d44a0 100644
--- a/core/java/android/widget/QuickContactBadge.java
+++ b/core/java/android/widget/QuickContactBadge.java
@@ -48,6 +48,7 @@
private QueryHandler mQueryHandler;
private Drawable mBadgeBackground;
private Drawable mNoBadgeBackground;
+ private int mSelectedContactsAppTabIndex = -1;
protected String[] mExcludeMimes = null;
@@ -133,6 +134,15 @@
onContactUriChanged();
}
+ /**
+ * Sets the currently selected tab of the Contacts application. If not set, this is -1
+ * and therefore does not save a tab selection when a phone call is being made
+ * @hide
+ */
+ public void setSelectedContactsAppTabIndex(int value) {
+ mSelectedContactsAppTabIndex = value;
+ }
+
private void onContactUriChanged() {
if (mContactUri == null && mContactEmail == null && mContactPhone == null) {
if (mNoBadgeBackground == null) {
@@ -215,7 +225,13 @@
}
private void trigger(Uri lookupUri) {
- QuickContact.showQuickContact(getContext(), this, lookupUri, mMode, mExcludeMimes);
+ final Intent intent = QuickContact.getQuickContactIntent(getContext(), this, lookupUri,
+ mMode, mExcludeMimes);
+ if (mSelectedContactsAppTabIndex != -1) {
+ intent.putExtra(QuickContact.EXTRA_SELECTED_CONTACTS_APP_TAB_INDEX,
+ mSelectedContactsAppTabIndex);
+ }
+ getContext().startActivity(intent);
}
private class QueryHandler extends AsyncQueryHandler {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 6dcf4e6..d719783 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -2956,6 +2956,25 @@
if (imm != null) imm.restartInput(this);
}
+ /**
+ * It would be better to rely on the input type for everything. A password inputType should have
+ * a password transformation. We should hence use isPasswordInputType instead of this method.
+ *
+ * We should:
+ * - Call setInputType in setKeyListener instead of changing the input type directly (which
+ * would install the correct transformation).
+ * - Refuse the installation of a non-password transformation in setTransformation if the input
+ * type is password.
+ *
+ * However, this is like this for legacy reasons and we cannot break existing apps. This method
+ * is useful since it matches what the user can see (obfuscated text or not).
+ *
+ * @return true if the current transformation method is of the password type.
+ */
+ private boolean hasPasswordTransformationMethod() {
+ return mTransformation instanceof PasswordTransformationMethod;
+ }
+
private boolean isPasswordInputType(int inputType) {
final int variation = inputType & (EditorInfo.TYPE_MASK_CLASS
| EditorInfo.TYPE_MASK_VARIATION);
@@ -4447,6 +4466,7 @@
}
hideControllers();
+ stopTextSelectionMode();
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
@@ -7134,7 +7154,7 @@
}
private boolean canCut() {
- if (mTransformation instanceof PasswordTransformationMethod) {
+ if (hasPasswordTransformationMethod()) {
return false;
}
@@ -7148,7 +7168,7 @@
}
private boolean canCopy() {
- if (mTransformation instanceof PasswordTransformationMethod) {
+ if (hasPasswordTransformationMethod()) {
return false;
}
@@ -7397,8 +7417,13 @@
MenuHandler handler = new MenuHandler();
if (canSelectText()) {
- menu.add(0, ID_START_SELECTING_TEXT, 0, com.android.internal.R.string.selectText).
- setOnMenuItemClickListener(handler);
+ if (!hasPasswordTransformationMethod()) {
+ // selectCurrentWord is not available on a password field and would return an
+ // arbitrary 10-charater selection around pressed position. Discard it.
+ // SelectAll is still useful to be able to clear the field using the delete key.
+ menu.add(0, ID_START_SELECTING_TEXT, 0, com.android.internal.R.string.selectText).
+ setOnMenuItemClickListener(handler);
+ }
menu.add(0, ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll).
setOnMenuItemClickListener(handler).
setAlphabeticShortcut('a');
diff --git a/core/java/com/android/internal/app/ShutdownThread.java b/core/java/com/android/internal/app/ShutdownThread.java
index 714b259..1fcd654 100644
--- a/core/java/com/android/internal/app/ShutdownThread.java
+++ b/core/java/com/android/internal/app/ShutdownThread.java
@@ -364,7 +364,7 @@
// vibrator is asynchronous so we need to wait to avoid shutting down too soon.
try {
Thread.sleep(SHUTDOWN_VIBRATE_MS);
- } catch (InterruptedException e) {
+ } catch (InterruptedException unused) {
}
}
diff --git a/core/java/com/trustedlogic/trustednfc/android/LlcpConnectionlessSocket.java b/core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java
similarity index 87%
rename from core/java/com/trustedlogic/trustednfc/android/LlcpConnectionlessSocket.java
rename to core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java
index eccdeb13..a9cf6b8 100644
--- a/core/java/com/trustedlogic/trustednfc/android/LlcpConnectionlessSocket.java
+++ b/core/java/com/android/internal/nfc/LlcpConnectionlessSocket.java
@@ -14,48 +14,28 @@
* limitations under the License.
*/
-/**
- * File : LlcpConnectionLessSocket.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
import android.nfc.ErrorCodes;
import android.nfc.ILlcpConnectionlessSocket;
import android.nfc.LlcpPacket;
-
import android.os.RemoteException;
import android.util.Log;
-/**
- * LlcpConnectionlessSocket represents a LLCP Connectionless object to be used
- * in a connectionless communication
- *
- * @since AA02.01
- * @hide
- */
public class LlcpConnectionlessSocket {
-
-
private static final String TAG = "LlcpConnectionlessSocket";
/**
* The handle returned by the NFC service and used to identify the LLCP connectionless socket in
* every call of this class.
- *
- * @hide
*/
protected int mHandle;
/**
* The entry point for LLCP Connectionless socket operations.
- *
- * @hide
*/
protected ILlcpConnectionlessSocket mService;
@@ -66,7 +46,6 @@
* @param service The entry point to the Nfc Service for LLCP Connectionless socket class.
* @param handle The handle returned by the NFC service and used to identify
* the socket in subsequent calls.
- * @hide
*/
LlcpConnectionlessSocket(ILlcpConnectionlessSocket service, int handle) {
this.mService = service;
@@ -79,7 +58,6 @@
* @param packet Service Access Point number related to a LLCP
* Connectionless client and a data buffer to send
* @throws IOException if the LLCP link has been lost or deactivated.
- * @since AA02.01
*/
public void sendTo(LlcpPacket packet) throws IOException {
try {
@@ -99,7 +77,6 @@
* @return data data received from a specific LLCP Connectionless client
* @throws IOException if the LLCP link has been lost or deactivated.
* @see LlcpPacket
- * @since AA02.01
*/
public LlcpPacket receiveFrom() throws IOException {
try {
@@ -118,8 +95,6 @@
/**
* Close the created Connectionless socket.
- *
- * @since AA02.01
*/
public void close() {
try {
@@ -133,7 +108,6 @@
* Returns the local Service Access Point number of the socket
*
* @return sap
- * @since AA02.01
*/
public int getSap() {
int sap = 0;
diff --git a/core/java/com/trustedlogic/trustednfc/android/LlcpException.java b/core/java/com/android/internal/nfc/LlcpException.java
similarity index 82%
rename from core/java/com/trustedlogic/trustednfc/android/LlcpException.java
rename to core/java/com/android/internal/nfc/LlcpException.java
index 1e2e2da..da4e91e 100644
--- a/core/java/com/trustedlogic/trustednfc/android/LlcpException.java
+++ b/core/java/com/android/internal/nfc/LlcpException.java
@@ -14,20 +14,11 @@
* limitations under the License.
*/
-/**
- * File : LLCPException.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 24-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
/**
* Generic exception thrown in case something unexpected happened during a
* LLCP communication.
- *
- * @since AA02.01
- * @hide
*/
public class LlcpException extends Exception {
/**
diff --git a/core/java/com/trustedlogic/trustednfc/android/LlcpServiceSocket.java b/core/java/com/android/internal/nfc/LlcpServiceSocket.java
similarity index 92%
rename from core/java/com/trustedlogic/trustednfc/android/LlcpServiceSocket.java
rename to core/java/com/android/internal/nfc/LlcpServiceSocket.java
index 1bdf72f..4607527 100644
--- a/core/java/com/trustedlogic/trustednfc/android/LlcpServiceSocket.java
+++ b/core/java/com/android/internal/nfc/LlcpServiceSocket.java
@@ -14,29 +14,19 @@
* limitations under the License.
*/
-/**
- * File : LLCPServerSocket.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
import android.nfc.ErrorCodes;
import android.nfc.ILlcpSocket;
import android.nfc.ILlcpServiceSocket;
-
import android.os.RemoteException;
import android.util.Log;
/**
* LlcpServiceSocket represents a LLCP Service to be used in a
* Connection-oriented communication
- *
- * @since AA02.01
- * @hide
*/
public class LlcpServiceSocket {
@@ -45,15 +35,11 @@
/**
* The handle returned by the NFC service and used to identify the LLCP
* Service socket in every call of this class.
- *
- * @hide
*/
protected int mHandle;
/**
* The entry point for LLCP Service socket operations.
- *
- * @hide
*/
protected ILlcpServiceSocket mService;
@@ -92,7 +78,6 @@
* @param handle
* The handle returned by the NFC service and used to identify
* the socket in subsequent calls.
- * @hide
*/
LlcpServiceSocket(ILlcpServiceSocket service, ILlcpSocket socketService, int handle) {
this.mService = service;
@@ -112,7 +97,6 @@
* if not enough ressources are available
*
* @see LlcpSocket
- * @since AA02.01
*/
public LlcpSocket accept() throws IOException, LlcpException {
@@ -141,7 +125,6 @@
*
* @param timeout
* value of the timeout for the accept request
- * @since AA02.01
*/
public void setAcceptTimeout(int timeout) {
try {
@@ -155,7 +138,6 @@
* Get the timeout value of the accept request
*
* @return mTimeout
- * @since AA02.01
*/
public int getAcceptTimeout() {
try {
@@ -168,8 +150,6 @@
/**
* Close the created Llcp Service socket
- *
- * @since AA02.01
*/
public void close() {
try {
@@ -178,5 +158,4 @@
Log.e(TAG, "RemoteException in close(): ", e);
}
}
-
}
diff --git a/core/java/com/trustedlogic/trustednfc/android/LlcpSocket.java b/core/java/com/android/internal/nfc/LlcpSocket.java
similarity index 94%
rename from core/java/com/trustedlogic/trustednfc/android/LlcpSocket.java
rename to core/java/com/android/internal/nfc/LlcpSocket.java
index ebde3e1..ae74002 100644
--- a/core/java/com/trustedlogic/trustednfc/android/LlcpSocket.java
+++ b/core/java/com/android/internal/nfc/LlcpSocket.java
@@ -14,28 +14,18 @@
* limitations under the License.
*/
-/**
- * File : LlcpClientSocket.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
import android.nfc.ErrorCodes;
import android.nfc.ILlcpSocket;
-
import android.os.RemoteException;
import android.util.Log;
/**
* LlcpClientSocket represents a LLCP Connection-Oriented client to be used in a
* connection-oriented communication
- *
- * @since AA02.01
- * @hide
*/
public class LlcpSocket {
@@ -44,15 +34,11 @@
/**
* The handle returned by the NFC service and used to identify the LLCP
* socket in every call of this class.
- *
- * @hide
*/
protected int mHandle;
/**
* The entry point for LLCP socket operations.
- *
- * @hide
*/
protected ILlcpSocket mService;
@@ -92,7 +78,6 @@
* @param handle
* The handle returned by the NFC service and used to identify
* the socket in subsequent calls.
- * @hide
*/
LlcpSocket(ILlcpSocket service, int handle) {
this.mService = service;
@@ -109,7 +94,6 @@
* @throws LlcpException
* if the connection request is rejected by the remote LLCP
* Service
- * @since AA02.01
*/
public void connect(int sap) throws IOException, LlcpException {
try {
@@ -137,7 +121,6 @@
* @throws LlcpException
* if the connection request is rejected by the remote LLCP
* Service
- * @since AA02.01
*/
public void connect(String sn) throws IOException, LlcpException {
try {
@@ -160,7 +143,6 @@
*
* @param timeout
* timeout value for the connect request
- * @since AA02.01
*/
public void setConnectTimeout(int timeout) {
try {
@@ -174,7 +156,6 @@
* Get the timeout value of the connect request
*
* @return mTimeout
- * @since AA02.01
*/
public int getConnectTimeout() {
try {
@@ -191,7 +172,6 @@
*
* @throws IOException
* if the LLCP has been lost or deactivated.
- * @since AA02.01
*/
public void close() throws IOException {
try {
@@ -210,7 +190,6 @@
*
* @throws IOException
* if the LLCP has been lost or deactivated.
- * @since AA02.01
*/
public void send(byte[] data) throws IOException {
try {
@@ -232,7 +211,6 @@
* @return length length of the data received
* @throws IOException
* if the LLCP has been lost or deactivated.
- * @since AA02.01
*/
public int receive(byte[] receiveBuffer) throws IOException {
int receivedLength = 0;
@@ -252,7 +230,6 @@
* Returns the local Service Access Point number of the socket
*
* @return localSap
- * @since AA02.01
*/
public int getLocalSap() {
try {
@@ -267,7 +244,6 @@
* Returns the local Maximum Information Unit(MIU) of the socket
*
* @return miu
- * @since AA02.01
*/
public int getLocalSocketMiu() {
try {
@@ -282,7 +258,6 @@
* Returns the local Receive Window(RW) of the socket
*
* @return rw
- * @since AA02.01
*/
public int getLocalSocketRw() {
try {
@@ -301,7 +276,6 @@
* @return remoteMiu
* @throws LlcpException
* if the LlcpClientSocket is not in a CONNECTED_STATE
- * @since AA02.01
*/
public int getRemoteSocketMiu() throws LlcpException {
try {
@@ -325,7 +299,6 @@
* @return rw
* @throws LlcpException
* if the LlcpClientSocket is not in a CONNECTED_STATE
- * @since AA02.01
*/
public int getRemoteSocketRw() throws LlcpException {
try {
@@ -340,6 +313,4 @@
return 0;
}
}
-
-
}
diff --git a/core/java/com/trustedlogic/trustednfc/android/NfcException.java b/core/java/com/android/internal/nfc/NfcException.java
similarity index 82%
rename from core/java/com/trustedlogic/trustednfc/android/NfcException.java
rename to core/java/com/android/internal/nfc/NfcException.java
index 2497c15..29a99c6 100644
--- a/core/java/com/trustedlogic/trustednfc/android/NfcException.java
+++ b/core/java/com/android/internal/nfc/NfcException.java
@@ -14,20 +14,11 @@
* limitations under the License.
*/
-/**
- * File : NFCException.java
- * Original-Author : Trusted Logic S.A. (Jeremie Corbier)
- * Created : 26-08-2009
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
/**
* Generic exception thrown in case something unexpected happened during the
* NFCManager operations.
- *
- * @since AA01.04
- * @hide
*/
public class NfcException extends Exception {
/**
diff --git a/core/java/com/trustedlogic/trustednfc/android/P2pDevice.java b/core/java/com/android/internal/nfc/P2pDevice.java
similarity index 89%
rename from core/java/com/trustedlogic/trustednfc/android/P2pDevice.java
rename to core/java/com/android/internal/nfc/P2pDevice.java
index 65800f2..8ab9aad 100644
--- a/core/java/com/trustedlogic/trustednfc/android/P2pDevice.java
+++ b/core/java/com/android/internal/nfc/P2pDevice.java
@@ -14,20 +14,13 @@
* limitations under the License.
*/
-/**
- * File : P2PDevice.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- * Created : 26-02-2010
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
/**
* P2pDevice is the abstract base class for all supported P2P targets the
* NfcManager can handle.
- * @hide
*/
public abstract class P2pDevice {
@@ -48,19 +41,16 @@
/**
* Target handle, used by native calls.
- * @hide
*/
protected int mHandle;
/**
* Flag set when the object is closed and thus not usable any more.
- * @hide
*/
protected boolean isClosed = false;
/**
* Prevent default constructor to be public.
- * @hide
*/
protected P2pDevice() {
}
diff --git a/core/java/com/trustedlogic/trustednfc/android/P2pInitiator.java b/core/java/com/android/internal/nfc/P2pInitiator.java
similarity index 92%
rename from core/java/com/trustedlogic/trustednfc/android/P2pInitiator.java
rename to core/java/com/android/internal/nfc/P2pInitiator.java
index 6b93bce..46ae9ab 100644
--- a/core/java/com/trustedlogic/trustednfc/android/P2pInitiator.java
+++ b/core/java/com/android/internal/nfc/P2pInitiator.java
@@ -14,12 +14,7 @@
* limitations under the License.
*/
-/**
- * File : P2PInitiator.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
@@ -32,8 +27,6 @@
* communication.
*
* @see P2pTarget
- * @since AA02.01
- * @hide
*/
public class P2pInitiator extends P2pDevice {
@@ -41,7 +34,6 @@
/**
* The entry point for P2P tag operations.
- * @hide
*/
private final IP2pInitiator mService;
@@ -50,8 +42,6 @@
*
* @param handle The handle returned by the NFC service and used to identify
* the tag in subsequent calls.
- *
- * @hide
*/
P2pInitiator(IP2pInitiator service, int handle) {
this.mService = service;
diff --git a/core/java/com/trustedlogic/trustednfc/android/P2pTarget.java b/core/java/com/android/internal/nfc/P2pTarget.java
similarity index 94%
rename from core/java/com/trustedlogic/trustednfc/android/P2pTarget.java
rename to core/java/com/android/internal/nfc/P2pTarget.java
index aa9e94f..7b59da3 100644
--- a/core/java/com/trustedlogic/trustednfc/android/P2pTarget.java
+++ b/core/java/com/android/internal/nfc/P2pTarget.java
@@ -14,12 +14,7 @@
* limitations under the License.
*/
-/**
- * File : P2PTarget.java
- * Original-Author : Trusted Logic S.A. (Daniel Tomas)
- */
-
-package com.trustedlogic.trustednfc.android;
+package com.android.internal.nfc;
import java.io.IOException;
@@ -32,8 +27,6 @@
* P2pTarget represents the target in an NFC-IP1 peer-to-peer communication.
*
* @see P2pInitiator
- * @since AA02.01
- * @hide
*/
public class P2pTarget extends P2pDevice {
@@ -41,19 +34,16 @@
/**
* The entry point for P2P tag operations.
- * @hide
*/
private final IP2pTarget mService;
/**
* Flag set when the object is closed and thus not usable any more.
- * @hide
*/
private final boolean isClosed = false;
/**
* Flag set when the tag is connected.
- * @hide
*/
private boolean isConnected = false;
@@ -62,8 +52,6 @@
*
* @return data sent by the P2pInitiator.
* @throws NfcException if accessing a closed target.
- *
- * @hide
*/
public void checkState() throws NfcException {
if(isClosed) {
@@ -76,8 +64,6 @@
*
* @param handle The handle returned by the NFC service and used to identify
* the tag in subsequent calls.
- *
- * @hide
*/
P2pTarget(IP2pTarget service, int handle) {
this.mService = service;
@@ -181,5 +167,4 @@
public int getMode() {
return P2pDevice.MODE_P2P_TARGET;
}
-
}
diff --git a/core/java/com/android/internal/os/AtomicFile.java b/core/java/com/android/internal/os/AtomicFile.java
index e675ef0..b093977 100644
--- a/core/java/com/android/internal/os/AtomicFile.java
+++ b/core/java/com/android/internal/os/AtomicFile.java
@@ -77,6 +77,7 @@
public void finishWrite(FileOutputStream str) {
if (str != null) {
+ FileUtils.sync(str);
try {
str.close();
mBackupName.delete();
@@ -88,6 +89,7 @@
public void failWrite(FileOutputStream str) {
if (str != null) {
+ FileUtils.sync(str);
try {
str.close();
mBaseName.delete();
@@ -109,6 +111,7 @@
public void truncate() throws IOException {
try {
FileOutputStream fos = new FileOutputStream(mBaseName);
+ FileUtils.sync(fos);
fos.close();
} catch (FileNotFoundException e) {
throw new IOException("Couldn't append " + mBaseName);
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index a9e5052..36acb85 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -22,6 +22,7 @@
import android.net.TrafficStats;
import android.os.BatteryManager;
import android.os.BatteryStats;
+import android.os.FileUtils;
import android.os.Handler;
import android.os.Message;
import android.os.Parcel;
@@ -4482,6 +4483,7 @@
FileOutputStream stream = new FileOutputStream(mFile.chooseForWrite());
stream.write(next.marshall());
stream.flush();
+ FileUtils.sync(stream);
stream.close();
mFile.commit();
} catch (IOException e) {
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index a409ec8..397ae60 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -563,6 +563,8 @@
public static void main(String argv[]) {
try {
+ VMRuntime.getRuntime().setMinimumHeapSize(5 * 1024 * 1024);
+
// Start profiling the zygote initialization.
SamplingProfilerIntegration.start();
diff --git a/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java b/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
new file mode 100644
index 0000000..965022e
--- /dev/null
+++ b/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
@@ -0,0 +1,228 @@
+package com.android.internal.os.storage;
+
+import android.app.ProgressDialog;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Environment;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.storage.IMountService;
+import android.os.storage.StorageEventListener;
+import android.os.storage.StorageManager;
+import android.util.Log;
+import android.view.WindowManager;
+import android.widget.Toast;
+
+import com.android.internal.R;
+
+/**
+ * Takes care of unmounting and formatting external storage.
+ */
+public class ExternalStorageFormatter extends Service
+ implements DialogInterface.OnCancelListener {
+ static final String TAG = "ExternalStorageFormatter";
+
+ public static final String FORMAT_ONLY = "com.android.internal.os.storage.FORMAT_ONLY";
+ public static final String FORMAT_AND_FACTORY_RESET = "com.android.internal.os.storage.FORMAT_AND_FACTORY_RESET";
+
+ public static final String EXTRA_ALWAYS_RESET = "always_reset";
+
+ public static final ComponentName COMPONENT_NAME
+ = new ComponentName("android", ExternalStorageFormatter.class.getName());
+
+ // Access using getMountService()
+ private IMountService mMountService = null;
+
+ private StorageManager mStorageManager = null;
+
+ private PowerManager.WakeLock mWakeLock;
+
+ private ProgressDialog mProgressDialog = null;
+
+ private boolean mFactoryReset = false;
+ private boolean mAlwaysReset = false;
+
+ StorageEventListener mStorageListener = new StorageEventListener() {
+ @Override
+ public void onStorageStateChanged(String path, String oldState, String newState) {
+ Log.i(TAG, "Received storage state changed notification that " +
+ path + " changed state from " + oldState +
+ " to " + newState);
+ updateProgressState();
+ }
+ };
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ if (mStorageManager == null) {
+ mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
+ mStorageManager.registerListener(mStorageListener);
+ }
+
+ mWakeLock = ((PowerManager)getSystemService(Context.POWER_SERVICE))
+ .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ExternalStorageFormatter");
+ mWakeLock.acquire();
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ if (FORMAT_AND_FACTORY_RESET.equals(intent.getAction())) {
+ mFactoryReset = true;
+ }
+ if (intent.getBooleanExtra(EXTRA_ALWAYS_RESET, false)) {
+ mAlwaysReset = true;
+ }
+
+ if (mProgressDialog == null) {
+ mProgressDialog = new ProgressDialog(this);
+ mProgressDialog.setIndeterminate(true);
+ mProgressDialog.setCancelable(true);
+ mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+ if (!mAlwaysReset) {
+ mProgressDialog.setOnCancelListener(this);
+ }
+ updateProgressState();
+ mProgressDialog.show();
+ }
+
+ return Service.START_REDELIVER_INTENT;
+ }
+
+ @Override
+ public void onDestroy() {
+ if (mStorageManager != null) {
+ mStorageManager.unregisterListener(mStorageListener);
+ }
+ if (mProgressDialog != null) {
+ mProgressDialog.dismiss();
+ }
+ mWakeLock.release();
+ super.onDestroy();
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ IMountService mountService = getMountService();
+ String extStoragePath = Environment.getExternalStorageDirectory().toString();
+ try {
+ mountService.mountVolume(extStoragePath);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with mount service", e);
+ }
+ stopSelf();
+ }
+
+ void fail(int msg) {
+ Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
+ if (mAlwaysReset) {
+ sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
+ }
+ stopSelf();
+ }
+
+ void updateProgressState() {
+ String status = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(status)
+ || Environment.MEDIA_MOUNTED_READ_ONLY.equals(status)) {
+ updateProgressDialog(R.string.progress_unmounting);
+ IMountService mountService = getMountService();
+ String extStoragePath = Environment.getExternalStorageDirectory().toString();
+ try {
+ mountService.unmountVolume(extStoragePath, true);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with mount service", e);
+ }
+ } else if (Environment.MEDIA_NOFS.equals(status)
+ || Environment.MEDIA_UNMOUNTED.equals(status)
+ || Environment.MEDIA_UNMOUNTABLE.equals(status)) {
+ updateProgressDialog(R.string.progress_erasing);
+ final IMountService mountService = getMountService();
+ final String extStoragePath = Environment.getExternalStorageDirectory().toString();
+ if (mountService != null) {
+ new Thread() {
+ public void run() {
+ boolean success = false;
+ try {
+ mountService.formatVolume(extStoragePath);
+ success = true;
+ } catch (Exception e) {
+ Toast.makeText(ExternalStorageFormatter.this,
+ R.string.format_error, Toast.LENGTH_LONG).show();
+ }
+ if (success) {
+ if (mFactoryReset) {
+ sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
+ // Intent handling is asynchronous -- assume it will happen soon.
+ stopSelf();
+ return;
+ }
+ }
+ // If we didn't succeed, or aren't doing a full factory
+ // reset, then it is time to remount the storage.
+ if (!success && mAlwaysReset) {
+ sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR"));
+ } else {
+ try {
+ mountService.mountVolume(extStoragePath);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with mount service", e);
+ }
+ }
+ stopSelf();
+ return;
+ }
+ }.start();
+ } else {
+ Log.w("MediaFormat", "Unable to locate IMountService");
+ }
+ } else if (Environment.MEDIA_BAD_REMOVAL.equals(status)) {
+ fail(R.string.media_bad_removal);
+ } else if (Environment.MEDIA_CHECKING.equals(status)) {
+ fail(R.string.media_checking);
+ } else if (Environment.MEDIA_REMOVED.equals(status)) {
+ fail(R.string.media_removed);
+ } else if (Environment.MEDIA_SHARED.equals(status)) {
+ fail(R.string.media_shared);
+ } else {
+ fail(R.string.media_unknown_state);
+ Log.w(TAG, "Unknown storage state: " + status);
+ stopSelf();
+ }
+ }
+
+ public void updateProgressDialog(int msg) {
+ if (mProgressDialog == null) {
+ mProgressDialog = new ProgressDialog(this);
+ mProgressDialog.setIndeterminate(true);
+ mProgressDialog.setCancelable(false);
+ mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+ mProgressDialog.show();
+ }
+
+ mProgressDialog.setMessage(getText(msg));
+ }
+
+ IMountService getMountService() {
+ if (mMountService == null) {
+ IBinder service = ServiceManager.getService("mount");
+ if (service != null) {
+ mMountService = IMountService.Stub.asInterface(service);
+ } else {
+ Log.e(TAG, "Can't get mount service");
+ }
+ }
+ return mMountService;
+ }
+}
diff --git a/core/java/com/android/internal/widget/ContactHeaderWidget.java b/core/java/com/android/internal/widget/ContactHeaderWidget.java
index f421466..4392113 100644
--- a/core/java/com/android/internal/widget/ContactHeaderWidget.java
+++ b/core/java/com/android/internal/widget/ContactHeaderWidget.java
@@ -332,6 +332,13 @@
}
/**
+ * @hide
+ */
+ public void setSelectedContactsAppTabIndex(int value) {
+ mPhotoView.setSelectedContactsAppTabIndex(value);
+ }
+
+ /**
* Turn on/off showing of the aggregate badge element.
*/
public void showAggregateBadge(boolean showBagde) {
diff --git a/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpConnectionlessSocket.java b/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpConnectionlessSocket.java
deleted file mode 100644
index eff01b6..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpConnectionlessSocket.java
+++ /dev/null
@@ -1,68 +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.
- */
-
-/**
- * File : NativeLlcpConnectionLessSocket.java
- * Original-Author : Trusted Logic S.A. (Sylvain Fonteneau)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android.internal;
-
-import android.nfc.LlcpPacket;
-
-/**
- * LlcpConnectionlessSocket represents a LLCP Connectionless object to be used
- * in a connectionless communication
- *
- * @since AA02.01
- * @hide
- */
-
-public class NativeLlcpConnectionlessSocket {
-
- private int mHandle;
-
- private int mSap;
-
- private int mLinkMiu;
-
- public NativeLlcpConnectionlessSocket(){;
- }
-
- public NativeLlcpConnectionlessSocket(int sap){
- mSap = sap;
- }
-
- public native boolean doSendTo(int sap, byte[] data);
-
- public native LlcpPacket doReceiveFrom(int linkMiu);
-
- public native boolean doClose();
-
- public int getLinkMiu(){
- return mLinkMiu;
- }
-
- public int getSap(){
- return mSap;
- }
-
- public int getHandle(){
- return mHandle;
- }
-
-}
diff --git a/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpServiceSocket.java b/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpServiceSocket.java
deleted file mode 100644
index 079d69b..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpServiceSocket.java
+++ /dev/null
@@ -1,82 +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.
- */
-
-/**
- * File : NativeLlcpServerSocket.java
- * Original-Author : Trusted Logic S.A. (Sylvain Fonteneau)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android.internal;
-
-/**
- * LlcpServiceSocket represents a LLCP Service to be used in a
- * Connection-oriented communication
- * {@hide}
- */
-
-public class NativeLlcpServiceSocket {
-
- private int mHandle;
-
- private int mLocalMiu;
-
- private int mLocalRw;
-
- private int mLocalLinearBufferLength;
-
- private int mSap;
-
- private int mTimeout;
-
- private String mServiceName;
-
- public NativeLlcpServiceSocket(){
-
- }
-
- public NativeLlcpServiceSocket(String serviceName){
- mServiceName = serviceName;
- }
-
- public native NativeLlcpSocket doAccept(int timeout, int miu, int rw, int linearBufferLength);
-
- public native boolean doClose();
-
- public int getHandle(){
- return mHandle;
- }
-
- public void setAcceptTimeout(int timeout){
- mTimeout = timeout;
- }
-
- public int getAcceptTimeout(){
- return mTimeout;
- }
-
- public int getRw(){
- return mLocalRw;
- }
-
- public int getMiu(){
- return mLocalMiu;
- }
-
- public int getLinearBufferLength(){
- return mLocalLinearBufferLength;
- }
-}
diff --git a/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpSocket.java b/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpSocket.java
deleted file mode 100644
index 818cfaa..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/internal/NativeLlcpSocket.java
+++ /dev/null
@@ -1,93 +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.
- */
-
-/**
- * File : NativeLlcpClientSocket.java
- * Original-Author : Trusted Logic S.A. (Sylvain Fonteneau)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android.internal;
-
-/**
- * LlcpClientSocket represents a LLCP Connection-Oriented client to be used in a
- * connection-oriented communication
- * @hide
- */
-
-public class NativeLlcpSocket {
-
- private int mHandle;
-
- private int mSap;
-
- private int mLocalMiu;
-
- private int mLocalRw;
-
- private int mTimeout;
-
- public NativeLlcpSocket(){
-
- }
-
- public NativeLlcpSocket(int sap, int miu, int rw){
- mSap = sap;
- mLocalMiu = miu;
- mLocalRw = rw;
- }
-
- public native boolean doConnect(int nSap, int timeout);
-
- public native boolean doConnectBy(String sn, int timeout);
-
- public native boolean doClose();
-
- public native boolean doSend(byte[] data);
-
- public native int doReceive(byte[] recvBuff);
-
- public native int doGetRemoteSocketMiu();
-
- public native int doGetRemoteSocketRw();
-
-
-
- public void setConnectTimeout(int timeout){
- mTimeout = timeout;
- }
-
- public int getConnectTimeout(){
- return mTimeout;
- }
-
- public int getSap(){
- return mSap;
- }
-
- public int getMiu(){
- return mLocalMiu;
- }
-
- public int getRw(){
- return mLocalRw;
- }
-
- public int getHandle(){
- return mHandle;
- }
-
-}
diff --git a/core/java/com/trustedlogic/trustednfc/android/internal/NativeNdefTag.java b/core/java/com/trustedlogic/trustednfc/android/internal/NativeNdefTag.java
deleted file mode 100644
index 819b0395..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/internal/NativeNdefTag.java
+++ /dev/null
@@ -1,36 +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.
- */
-
-/**
- * File : NativeNdefTag.java
- * Original-Author : Trusted Logic S.A. (Sylvain Fonteneau)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android.internal;
-
-/**
- * Native interface to the NDEF tag functions
- *
- * @hide
- */
-public class NativeNdefTag {
- private int mHandle;
-
- public native byte[] doRead();
-
- public native boolean doWrite(byte[] buf);
-}
diff --git a/core/java/com/trustedlogic/trustednfc/android/internal/NativeNfcManager.java b/core/java/com/trustedlogic/trustednfc/android/internal/NativeNfcManager.java
deleted file mode 100644
index 5ff348a..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/internal/NativeNfcManager.java
+++ /dev/null
@@ -1,369 +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.
- */
-
-/**
- * File : NativeNfcManager.java
- * Original-Author : Trusted Logic S.A. (Sylvain Fonteneau)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android.internal;
-
-import android.annotation.SdkConstant;
-import android.annotation.SdkConstant.SdkConstantType;
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
-
-import android.nfc.FormatException;
-import android.nfc.NdefTag;
-import android.nfc.NfcAdapter;
-import android.nfc.NdefMessage;
-import android.nfc.Tag;
-
-/**
- * Native interface to the NFC Manager functions
- * @hide
- */
-public class NativeNfcManager {
-
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String INTERNAL_LLCP_LINK_STATE_CHANGED_EXTRA = "com.trustedlogic.trustednfc.android.extra.INTERNAL_LLCP_LINK_STATE";
-
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String INTERNAL_LLCP_LINK_STATE_CHANGED_ACTION = "com.trustedlogic.trustednfc.android.action.INTERNAL_LLCP_LINK_STATE_CHANGED";
-
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- public static final String INTERNAL_TARGET_DESELECTED_ACTION = "com.trustedlogic.trustednfc.android.action.INTERNAL_TARGET_DESELECTED";
-
- /* Native structure */
- private int mNative;
-
- private final Context mContext;
-
- private final Handler mNfcHandler;
-
- private static final String TAG = "NativeNfcManager";
-
- private static final int MSG_NDEF_TAG = 0;
-
- private static final int MSG_CARD_EMULATION = 1;
-
- private static final int MSG_LLCP_LINK_ACTIVATION = 2;
-
- private static final int MSG_LLCP_LINK_DEACTIVATED = 3;
-
- private static final int MSG_TARGET_DESELECTED = 4;
-
- public NativeNfcManager(Context context) {
- mNfcHandler = new NfcHandler();
- mContext = context;
- }
-
- /**
- * Initializes Native structure
- */
- public native boolean initializeNativeStructure();
-
- /**
- * Initializes NFC stack.
- */
- public native boolean initialize();
-
- /**
- * Deinitializes NFC stack.
- */
- public native boolean deinitialize();
-
- /**
- * Enable discory for the NdefMessage and Transaction notification
- */
- public native void enableDiscovery(int mode);
-
- public native void disableDiscovery();
-
- public native void readerDiscovery();
-
- /**
- * Disables an NFCManager mode of operation. Allows to disable tag reader,
- * peer to peer initiator or target modes.
- *
- * @param mode discovery mode to enable. Must be one of the provided
- * NFCManager.DISCOVERY_MODE_* constants.
- */
- public native void disableDiscoveryMode(int mode);
-
- public native int[] doGetSecureElementList();
-
- public native void doSelectSecureElement(int seID);
-
- public native void doDeselectSecureElement(int seID);
-
- public native NativeP2pDevice doOpenP2pConnection(int timeout);
-
- public native NativeNfcTag doOpenTagConnection(int timeout);
-
- public native int doGetLastError();
-
- public native void doSetProperties(int param, int value);
-
- public native void doCancel();
-
- public native NativeLlcpConnectionlessSocket doCreateLlcpConnectionlessSocket(int nSap);
-
- public native NativeLlcpServiceSocket doCreateLlcpServiceSocket(int nSap, String sn, int miu,
- int rw, int linearBufferLength);
-
- public native NativeLlcpSocket doCreateLlcpSocket(int sap, int miu, int rw,
- int linearBufferLength);
-
- public native boolean doCheckLlcp();
-
- public native boolean doActivateLlcp();
-
- private class NfcHandler extends Handler {
-
- private int convertType(String typeName) {
- if (typeName.equals("Iso14443")) {
- return Tag.NFC_TAG_ISO14443_4B;
- } else if (typeName.equals("MifareUL")) {
- return Tag.NFC_TAG_MIFARE;
- } else if (typeName.equals("Mifare1K")) {
- return Tag.NFC_TAG_MIFARE;
- } else if (typeName.equals("Mifare4K")) {
- return Tag.NFC_TAG_MIFARE;
- } else if (typeName.equals("MifareDESFIRE")) {
- return Tag.NFC_TAG_MIFARE;
- } else if (typeName.equals("Unknown Mifare")) {
- return Tag.NFC_TAG_MIFARE;
- } else if (typeName.equals("Felica")) {
- return Tag.NFC_TAG_FELICA;
- } else if (typeName.equals("Jewel")) {
- return Tag.NFC_TAG_JEWEL;
- } else {
- return Tag.NFC_TAG_OTHER;
- }
- }
-
- @Override
- public void handleMessage(Message msg) {
-
- try {
- switch (msg.what) {
- case MSG_NDEF_TAG:
- Log.d(TAG, "Tag detected, notifying applications");
- NativeNfcTag nativeTag = (NativeNfcTag) msg.obj;
- if (nativeTag.doConnect()) {
- if (nativeTag.checkNDEF()) {
- byte[] buff = nativeTag.doRead();
- if (buff != null) {
- NdefMessage[] msgNdef = new NdefMessage[1];
- try {
- msgNdef[0] = new NdefMessage(buff);
- NdefTag tag = new NdefTag(convertType(nativeTag.getType()), nativeTag.getUid(), nativeTag.getHandle(), msgNdef);
- Intent intent = new Intent();
- intent.setAction(NfcAdapter.ACTION_NDEF_TAG_DISCOVERED);
- intent.putExtra(NfcAdapter.EXTRA_TAG, tag);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Log.d(TAG, "NDEF tag found, starting corresponding activity");
- try {
- mContext.startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Log.w(TAG, "No activity found, disconnecting");
- nativeTag.doAsyncDisconnect();
- }
- } catch (FormatException e) {
- Log.w(TAG, "Unable to create NDEF message object (tag empty or not well formated)");
- nativeTag.doAsyncDisconnect();
- }
- } else {
- Log.w(TAG, "Unable to read NDEF message (tag empty or not well formated)");
- nativeTag.doAsyncDisconnect();
- }
- } else {
- Intent intent = new Intent();
- Tag tag = new Tag(convertType(nativeTag.getType()), false, nativeTag.getUid(), nativeTag.getHandle());
- intent.setAction(NfcAdapter.ACTION_TAG_DISCOVERED);
- intent.putExtra(NfcAdapter.EXTRA_TAG, tag);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- Log.d(TAG, "Non-NDEF tag found, starting corresponding activity");
- try {
- mContext.startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Log.w(TAG, "No activity found, disconnecting");
- nativeTag.doAsyncDisconnect();
- }
- }
- } else {
- Log.w(TAG, "Failed to connect to tag");
- nativeTag.doAsyncDisconnect();
- }
- break;
- case MSG_CARD_EMULATION:
- Log.d(TAG, "Card Emulation message");
- byte[] aid = (byte[]) msg.obj;
- /* Send broadcast ordered */
- Intent TransactionIntent = new Intent();
- TransactionIntent.setAction(NfcAdapter.ACTION_TRANSACTION_DETECTED);
- TransactionIntent.putExtra(NfcAdapter.EXTRA_AID, aid);
- Log.d(TAG, "Broadcasting Card Emulation event");
- mContext.sendOrderedBroadcast(TransactionIntent,
- android.Manifest.permission.NFC_NOTIFY);
- break;
-
- case MSG_LLCP_LINK_ACTIVATION:
- NativeP2pDevice device = (NativeP2pDevice) msg.obj;
-
- Log.d(TAG, "LLCP Activation message");
-
- if (device.getMode() == NativeP2pDevice.MODE_P2P_TARGET) {
- if (device.doConnect()) {
- /* Check Llcp compliancy */
- if (doCheckLlcp()) {
- /* Activate Llcp Link */
- if (doActivateLlcp()) {
- Log.d(TAG, "Initiator Activate LLCP OK");
- /* Broadcast Intent Link LLCP activated */
- Intent LlcpLinkIntent = new Intent();
- LlcpLinkIntent
- .setAction(INTERNAL_LLCP_LINK_STATE_CHANGED_ACTION);
- LlcpLinkIntent.putExtra(
- INTERNAL_LLCP_LINK_STATE_CHANGED_EXTRA,
- NfcAdapter.LLCP_LINK_STATE_ACTIVATED);
- Log.d(TAG, "Broadcasting internal LLCP activation");
- mContext.sendBroadcast(LlcpLinkIntent);
- }
-
- } else {
- device.doDisconnect();
- }
-
- }
-
- } else if (device.getMode() == NativeP2pDevice.MODE_P2P_INITIATOR) {
- /* Check Llcp compliancy */
- if (doCheckLlcp()) {
- /* Activate Llcp Link */
- if (doActivateLlcp()) {
- Log.d(TAG, "Target Activate LLCP OK");
- /* Broadcast Intent Link LLCP activated */
- Intent LlcpLinkIntent = new Intent();
- LlcpLinkIntent
- .setAction(INTERNAL_LLCP_LINK_STATE_CHANGED_ACTION);
- LlcpLinkIntent.putExtra(INTERNAL_LLCP_LINK_STATE_CHANGED_EXTRA,
- NfcAdapter.LLCP_LINK_STATE_ACTIVATED);
- Log.d(TAG, "Broadcasting internal LLCP activation");
- mContext.sendBroadcast(LlcpLinkIntent);
- }
- }
- }
- break;
-
- case MSG_LLCP_LINK_DEACTIVATED:
- /* Broadcast Intent Link LLCP activated */
- Log.d(TAG, "LLCP Link Deactivated message");
- Intent LlcpLinkIntent = new Intent();
- LlcpLinkIntent.setAction(NfcAdapter.ACTION_LLCP_LINK_STATE_CHANGED);
- LlcpLinkIntent.putExtra(NfcAdapter.EXTRA_LLCP_LINK_STATE_CHANGED,
- NfcAdapter.LLCP_LINK_STATE_DEACTIVATED);
- Log.d(TAG, "Broadcasting LLCP deactivation");
- mContext.sendOrderedBroadcast(LlcpLinkIntent,
- android.Manifest.permission.NFC_LLCP);
- break;
-
- case MSG_TARGET_DESELECTED:
- /* Broadcast Intent Target Deselected */
- Log.d(TAG, "Target Deselected");
- Intent TargetDeselectedIntent = new Intent();
- TargetDeselectedIntent.setAction(INTERNAL_TARGET_DESELECTED_ACTION);
- Log.d(TAG, "Broadcasting Intent");
- mContext.sendOrderedBroadcast(TargetDeselectedIntent,
- android.Manifest.permission.NFC_LLCP);
- break;
-
- default:
- Log.e(TAG, "Unknown message received");
- break;
- }
- } catch (Exception e) {
- // Log, don't crash!
- Log.e(TAG, "Exception in NfcHandler.handleMessage:", e);
- }
- }
- };
-
- /**
- * Notifies Ndef Message
- */
- private void notifyNdefMessageListeners(NativeNfcTag tag) {
- Message msg = mNfcHandler.obtainMessage();
-
- msg.what = MSG_NDEF_TAG;
- msg.obj = tag;
-
- mNfcHandler.sendMessage(msg);
- }
-
- /**
- * Notifies transaction
- */
- private void notifyTargetDeselected() {
- Message msg = mNfcHandler.obtainMessage();
-
- msg.what = MSG_TARGET_DESELECTED;
-
- mNfcHandler.sendMessage(msg);
- }
-
- /**
- * Notifies transaction
- */
- private void notifyTransactionListeners(byte[] aid) {
- Message msg = mNfcHandler.obtainMessage();
-
- msg.what = MSG_CARD_EMULATION;
- msg.obj = aid;
-
- mNfcHandler.sendMessage(msg);
- }
-
- /**
- * Notifies P2P Device detected, to activate LLCP link
- */
- private void notifyLlcpLinkActivation(NativeP2pDevice device) {
- Message msg = mNfcHandler.obtainMessage();
-
- msg.what = MSG_LLCP_LINK_ACTIVATION;
- msg.obj = device;
-
- mNfcHandler.sendMessage(msg);
- }
-
- /**
- * Notifies P2P Device detected, to activate LLCP link
- */
- private void notifyLlcpLinkDeactivated() {
- Message msg = mNfcHandler.obtainMessage();
-
- msg.what = MSG_LLCP_LINK_DEACTIVATED;
-
- mNfcHandler.sendMessage(msg);
- }
-
-}
diff --git a/core/java/com/trustedlogic/trustednfc/android/internal/NativeNfcTag.java b/core/java/com/trustedlogic/trustednfc/android/internal/NativeNfcTag.java
deleted file mode 100644
index 47cf45b..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/internal/NativeNfcTag.java
+++ /dev/null
@@ -1,71 +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.
- */
-
-/**
- * File : NativeNfcTag.java
- * Original-Author : Trusted Logic S.A. (Sylvain Fonteneau)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android.internal;
-
-/**
- * Native interface to the NFC tag functions
- *
- * @hide
- */
-public class NativeNfcTag {
- private int mHandle;
-
- private String mType;
-
- private byte[] mUid;
-
- public native boolean doConnect();
-
- public native boolean doDisconnect();
-
- public native void doAsyncDisconnect();
-
- public native byte[] doTransceive(byte[] data);
-
- public native boolean checkNDEF();
-
- public native byte[] doRead();
-
- public native boolean doWrite(byte[] buf);
-
- private NativeNfcTag() {
- }
-
- public NativeNfcTag(int handle, String type, byte[] uid) {
- mHandle = handle;
- mType = type;
- mUid = uid.clone();
- }
-
- public int getHandle() {
- return mHandle;
- }
-
- public String getType() {
- return mType;
- }
-
- public byte[] getUid() {
- return mUid;
- }
-}
diff --git a/core/java/com/trustedlogic/trustednfc/android/internal/NativeP2pDevice.java b/core/java/com/trustedlogic/trustednfc/android/internal/NativeP2pDevice.java
deleted file mode 100644
index c674309..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/internal/NativeP2pDevice.java
+++ /dev/null
@@ -1,75 +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.
- */
-
-/**
- * File : NativeP2pDevice.java
- * Original-Author : Trusted Logic S.A. (Sylvain Fonteneau)
- * Created : 18-02-2010
- */
-
-package com.trustedlogic.trustednfc.android.internal;
-
-/**
- * Native interface to the P2P Initiator functions
- *
- * @hide
- */
-public class NativeP2pDevice {
-
- /**
- * Peer-to-Peer Target.
- */
- public static final short MODE_P2P_TARGET = 0x00;
-
- /**
- * Peer-to-Peer Initiator.
- */
- public static final short MODE_P2P_INITIATOR = 0x01;
-
- /**
- * Invalid target type.
- */
- public static final short MODE_INVALID = 0xff;
-
- private int mHandle;
-
- private int mMode;
-
- private byte[] mGeneralBytes;
-
- public native byte[] doReceive();
-
- public native boolean doSend(byte[] data);
-
- public native boolean doConnect();
-
- public native boolean doDisconnect();
-
- public native byte[] doTransceive(byte[] data);
-
- public int getHandle() {
- return mHandle;
- }
-
- public int getMode() {
- return mMode;
- }
-
- public byte[] getGeneralBytes() {
- return mGeneralBytes;
- }
-
-}
diff --git a/core/java/com/trustedlogic/trustednfc/android/package.html b/core/java/com/trustedlogic/trustednfc/android/package.html
deleted file mode 100644
index 0c0b605..0000000
--- a/core/java/com/trustedlogic/trustednfc/android/package.html
+++ /dev/null
@@ -1,473 +0,0 @@
-<html>
-<body>
-
-<p>Provides classes that manage the NFC functionality.</p>
-
-<p>The NFC functionality is related to Near Field Communication.</p>
-
-<p>The NFC APIs let applications:</p>
-<ul>
- <li>Scan for remote NFC targets (NFC Tag or NFC Peer)</li>
- <li>Transfer raw data to and from remote NFC targets (NFC Tags or NFC Peer)</li>
- <li>Read/Write NDEF data from/to remote NFC targets (NFC Tags)</li>
- <li>Establish LLCP connection with a remote NFC target (NFC Peer with LLCP support)</li>
- <li>Exchange data with a remote NFC target through LLCP services (NFC Peer with LLCP support)</li>
- <li>Be notified of transactions on the local Secure Element by an external NFC reader</li>
-</ul>
-
-
-<h1>Setting Up NFC</h1>
-
-<p>
-Before an application can use the NFC feature, it needs to check if NFC is
-supported on the device by getting an instance of the
-{@link com.trustedlogic.trustednfc.android.NfcManager} class.
-</p>
-
-<pre>
- NfcManager mNfcManager = (NfcManager) getSystemService(Context.NFC_SERVICE);
- if (mNfcManager == null) {
- // Device does not support NFC
- }
-</pre>
-
-<p>
-An application can ensure that NFC is enabled.
-If not, an application with the needed permission can request that NFC be
-enabled.
-</p>
-
-<pre>
- if (!mNfcManager.isEnabled) {
- // NFC is currently disabled.
- // Enable NFC.
- mNfcManager.enable();
- }
-</pre>
-
-<p>
-Before using the card emulation mode, an application can ensure that a secure
-element is selected ({@link com.trustedlogic.trustednfc.android.NfcManager#getSelectedSecureElement}).
-If not, an application with the needed permission can recover the list of
-available secure elements on the device
-({@link com.trustedlogic.trustednfc.android.NfcManager#getSecureElementList}) and select one
-({@link com.trustedlogic.trustednfc.android.NfcManager#selectSecureElement}).
-</p>
-
-<p>
-Before using the NFC feature, an application can configure the NFC device by
-calling {@link com.trustedlogic.trustednfc.android.NfcManager#setProperties}. This function allows:
-</p>
-<ul>
- <li>Enabling/disabling the NFC device capabilities (RF types, baudrates,
- NFCIP-1 mode and role...)</li>
- <li>Settings the NFCIP-1 general bytes and the LLCP link parameters</li>
-</ul>
-<p>
-The setting properties can be customized according to the Device capabilities.
-The next table give the minimal set of properties supported by the Device.
-Depending on the implementation, the table may be completed.
-</p>
-<table>
- <TR><TH> Property Name </TH><TH> Property Values </TH></TR>
- <TR><TD> discovery.felica </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> discovery.iso14443A </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> discovery.iso14443B </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> discovery.iso15693 </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> discovery.nfcip </TD><TD> <b>true</b>|false </TD></TR>
- <TR><TD> nfcip.baudrate </TD><TD> 106|212|424 </TD></TR>
- <TR><TD> nfcip.generalbytes </TD><TD> </TD></TR>
- <TR><TD> nfcip.mode </TD><TD> active|passive|<b>all</b> </TD></TR>
- <TR><TD> nfcip.role </TD><TD> initiator|target|<b>both</b> </TD></TR>
- <TR><TD> llcp.lto </TD><TD> <b>150</b> (0 to 255) </TD></TR>
- <TR><TD> llcp.opt </TD><TD> <b>0</b> (0 to 3) </TD></TR>
- <TR><TD> llcp.miu </TD><TD> <b>128</b> (128 to 2176) </TD></TR>
- <TR><TD> llcp.wks </TD><TD> <b>1</b> (0 to 15) </TD></TR>
-</table>
-<p>(default values in bold)</p>
-
-
-<h1>NFC Permissions</h1>
-
-<p>
-To change the NFC service settings such as enabling the NFC targets
-discovery or activating the secure element, an application must declare the
-NFC_ADMIN permission.
-</p>
-<p>
-To perform NFC raw communication with a remote NFC target in
-Reader/Write Mode or Peer-to-Peer Mode, an application must declare the NFC_RAW
-permission.
-</p>
-<p>
-To receive NDEF message or Secure Element intents, an application must declare
-the NFC_NOTIFY permission.
-</p>
-<p>
-To receive the LLCP link intent and perform an LLCP communication with a remote NFC target, an application must
-declare the NFC_LLCP permission.
-</p>
-
-
-<h1>NFC Usage</h1>
-
-<p>
-The following code samples illustrate the APIs usage regarding the NFC service
-use cases.
-</p>
-
-<h2>Reader/Writer Mode NDEF message notification</h2>
-
-<p>
-This code sample illustrates the NDEF message notification through an Intent declared in the manifest and a receiver implemented in the application.
-</p>
-<p>Main involved classes/methods:</p>
-
-<p>Manifest Example:</p>
-<pre>
- <receiver android:name=".NfcReaderDemoReceiver">
- <intent-filter>
- <action android:name= "com.trustedlogic.trustednfc.android.action.NDEF_TAG_DISCOVERED"/>
- </intent-filter>
- </receiver>
-</pre>
-
-<p>Receiver Example:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NdefMessage}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#NDEF_TAG_DISCOVERED_ACTION}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#NDEF_MESSAGE_EXTRA}</li>
-</ul>
-<pre>
-public class NdefMessageReceiverSample extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(NfcManager.NDEF_TAG_DISCOVERERD_ACTION)) {
- NdefMessage msg = intent.getParcelableExtra(NfcManager.NDEF_MESSAGE_EXTRA);
-
- /* Manage the NdefMessage received */
- }
-</pre>
-
-<h2>Reader/Writer Mode raw exchange</h2>
-
-<p>
-This code sample illustrates raw exchanges with a NFC target in Reader/Writer
-mode.
-</p>
-<p>Main involved classes/methods:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#openTagConnection}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcTag}</li>
-</ul>
-
-<pre>
-public class TagReaderSample {
-
- /** The NFC manager to access NFC features */
- private NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
-
- private void runTagReader() {
- NfcTag tag = null;
- String type;
- byte[] cmd = { 0x01, 0x02, 0x03 };
- byte[] res;
-
- while (true) {
- try {
- Log.i("NFC example", "Please wave in front of the tag");
- // Open a connection on next available tag
- try {
- tag = manager.openTagConnection();
- } catch (NfcException e) {
- // TODO: Handle open failure
- }
-
- // Look for a mifare 4k
- type = tag.getType();
- if (type.equals("Mifare4K")) {
- Log.i("NFC example", "Tag detected");
- tag.connect();
- // Ready to communicate, we can send transceive !
- res = tag.transceive(cmd);
- } else {
- Log.i("NFC example", "Unknown tag");
- }
- } catch (IOException e) {
- // TODO: Handle broken connection
- } finally {
- if (tag != null) {
- tag.close();
- }
- }
- }
- }
-}
-</pre>
-
-<h2>Peer-to-Peer Mode raw exchange</h2>
-
-<p>
-This code sample illustrates raw exchanges with a NFC target in Peer-to-Peer
-mode.
-</p>
-<p>Main involved classes/methods:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#openP2pConnection}</li>
- <li>{@link com.trustedlogic.trustednfc.android.P2pDevice}</li>
- <li>{@link com.trustedlogic.trustednfc.android.P2pInitiator}</li>
- <li>{@link com.trustedlogic.trustednfc.android.P2pTarget}</li>
-</ul>
-
-<pre>
-public class P2pSample {
-
- /** The NFC manager to access NFC features */
- private NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
-
- private void runP2p() {
- P2pDevice deviceP2p;
- P2pInitiator initiator;
- P2pTarget target;
- byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- byte[] echo = new byte[data.length * 10];
-
- try {
- deviceP2p = manager.openP2pConnection();
-
- if (deviceP2p.getMode() == P2pDevice.MODE_P2P_INITIATOR) {
- target = new P2pTarget(deviceP2p);
- // Connect to the detected P2P target
- target.connect();
- // send data to the target
- target.transceive(data);
- // disconnect the connected target
- target.disconnect();
- } else if (deviceP2p.getMode() == P2pDevice.MODE_P2P_TARGET) {
- initiator = new P2pInitiator(deviceP2p);
- //target in receive state
- echo = initiator.receive();
- // send back the data received
- initiator.send(echo);
- }
- } catch (IOException e0) {
-
- } catch (NfcException e1) {
-
- }
- }
-}
-</pre>
-
-<h2>Peer-to-Peer Mode LLCP exchange</h2>
-
-<p>
-This code sample illustrates how to get LLCP link state notification with the declaration of a Receiver in the manifest of the application and the implementation
-of the receiver in the application.
-</p>
-<p>Manifest Example:</p>
-<pre>
- <receiver android:name=".LlcpModeReceiverSample">
- <intent-filter>
- <action android:name= "com.trustedlogic.trustednfc.android.action.LLCP_LINK_STATE_CHANGED"/>
- </intent-filter>
- </receiver>
-</pre>
-
-<p>Receiver Example:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#LLCP_LINK_STATE_CHANGED_ACTION}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#LLCP_LINK_STATE_CHANGED_EXTRA}</li>
-</ul>
-<pre>
-public class LlcpModeReceiverSample extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {
-
- if (intent.getAction().equals(NfcManager.LLCP_LINK_STATE_CHANGED_ACTION)){
- byte[] aid = intent.getByteArrayExtra(NfcManager.LLCP_LINK_STATE_CHANGED_EXTRA);
- /* Create an LLCP service or client and start an LLCP communication */
- }
- }
-</pre>
-
-
-<p>
-This code samples illustrate LLCP exchanges with a NFC Peer.
-</p>
-<p>Main involved classes/methods:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpConnectionlessSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpServiceSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.LlcpSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.LlcpConnectionlessSocket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.LlcpPacket}</li>
- <li>{@link com.trustedlogic.trustednfc.android.LlcpServiceSocket}</li>
-</ul>
-
-<pre>
-public class LlcpServerSample {
-
- /** The NFC manager to access NFC features */
- private NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
-
- private void runLlcpClient() {
- LlcpSocket sock;
- byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- byte[] echo = new byte[data.length * 10];
- int length = 0;
-
- sock = manager.createLlcpSocket((short) 128, (byte) 2, 1024);
-
- // set a timeout in ms for connect request
- sock.setConnectTimeout(10);
-
- try {
- // Connect to remote service
- // NOTE: could be sock.connect("com.trusted-logic.tnfc.testapp");
- sock.connect((byte) 0x10);
-
- // Send data
- for (int i = 0; i < 10; i++) {
- sock.send(data);
- }
-
- // Receive echo
- while (length < 10 * data.length) {
- length += sock.receive(echo);
- }
-
- } catch (IOException e) {
- // TODO: Handle broken connection broken (link down, remote closure
- // or connect rejected) or Timeout expired
- }
- }
-}
-</pre>
-
-<pre>
-public class LlcpClientSample {
-
- /** The NFC manager to access NFC features */
- private NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
-
- private void runLlcpClient() {
- LlcpSocket sock;
- byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- byte[] echo = new byte[data.length * 10];
- int length = 0;
-
- sock = manager.createLlcpSocket((short) 128, (byte) 2, 1024);
- try {
- // Connect to remote service
- // NOTE: could be sock.connect("com.trusted-logic.tnfc.testapp");
- sock.connect((byte) 0x10);
-
- // Send data
- for (int i = 0; i < 10; i++) {
- sock.send(data);
- }
-
- // Receive echo
- while (length < 10 * data.length) {
- length += sock.receive(echo);
- }
-
- } catch (IOException e) {
- // TODO: Handle broken connection broken (link down, remote closure
- // or connect rejected)
- }
- }
-}
-</pre>
-
-<h2>Card Emulation Mode transaction notification</h2>
-
-<p>
-This code sample illustrates how to get the card emulation notification with the declaration of a Receiver in the manifest of the application and the implementation
-of the receiver in the application.
-</p>
-<p>Manifest Example:</p>
-<pre>
- <receiver android:name=".NfcReaderDemoReceiver">
- <intent-filter>
- <action android:name= "com.trustedlogic.trustednfc.android.action.TRANSACTION_DETECTED"/>
- </intent-filter>
- </receiver>
-</pre>
-
-<p>Receiver Example:</p>
-<ul>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#TRANSACTION_DETECTED_ACTION}</li>
- <li>{@link com.trustedlogic.trustednfc.android.NfcManager#AID_EXTRA}</li>
-</ul>
-<pre>
-public class CardEmulationReceiverSample extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {
-
- if (intent.getAction().equals(NfcManager.TRANSACTION_DETECTED_ACTION)){
- byte[] aid = intent.getByteArrayExtra(NfcManager.AID_EXTRA);
- /* Manage the AID: */
- /* For example start an activity related to this AID value or display a popup with the AID */
- }
- }
-</pre>
-
-
-
-<h1>Multiple Applications rules</h1>
-
-<p>
-Several LLCP sockets can be created by a single application or by multiple
-applications by calling {@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpSocket},
-{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpConnectionlessSocket} or
-{@link com.trustedlogic.trustednfc.android.NfcManager#createLlcpServiceSocket}, provided the local SAP
-numbers are differents.
-</p>
-
-<p>
-Only one application can open a raw connection by calling
-{@link com.trustedlogic.trustednfc.android.NfcManager#openTagConnection} or
-{@link com.trustedlogic.trustednfc.android.NfcManager#openP2pConnection}.
-While this application has not closed or cancelled its connection, any other
-application that attempts to open another raw connection will raise an
-exception.
-During an open connnection, the card emulation mode is always enabled and
-applications are able to receive card emulation intents.
-</p>
-
-<p>
-When an application opens a tag connection by calling
-{@link com.trustedlogic.trustednfc.android.NfcManager#openTagConnection}, this operation is exclusive, no NDEF message intent are
-broadcast while the connection is not closed or canceled.
-</p>
-
-<p>
-When an application opens a peer-to-peer connection by calling
-{@link com.trustedlogic.trustednfc.android.NfcManager#openP2pConnection}, this operation is exclusive, no LLCP intent are broadcast and LLCP sockets are
-disabled while the connection is not closed or canceled.
-</p>
-
-
-<h1>NFC Tag types</h1>
-
-<p>
-The {@link com.trustedlogic.trustednfc.android.NfcTag} type returned by
-{@link com.trustedlogic.trustednfc.android.NfcTag#getType} indicates the set of
-commands supported by the tag. These commands can be used in
-{@link com.trustedlogic.trustednfc.android.NfcTag#transceive}.
-</p>
-
-<TABLE BORDER="1">
- <TR><TH> Tag Type </TH><TH> Returned string </TH></TR>
- <TR><TD> Jewel/Topaz </TD><TD> Jewel </TD></TR>
- <TR><TD> Mifare UltraLight </TD><TD> MifareUL </TD></TR>
- <TR><TD> Mifare Standard 1K </TD><TD> Mifare1K </TD></TR>
- <TR><TD> Mifare Standard 4K </TD><TD> Mifare4K </TD></TR>
- <TR><TD> Mifare DESFIRE </TD><TD> MifareDESFIRE </TD></TR>
- <TR><TD> Felica </TD><TD> Felica </TD></TR>
- <TR><TD> ISO14443-4 A or B </TD><TD> Iso14443 </TD></TR>
- <TR><TD> ISO15693 </TD><TD> Iso15693 </TD></TR>
-</TABLE>
-
-</body>
-</html>
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index d51c0b7..c3f393d 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -67,6 +67,8 @@
android_net_TrafficStats.cpp \
android_net_wifi_Wifi.cpp \
android_nio_utils.cpp \
+ android_nfc_NdefMessage.cpp \
+ android_nfc_NdefRecord.cpp \
android_pim_EventRecurrence.cpp \
android_text_format_Time.cpp \
android_security_Md5MessageDigest.cpp \
@@ -190,15 +192,8 @@
libicui18n \
libmedia \
libwpa_client \
- libjpeg
-
-ifeq ($(BOARD_HAVE_NFC),true)
-LOCAL_SHARED_LIBRARIES += \
- libnfc_jni \
- libnfc
-
-LOCAL_CFLAGS += -DHAVE_NFC
-endif
+ libjpeg \
+ libnfc_ndef
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_C_INCLUDES += \
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 5f73443..648d93f 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -125,6 +125,8 @@
extern int register_android_database_SQLiteStatement(JNIEnv* env);
extern int register_android_debug_JNITest(JNIEnv* env);
extern int register_android_nio_utils(JNIEnv* env);
+extern int register_android_nfc_NdefMessage(JNIEnv *env);
+extern int register_android_nfc_NdefRecord(JNIEnv *env);
extern int register_android_pim_EventRecurrence(JNIEnv* env);
extern int register_android_text_format_Time(JNIEnv* env);
extern int register_android_os_Debug(JNIEnv* env);
@@ -169,18 +171,6 @@
extern int register_android_content_res_ObbScanner(JNIEnv* env);
extern int register_android_content_res_Configuration(JNIEnv* env);
-#ifdef HAVE_NFC
-extern int register_com_trustedlogic_trustednfc_android_internal_NativeNfcManager(JNIEnv *env);
-extern int register_com_trustedlogic_trustednfc_android_internal_NativeNfcTag(JNIEnv *env);
-extern int register_com_trustedlogic_trustednfc_android_internal_NativeNdefTag(JNIEnv *env);
-extern int register_com_trustedlogic_trustednfc_android_NdefMessage(JNIEnv *env);
-extern int register_com_trustedlogic_trustednfc_android_NdefRecord(JNIEnv *env);
-extern int register_com_trustedlogic_trustednfc_android_internal_NativeP2pDevice(JNIEnv *env);
-extern int register_com_trustedlogic_trustednfc_android_internal_NativeLlcpSocket(JNIEnv *env);
-extern int register_com_trustedlogic_trustednfc_android_internal_NativeLlcpConnectionlessSocket(JNIEnv *env);
-extern int register_com_trustedlogic_trustednfc_android_internal_NativeLlcpServiceSocket(JNIEnv *env);
-#endif
-
static AndroidRuntime* gCurRuntime = NULL;
static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
@@ -1263,6 +1253,8 @@
REG_JNI(register_android_net_NetworkUtils),
REG_JNI(register_android_net_TrafficStats),
REG_JNI(register_android_net_wifi_WifiManager),
+ REG_JNI(register_android_nfc_NdefMessage),
+ REG_JNI(register_android_nfc_NdefRecord),
REG_JNI(register_android_os_MemoryFile),
REG_JNI(register_com_android_internal_os_ZygoteInit),
REG_JNI(register_android_hardware_Camera),
@@ -1297,18 +1289,6 @@
REG_JNI(register_android_content_res_ObbScanner),
REG_JNI(register_android_content_res_Configuration),
-
-#ifdef HAVE_NFC
- REG_JNI(register_com_trustedlogic_trustednfc_android_internal_NativeNfcManager),
- REG_JNI(register_com_trustedlogic_trustednfc_android_internal_NativeNfcTag),
- REG_JNI(register_com_trustedlogic_trustednfc_android_internal_NativeNdefTag),
- REG_JNI(register_com_trustedlogic_trustednfc_android_NdefMessage),
- REG_JNI(register_com_trustedlogic_trustednfc_android_NdefRecord),
- REG_JNI(register_com_trustedlogic_trustednfc_android_internal_NativeP2pDevice),
- REG_JNI(register_com_trustedlogic_trustednfc_android_internal_NativeLlcpSocket),
- REG_JNI(register_com_trustedlogic_trustednfc_android_internal_NativeLlcpConnectionlessSocket),
- REG_JNI(register_com_trustedlogic_trustednfc_android_internal_NativeLlcpServiceSocket),
-#endif
};
/*
diff --git a/core/jni/android_content_res_ObbScanner.cpp b/core/jni/android_content_res_ObbScanner.cpp
index 2a9eacf..3fd7985 100644
--- a/core/jni/android_content_res_ObbScanner.cpp
+++ b/core/jni/android_content_res_ObbScanner.cpp
@@ -32,6 +32,7 @@
jfieldID packageName;
jfieldID version;
jfieldID flags;
+ jfieldID salt;
} gObbInfoClassInfo;
static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
@@ -69,6 +70,14 @@
env->SetObjectField(obbInfo, gObbInfoClassInfo.packageName, packageName);
env->SetIntField(obbInfo, gObbInfoClassInfo.version, obb->getVersion());
env->SetIntField(obbInfo, gObbInfoClassInfo.flags, obb->getFlags());
+
+ size_t saltLen;
+ const unsigned char* salt = obb->getSalt(&saltLen);
+ if (saltLen > 0) {
+ jbyteArray saltArray = env->NewByteArray(saltLen);
+ env->SetByteArrayRegion(saltArray, 0, saltLen, (jbyte*)salt);
+ env->SetObjectField(obbInfo, gObbInfoClassInfo.salt, saltArray);
+ }
}
/*
@@ -99,6 +108,8 @@
"version", "I");
GET_FIELD_ID(gObbInfoClassInfo.flags, gObbInfoClassInfo.clazz,
"flags", "I");
+ GET_FIELD_ID(gObbInfoClassInfo.salt, gObbInfoClassInfo.clazz,
+ "salt", "[B");
return AndroidRuntime::registerNativeMethods(env, "android/content/res/ObbScanner", gMethods,
NELEM(gMethods));
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 3995026..40b9334 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -99,6 +99,10 @@
void android_media_AudioSystem_error_callback(status_t err)
{
JNIEnv *env = AndroidRuntime::getJNIEnv();
+ if (env == NULL) {
+ return;
+ }
+
jclass clazz = env->FindClass("android/media/AudioSystem");
int error;
diff --git a/core/jni/android_nfc.h b/core/jni/android_nfc.h
new file mode 100644
index 0000000..df660f2
--- /dev/null
+++ b/core/jni/android_nfc.h
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+/*
+ * Contains the bare minimum header so that framework NFC jni can link
+ * against NFC native library
+ */
+
+#ifndef __ANDROID_NFC_H__
+#define __ANDROID_NFC_H__
+
+extern "C" {
+
+typedef struct phFriNfc_NdefRecord {
+ uint8_t Flags;
+ uint8_t Tnf;
+ uint8_t TypeLength;
+ uint8_t *Type;
+ uint8_t IdLength;
+ uint8_t *Id;
+ uint32_t PayloadLength;
+ uint8_t *PayloadData;
+} phFriNfc_NdefRecord_t;
+
+uint16_t phFriNfc_NdefRecord_GetRecords(uint8_t* pBuffer,
+ uint32_t BufferLength,
+ uint8_t* pRawRecords[ ],
+ uint8_t IsChunked[ ],
+ uint32_t* pNumberOfRawRecords
+ );
+uint16_t phFriNfc_NdefRecord_Parse(phFriNfc_NdefRecord_t* pRecord,
+ uint8_t* pRawRecord);
+
+uint16_t phFriNfc_NdefRecord_Generate(phFriNfc_NdefRecord_t* pRecord,
+ uint8_t* pBuffer,
+ uint32_t MaxBufferSize,
+ uint32_t* pBytesWritten
+ );
+}
+
+#endif
diff --git a/core/jni/android_nfc_NdefMessage.cpp b/core/jni/android_nfc_NdefMessage.cpp
new file mode 100644
index 0000000..99295f4
--- /dev/null
+++ b/core/jni/android_nfc_NdefMessage.cpp
@@ -0,0 +1,175 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "NdefMessage"
+
+#include "jni.h"
+#include "JNIHelp.h"
+
+#include "android_nfc.h"
+
+#include <utils/Log.h>
+
+namespace android {
+
+static jint android_nfc_NdefMessage_parseNdefMessage(JNIEnv *e, jobject o,
+ jbyteArray array)
+{
+ uint16_t status;
+ uint32_t i;
+ jbyte *raw_msg;
+ jsize raw_msg_size;
+ uint32_t num_of_records = 0;
+ uint8_t **records = NULL;
+ uint8_t *is_chunked = NULL;
+ jint ret = -1;
+ phFriNfc_NdefRecord_t record;
+
+ jclass record_cls;
+ jobjectArray records_array;
+ jmethodID ctor;
+
+ jclass msg_cls;
+ jfieldID mrecords;
+
+ raw_msg_size = e->GetArrayLength(array);
+ raw_msg = e->GetByteArrayElements(array, NULL);
+ if (raw_msg == NULL)
+ return -1;
+
+ /* Get the number of records in the message so we can allocate buffers */
+ LOGD("phFriNfc_NdefRecord_GetRecords(NULL)");
+
+ status = phFriNfc_NdefRecord_GetRecords((uint8_t *)raw_msg,
+ (uint32_t)raw_msg_size, NULL, NULL, &num_of_records);
+
+ if (status) {
+ LOGE("phFriNfc_NdefRecord_GetRecords(NULL) returned 0x%04x", status);
+ goto end;
+ }
+ LOGD("phFriNfc_NdefRecord_GetRecords(NULL) returned 0x%04x", status);
+
+ LOGD("found %d records in message", num_of_records);
+
+ is_chunked = (uint8_t*)malloc(num_of_records);
+ if (is_chunked == NULL)
+ goto end;
+ records = (uint8_t**)malloc(num_of_records * sizeof(uint8_t *));
+ if (records == NULL)
+ goto end;
+
+ /* Now, actually retrieve records position in message */
+ LOGD("phFriNfc_NdefRecord_GetRecords()");
+
+ status = phFriNfc_NdefRecord_GetRecords((uint8_t *)raw_msg,
+ (uint32_t)raw_msg_size, records, is_chunked, &num_of_records);
+
+ if (status) {
+ LOGE("phFriNfc_NdefRecord_GetRecords() returned 0x%04x", status);
+ goto end;
+ }
+ LOGD("phFriNfc_NdefRecord_GetRecords() returned 0x%04x", status);
+
+ /* Build NDEF records array */
+ record_cls = e->FindClass("android/nfc/NdefRecord");
+ records_array = e->NewObjectArray((jsize)num_of_records, record_cls,
+ NULL);
+ if (records_array == NULL)
+ goto end;
+
+ ctor = e->GetMethodID(record_cls, "<init>", "(S[B[B[B)V");
+
+ LOGD("NFC_Number of records = %d\n", num_of_records);
+
+ for (i = 0; i < num_of_records; i++) {
+ jbyteArray type, id, payload;
+ jobject new_record;
+
+ LOGD("phFriNfc_NdefRecord_Parse()");
+
+ status = phFriNfc_NdefRecord_Parse(&record, records[i]);
+
+ if (status) {
+ LOGE("phFriNfc_NdefRecord_Parse() returned 0x%04x", status);
+ goto end;
+ }
+ LOGD("phFriNfc_NdefRecord_Parse() returned 0x%04x", status);
+
+ type = e->NewByteArray(record.TypeLength);
+ if (type == NULL) {
+ LOGD("NFC_Set Record Type Error\n");
+ goto end;
+ }
+
+ id = e->NewByteArray(record.IdLength);
+ if(id == NULL) {
+ LOGD("NFC_Set Record ID Error\n");
+ goto end;
+ }
+
+ payload = e->NewByteArray(record.PayloadLength);
+ if(payload == NULL) {
+ LOGD("NFC_Set Record Payload Error\n");
+ goto end;
+ }
+
+ e->SetByteArrayRegion(type, 0, record.TypeLength,
+ (jbyte *)record.Type);
+ e->SetByteArrayRegion(id, 0, record.IdLength,
+ (jbyte *)record.Id);
+ e->SetByteArrayRegion(payload, 0, record.PayloadLength,
+ (jbyte *)record.PayloadData);
+
+ new_record = e->NewObject(record_cls, ctor,
+ (jshort)record.Tnf, type, id, payload);
+
+ e->SetObjectArrayElement(records_array, i, new_record);
+
+ /* Try not to clutter the Java stack too much */
+ e->DeleteLocalRef(new_record);
+ e->DeleteLocalRef(type);
+ e->DeleteLocalRef(id);
+ e->DeleteLocalRef(payload);
+ }
+
+ /* Store built array in our NDEFMessage instance */
+ msg_cls = e->GetObjectClass(o);
+ mrecords = e->GetFieldID(msg_cls, "mRecords", "[Landroid/nfc/NdefRecord;");
+
+ e->SetObjectField(o, mrecords, (jobject)records_array);
+
+ ret = 0;
+
+end:
+ if(is_chunked)
+ free(is_chunked);
+ if(records)
+ free(records);
+ e->ReleaseByteArrayElements(array, raw_msg, JNI_ABORT);
+
+ return ret;
+}
+
+static JNINativeMethod gMethods[] = {
+ {"parseNdefMessage", "([B)I", (void *)android_nfc_NdefMessage_parseNdefMessage},
+};
+
+int register_android_nfc_NdefMessage(JNIEnv *e)
+{
+ return jniRegisterNativeMethods(e, "android/nfc/NdefMessage", gMethods, NELEM(gMethods));
+}
+
+} // namespace android
diff --git a/core/jni/android_nfc_NdefRecord.cpp b/core/jni/android_nfc_NdefRecord.cpp
new file mode 100644
index 0000000..8ce1837
--- /dev/null
+++ b/core/jni/android_nfc_NdefRecord.cpp
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "NdefRecord"
+
+#include "jni.h"
+#include "JNIHelp.h"
+
+#include "android_nfc.h"
+
+#include <utils/Log.h>
+
+namespace android {
+
+static jbyteArray android_nfc_NdefRecord_generate(
+ JNIEnv *e, jobject o, jshort flags, jshort tnf, jbyteArray type,
+ jbyteArray id, jbyteArray payload)
+{
+ uint32_t status;
+ phFriNfc_NdefRecord_t record;
+ uint32_t buf_size;
+ uint32_t record_size;
+ uint8_t *buf = NULL;
+ jbyteArray result = NULL;
+
+ /* Prepare NDEF record structure */
+ record.Flags = (uint8_t)flags;
+ record.Tnf = (uint8_t)tnf;
+ record.TypeLength = (uint32_t)e->GetArrayLength(type);
+ record.Type = (uint8_t *)e->GetByteArrayElements(type, NULL);
+ record.IdLength = (uint32_t)e->GetArrayLength(id);
+ record.Id = (uint8_t *)e->GetByteArrayElements(id, NULL);
+ record.PayloadLength = (uint32_t)e->GetArrayLength(payload);
+ record.PayloadData = (uint8_t *)e->GetByteArrayElements(payload, NULL);
+
+ buf_size = record.PayloadLength + record.IdLength + record.TypeLength + 8;
+
+ buf = (uint8_t*)malloc(buf_size);
+ if (buf == NULL)
+ goto end;
+
+ LOGD("phFriNfc_NdefRecord_Generate()");
+
+ status = phFriNfc_NdefRecord_Generate(&record, buf, buf_size,
+ &record_size);
+
+ if (status) {
+ LOGE("phFriNfc_NdefRecord_Generate() returned 0x%04x", status);
+ goto end;
+ }
+ LOGD("phFriNfc_NdefRecord_Generate() returned 0x%04x", status);
+
+ result = e->NewByteArray(record_size);
+ if (result == NULL)
+ goto end;
+
+ e->SetByteArrayRegion(result, 0, record_size, (jbyte *)buf);
+
+end:
+ e->ReleaseByteArrayElements(type, (jbyte *)record.Type, JNI_ABORT);
+ e->ReleaseByteArrayElements(id, (jbyte *)record.Id, JNI_ABORT);
+ e->ReleaseByteArrayElements(payload, (jbyte *)record.PayloadData, JNI_ABORT);
+
+ if(buf)
+ free(buf);
+
+ return result;
+}
+
+static JNINativeMethod gMethods[] = {
+ {"generate", "(SS[B[B[B)[B", (void *)android_nfc_NdefRecord_generate},
+};
+
+int register_android_nfc_NdefRecord(JNIEnv *e)
+{
+ return jniRegisterNativeMethods(e, "android/nfc/NdefRecord", gMethods, NELEM(gMethods));
+}
+
+} // namespace android
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index ff079e4..a22c827 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -341,29 +341,12 @@
android:description="@string/permdesc_bluetooth"
android:label="@string/permlab_bluetooth" />
- <!-- Allows applications to access remote NFC devices
- @hide -->
- <permission android:name="com.trustedlogic.trustednfc.permission.NFC_RAW"
+ <!-- Allows applications to directly communicate over NFC -->
+ <permission android:name="android.permission.NFC"
android:permissionGroup="android.permission-group.NETWORK"
android:protectionLevel="dangerous"
- android:description="@string/permdesc_nfcRaw"
- android:label="@string/permlab_nfcRaw" />
-
- <!-- Allows applications to be notified of remote NFC devices
- @hide -->
- <permission android:name="com.trustedlogic.trustednfc.permission.NFC_NOTIFY"
- android:permissionGroup="android.permission-group.NETWORK"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_nfcNotify"
- android:label="@string/permlab_nfcNotify" />
-
- <!-- Allows applications to be notified of remote NFC LLCP devices
- @hide -->
- <permission android:name="com.trustedlogic.trustednfc.permission.NFC_LLCP"
- android:permissionGroup="android.permission-group.NETWORK"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_nfcLlcp"
- android:label="@string/permlab_nfcLlcp" />
+ android:description="@string/permdesc_nfc"
+ android:label="@string/permlab_nfc" />
<!-- Allows an application to use SIP service -->
<permission android:name="android.permission.USE_SIP"
@@ -875,14 +858,6 @@
android:description="@string/permdesc_bluetoothAdmin"
android:label="@string/permlab_bluetoothAdmin" />
- <!-- Allows applications to change NFC connectivity settings
- @hide -->
- <permission android:name="com.trustedlogic.trustednfc.permission.NFC_ADMIN"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="dangerous"
- android:description="@string/permdesc_nfcAdmin"
- android:label="@string/permlab_nfcAdmin" />
-
<!-- Allows an application to clear the caches of all installed
applications on the device. -->
<permission android:name="android.permission.CLEAR_APP_CACHE"
@@ -1371,7 +1346,8 @@
</receiver>
<receiver android:name="com.android.server.MasterClearReceiver"
- android:permission="android.permission.MASTER_CLEAR" >
+ android:permission="android.permission.MASTER_CLEAR"
+ android:priority="100" >
<intent-filter>
<!-- For Checkin, Settings, etc.: action=MASTER_CLEAR -->
<action android:name="android.intent.action.MASTER_CLEAR" />
@@ -1381,8 +1357,11 @@
<category android:name="android.intent.category.MASTER_CLEAR" />
</intent-filter>
</receiver>
+
+ <service android:name="com.android.internal.os.storage.ExternalStorageFormatter"
+ android:permission="android.permission.MASTER_CLEAR"
+ android:exported="true" />
+
</application>
</manifest>
-
-
diff --git a/core/res/res/drawable-hdpi/ic_media_ff.png b/core/res/res/drawable-hdpi/ic_media_ff.png
index b0dc05b..0d9ecd0 100644
--- a/core/res/res/drawable-hdpi/ic_media_ff.png
+++ b/core/res/res/drawable-hdpi/ic_media_ff.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_next.png b/core/res/res/drawable-hdpi/ic_media_next.png
index 2552f4e..5ee97b6 100644
--- a/core/res/res/drawable-hdpi/ic_media_next.png
+++ b/core/res/res/drawable-hdpi/ic_media_next.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_pause.png b/core/res/res/drawable-hdpi/ic_media_pause.png
index d4670c2..aa25ee4 100644
--- a/core/res/res/drawable-hdpi/ic_media_pause.png
+++ b/core/res/res/drawable-hdpi/ic_media_pause.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_play.png b/core/res/res/drawable-hdpi/ic_media_play.png
index e67ec80..e4110bd 100644
--- a/core/res/res/drawable-hdpi/ic_media_play.png
+++ b/core/res/res/drawable-hdpi/ic_media_play.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_previous.png b/core/res/res/drawable-hdpi/ic_media_previous.png
index 05eba71..b581a11 100644
--- a/core/res/res/drawable-hdpi/ic_media_previous.png
+++ b/core/res/res/drawable-hdpi/ic_media_previous.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_rew.png b/core/res/res/drawable-hdpi/ic_media_rew.png
index 88eed2e..4dd8739 100644
--- a/core/res/res/drawable-hdpi/ic_media_rew.png
+++ b/core/res/res/drawable-hdpi/ic_media_rew.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_bottom_bright.9.png b/core/res/res/drawable-hdpi/popup_bottom_bright.9.png
old mode 100755
new mode 100644
index eaae624..6e5fbb5
--- a/core/res/res/drawable-hdpi/popup_bottom_bright.9.png
+++ b/core/res/res/drawable-hdpi/popup_bottom_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_bottom_dark.9.png b/core/res/res/drawable-hdpi/popup_bottom_dark.9.png
old mode 100755
new mode 100644
index 442105c..3434b2d
--- a/core/res/res/drawable-hdpi/popup_bottom_dark.9.png
+++ b/core/res/res/drawable-hdpi/popup_bottom_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_bottom_medium.9.png b/core/res/res/drawable-hdpi/popup_bottom_medium.9.png
old mode 100755
new mode 100644
index 26ede44..673a509
--- a/core/res/res/drawable-hdpi/popup_bottom_medium.9.png
+++ b/core/res/res/drawable-hdpi/popup_bottom_medium.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_center_bright.9.png b/core/res/res/drawable-hdpi/popup_center_bright.9.png
old mode 100755
new mode 100644
index e0ea9c0fa..c2a739c
--- a/core/res/res/drawable-hdpi/popup_center_bright.9.png
+++ b/core/res/res/drawable-hdpi/popup_center_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_center_dark.9.png b/core/res/res/drawable-hdpi/popup_center_dark.9.png
old mode 100755
new mode 100644
index ac1f92df..9d2bfb1
--- a/core/res/res/drawable-hdpi/popup_center_dark.9.png
+++ b/core/res/res/drawable-hdpi/popup_center_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_center_medium.9.png b/core/res/res/drawable-hdpi/popup_center_medium.9.png
old mode 100755
new mode 100644
index 5129dbd..4375bf2d
--- a/core/res/res/drawable-hdpi/popup_center_medium.9.png
+++ b/core/res/res/drawable-hdpi/popup_center_medium.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_full_bright.9.png b/core/res/res/drawable-hdpi/popup_full_bright.9.png
old mode 100755
new mode 100644
index e5b1b46..6b8aa9d
--- a/core/res/res/drawable-hdpi/popup_full_bright.9.png
+++ b/core/res/res/drawable-hdpi/popup_full_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_full_dark.9.png b/core/res/res/drawable-hdpi/popup_full_dark.9.png
old mode 100755
new mode 100644
index c28465b..2884abe
--- a/core/res/res/drawable-hdpi/popup_full_dark.9.png
+++ b/core/res/res/drawable-hdpi/popup_full_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_top_bright.9.png b/core/res/res/drawable-hdpi/popup_top_bright.9.png
old mode 100755
new mode 100644
index 766a658..76c35ec
--- a/core/res/res/drawable-hdpi/popup_top_bright.9.png
+++ b/core/res/res/drawable-hdpi/popup_top_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/popup_top_dark.9.png b/core/res/res/drawable-hdpi/popup_top_dark.9.png
old mode 100755
new mode 100644
index 31f5f3b..f317330
--- a/core/res/res/drawable-hdpi/popup_top_dark.9.png
+++ b/core/res/res/drawable-hdpi/popup_top_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_adb.png b/core/res/res/drawable-hdpi/stat_sys_adb.png
index fdf6c6c..f99b780 100755
--- a/core/res/res/drawable-hdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-hdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_gps_on.png b/core/res/res/drawable-hdpi/stat_sys_gps_on.png
index 150c9fc..2ed6082 100644
--- a/core/res/res/drawable-hdpi/stat_sys_gps_on.png
+++ b/core/res/res/drawable-hdpi/stat_sys_gps_on.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_ff.png b/core/res/res/drawable-mdpi/ic_media_ff.png
old mode 100755
new mode 100644
index ce7e195..d99779d
--- a/core/res/res/drawable-mdpi/ic_media_ff.png
+++ b/core/res/res/drawable-mdpi/ic_media_ff.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_next.png b/core/res/res/drawable-mdpi/ic_media_next.png
old mode 100755
new mode 100644
index 84f38e8..cee4930
--- a/core/res/res/drawable-mdpi/ic_media_next.png
+++ b/core/res/res/drawable-mdpi/ic_media_next.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_pause.png b/core/res/res/drawable-mdpi/ic_media_pause.png
old mode 100755
new mode 100644
index 688118e..9e8b675
--- a/core/res/res/drawable-mdpi/ic_media_pause.png
+++ b/core/res/res/drawable-mdpi/ic_media_pause.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_play.png b/core/res/res/drawable-mdpi/ic_media_play.png
old mode 100755
new mode 100644
index 7aa7af8..96593a4
--- a/core/res/res/drawable-mdpi/ic_media_play.png
+++ b/core/res/res/drawable-mdpi/ic_media_play.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_previous.png b/core/res/res/drawable-mdpi/ic_media_previous.png
old mode 100755
new mode 100644
index 1bba544..1be95b4
--- a/core/res/res/drawable-mdpi/ic_media_previous.png
+++ b/core/res/res/drawable-mdpi/ic_media_previous.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_rew.png b/core/res/res/drawable-mdpi/ic_media_rew.png
old mode 100755
new mode 100644
index 132df7f..8311508
--- a/core/res/res/drawable-mdpi/ic_media_rew.png
+++ b/core/res/res/drawable-mdpi/ic_media_rew.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_background.9.png b/core/res/res/drawable-mdpi/menu_background.9.png
index ee99583..41a3d34 100644
--- a/core/res/res/drawable-mdpi/menu_background.9.png
+++ b/core/res/res/drawable-mdpi/menu_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png b/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png
index d368983..1ddf091 100644
--- a/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png
+++ b/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_bottom_bright.9.png b/core/res/res/drawable-mdpi/popup_bottom_bright.9.png
index e8e203b3..e7b713d 100644
--- a/core/res/res/drawable-mdpi/popup_bottom_bright.9.png
+++ b/core/res/res/drawable-mdpi/popup_bottom_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_bottom_dark.9.png b/core/res/res/drawable-mdpi/popup_bottom_dark.9.png
index c21f982..88ce336 100644
--- a/core/res/res/drawable-mdpi/popup_bottom_dark.9.png
+++ b/core/res/res/drawable-mdpi/popup_bottom_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_bottom_medium.9.png b/core/res/res/drawable-mdpi/popup_bottom_medium.9.png
old mode 100755
new mode 100644
index 0992135..e5aaad0
--- a/core/res/res/drawable-mdpi/popup_bottom_medium.9.png
+++ b/core/res/res/drawable-mdpi/popup_bottom_medium.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_center_bright.9.png b/core/res/res/drawable-mdpi/popup_center_bright.9.png
index c817338db..a259356 100644
--- a/core/res/res/drawable-mdpi/popup_center_bright.9.png
+++ b/core/res/res/drawable-mdpi/popup_center_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_center_dark.9.png b/core/res/res/drawable-mdpi/popup_center_dark.9.png
index 79ffdaa..9378dbf 100644
--- a/core/res/res/drawable-mdpi/popup_center_dark.9.png
+++ b/core/res/res/drawable-mdpi/popup_center_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_center_medium.9.png b/core/res/res/drawable-mdpi/popup_center_medium.9.png
old mode 100755
new mode 100644
index ba2e9bf..885403c
--- a/core/res/res/drawable-mdpi/popup_center_medium.9.png
+++ b/core/res/res/drawable-mdpi/popup_center_medium.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_full_bright.9.png b/core/res/res/drawable-mdpi/popup_full_bright.9.png
index d33ff2b..d7fb3db 100644
--- a/core/res/res/drawable-mdpi/popup_full_bright.9.png
+++ b/core/res/res/drawable-mdpi/popup_full_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_full_dark.9.png b/core/res/res/drawable-mdpi/popup_full_dark.9.png
index 84ba5ca0..7b9f291 100644
--- a/core/res/res/drawable-mdpi/popup_full_dark.9.png
+++ b/core/res/res/drawable-mdpi/popup_full_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_top_bright.9.png b/core/res/res/drawable-mdpi/popup_top_bright.9.png
index 727a948..72d82f0 100644
--- a/core/res/res/drawable-mdpi/popup_top_bright.9.png
+++ b/core/res/res/drawable-mdpi/popup_top_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/popup_top_dark.9.png b/core/res/res/drawable-mdpi/popup_top_dark.9.png
index 2f847ad..616d80f 100644
--- a/core/res/res/drawable-mdpi/popup_top_dark.9.png
+++ b/core/res/res/drawable-mdpi/popup_top_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_adb.png b/core/res/res/drawable-mdpi/stat_sys_adb.png
old mode 100644
new mode 100755
index 12abeda..f0fad76
--- a/core/res/res/drawable-mdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-mdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 9029ab3..dc971bb 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Nástroje pro vývojáře"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funkce pouze pro vývojáře aplikací"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Úložiště"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Přístup ke kartě SD."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Přístup ke sdílenému úložišti"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Přístup ke kartě SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"zakázání či změny stavového řádku"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Umožňuje aplikaci zakázat stavový řádek nebo přidat či odebrat systémové ikony."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Umožňuje aplikaci připojit či odpojit souborové systémy ve vyměnitelných úložištích."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formátovat externí úložiště"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Umožňuje aplikaci formátovat vyměnitelná úložiště."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"získat informace o zabezpečeném úložišti"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Umožňuje aplikaci získat informace o zabezpečeném úložišti."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"vytvořit zabezpečené úložiště"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Umožňuje aplikaci vytvořit zabezpečené úložiště."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"zničit zabezpečené úložiště"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Umožňuje aplikaci zničit zabezpečené úložiště."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"připojit nebo odpojit zabezpečené úložiště"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Umožňuje aplikaci připojit nebo odpojit zabezpečené úložiště."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"přejmenovat zabezpečené úložiště"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Umožňuje aplikaci přejmenovat zabezpečeného úložiště."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"získat informace o zabezpečeném úložišti"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Umožňuje aplikaci získat informace o zabezpečeném úložišti."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"vytvořit zabezpečené úložiště"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Umožňuje aplikaci vytvořit zabezpečené úložiště."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"zničit zabezpečené úložiště"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Umožňuje aplikaci zničit zabezpečené úložiště."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"připojit nebo odpojit zabezpečené úložiště"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Umožňuje aplikaci připojit nebo odpojit zabezpečené úložiště."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"přejmenovat zabezpečené úložiště"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Umožňuje aplikaci přejmenovat zabezpečeného úložiště."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"ovládání vibrací"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Umožňuje aplikaci ovládat vibrace."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"ovládání kontrolky"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Umožňuje aplikaci konfigurovat místní telefon s rozhraním Bluetooth a vyhledávat a párovat vzdálená zařízení."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"vytvoření připojení Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Umožňuje aplikaci zobrazit konfiguraci místního telefonu s rozhraním Bluetooth, vytvářet připojení ke spárovaným zařízením a přijímat tato připojení."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Správa NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Umožňuje aplikaci nakonfigurovat místní telefon NFC."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Úplný přístup NFC ke vzdálenému zařízení"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Umožňuje aplikaci přístup ke vzdáleným zařízením NFC."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Oznámení NFC ze vzdáleného zařízení"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Umožňuje aplikaci přijímat oznámení o operacích souvisejících se vzdálenými zařízeními NFC."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Oznámení NFC ze vzdáleného zařízení LLCP"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Umožňuje aplikaci přijímat oznámení o operacích LLCP souvisejících se vzdálenými zařízeními NFC."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"vypnutí zámku kláves"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Umožňuje aplikaci vypnout zámek kláves a související zabezpečení heslem. Příkladem oprávněného použití této funkce je vypnutí zámku klávesnice při příchozím hovoru a jeho opětovné zapnutí po skončení hovoru."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"čtení nastavení synchronizace"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Umožní aplikaci číst soukromá slova, jména a fráze, která uživatel mohl uložit do svého slovníku."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"zápis do slovníku definovaného uživatelem"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Umožní aplikaci zapisovat nová slova do uživatelského slovníku."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"změna/smazání obsahu karty SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"úpravy/mazání obsahu sdíl. úložiště"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"změna/smazání obsahu karty SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Umožní aplikaci zápis na kartu SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Umožní zápis do sdíl. úlož."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Umožní aplikaci zápis na kartu SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"přistupovat do souborového systému mezipaměti"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Umožňuje aplikaci číst a zapisovat do souborového systému mezipaměti."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Omezení hesla"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Omezuje typ hesel, která lze použít."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Sledování pokusů o přihlášení"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Sleduje nezdařené pokusy o přihlášení do zařízení a umožňuje provedení určité akce."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Obnovení hesla"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Vynutí nastavení hesla na novou hodnotu, kterou vám před přihlášením musí sdělit správce."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Vynucení uzamčení"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Určuje, kdy dojde k uzamčení zařízení a bude požadováno opětovné zadání hesla."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Nastavit pravidla pro heslo"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Ovládat délku hesel pro odemčení obrazovky a v nich používané znaky"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Sledovat pokusy o odemčení obrazovky"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Sledovat počet nesprávných hesel zadaných při odemykání obrazovky a uzamknout telefon nebo odstranit veškerá data telefonu, pokud dojde k příliš mnoha neplatným pokusům o zadání hesla"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Změnit heslo pro odemknutí obrazovky"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Změnit heslo pro odemknutí obrazovky"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Uzamknout obrazovku"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Ovládat, jak a kdy se obrazovka uzamkne"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Vymazání všech dat"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Bez dalšího potvrzení obnoví výchozí nastavení z výroby a smaže všechna data."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Bez upozornění smazat všechna data telefonu obnovením továrních dat"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Domů"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Umožňuje aplikaci číst všechny navštívené adresy URL a záložky Prohlížeče."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"zápis do historie a záložek Prohlížeče"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Umožní aplikaci změnit historii či záložky prohlížeče uložené v telefonu. Škodlivé aplikace mohou pomocí tohoto nastavení vymazat či pozměnit data Prohlížeče."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"nastavit budík v budíku"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Dovoluje aplikaci nastavit budík v nainstalované aplikaci budíku. Některé budíkové aplikace nemusí tuto funkci implementovat."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Změnit oprávnění prohlížeče poskytovat informace o zeměpisné poloze"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Umožňuje aplikaci změnit oprávnění prohlížeče poskytovat informace o zeměpisné poloze. Škodlivé aplikace mohou toto nastavení použít k odesílání informací o umístění na libovolné webové stránky."</string>
<string name="save_password_message" msgid="767344687139195790">"Chcete, aby si prohlížeč zapamatoval toto heslo?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Zobrazit vše"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Úložiště USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB připojeno"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Připojili jste svůj telefon k počítači pomocí USB. Chcete-li kopírovat soubory z počítače na kartu SD v zařízení Android či obráceně, vyberte následující tlačítko."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Připojili jste telefon k počítači pomocí rozhraní USB. Chcete-li kopírovat soubory z počítače do sdíleného úložiště zařízení Android či obráceně, vyberte následující tlačítko."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Připojili jste svůj telefon k počítači pomocí USB. Chcete-li kopírovat soubory z počítače na kartu SD v zařízení Android či obráceně, vyberte následující tlačítko."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Zapnout úložiště USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Při používání vaší karty SD jako úložiště USB došlo k problému."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Při používání vaší karty SD jako úložiště USB došlo k problému."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Při používání sdíleného úložiště jako úložiště USB došlo k problému."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Při používání sdíleného úložiště jako úložiště USB došlo k problému."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB připojeno"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Vyberte, chcete-li kopírovat soubory do nebo z počítače."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Vypnout úložiště USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Vyberte, chcete-li vypnout úložiště USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"Úložiště USB je používáno"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Před vypnutím úložiště USB zkontrolujte, zda jste odpojili (vyjmuli) kartu SD zařízení Android z počítače."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Před vypnutím úložiště USB zkontrolujte, zda jste odpojili (vyňali) sdílené úložiště zařízení Android z počítače."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Před vypnutím úložiště USB zkontrolujte, zda jste odpojili (vyjmuli) kartu SD zařízení Android z počítače."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Vypnout úložiště USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Při vypínání úložiště USB došlo k problémům. Zkontrolujte, zda byl hostitel USB odpojen, a zkuste to znovu."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Pokud zapnete úložiště USB, dojde k zastavení některých používaných aplikací. Tyto aplikace pravděpodobně nebudou k dispozici až do vypnutí úložiště USB."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Chyba operace na rozhraní USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formátovat kartu SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formátovat sdíl. úl."</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formátovat kartu SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Opravdu chcete kartu SD naformátovat? Všechna data na kartě budou ztracena."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Chcete sdílené úložiště formátovat, a smazat tak všechny soubory, které jsou v něm uložené? Tuto akci nelze vrátit zpět."</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Opravdu chcete kartu SD naformátovat? Všechna data na kartě budou ztracena."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formátovat"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Ladění přes rozhraní USB připojeno"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidáti"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Příprava karty SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Příprava sdíleného úložiště"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Příprava karty SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Kontrola chyb."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Prázdná karta SD"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Prázdné sdílené úložiště"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Prázdná karta SD"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"Karta SD je prázdná nebo používá nepodporovaný systém souborů."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Sdílené úložiště je prázdné nebo obsahuje nepodporovaný systém souborů."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Karta SD je prázdná nebo obsahuje nepodporovaný systém souborů."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Poškozená karta SD"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Poškozené sdílené úložiště"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Poškozená karta SD"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"Karta SD je poškozena. Pravděpodobně ji bude nutné znovu formátovat."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Sdílené úložiště je poškozené. Bude pravděpodobně nutné je přeformátovat."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Karta SD je poškozená. Bude pravděpodobně nutné ji přeformátovat."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Karta SD byla neočekávaně odebrána"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Sdíl. úlož. nečekaně odebráno"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Karta SD byla neočekávaně odebrána"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Chcete-li zabránit ztrátě dat, kartu SD před odebráním odpojte."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Před odebráním sdíleného úložiště ho nejprve odpojte, abyste zabránili ztrátě dat."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Chcete-li zabránit ztrátě dat, kartu SD před odebráním odpojte."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"Kartu SD je možné bezpečně odebrat"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Sdílené úložiště lze odebrat"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Kartu SD je možné bezpečně odebrat"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"Kartu SD lze nyní bezpečně vyjmout."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Sdílené úložiště lze bezpečně odebrat."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Kartu SD lze bezpečně odebrat."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Karta SD byla odstraněna"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Sdílené úložiště bylo odebráno"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Karta SD byla odstraněna"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Karta SD byla odebrána. Chcete-li zvětšit úložiště svého zařízení, vložte kartu SD."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Sdílené úložiště je odebráno. Vložte nové médium."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Karta SD byla odebrána. Vložte novou kartu."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Nebyly nalezeny žádné odpovídající aktivity."</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"aktualizovat statistiku použití součástí"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index a74b9b7..de01ac0 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Udviklingsværktøjer"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funktioner kun til programudviklere."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Få adgang til SD-kortet."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få adgang til delt hukommelse."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få adgang til SD-kortet."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"deaktiver eller rediger statuslinje"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Tillader, at et program deaktiverer statuslinjen eller tilføjer eller fjerner systemikoner."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Tillader, at programmet monterer eller demonterer filsystemer til flytbar lagring."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formater ekstern lagring"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Tillader, at et program formaterer flytbart lager."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"hente oplysninger om sikkert lager"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Tillader programmet at få oplysninger om sikkert lager."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"opret sikkert lager"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Tillader programmet at oprette sikkert lager."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"ødelægge sikkert lager"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Tillader programmet at ødelægge sikkert lager."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"montere/demontere sikkert lager"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Tillader programmet at montere/demontere sikkert lager."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"omdøbe sikkert lager"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Tillader programmet at omdøbe sikkert lager."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"hente oplysninger om sikkert lager"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Tillader programmet at få oplysninger om sikkert lager."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"opret sikkert lager"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Tillader programmet at oprette sikkert lager."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"ødelægge sikkert lager"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Tillader programmet at ødelægge sikkert lager."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"montere/demontere sikkert lager"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Tillader programmet at montere/demontere sikkert lager."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"omdøbe sikkert lager"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Tillader programmet at omdøbe sikkert lager."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"kontroller vibrator"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Lader programmet kontrollere vibratoren."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"kontroller lommelygte"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Tillader, at et program konfigurerer den lokale Bluetooth-telefon samt opdager og parrer med fjerne enheder."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"opret Bluetooth-forbindelser"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Tillader, at et program viser konfigurationen af den lokale Bluetooth-telefon samt opretter og accepterer forbindelse med parrede enheder."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFC-administration"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Tillader, at et program konfigurerer den lokale NFC-telefon."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"NFC har fuld adgang til fjernenhed"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Tillader, at et program har adgang til NFC-fjernenheder."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"NFC-meddelelse fra fjernenhed"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Tillader, at et program meddeles om handlinger, som er relateret til NFC-fjernenheder."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"NFC-meddelelse fra LLCP-fjernenhed"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Tillader, at et program meddeles om LLCP-handlinger, som er relateret til NFC-fjernenheder."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"deaktiver tastaturlås"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Tillader, at et program deaktiverer tastaturlåsen og al associeret adgangskodesikkerhed. Et legitimt eksempel på dette er, at telefonen deaktiverer tastaturlåsen, når der modtages et indgående telefonopkald, og genaktiverer tastaturlåsen, når opkaldet er afsluttet."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"læs indstillinger for synkronisering"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Tillader, at et program læser alle private ord, navne og sætninger, som brugeren eventuelt har gemt i brugerordbogen."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"skriv til den brugerdefinerede ordbog"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Tillader, at et program skriver nye ord i brugerordbogen."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"ret/slet indholdet på SD-kortet"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"ret/slet indholdet i delt hukommelse"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"ret/slet indholdet på SD-kortet"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Tillader, at et program skriver til SD-kortet."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Til. prog. at sk. t. delt huk."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Tillader, at et program skriver til SD-kortet."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"få adgang til cache-filsystemet"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Tillader, at et program læser og skriver til cache-filsystemet."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Begræns adgangskode"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Begræns de adgangskodetyper, du har tilladelse til at bruge."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Vis forsøg på at logge ind"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Overvåg mislykkede forsøg på at logge ind på enheden for at foretage en handling."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Nulstil adgangskode"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Tving din adgangskode til en ny værdi. Dette kræver, at administratoren giver den til dig, før du kan kogge ind."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Tvangslås"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Kontrol når enheden låses, så du skal indtaste adgangskoden igen."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Indstil regler for adgangskode"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Kontroller længden samt tilladte tegn i adgangskoder til oplåsning af skærm"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Overvåg forsøg på oplåsning af skærm"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Overvåg antallet af forkerte adgangskoder, som indtastes ved oplåsning af skærmen, og lås telefonen, eller slet alle telefonens data, hvis der er for mange forkerte forsøg"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Skift adgangskode til oplåsning af skærm"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Skift adgangskode til oplåsning af skærm"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Lås skærmen"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Bestem, hvordan og hvornår skærmen låses"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Slet alle data"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Foretag en fabriksnulstilling, der sletter alle dine data uden bekræftelse."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Slet telefonens data uden varsel ved at gendanne fabriksindstillinger"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hjem"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Tillader, at programmet læser alle de webadresser, browseren har besøgt, og alle browserens bogmærker."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"skriv browserens oversigt og bogmærker"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Tillader, at et program ændrer browseroversigten eller bogmærker, der er gemt på din telefon. Ondsindede programmer kan bruge dette til at slette eller ændre din browsers data."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"angiv alarm i alarmprogram"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Tillader, at programmet angiver en alarm i et installeret alarmprogram. Nogle alarmprogrammer kan ikke implementere denne funktion."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Skift browsertilladelser for geografisk placering"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Giver et program tilladelse til at ændre browserens tilladelser for geografisk placering. Skadelige programmer kan bruge dette til at tillade, at placeringsoplysninger sendes til vilkårlige websteder."</string>
<string name="save_password_message" msgid="767344687139195790">"Ønsker du, at browseren skal huske denne adgangskode?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-masselagring"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB er tilsluttet"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Du har forbundet din telefon til din computer via USB. Vælg knappen nedenfor, hvis du ønsker at kopiere filer mellem din computer og din Androids SD-kort."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Du har forbundet din telefon til din computer via USB. Vælg knappen nedenfor, hvis du ønsker at kopiere filer mellem din computer og din Androids delte hukommelse."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Du har forbundet din telefon til din computer via USB. Vælg knappen nedenfor, hvis du ønsker at kopiere filer mellem din computer og din Androids SD-kort."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Slå USB-lagringen til"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Der opstod et problem med at bruge dit SD-kort til USB-lagring."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Der opstod et problem med at bruge dit SD-kort til USB-lagring."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Der opstod et problem med at bruge den delte hukommelse til USB-lagring."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Der opstod et problem med at bruge den delte hukommelse til USB-lagring."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB er tilsluttet"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Vælg for at kopiere filer til/fra din computer."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Slå USB-lagringen fra"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Vælg for at slå USB-lagring fra."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB-lager i brug"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Sørg for, at du har demonteret (\"udskubbet\") din Androids SD-kort fra computeren, før du slår USB-lagring fra."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Sørg for, at du har demonteret (\"udskubbet\") din Androids delte hukommelse fra computeren, før du slår USB-lagring fra."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Sørg for, at du har demonteret (\"udskubbet\") din Androids SD-kort fra computeren, før du slår USB-lagring fra."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Slå USB-lagring fra"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Der opstod et problem med at slå USB-lagringen fra. Sørg for, at du har demonteret USB-værten, og prøv så igen."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Hvis du slår USB-lagring til, vil nogle af de programmer, som du bruger, stoppe, og de kan være utilgængelige, indtil du slår USB-lagring til igen."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB-handlingen mislykkedes"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formater SD-kort"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formater delt hukom."</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formater SD-kort"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Er du sikker på, du ønsker at formatere SD-kortet? Alle data på kortet mistes."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Vil du formatere den delte hukommelse og slette alle filer, som er gemt der? Handlingen kan ikke fortydes!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Er du sikker på, du ønsker at formatere SD-kortet? Alle data på kortet mistes."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formater"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-fejlretning er tilsluttet"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidater"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Forbereder SD-kortet"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Forbereder delt hukommelse"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Forbereder SD-kortet"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Kontrollerer for fejl."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Tomt SD-kort"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Tom delt hukommelse"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Tomt SD-kort"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"SD-kortet er tomt eller bruger et ikke understøttet filsystem."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Delt hukommelse er tom eller har et ikke-understøttet filsystem."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD-kortet er tomt eller har et ikke understøttet filsystem."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Beskadiget SD-kort"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Beskadiget delt hukommelse"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Beskadiget SD-kort"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"SD-kortet er beskadiget. Du skal muligvis omformatere dit kort."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Delt hukommelse er beskadiget. Du bliver muligvis nødt til at formatere den igen."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD-kortet er beskadiget. Du bliver muligvis nødt til at formatere det igen."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SD-kortet blev fjernet uventet"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Delt huk. blev fjernet uventet"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-kortet blev fjernet uventet"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Demonter SD-kortet inden fjernelse for at undgå tab af data."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Demonter delt hukommelse inden fjernelse for at undgå tab af data."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Demonter SD-kortet inden fjernelse for at undgå tab af data."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"SD-kortet kan fjernes sikkert"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Sikkert at fjerne delt hukom."</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD-kortet kan fjernes sikkert"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"SD-kortet kan nu fjernes sikkert."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Du kan nu fjerne den delte hukommelse."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Du kan nu fjerne SD-kortet."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"SD-kortet er fjernet"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Fjernet delt hukommelse"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD-kortet er fjernet"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"SD er fjernet. Indsæt et nyt SD-kort for at øge din enheds lagerplads."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Delt hukommelse fjernet. Indsæt nyt medie."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-kortet er fjernet. Indsæt et nyt."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Der blev ikke fundet nogen matchende aktiviteter"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"opdater brugerstatistikker for komponenter"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 2f4013f..9767f88 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -122,8 +122,8 @@
<string name="httpErrorFileNotFound" msgid="5588380756326017105">"Die angeforderte Datei wurde nicht gefunden."</string>
<string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Es werden zurzeit zu viele Anfragen verarbeitet. Versuchen Sie es später erneut."</string>
<string name="notification_title" msgid="1259940370369187045">"Fehler bei Anmeldung für <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="contentServiceSync" msgid="8353523060269335667">"Synchronisieren"</string>
- <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchronisieren"</string>
+ <string name="contentServiceSync" msgid="8353523060269335667">"Synchronisierung"</string>
+ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchronisierung"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Zu viele <xliff:g id="CONTENT_TYPE">%s</xliff:g> gelöscht."</string>
<string name="low_memory" msgid="6632412458436461203">"Telefonspeicher ist voll! Löschen Sie Dateien, um Speicherplatz freizugeben."</string>
<string name="me" msgid="6545696007631404292">"Eigene"</string>
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Entwickler-Tools"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funktionen nur für Anwendungsentwickler vorgesehen."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Speicher"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Greift auf die SD-Karte zu."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Zugriff auf gem. Speicher"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Greift auf die SD-Karte zu."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"Statusleiste deaktivieren oder ändern"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Ermöglicht der Anwendung, die Statusanzeige zu deaktivieren oder Systemsymbole hinzuzufügen oder zu entfernen."</string>
@@ -184,7 +184,7 @@
<string name="permlab_receiveMms" msgid="8894700916188083287">"MMS empfangen"</string>
<string name="permdesc_receiveMms" msgid="4563346832000174373">"Ermöglicht der Anwendung, MMS-Mitteilungen zu empfangen und zu verarbeiten. Schädliche Anwendungen können Ihre Nachrichten möglicherweise überwachen oder löschen, bevor sie angezeigt werden."</string>
<string name="permlab_sendSms" msgid="5600830612147671529">"Kurznachrichten senden"</string>
- <string name="permdesc_sendSms" msgid="1946540351763502120">"Ermöglicht Anwendungen das Senden von SMS-Nachrichten. Bei schädlichen Anwendungen können Kosten entstehen, wenn diese Nachrichten ohne Ihre Zustimmung versenden."</string>
+ <string name="permdesc_sendSms" msgid="1946540351763502120">"Ermöglicht der Anwendung das Senden von SMS-Nachrichten. Bei schädlichen Anwendungen können Kosten entstehen, wenn diese Nachrichten ohne Ihre Zustimmung versenden."</string>
<string name="permlab_readSms" msgid="4085333708122372256">"SMS oder MMS lesen"</string>
<string name="permdesc_readSms" msgid="3002170087197294591">"Ermöglicht einer Anwendung, auf Ihrem Telefon oder Ihrer SIM-Karte gespeicherte Kurznachrichten zu lesen. Schädliche Anwendungen lesen so möglicherweise Ihre vertraulichen Nachrichten."</string>
<string name="permlab_writeSms" msgid="6881122575154940744">"SMS oder MMS bearbeiten"</string>
@@ -312,7 +312,7 @@
<string name="permlab_recordAudio" msgid="3876049771427466323">"Audio aufnehmen"</string>
<string name="permdesc_recordAudio" msgid="6493228261176552356">"Ermöglicht der Anwendung, auf den Pfad für Audioaufzeichnungen zuzugreifen."</string>
<string name="permlab_camera" msgid="3616391919559751192">"Bilder und Videos aufnehmen"</string>
- <string name="permdesc_camera" msgid="6004878235852154239">"Ermöglicht der Anwendung, Fotos und Videos mit der Kamera aufzunehmen. So kann die Anwendung jederzeit Bilder zusammentragen, die von der Kamera erfasst werden."</string>
+ <string name="permdesc_camera" msgid="6004878235852154239">"Ermöglicht der Anwendung, Fotos und Videos mit der Kamera aufzunehmen. So kann die Anwendung jederzeit Bilder aus dem Sichtfeld der Kamera erfassen."</string>
<string name="permlab_brick" msgid="8337817093326370537">"Telefon dauerhaft deaktivieren."</string>
<string name="permdesc_brick" msgid="5569526552607599221">"Ermöglicht der Anwendung, das gesamte Telefon dauerhaft zu deaktivieren. Dies birgt hohe Risiken."</string>
<string name="permlab_reboot" msgid="2898560872462638242">"Neustart des Telefons erzwingen"</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Ermöglicht der Anwendung, Dateisysteme für austauschbare Datenträger bereitzustellen oder die Bereitstellung aufzuheben."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"Externen Speicher formatieren"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Ermöglicht der Anwendung, austauschbare Datenträger zu formatieren."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"Informationen zum sicheren Speicher abrufen"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Ermöglicht der Anwendung, Informationen zum sicheren Speicher abzurufen."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"Sicheren Speicher erstellen"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Ermöglicht der Anwendung, einen sicheren Speicher zu erstellen."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"Sicheren Speicher entfernen"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Ermöglicht der Anwendung, den sicheren Speicher zu entfernen."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"Sicheren Speicher bereitstellen/trennen"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Ermöglicht der Anwendung, sicheren Speicher bereitzustellen bzw. zu trennen."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"Sicheren Speicher umbenennen"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Ermöglicht der Anwendung, den sicheren Speicher umzubenennen."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"Informationen zum sicheren Speicher abrufen"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Ermöglicht der Anwendung, Informationen zum sicheren Speicher abzurufen."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"Sicheren Speicher erstellen"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Ermöglicht der Anwendung, einen sicheren Speicher zu erstellen."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"Sicheren Speicher entfernen"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Ermöglicht der Anwendung, den sicheren Speicher zu entfernen."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"Sicheren Speicher bereitstellen/trennen"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Ermöglicht der Anwendung, sicheren Speicher bereitzustellen bzw. zu trennen."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"Sicheren Speicher umbenennen"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Ermöglicht der Anwendung, den sicheren Speicher umzubenennen."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"Vibrationsalarm steuern"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Ermöglicht der Anwendung, den Vibrationsalarm zu steuern."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"Lichtanzeige steuern"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Ermöglicht einer Anwendung, das lokale Bluetooth-Telefon zu konfigurieren, Remote-Geräte zu erkennen und eine Verbindung zu diesen herzustellen."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"Bluetooth-Verbindungen herstellen"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Ermöglicht einer Anwendung, die Konfiguration des lokalen Bluetooth-Telefons einzusehen und Verbindungen mit Partnergeräten herzustellen und zu akzeptieren."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFC-Verwaltung"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Ermöglicht einer Anwendung, das lokale NFC-Telefon zu konfigurieren"</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"NFC-Vollzugriff auf Remote-Gerät"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Ermöglicht einer Anwendung den Zugriff auf Remote-NFC-Geräte"</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"NFC-Benachrichtigung von Remote-Gerät"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Hiermit wird eine Anwendung über Operationen im Zusammenhang mit Remote-NFC-Geräten benachrichtigt."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"NFC-Benachrichtigung von Remote-LLCP-Gerät"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Hiermit wird eine Anwendung über LLCP-Operationen im Zusammenhang mit NFC-Remote-Geräten benachrichtigt."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"Tastensperre deaktivieren"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Ermöglicht einer Anwendung, die Tastensperre sowie den damit verbundenen Passwortschutz zu deaktivieren. So wird die Tastensperre vom Telefon deaktiviert, wenn ein Anruf eingeht, und nach Beendigung des Anrufs wieder aktiviert."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"Synchronisierungseinstellungen lesen"</string>
@@ -432,56 +424,60 @@
<string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"abonnierte Feeds schreiben"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"Ermöglicht einer Anwendung, Änderungen an den kürzlich synchronisierten Feeds vorzunehmen. Schädliche Anwendungen könnten so Ihre synchronisierten Feeds ändern."</string>
<string name="permlab_readDictionary" msgid="432535716804748781">"nutzerdefiniertes Wörterbuch lesen"</string>
- <string name="permdesc_readDictionary" msgid="1082972603576360690">"Erlaubt einer Anwendung, alle privaten Wörter, Namen und Ausdrücke zu lesen, die ein Nutzer in seinem Wörterbuch gespeichert hat."</string>
+ <string name="permdesc_readDictionary" msgid="1082972603576360690">"Ermöglicht einer Anwendung, alle privaten Wörter, Namen und Ausdrücke zu lesen, die ein Nutzer in seinem Wörterbuch gespeichert hat."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"in nutzerdefiniertes Wörterbuch schreiben"</string>
- <string name="permdesc_writeDictionary" msgid="2241256206524082880">"Ermöglicht einer Anwendung, neue Wörter in das Wörterbuch des Nutzers zu schreiben."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"SD-Karten-Inhalt ändern/löschen"</string>
+ <string name="permdesc_writeDictionary" msgid="2241256206524082880">"Ermöglicht einer Anwendung, Ihrem Wörterbuch neue Einträge hinzuzufügen."</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"Speicherinhalt ändern/löschen"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SD-Karten-Inhalt ändern/löschen"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Ermöglicht einer Anwendung, auf die SD-Karte zu schreiben"</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Schreiben in gem. Speicher"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Ermöglicht einer Anwendung, auf die SD-Karte zu schreiben"</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"Zugriff auf das Cache-Dateisystem"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Gewährt einer Anwendung Lese- und Schreibzugriff auf das Cache-Dateisystem."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Passwort beschränken"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Beschränken der erlaubten Passworttypen"</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Anmeldeversuche überwachen"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Fehlgeschlagene Versuche·zum Anmelden/Durchführen einer Aktion überwachen"</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Passwort zurücksetzen"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Festlegen eines neuen Werts für Ihr Passwort, sodass der Administrator es Ihnen vor dem Anmelden übermitteln muss."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Sperren erzwingen"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Steuerung der Gerätesperre; erfordert die erneute Passworteingabe"</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Passwortregeln festlegen"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Zulässige Länge und Zeichen für Passwörter zum Entsperren des Displays festlegen"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Versuche zum Entsperren des Displays überwachen"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Anzahl der falsch eingegebenen Passwörter beim Entsperren des Displays überwachen und Telefon sperren oder alle Daten auf dem Telefon löschen, wenn zu häufig ein falsches Passwort eingegeben wird"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Passwort zum Entsperren des Displays ändern"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Passwort zum Entsperren des Displays ändern"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Display sperren"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Steuern Sie, wie und wann das Display gesperrt wird."</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Alle Daten löschen"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Zurücksetzen auf die Werkseinstellungen. Dabei werden alle Ihre Daten ohne Nachfrage gelöscht."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Auf Werkseinstellungen zurücksetzen und Daten auf dem Telefon ohne Warnung löschen"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Privat"</item>
<item msgid="869923650527136615">"Mobil"</item>
- <item msgid="7897544654242874543">"Arbeit"</item>
- <item msgid="1103601433382158155">"Fax (Arbeit)"</item>
+ <item msgid="7897544654242874543">"Geschäftlich"</item>
+ <item msgid="1103601433382158155">"Fax (geschäftl.)"</item>
<item msgid="1735177144948329370">"Fax (privat)"</item>
<item msgid="603878674477207394">"Pager"</item>
- <item msgid="1650824275177931637">"Andere"</item>
+ <item msgid="1650824275177931637">"Sonstige"</item>
<item msgid="9192514806975898961">"Benutzerdefiniert"</item>
</string-array>
<string-array name="emailAddressTypes">
<item msgid="8073994352956129127">"Privat"</item>
- <item msgid="7084237356602625604">"Arbeit"</item>
- <item msgid="1112044410659011023">"Andere"</item>
+ <item msgid="7084237356602625604">"Geschäftlich"</item>
+ <item msgid="1112044410659011023">"Sonstige"</item>
<item msgid="2374913952870110618">"Benutzerdefiniert"</item>
</string-array>
<string-array name="postalAddressTypes">
<item msgid="6880257626740047286">"Privat"</item>
- <item msgid="5629153956045109251">"Arbeit"</item>
- <item msgid="4966604264500343469">"Andere"</item>
+ <item msgid="5629153956045109251">"Geschäftlich"</item>
+ <item msgid="4966604264500343469">"Sonstige"</item>
<item msgid="4932682847595299369">"Benutzerdefiniert"</item>
</string-array>
<string-array name="imAddressTypes">
<item msgid="1738585194601476694">"Privat"</item>
- <item msgid="1359644565647383708">"Arbeit"</item>
+ <item msgid="1359644565647383708">"Geschäftlich"</item>
<item msgid="7868549401053615677">"Andere"</item>
<item msgid="3145118944639869809">"Benutzerdefiniert"</item>
</string-array>
<string-array name="organizationTypes">
- <item msgid="7546335612189115615">"Arbeit"</item>
- <item msgid="4378074129049520373">"Andere"</item>
+ <item msgid="7546335612189115615">"Geschäftlich"</item>
+ <item msgid="4378074129049520373">"Sonstige"</item>
<item msgid="3455047468583965104">"Benutzerdefiniert"</item>
</string-array>
<string-array name="imProtocols">
@@ -497,11 +493,11 @@
<string name="phoneTypeCustom" msgid="1644738059053355820">"Benutzerdefiniert"</string>
<string name="phoneTypeHome" msgid="2570923463033985887">"Privat"</string>
<string name="phoneTypeMobile" msgid="6501463557754751037">"Mobil"</string>
- <string name="phoneTypeWork" msgid="8863939667059911633">"Arbeit"</string>
- <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Fax (Beruflich)"</string>
+ <string name="phoneTypeWork" msgid="8863939667059911633">"Geschäftlich"</string>
+ <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Fax (geschäftl.)"</string>
<string name="phoneTypeFaxHome" msgid="2067265972322971467">"Fax (privat)"</string>
<string name="phoneTypePager" msgid="7582359955394921732">"Pager"</string>
- <string name="phoneTypeOther" msgid="1544425847868765990">"Andere"</string>
+ <string name="phoneTypeOther" msgid="1544425847868765990">"Sonstige"</string>
<string name="phoneTypeCallback" msgid="2712175203065678206">"Rückruf"</string>
<string name="phoneTypeCar" msgid="8738360689616716982">"Auto"</string>
<string name="phoneTypeCompanyMain" msgid="540434356461478916">"Firma (Hauptnummer)"</string>
@@ -511,8 +507,8 @@
<string name="phoneTypeRadio" msgid="4093738079908667513">"Radio"</string>
<string name="phoneTypeTelex" msgid="3367879952476250512">"Telex"</string>
<string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY/TDD"</string>
- <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Handy (geschäftlich)"</string>
- <string name="phoneTypeWorkPager" msgid="649938731231157056">"Pager (beruflich)"</string>
+ <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Handy (geschäftl.)"</string>
+ <string name="phoneTypeWorkPager" msgid="649938731231157056">"Pager (geschäftl.)"</string>
<string name="phoneTypeAssistant" msgid="5596772636128562884">"Zweite Nummer"</string>
<string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
<string name="eventTypeBirthday" msgid="2813379844211390740">"Geburtstag"</string>
@@ -520,17 +516,17 @@
<string name="eventTypeOther" msgid="5834288791948564594">"Termin"</string>
<string name="emailTypeCustom" msgid="8525960257804213846">"Benutzerdefiniert"</string>
<string name="emailTypeHome" msgid="449227236140433919">"Privat"</string>
- <string name="emailTypeWork" msgid="3548058059601149973">"Beruflich"</string>
- <string name="emailTypeOther" msgid="2923008695272639549">"Andere"</string>
+ <string name="emailTypeWork" msgid="3548058059601149973">"Geschäftlich"</string>
+ <string name="emailTypeOther" msgid="2923008695272639549">"Sonstige"</string>
<string name="emailTypeMobile" msgid="119919005321166205">"Mobil"</string>
<string name="postalTypeCustom" msgid="8903206903060479902">"Benutzerdefiniert"</string>
<string name="postalTypeHome" msgid="8165756977184483097">"Privat"</string>
- <string name="postalTypeWork" msgid="5268172772387694495">"Beruflich"</string>
- <string name="postalTypeOther" msgid="2726111966623584341">"Andere"</string>
+ <string name="postalTypeWork" msgid="5268172772387694495">"Geschäftlich"</string>
+ <string name="postalTypeOther" msgid="2726111966623584341">"Sonstige"</string>
<string name="imTypeCustom" msgid="2074028755527826046">"Benutzerdefiniert"</string>
<string name="imTypeHome" msgid="6241181032954263892">"Privat"</string>
- <string name="imTypeWork" msgid="1371489290242433090">"Beruflich"</string>
- <string name="imTypeOther" msgid="5377007495735915478">"Andere"</string>
+ <string name="imTypeWork" msgid="1371489290242433090">"Geschäftlich"</string>
+ <string name="imTypeOther" msgid="5377007495735915478">"Sonstige"</string>
<string name="imProtocolCustom" msgid="6919453836618749992">"Benutzerdefiniert"</string>
<string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
<string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
@@ -541,13 +537,13 @@
<string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
<string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
<string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
- <string name="orgTypeWork" msgid="29268870505363872">"Beruflich"</string>
- <string name="orgTypeOther" msgid="3951781131570124082">"Andere"</string>
+ <string name="orgTypeWork" msgid="29268870505363872">"Geschäftlich"</string>
+ <string name="orgTypeOther" msgid="3951781131570124082">"Sonstige"</string>
<string name="orgTypeCustom" msgid="225523415372088322">"Benutzerdefiniert"</string>
<string name="sipAddressTypeCustom" msgid="2473580593111590945">"Benutzerdefiniert"</string>
<string name="sipAddressTypeHome" msgid="6093598181069359295">"Privat"</string>
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Geschäftlich"</string>
- <string name="sipAddressTypeOther" msgid="4408436162950119849">"Andere"</string>
+ <string name="sipAddressTypeOther" msgid="4408436162950119849">"Sonstige"</string>
<string name="contact_status_update_attribution" msgid="5112589886094402795">"über <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="contact_status_update_attribution_with_date" msgid="5945386376369979909">"<xliff:g id="DATE">%1$s</xliff:g> über <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"PIN-Code eingeben"</string>
@@ -563,7 +559,7 @@
<string name="lockscreen_emergency_call" msgid="5347633784401285225">"Notruf"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Zurück zum Anruf"</string>
<string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Korrekt!"</string>
- <string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Tut uns leid. Versuchen Sie es noch einmal."</string>
+ <string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Bitte versuchen Sie es erneut."</string>
<string name="lockscreen_plugged_in" msgid="613343852842944435">"Wird geladen (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
<string name="lockscreen_charged" msgid="4938930459620989972">"Aufgeladen"</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Ermöglicht der Anwendung, alle URLs, die mit dem Browser besucht wurden, sowie alle Lesezeichen des Browsers zu lesen."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"Browserverlauf und Lesezeichen schreiben"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Ermöglicht einer Anwendung, den auf Ihrem Telefon gespeicherten Browserverlauf und die Lesezeichen zu ändern. Schädliche Anwendungen können so Ihre Browserdaten löschen oder ändern."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"Alarm im Wecker festlegen"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Ermöglicht dieser Anwendung, einen Alarm mithilfe eines installierten Weckers festzulegen. Einige Weckeranwendungen verfügen möglicherweise nicht über diese Funktion."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Geolokalisierungsberechtigungen des Browsers ändern"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Ermöglicht einer Anwendung, die Geolokalisierungsberechtigungen des Browsers zu ändern. Schädliche Anwendungen können dies nutzen, um das Senden von Standortinformationen an willkürliche Websites zuzulassen."</string>
<string name="save_password_message" msgid="767344687139195790">"Möchten Sie, dass der Browser dieses Passwort speichert?"</string>
@@ -745,7 +739,7 @@
<string name="capital_off" msgid="6815870386972805832">"AUS"</string>
<string name="whichApplication" msgid="4533185947064773386">"Aktion durchführen mit"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Standardmäßig für diese Aktion verwenden."</string>
- <string name="clearDefaultHintMsg" msgid="4815455344600932173">"Löschen Sie die Standardeinstellungen unter \"Starteinstellungen > Anwendungen > Anwendungen verwalten\"."</string>
+ <string name="clearDefaultHintMsg" msgid="4815455344600932173">"Standardeinstellung zurücksetzen unter \"Einstellungen > Anwendungen > Anwendungen verwalten\"."</string>
<string name="chooseActivity" msgid="1009246475582238425">"Aktion auswählen"</string>
<string name="noApplications" msgid="1691104391758345586">"Diese Aktion kann von keiner Anwendung ausgeführt werden."</string>
<string name="aerr_title" msgid="653922989522758100">"Tut uns leid!"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Alle anzeigen"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-Massenspeicher"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-Verbindung"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Sie haben Ihr Telefon über USB mit Ihrem Computer verbunden. Wählen Sie die Schaltfläche unten aus, wenn Sie Dateien auf Ihren Computer oder die SD-Karte Ihres Android-Geräts kopieren möchten."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Sie haben Ihr Telefon über USB mit Ihrem Computer verbunden. Wählen Sie die Schaltfläche unten aus, wenn Sie Dateien von Ihrem Computer in den gemeinsamen Speicher Ihres Android-Geräts und umgekehrt kopieren möchten."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Sie haben Ihr Telefon über USB mit Ihrem Computer verbunden. Wählen Sie die Schaltfläche unten aus, wenn Sie Dateien auf Ihren Computer oder die SD-Karte Ihres Android-Geräts kopieren möchten."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"USB-Speicher aktivieren"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Bei der Verwendung Ihrer SD-Karte als USB-Speicher ist ein Problem aufgetreten."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Bei der Verwendung Ihrer SD-Karte als USB-Speicher ist ein Problem aufgetreten."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Bei der Verwendung Ihres gemeinsamen Speichers als USB-Speicher ist ein Problem aufgetreten."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Bei der Verwendung Ihres gemeinsamen Speichers als USB-Speicher ist ein Problem aufgetreten."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB-Verbindung"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Zum Kopieren von Dateien zum/vom Computer"</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB-Speicher deaktivieren"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Auswählen, um USB-Speicher zu deaktivieren."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB-Speicher in Verwendung"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Stellen Sie vor dem Deaktivieren des USB-Speichers sicher, dass Sie Ihre Android-SD-Karte von Ihrem Computer getrennt (\"ausgeworfen\") haben."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Stellen Sie vor dem Deaktivieren des USB-Speichers sicher, dass Sie den gemeinsamen Android-Speicher von Ihrem Computer getrennt (\"ausgeworfen\") haben."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Stellen Sie vor dem Deaktivieren des USB-Speichers sicher, dass Sie Ihre Android-SD-Karte von Ihrem Computer getrennt (\"ausgeworfen\") haben."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB-Speicher deaktivieren"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Beim Deaktivieren des USB-Speichers ist ein Problem aufgetreten. Überprüfen Sie, ob Sie den USB-Host getrennt haben, und versuchen Sie es erneut."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Wenn Sie den USB-Speicher aktivieren, werden einige von Ihnen verwendete Anwendungen angehalten und sind möglicherweise nicht verfügbar, bis Sie den USB-Speicher wieder deaktivieren."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB-Vorgang fehlgeschlagen"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"SD-Karte formatieren"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Speicher formatieren"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD-Karte formatieren"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Möchten Sie die SD-Karte wirklich formatieren? Alle Daten auf Ihrer Karte gehen dann verloren."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Gemeinsamen Speicher formatieren und alle darauf gespeicherten Dateien löschen? Diese Aktion kann nicht rückgängig gemacht werden!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Möchten Sie die SD-Karte wirklich formatieren? Alle Daten auf Ihrer Karte gehen dann verloren."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-Debugging verbunden"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"Kandidaten"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"SD-Karte wird vorbereitet"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Gem. Speicher vorbereiten"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD-Karte wird vorbereitet"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Suche nach Fehlern"</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"SD-Karte leer"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Gemeinsamer Speicher leer"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"SD-Karte leer"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"Die SD-Karte ist leer oder verwendet ein Dateisystem, das nicht unterstützt wird."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Gemeinsamer Speicher ist leer oder verfügt über ein nicht unterstütztes Dateisystem"</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD-Karte ist leer oder verfügt über ein nicht unterstütztes Dateisystem."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Beschädigte SD-Karte"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Gem. Speicher beschädigt"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Beschädigte SD-Karte"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"Die SD-Karte ist beschädigt. Sie müssen Ihre Karte eventuell neu formatieren."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Gemeinsamer Speicher ist beschädigt. Sie müssen ihn neu formatieren."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Die SD-Karte ist beschädigt. Sie müssen Ihre Karte eventuell neu formatieren."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SD-Karte unerwartet entfernt"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Gem. Speicher entfernt"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-Karte unerwartet entfernt"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"SD-Karte vor dem Entnehmen trennen, um Datenverlust zu vermeiden."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Trennen Sie den gemeinsamen Speicher vor dem Entfernen, um Datenverlust zu vermeiden."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"SD-Karte vor dem Entnehmen trennen, um Datenverlust zu vermeiden."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"SD-Karte kann entfernt werden."</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Speicher kann entfernt werden."</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD-Karte kann entfernt werden."</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"Die SD-Karte kann jetzt entfernt werden."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Gemeinsamer Speicher kann entfernt werden."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Die SD-Karte kann entfernt werden."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"SD-Karte entfernt"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Gemeinsamer Speicher entfernt"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD-Karte entfernt"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Die SD-Karte wurde entfernt. Legen Sie eine neue SD-Karte ein, um den Speicherplatz Ihres Geräts zu erweitern."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Gemeinsamer Speicher entfernt. Neuen Datenträger einlegen"</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-Karte entfernt. Legen Sie eine neue ein."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Keine passenden Aktivitäten gefunden"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"Nutzungsstatistik der Komponente aktualisieren"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 7128ad7..72b8aa9 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Εργαλεία ανάπτυξης"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Δυνατότητες που είναι απαραίτητες μόνο σε προγραμματιστές εφαρμογών."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Αποθηκευτικός χώρος"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Πρόσβαση στην κάρτα SD."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Πρόσβ. σε κοινόχρ. αποθ. χώρο."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Πρόσβαση στην κάρτα SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"απενεργοποίηση ή τροποποίηση γραμμής κατάστασης"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Επιτρέπει στην εφαρμογή να απενεργοποιεί τη γραμμή κατάστασης ή να προσθέτει και να αφαιρεί εικονίδια συστήματος."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Επιτρέπει στην εφαρμογή την προσάρτηση και αποπροσάρτηση συστημάτων αρχείων για αφαιρούμενο αποθηκευτικό χώρο."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"διαμόρφωση εξωτερικού αποθηκευτικού χώρου"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Επιτρέπει στην εφαρμογή τη διαμόρφωση αφαιρούμενου αποθηκευτικού χώρου."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"λήψη πληροφοριών στον ασφαλή χώρο αποθήκευσης"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Επιτρέπει στην εφαρμογή τη λήψη πληροφοριών στον ασφαλή χώρο αποθήκευσης."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"δημιουργία ασφαλούς χώρου αποθήκευσης"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Επιτρέπει στην εφαρμογή τη δημιουργία ασφαλούς χώρου αποθήκευσης."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"καταστροφή ασφαλούς χώρου αποθήκευσης"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Επιτρέπει στην εφαρμογή την καταστροφή του ασφαλούς χώρου αποθήκευσης."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"σύνδεση / αποσύνδεση ασφαλούς χώρου αποθήκευσης"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Επιτρέπει στην εφαρμογή τη σύνδεση / αποσύνδεση του ασφαλούς χώρου αποθήκευσης."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"μετονομασία ασφαλούς χώρου αποθήκευσης"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Επιτρέπει στην εφαρμογή τη μετονομασία του ασφαλούς χώρου αποθήκευσης."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"λήψη πληροφοριών στον ασφαλή χώρο αποθήκευσης"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Επιτρέπει στην εφαρμογή τη λήψη πληροφοριών στον ασφαλή χώρο αποθήκευσης."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"δημιουργία ασφαλούς χώρου αποθήκευσης"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Επιτρέπει στην εφαρμογή τη δημιουργία ασφαλούς χώρου αποθήκευσης."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"καταστροφή ασφαλούς χώρου αποθήκευσης"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Επιτρέπει στην εφαρμογή την καταστροφή του ασφαλούς χώρου αποθήκευσης."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"σύνδεση / αποσύνδεση ασφαλούς χώρου αποθήκευσης"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Επιτρέπει στην εφαρμογή τη σύνδεση / αποσύνδεση του ασφαλούς χώρου αποθήκευσης."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"μετονομασία ασφαλούς χώρου αποθήκευσης"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Επιτρέπει στην εφαρμογή τη μετονομασία του ασφαλούς χώρου αποθήκευσης."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"έλεγχος δόνησης"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Επιτρέπει στην εφαρμογή τον έλεγχο του δονητή."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"έλεγχος φακού"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Επιτρέπει σε μια εφαρμογή τη διαμόρφωση του τοπικού τηλεφώνου Bluetooth και την ανακάλυψη και σύζευξη με απομακρυσμένες συσκευές."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"δημιουργία συνδέσεων Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Επιτρέπει σε μια εφαρμογή να προβάλει τη διαμόρφωση του τοπικού τηλεφώνου Bluetooth και επίσης να πραγματοποιεί και να αποδέχεται συνδέσεις με συζευγμένες συσκευές."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Διαχείριση NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Επιτρέπει σε κάποια εφαρμογή τη διαμόρφωση του τοπικού τηλεφώνου NFC."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Πλήρης πρόσβαση NFC σε απομακρυσμένη συσκευή"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Επιτρέπει σε κάποια εφαρμογή την πρόσβαση στις απομακρυσμένες συσκευές NFC."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Ειδοποίηση NFC από την απομακρυσμένη συσκευή"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Επιτρέπει την ενημέρωση της εφαρμογής σχετικά με λειτουργίες που σχετίζονται με απομακρυσμένες συσκευές NFC."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Ειδοποίηση NFC από την απομακρυσμένη συσκευή LLCP"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Επιτρέπει την ενημέρωση της εφαρμογής σχετικά με λειτουργίες LLCP που σχετίζονται με απομακρυσμένες συσκευές NFC."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"απενεργοποίηση κλειδώματος πληκτρολογίου"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Επιτρέπει σε μια εφαρμογή την απενεργοποίηση του κλειδώματος πληκτρολογίου και άλλης σχετικής ασφάλειας με κωδικό πρόσβασης. Για παράδειγμα, η απενεργοποίηση του κλειδώματος πληκτρολογίου όταν λαμβάνεται εισερχόμενη τηλεφωνική κλήση και η επανενεργοποίηση του κλειδώματος πληκτρολογίου όταν η κλήση τερματιστεί."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"ανάγνωση ρυθμίσεων συγχρονισμού"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Επιτρέπει σε μια εφαρμογή να αναγνώσει ιδιωτικές λέξεις και φράσεις και ιδιωτικά ονόματα, τα οποία ο χρήστης ενδέχεται να έχει αποθηκεύσει στο λεξικό χρήστη."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"εγγραφή σε καθορισμένο από τον χρήστη λεξικό"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Επιτρέπει σε μια εφαρμογή την εγγραφή νέων λέξεων στο λεξικό χρήστη."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"τροποποίηση/διαγραφή περιεχομένων κάρτας SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"τροπ./διαγ. περ. κοιν. απ. χώρ."</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"τροποποίηση/διαγραφή περιεχομένων κάρτας SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Επιτρέπει στην εφαρμογή την εγγραφή στην κάρτα SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Επιτρ. εγγρ. εφ. σε κοιν. απ. χώρ."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Επιτρέπει στην εφαρμογή την εγγραφή στην κάρτα SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"πρόσβαση στο σύστημα αρχείων προσωρινής μνήμης"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Επιτρέπει σε μια εφαρμογή την ανάγνωση και την εγγραφή του συστήματος αρχείων προσωρινής μνήμης."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Περιορισμός επιλογών κωδικού πρόσβασης"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Περιορισμός των τύπων κωδικού πρόσβασης που επιτρέπεται να χρησιμοποιείτε."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Παρακολούθηση προσπαθειών σύνδεσης"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Παρακολούθηση αποτυχημένων προσπαθειών σύνδεσης με τη συσκευή, για την εκτέλεσης κάποιας ενέργειας."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Επαναφορά κωδικού πρόσβασης"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Εφαρμογή του κωδικού πρόσβασής σας σε μια νέα τιμή, με την προϋπόθεση ότι σας παρέχεται από τον διαχειριστή για να μπορείτε να συνδεθείτε."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Εφαρμογή κλειδώματος"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Ελέγχει πότε κλειδώνει η συσκευή, απαιτώντας κωδικό πρόσβασης για επανείσοδο."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Ορισμός κανόνων κωδικού πρόσβασης"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Έλεγχος του μεγέθους και των χαρακτήρων που επιτρέπονται στους κωδικούς πρόσβασης ξεκλειδώματος οθόνης"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Παρακολούθηση προσπαθειών ξεκλειδώματος οθόνης"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Παρακολούθηση του αριθμού των εσφαλμένων κωδικών πρόσβασης που έχουν εισαχθεί κατά το ξεκλείδωμα της οθόνης και κλείδωμα του τηλεφώνου ή διαγραφή όλων των δεδομένων του τηλεφώνου σε περίπτωση που έχουν εισαχθεί πάρα πολλοί εσφαλμένοι κωδικοί πρόσβασης"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Αλλαγή κωδικού πρόσβασης ξεκλειδώματος οθόνης"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Αλλαγή κωδικού πρόσβασης ξεκλειδώματος οθόνης"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Κλείδωμα οθόνης"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Έλεγχος του τρόπου και του χρόνου κλειδώματος της οθόνης"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Διαγραφή όλων των δεδομένων"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Πραγματοποιείται επαναφορά εργοστασιακών ρυθμίσεων, με τη διαγραφή όλων των δεδομένων σας χωρίς επιβεβαίωση."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Διαγραφή των δεδομένων του τηλεφώνου χωρίς προειδοποίηση με επαναφορά των εργοστασιακών δεδομένων"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Οικία"</item>
<item msgid="869923650527136615">"Κινητό"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Επιτρέπει στην εφαρμογή την ανάγνωση όλων των διευθύνσεων URL που το πρόγραμμα περιήγησης έχει επισκεφθεί και όλων των σελιδοδεικτών του προγράμματος περιήγησης."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"εγγραφή ιστορικού και σελιδοδεικτών προγράμματος περιήγησης"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Επιτρέπει σε μια εφαρμογή να τροποποιήσει το ιστορικό ή τους σελιδοδείκτες του προγράμματος περιήγησης που βρίσκονται αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα δεδομένα του προγράμματος περιήγησης."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"ρύθμιση ειδοποίησης σε ξυπνητήρι"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Επιτρέπει στην εφαρμογή να ρυθμίσει μια ειδοποίηση σε μια εγκατεστημένη εφαρμογή ξυπνητηριού. Κάποιες εφαρμογές ξυπνητηριού ενδέχεται να μην περιλαμβάνουν αυτή τη λειτουργία."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Τροποποίηση δικαιωμάτων γεωγραφικής θέσης προγράμματος περιήγησης"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Επιτρέπει σε μια εφαρμογή την τροποποίηση των δικαιωμάτων γεωγραφικής θέσης του προγράμματος περιήγησης. Οι κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να επιτρέψουν την αποστολή στοιχείων τοποθεσίας σε αυθαίρετους ιστότοπους."</string>
<string name="save_password_message" msgid="767344687139195790">"Θέλετε το πρόγραμμα περιήγησης να διατηρήσει αυτόν τον κωδικό πρόσβασης;"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Εμφάνιση όλων"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Μαζική αποθήκευση USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Το USB είναι συνδεδεμένο"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Συνδέσατε το τηλέφωνό σας στον υπολογιστή μέσω USB. Επιλέξτε το παρακάτω κουμπί αν θέλετε να αντιγράψετε αρχεία μεταξύ του υπολογιστή και της κάρτας SD του Android."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Συνδέσατε το τηλέφωνό σας στον υπολογιστή μέσω USB. Επιλέξτε το παρακάτω κουμπί αν θέλετε να αντιγράψετε αρχεία μεταξύ του υπολογιστή και του κοινόχρηστου χώρου αποθήκευσης του Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Συνδέσατε το τηλέφωνό σας στον υπολογιστή μέσω USB. Επιλέξτε το παρακάτω κουμπί αν θέλετε να αντιγράψετε αρχεία μεταξύ του υπολογιστή και της κάρτας SD του Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Ενεργοποίηση αποθηκευτικού χώρου USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Παρουσιάστηκε ένα πρόβλημα στη χρήση της κάρτας SD ως αποθηκευτικό χώρο USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Παρουσιάστηκε ένα πρόβλημα στη χρήση της κάρτας SD ως αποθηκευτικό χώρο USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Παρουσιάστηκε ένα πρόβλημα στη χρήση του κοινόχρηστου αποθηκευτικού χώρου ως αποθηκευτικό χώρο USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Παρουσιάστηκε ένα πρόβλημα στη χρήση του κοινόχρηστου αποθηκευτικού χώρου ως αποθηκευτικό χώρο USB."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"Το USB είναι συνδεδεμένο"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Επιλέξτε για αντιγραφή προς/από τον υπολογιστή σας."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Απενεργοποίηση αποθηκευτικού χώρου USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Επιλογή για απενεργοποίηση αποθηκευτικού χώρου USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"Χώρος αποθήκευσης USB σε χρήση"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Προτού απενεργοποιήσετε το χώρο αποθήκευσης USB, βεβαιωθείτε ότι έχετε αποσυνδέσει (“αφαιρέσει”) την κάρτα SD του Android από τον υπολογιστή σας."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Προτού απενεργοποιήσετε τον χώρο αποθήκευσης USB, βεβαιωθείτε ότι έχετε αποπροσαρτήσει (\"αφαιρέσει\") τον κοινόχρηστο αποθηκευτικό χώρο του Android από τον υπολογιστή σας."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Προτού απενεργοποιήσετε το χώρο αποθήκευσης USB, βεβαιωθείτε ότι έχετε αποσυνδέσει (“αφαιρέσει”) την κάρτα SD του Android από τον υπολογιστή σας."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Απενεργοποίηση χώρου αποθήκευσης USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Παρουσιάστηκε πρόβλημα κατά την απενεργοποίηση του αποθηκευτικού χώρου USB. Βεβαιωθείτε ότι έχετε αφαιρέσει την υποδοχή USB και προσπαθήστε ξανά."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Εάν ενεργοποιήσετε τον αποθηκευτικό χώρο USB, ορισμένες από τις εφαρμογές που χρησιμοποιείτε θα σταματήσουν και ενδέχεται να μην είναι διαθέσιμες μέχρι να απενεργοποιήσετε τον αποθηκευτικό χώρο USB."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Απέτυχε η λειτουργία USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"ΟΚ"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Διαμόρφωση κάρτας SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Διαγ. κοιν. απ. χώρ."</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Διαμόρφωση κάρτας SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Είστε βέβαιοι ότι θέλετε να διαμορφώσετε την κάρτα SD; Όλα τα δεδομένα στην κάρτα σας θα χαθούν."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Να γίνει διαγραφή του κοινόχρηστου αποθηκευτικού χώρου, η οποία θα διαγράψει όλα τα αρχεία που έχετε αποθηκεύσει εκεί; Η ενέργεια είναι μη αναστρέψιμη!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Είστε βέβαιοι ότι θέλετε να διαμορφώσετε την κάρτα SD; Όλα τα δεδομένα στην κάρτα σας θα χαθούν."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Διαμόρφωση"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Συνδέθηκε ο εντοπισμός σφαλμάτων USB"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"υποψήφιοι"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Προετοιμασία κάρτας SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Προετοιμ. κοινόχρ. αποθ. χώρ."</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Προετοιμασία κάρτας SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Έλεγχος για σφάλματα."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Κενή κάρτα SD"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Κενός κοινόχρ. αποθηκ. χώρος"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Κενή κάρτα SD"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"Η κάρτα SD είναι κενή ή χρησιμοποιεί σύστημα αρχείων που δεν υποστηρίζεται."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Ο κοινόχρηστος αποθηκευτικός χώρος είναι κενός ή έχει κάποιο σύστημα αρχείων το οποίο δεν υποστηρίζεται."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Η κάρτα SD είναι κενή ή έχει μη υποστηριζόμενο σύστημα αρχείων."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Κατεστραμμένη κάρτα SD"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Κατεστρ. κοινόχρ. αποθ. χώρος"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Κατεστραμμένη κάρτα SD"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"Η κάρτα SD έχει υποστεί βλάβη. Ενδέχεται να χρειαστεί αναδιαμόρφωση της κάρτας σας."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Ο κοινόχρηστος αποθηκευτικός χώρος παρουσιάζει βλάβη. Ενδεχομένως θα πρέπει να προβείτε σε διαμόρφωσή του."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Η κάρτα SD παρουσιάζει βλάβη. Ενδεχομένως θα πρέπει να προβείτε σε διαμόρφωσή της."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Μη αναμενόμενη αφαίρεση κάρτας SD"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Μη αναμενόμενη κατάργηση κοινόχρηστου αποθηκευτικού χώρου"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Μη αναμενόμενη αφαίρεση κάρτας SD"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Αποπροσαρτήστε την κάρτα SD πριν την αφαιρέσετε για την αποφυγή απώλειας δεδομένων."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Αποπροσαρτήστε τον κοινόχρηστο αποθηκευτικό χώρο πριν τον αφαιρέσετε για την αποφυγή απώλειας δεδομένων."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Αποπροσαρτήστε την κάρτα SD πριν την αφαιρέσετε για την αποφυγή απώλειας δεδομένων."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"Η κάρτα SD μπορεί να αφαιρεθεί με ασφάλεια"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Ασφ. κατάργ. κοιν. αποθ. χώρ."</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Η κάρτα SD μπορεί να αφαιρεθεί με ασφάλεια"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"Τώρα μπορείτε να αφαιρέσετε με ασφάλεια την κάρτα SD."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Μπορείτε να καταργήσετε τον κοινόχρηστο αποθηκευτικό χώρο εύκολα."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Μπορείτε να αφαιρέσετε με ασφάλεια της κάρτα SD."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Η κάρτα SD αφαιρέθηκε"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Κοιν. απ. χώρ. που έχει καταρ."</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Η κάρτα SD αφαιρέθηκε"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Η κάρτα SD αφαιρέθηκε. Εισαγάγετε μια νέα κάρτα SD για να αυξήσετε τον αποθηκευτικό χώρο της συσκευής σας."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Ο κοινόχρηστος αποθηκευτικός χώρος καταργήθηκε. Εισαγάγετε νέα πολυμέσα."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Αφαιρέθηκε η κάρτα SD. Τοποθετήστε μια νέα κάρτα."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Δεν βρέθηκαν δραστηριότητες που να αντιστοιχούν"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"ενημέρωση στατιστικών χρήσης στοιχείου"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 406d335..af3eedb 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Herramientas de desarrollo"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Las funciones sólo son necesarias para los desarrolladores de aplicaciones."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Espacio de almacenamiento"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Acceder a la tarjeta SD."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accede al almacenamiento comp."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"desactivar o modificar la barra de estado"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Admite que la aplicación desactive la barra de estado, o agregue y elimine íconos del sistema."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Admite que la aplicación monte y desmonte filesystems para obtener almacenamiento extraíble."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"espacio de almacenamiento externo del formato"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Admite que la aplicación formatee el espacio de almacenamiento extraíble."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"obtener información sobre el almacenamiento seguro"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Permite que una aplicación obtenga información en el almacenamiento seguro."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"crear almacenamiento seguro"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Permite que la aplicación cree un almacenamiento seguro."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"destruir el almacenamiento seguro"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Permite que una aplicación destruya el almacenamiento seguro."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"montar o desmontar almacenamiento seguro"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Permite que una aplicación monte o desmonte el almacenamiento seguro."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"cambie el nombre del almacenamiento seguro"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Permite que una aplicación cambie el nombre de un almacenamiento seguro."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"obtener información sobre el almacenamiento seguro"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Permite que una aplicación obtenga información en el almacenamiento seguro."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"crear almacenamiento seguro"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Permite que la aplicación cree un almacenamiento seguro."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"destruir el almacenamiento seguro"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Permite que una aplicación destruya el almacenamiento seguro."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"montar o desmontar almacenamiento seguro"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Permite que una aplicación monte o desmonte el almacenamiento seguro."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"cambie el nombre del almacenamiento seguro"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Permite que una aplicación cambie el nombre de un almacenamiento seguro."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"vibrador de control"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Admite que la aplicación controle el vibrador."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"controlar linterna"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Admite una aplicación que configura el teléfono Bluetooth local y descubre y se vincula con dispositivos remotos."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"crear conexiones de Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Admite una aplicación que ve la configuración del teléfono Bluetooth local, y realiza y acepta conexiones con dispositivos vinculados."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Administración NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Permite a una aplicación configurar el teléfono NFC local."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Acceso completo NFC a dispositivo remoto"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Permite a una aplicación acceder a dispositivos remotos NFC."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Notificación NFC de dispositivo remoto"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Permite a una aplicación ser notificada sobre las operaciones relacionadas a los dispositivos remotos NFC."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Notificación NFC de dispositivo remoto LLCP."</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Permite a una aplicación que se le notifique sobre las operaciones LLCP relacionadas con los dispositivos remotos NFC."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"desactivar el bloqueo"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Admite una aplicación que desactiva el bloqueo y cualquier seguridad con contraseña relacionada. Un ejemplo legítimo de esto es el bloqueo desactivado por el teléfono cuando recibe una llamada telefónica entrante, y luego la reactivación del bloqueo cuando finaliza la llamada."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"leer la configuración de sincronización"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Admite una aplicación para leer palabras, nombres y frases privadas que posiblemente el usuario haya almacenado en el diccionario del usuario."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"escribir al diccionario definido por el usuario"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Admite una aplicación que escribe palabras nuevas en el diccionario del usuario."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"modificar/suprimir el contenido de la tarjeta SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificar/elimin cont alm comp"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/suprimir el contenido de la tarjeta SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Admite que una aplicación escriba en la tarjeta SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Perm apl. escribir en alm comp"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Admite que una aplicación escriba en la tarjeta SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"Acceder al sistema de archivos caché"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Permite que una aplicación lea y escriba el sistema de archivos caché."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Limitar la contraseña"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Restringe los tipos de contraseñas que puedes utilizar."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Observar los intentos de acceso"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Intentos fallidos del control para acceder al dispositivo para realizar alguna acción."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Restablecer contraseña"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Forzar un nuevo valor para tu contraseña, el administrador deberá enviártelo antes de poder acceder."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Provocar el bloqueo"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Controlar cuando se bloquee el dispositivo, requiere que vuelvas a ingresar tu contraseña."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Establecer reglas de contraseña"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Controlar la longitud y los caracteres permitidos en las contraseñas para desbloquear la pantalla"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Supervisa los intentos para desbloquear la pantalla"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Supervisa el número de contraseñas incorrectas ingresadas al desbloquear la pantalla, y bloquee el teléfono o elimine todos los datos del teléfono si se ingresan demasiadas contraseñas incorrectas."</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Cambiar la contraseña para desbloquear la pantalla"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Cambiar la contraseña para desbloquear la pantalla"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Bloquear la pantalla"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Controlar cómo y cuándo se bloquea la pantalla"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Borrar todos los datos"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Realizar un reestablecimiento de fábrica y borrar todos tus datos sin ninguna confirmación."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Borrar los datos del teléfono sin advertencias al restablecer la configuración original"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Celular"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Permite a la aplicación leer todas las URL que ha visitado el navegador y todos los marcadores del navegador."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"escribir historial y marcadores del navegador"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Permite a una aplicación modificar el historial y los marcadores del navegador almacenados en tu teléfono. Las aplicaciones maliciosas pueden utilizarlo para borrar o modificar tus datos."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"configurar alarma en reloj alarma"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite que la aplicación configure una alarma en una aplicación instalada de reloj alarma. Es posible que algunas aplicaciones de reloj alarma no implementen esta función."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modificar los permisos de ubicación geográfica del navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite que una aplicación modifique los permisos de ubicación geográfica del navegador. Las aplicaciones maliciosas pueden utilizarlos para permitir el envío de información sobre la ubicación a sitos web de forma arbitraria."</string>
<string name="save_password_message" msgid="767344687139195790">"¿Quieres recordar esta contraseña en el navegador?"</string>
@@ -756,7 +750,7 @@
<string name="anr_activity_process" msgid="5420826626009561014">"La actividad <xliff:g id="ACTIVITY">%1$s</xliff:g> (en proceso <xliff:g id="PROCESS">%2$s</xliff:g>) no responde."</string>
<string name="anr_application_process" msgid="4185842666452210193">"La aplicación <xliff:g id="APPLICATION">%1$s</xliff:g> (en proceso <xliff:g id="PROCESS">%2$s</xliff:g>) no responde."</string>
<string name="anr_process" msgid="1246866008169975783">"El proceso <xliff:g id="PROCESS">%1$s</xliff:g> no responde."</string>
- <string name="force_close" msgid="3653416315450806396">"Provocar acercamiento"</string>
+ <string name="force_close" msgid="3653416315450806396">"Forzar cierre"</string>
<string name="report" msgid="4060218260984795706">"Notificar"</string>
<string name="wait" msgid="7147118217226317732">"Espera"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Se redirigió la aplicación"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Almacenamiento masivo USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"conectado al USB"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Has conectado tu teléfono a tu computadora mediante USB. Selecciona el botón a continuación si deseas copiar los archivos entre tu computadora y la tarjeta SD de Android."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Has conectado tu teléfono a tu computadora mediante USB. Selecciona el botón a continuación si deseas copiar los archivos entre tu computadora y el almacenamiento compartido de Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Has conectado tu teléfono a tu computadora mediante USB. Selecciona el botón a continuación si deseas copiar los archivos entre tu computadora y la tarjeta SD de Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Activar el almacenamiento USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Hay un problema para utilizar tu tarjeta SD en el almacenamiento USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Hay un problema para utilizar tu tarjeta SD en el almacenamiento USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Hay un problema para utilizar el almacenamiento compartido en el almacenamiento USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Hay un problema para utilizar el almacenamiento compartido en el almacenamiento USB."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"conectado al USB"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Seleccionar para copiar archivos desde o hacia tu computadora."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Apagar el almacenamiento USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Seleccionar para desactivar el almacenamiento USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"Almacenamiento USB en uso"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Antes de desactivar el almacenamiento USB, asegúrate de haber desmontado (\"expulsado\") la tarjeta SD de Android de tu computadora."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Antes de desactivar el almacenamiento USB, asegúrate de haber desmontado (\"expulsado\") el almacenamiento compartido de Android de tu computadora."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Antes de desactivar el almacenamiento USB, asegúrate de haber desmontado (\"expulsado\") la tarjeta SD de Android de tu computadora."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Desactivar el almacenamiento USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de haber desmontado el host USB, luego vuelve a intentarlo."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Si activas el almacenamiento USB, algunas aplicaciones que estás usando se detendrán y es posible que no estén disponibles hasta que desactives el almacenamiento USB."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Error en el funcionamiento del USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Aceptar"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formatear tarjeta SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatear almacenamiento compartido"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatear tarjeta SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"¿Estás seguro de que quieres formatear la tarjeta SD? Se perderán todos los datos de tu tarjeta."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"¿Deseas formatear el almacenamiento compartido y borrar todos los archivos almacenados aquí? ¡Esta acción no se puede cambiar!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"¿Estás seguro de que quieres formatear la tarjeta SD? Se perderán todos los datos de tu tarjeta."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formato"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración de USB conectada"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Preparación de la tarjeta SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Preparando el alm. compartido"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Preparación de la tarjeta SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Verificando errores"</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Tarjeta SD vacía"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Alm. comp. en blanco"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Tarjeta SD vacía"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"La tarjeta SD está vacía o utiliza un filesystem no admitido."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Almacenamiento compartido en blanco o sistema de archivos no compatible."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Tarjeta SD en blanco o el sistema de archivos no es compatible."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Tarjeta SD dañada"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Alm. compartido dañado"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Tarjeta SD dañada"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"La tarjeta SD está dañada. Es posible que debas reformatear tu tarjeta."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Almacenamiento compartido dañado. Es posible que debas reformatearlo."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Tarjeta SD dañada. Es posible que debas reformatearla."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Tarjeta SD extraída de forma imprevista"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Alm. comp. eliminado inesp."</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Tarjeta SD extraída de forma imprevista"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Desmontar la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Desmontar almacenamiento compartido antes de extraerlo para evitar la pérdida de datos."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Desmontar la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"Tarjeta SD fácil de extraer"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Es seguro eliminar alm comp."</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Tarjeta SD fácil de extraer"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"La tarjeta SD ahora se puede extraer de manera segura."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Puede eliminar de forma segura el almacenamiento compartido."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Puedes eliminar la tarjeta SD sin riesgos."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Tarjeta SD extraída"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Alm. comp. eliminado"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Tarjeta SD extraída"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Se extrajo la SD. Inserta una nva. tarjeta SD para aumentar el espacio de almac. de tu disposit."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Almacenamiento compartido eliminado. Insertar nuevos medios."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Tarjeta SD eliminada. Inserta una nueva."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"No se encontraron actividades coincidentes"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"actualizar la estadística de uso de los componentes"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 1cf971a..7004d3e 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Herramientas de desarrollo"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funciones necesarias solo para desarrolladores de aplicaciones"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Almacenamiento"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Acceder a la tarjeta SD"</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acceso almacenamiento compartido"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acceder a la tarjeta SD"</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"inhabilitar o modificar la barra de estado"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Permite que las aplicaciones inhabiliten la barra de estado, o añadan y eliminen iconos del sistema."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Permite que las aplicaciones activen y desactiven sistemas de archivos para un almacenamiento extraíble."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formatear almacenamiento externo"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Permite a la aplicación formatear un almacenamiento extraíble."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"obtener información sobre el almacenamiento seguro"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Permite que la aplicación obtenga información sobre el almacenamiento seguro."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"crear almacenamiento seguro"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Permite que la aplicación cree un almacenamiento seguro."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"destruir almacenamiento seguro"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Permite que la aplicación destruya el almacenamiento seguro."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"activar/desactivar almacenamiento seguro"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Permite que la aplicación active o desactive el almacenamiento seguro."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"cambiar nombre de almacenamiento seguro"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Permite que la aplicación cambie el nombre del almacenamiento seguro."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"obtener información sobre el almacenamiento seguro"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Permite que la aplicación obtenga información sobre el almacenamiento seguro."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"crear almacenamiento seguro"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Permite que la aplicación cree un almacenamiento seguro."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"destruir almacenamiento seguro"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Permite que la aplicación destruya el almacenamiento seguro."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"activar/desactivar almacenamiento seguro"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Permite que la aplicación active o desactive el almacenamiento seguro."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"cambiar nombre de almacenamiento seguro"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Permite que la aplicación cambie el nombre del almacenamiento seguro."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"controlar vibración"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Permite que la aplicación controle la función de vibración."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"controlar linterna"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Permite que una aplicación configure el teléfono Bluetooth local, y vea dispositivos remotos y sincronice el teléfono con ellos."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"crear conexiones de Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Permite que una aplicación vea la configuración del teléfono Bluetooth local, y cree y acepte conexiones con los dispositivos sincronizados."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Administración de NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Permite que una aplicación configure el teléfono NFC local."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Acceso completo NFC a dispositivo remoto"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Permite que una aplicación acceda a los dispositivos NFC remotos."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Notificación NFC de dispositivo remoto"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Permite que una aplicación reciba notificaciones sobre las operaciones relacionadas con dispositivos NFC remotos."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Notificación NFC de dispositivo LLCP remoto"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Permite que una aplicación reciba notificaciones de operaciones LLCP relacionadas con dispositivos NFC remotos."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"inhabilitar bloqueo del teclado"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permite que una aplicación inhabilite el bloqueo del teclado y cualquier protección con contraseña asociada. Un ejemplo legítimo de este permiso es la inhabilitación por parte del teléfono del bloqueo del teclado cuando recibe una llamada telefónica entrante y su posterior habilitación cuando finaliza la llamada."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"leer la configuración de sincronización"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Permite a una aplicación leer cualquier frase, palabra o nombre privado que el usuario haya almacenado en su diccionario."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"escribir en el diccionario definido por el usuario"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Permite a una aplicación escribir palabras nuevas en el diccionario de usuario."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"modificar/eliminar contenido de la tarjeta SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificar/suprimir contenido"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/eliminar contenido de la tarjeta SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Permite que una aplicación escriba en la tarjeta SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Permit esc aplic en almac comp"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Permite que una aplicación escriba en la tarjeta SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"acceder al sistema de archivos almacenado en caché"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Permite que una aplicación lea y escriba el sistema de archivos almacenado en caché."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Limitar opciones de contraseña"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Permite restringir los tipos de contraseñas que puede utilizar el usuario."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Controlar intentos de acceso"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Se ha producido un error al intentar controlar el acceso al dispositivo para realizar una acción."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Restablecer contraseña"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Permite forzar la contraseña para establecer un valor nuevo que el administrador deberá proporcionar al usuario para poder acceder."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Forzar bloqueo"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Permite controlar el momento de bloqueo del dispositivo solicitando al usuario que vuelva a introducir la contraseña."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Establecimiento de reglas de contraseña"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Control de la longitud y de los caracteres permitidos en las contraseñas de bloqueo de pantalla"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Control de intentos de bloqueo de pantalla"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Control del número de contraseñas incorrectas introducidas al desbloquear la pantalla, así como bloqueo del teléfono o borrado de todos los datos si se introducen demasiadas contraseñas incorrectas"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Modificación de contraseña de bloqueo de pantalla"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Modificación de contraseña de bloqueo de pantalla"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Bloqueo de pantalla"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Control de la forma en que se bloquea la pantalla y del momento en que se bloquea"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Borrar todos los datos"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Permite realizar un restablecimiento de fábrica eliminando todos los datos sin confirmación."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Borrado de los datos del teléfono sin avisar restableciendo datos de fábrica"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Móvil"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Permite que la aplicación lea todas las URL que ha visitado el navegador y todos sus marcadores."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"escribir en marcadores y en el historial del navegador"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Permite que una aplicación modifique la información de los marcadores o del historial del navegador almacenada en el teléfono. Las aplicaciones malintencionadas pueden utilizar este permiso para borrar o modificar los datos del navegador."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"establecer alarma en un reloj"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite a la aplicación establecer una alarma en una aplicación de reloj instalada. Es posible que algunas aplicaciones de reloj no incluyan esta función."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modificar los permisos de ubicación geográfica del navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite que una aplicación modifique los permisos de ubicación geográfica del navegador. Las aplicaciones malintencionadas pueden utilizar este permiso para permitir el envío de información sobre la ubicación a sitios web arbitrarios."</string>
<string name="save_password_message" msgid="767344687139195790">"¿Deseas que el navegador recuerde esta contraseña?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todos"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Almacenamiento USB masivo"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conectado por USB"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Has conectado el teléfono al equipo mediante USB. Selecciona el botón situado debajo si deseas copiar archivos entre el equipo y la tarjeta SD del teléfono con Android."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Has conectado el teléfono al equipo mediante USB. Selecciona el botón situado debajo si deseas copiar archivos entre el equipo y el almacenamiento compartido del teléfono con Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Has conectado el teléfono al equipo mediante USB. Selecciona el botón situado debajo si deseas copiar archivos entre el equipo y la tarjeta SD del teléfono con Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Activar almacenamiento USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Se ha producido un problema al intentar utilizar la tarjeta SD para el almacenamiento USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Se ha producido un problema al intentar utilizar la tarjeta SD para el almacenamiento USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Se ha producido un problema al intentar utilizar el almacenamiento compartido para el almacenamiento USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Se ha producido un problema al intentar utilizar el almacenamiento compartido para el almacenamiento USB."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"Conectado por USB"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Para copiar archivos al/desde el equipo"</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Desactivar almacenamiento USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Seleccionar para desactivar USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"El almacenamiento USB está en uso."</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Antes de desactivar el almacenamiento USB, asegúrate de haber desmontado (\"retirado\") la tarjeta SD del teléfono con Android del equipo."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Antes de desactivar el almacenamiento USB, asegúrate de haber desactivado (\"extraído\") el almacenamiento compartido del teléfono con Android del equipo."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Antes de desactivar el almacenamiento USB, asegúrate de haber desmontado (\"retirado\") la tarjeta SD del teléfono con Android del equipo."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Desactivar almacenamiento USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Se ha producido un problema al desactivar el almacenamiento USB. Asegúrate de haber desactivado el host USB y, a continuación, vuelve a intentarlo."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Si activas el almacenamiento USB, se detendrán algunas aplicaciones que estás utilizando y estas no estarán disponibles hasta que lo desactives."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"No se ha podido realizar la operación USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Aceptar"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formatear tarjeta SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formateo almacenamiento compart"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatear tarjeta SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"¿Estás seguro de que quieres formatear la tarjeta SD? Se perderán todos los datos de la tarjeta."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"¿Quieres formatear el almacenamiento compartido y borrar todos los archivos? Esta acción no se puede deshacer."</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"¿Estás seguro de que quieres formatear la tarjeta SD? Se perderán todos los datos de la tarjeta."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formato"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Dispositivo de depuración USB conectado"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Preparando tarjeta SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Preparando almacenam compart"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Preparando tarjeta SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Comprobando errores..."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Tarjeta SD vacía"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Almacenamiento compartido vacío"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Tarjeta SD vacía"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"La tarjeta SD está vacía o utiliza un sistema de archivos incompatible."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Almacenamiento compartido vacío o con sistema de archivos no admitido"</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"La tarjeta SD está vacía o su sistema de archivos es incompatible."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Tarjeta SD dañada"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Almacenamiento compartido dañado"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Tarjeta SD dañada"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"La tarjeta SD está dañada. Es posible que sea necesario volver a formatearla."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"El almacenamiento compartido está dañado. Es posible que sea necesario volver a formatearlo."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"La tarjeta SD está dañada. Es posible que sea necesario volver a formatearla."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"La tarjeta SD se ha extraído inesperadamente."</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Almacenam comp extraído inesp"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"La tarjeta SD se ha extraído inesperadamente."</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Desactiva la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Desactiva el almacenamiento compartido antes de extraerlo para evitar pérdidas de datos."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Desactiva la tarjeta SD antes de extraerla para evitar la pérdida de datos."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"Es seguro extraer la tarjeta SD."</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Almac extraíble forma segura"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Es seguro extraer la tarjeta SD."</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"Ya puedes extraer la tarjeta SD."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Puedes extraer el almacenamiento compartido de forma segura."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Puedes extraer la tarjeta SD de forma segura."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Tarjeta SD extraída"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Almacenam compartido extraído"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Tarjeta SD extraída"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"La tarjeta SD se ha extraído. Inserta una nueva tarjeta SD para aumentar la capacidad de almacenamiento de tu dispositivo."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Se ha extraído el almacenamiento compartido. Inserta un nuevo medio."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"La tarjeta SD se ha extraído. Inserta una nueva."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"No se ha encontrado ninguna actividad coincidente."</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"actualizar estadísticas de uso de componentes"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 3c567f4..7f18b9f 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Outils de développement"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Ces fonctionnalités sont réservées aux développeurs d\'applications."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stockage"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Accès à la carte SD"</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accéder au stockage partagé"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accès à la carte SD"</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"Désactivation ou modification de la barre d\'état"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Permet à une application de désactiver la barre d\'état ou d\'ajouter/supprimer des icônes système."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Permet à l\'application de monter et démonter des systèmes de fichiers pour des périphériques de stockage amovibles."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"Formatage du périphérique de stockage externe"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Permet à l\'application de formater le périphérique de stockage amovible."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"obtenir des informations sur le stockage sécurisé"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Permet à l\'application d\'obtenir des informations sur le stockage sécurisé."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"créer un stockage sécurisé"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Permet à l\'application de créer un stockage sécurisé."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"détruire le stockage sécurisé"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Permet à l\'application de détruire le stockage sécurisé."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"monter/démonter le stockage sécurisé"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Permet à l\'application de monter/démonter le stockage sécurisé."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"renommer le stockage sécurisé"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Permet à l\'application de renommer le stockage sécurisé."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"obtenir des informations sur le stockage sécurisé"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Permet à l\'application d\'obtenir des informations sur le stockage sécurisé."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"créer un stockage sécurisé"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Permet à l\'application de créer un stockage sécurisé."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"détruire le stockage sécurisé"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Permet à l\'application de détruire le stockage sécurisé."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"monter/démonter le stockage sécurisé"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Permet à l\'application de monter/démonter le stockage sécurisé."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"renommer le stockage sécurisé"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Permet à l\'application de renommer le stockage sécurisé."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"Contrôle du vibreur"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Permet à l\'application de contrôler le vibreur."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"Contrôle de la lampe de poche"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Permet à une application de configurer le téléphone Bluetooth local, d\'identifier des périphériques distants et de les associer au téléphone."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"Création de connexions Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Permet à une application d\'obtenir la configuration du téléphone Bluetooth local et de créer et accepter des connexions à des appareils associés."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Administration NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Permet à une application de configurer le téléphone NFC local."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Accès NFC complet à l\'appareil distant"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Permet à une application d\'accéder à des appareils NFC distants."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Notification NFC depuis un appareil distant"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Permet à une application d\'être avertie en cas d\'opérations sur des appareils NFC distants."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Notification NFC depuis un appareil distant LLCP"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Permet à une application d\'être avertie en cas d\'opérations LLCP sur des appareils NFC distants."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"Désactivation du verrouillage des touches"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permet à une application de désactiver le verrouillage des touches et toute sécurité par mot de passe. Exemple : Votre téléphone désactive le verrouillage du clavier lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"Lecture des paramètres de synchronisation"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Permet à une application de lire tous les mots, noms et expressions que l\'utilisateur a pu enregistrer dans son dictionnaire personnel."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"Enregistrement dans le dictionnaire défini par l\'utilisateur"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Permet à une application d\'enregistrer de nouveaux mots dans le dictionnaire personnel de l\'utilisateur."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"Modifier/supprimer le contenu de la carte SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modifier/supprimer le contenu du stockage partagé"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"Modifier/supprimer le contenu de la carte SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Autorise une application à écrire sur la carte SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Autorise une application à écrire sur le stockage partagé."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Autorise une application à écrire sur la carte SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"accéder au système de fichiers en cache"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Permet à une application de lire et d\'écrire dans le système de fichiers en cache."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Limiter le mot de passe"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Restreint les types de mots de passe que vous êtes autorisé à utiliser."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Surveiller les tentatives de connexion"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Surveille les échecs de connexion au périphérique pour effectuer une action."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Réinitialiser le mot de passe"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Force l\'utilisation d\'un nouveau mot de passe, qui doit vous être communiqué par l\'administrateur pour que vous puissiez vous connecter."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Forcer le verrouillage"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Contrôle le verrouillage du périphérique, avec obligation de saisir à nouveau le mot de passe."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Définir les règles du mot de passe"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Gérer le nombre et le type de caractères autorisés dans les mots de passe de déverrouillage de l\'écran"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Gérer les tentatives de déverrouillage de l\'écran"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Gérer le nombre de mots de passe incorrects saisis lors du déverrouillage de l\'écran et verrouiller le téléphone ou effacer toutes ses données après un certain nombre de tentatives"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Modifier le mot de passe de déverrouillage de l\'écran"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Modifier le mot de passe de déverrouillage de l\'écran"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Verrouiller l\'écran"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Gérer le mode et les conditions de verrouillage de l\'écran"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Effacer toutes les données"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Rétablit les paramètres d\'usine, supprimant toutes vos données sans demande de confirmation."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Effacer les données du téléphone sans avertissement, en restaurant les valeurs d\'usine"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Domicile"</item>
<item msgid="869923650527136615">"Mobile"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Autorise l\'application à lire toutes les URL auxquelles le navigateur a accédé et tous ses favoris."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"écrire dans l\'historique et les favoris du navigateur"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Autorise une application à modifier l\'historique du navigateur ou les favoris enregistrés sur votre téléphone. Des applications malveillantes peuvent utiliser cette fonction pour effacer ou modifier les données de votre navigateur."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"régler le réveil"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Permet à l\'application de définir une alarme dans un utilitaire faisant office de réveil. Certains réveils risquent ne pas prendre en charge cette fonctionnalité."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifier les autorisations de géolocalisation du navigateur"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permet à une application de modifier les autorisations de géolocalisation du navigateur. Les applications malveillantes peuvent se servir de cette fonctionnalité pour envoyer des informations de lieu à des sites Web arbitraires."</string>
<string name="save_password_message" msgid="767344687139195790">"Voulez-vous que le navigateur se souvienne de ce mot de passe ?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Tout afficher"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Stockage de masse USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Connecté à l\'aide d\'un câble USB"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Vous avez connecté votre téléphone à votre ordinateur à l\'aide d\'un câble USB. Sélectionnez le bouton ci-dessous pour copier des fichiers de votre ordinateur vers la carte SD de votre Android, ou inversement."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Vous avez connecté votre téléphone à votre ordinateur à l\'aide d\'un câble USB. Sélectionnez le bouton ci-dessous pour copier des fichiers de votre ordinateur vers le stockage partagé de votre Android, ou inversement."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Vous avez connecté votre téléphone à votre ordinateur à l\'aide d\'un câble USB. Sélectionnez le bouton ci-dessous pour copier des fichiers de votre ordinateur vers la carte SD de votre Android, ou inversement."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Activer le périphérique de stockage USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Un problème est survenu lors de l\'utilisation de votre carte SD en tant que périphérique de stockage USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Un problème est survenu lors de l\'utilisation de votre carte SD en tant que périphérique de stockage USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Un problème est survenu lors de l\'utilisation de votre stockage partagé en tant que périphérique de stockage USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Un problème est survenu lors de l\'utilisation de votre stockage partagé en tant que périphérique de stockage USB."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"Connecté avec un câble USB"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Activez pour copier des fichiers vers/de votre ordinateur."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Éteindre le périphérique de stockage USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Sélectionner pour éteindre le périphérique de stockage USB"</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"Stockage USB en cours d\'utilisation"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Avant de mettre hors tension le stockage USB, assurez-vous d\'avoir désactivé (\"éjecté\") la carte SD de votre téléphone Android à partir de votre ordinateur."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Avant de mettre hors tension le stockage USB, assurez-vous d\'avoir démonté (\"éjecté\") le stockage partagé de votre téléphone Android à partir de votre ordinateur."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Avant de mettre hors tension le stockage USB, assurez-vous d\'avoir désactivé (\"éjecté\") la carte SD de votre téléphone Android à partir de votre ordinateur."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Désactiver le périphérique de stockage USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Un problème est survenu lors de la mise hors tension du périphérique de stockage USB. Assurez-vous que l\'hôte USB a bien été désactivé, puis essayez à nouveau."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Si vous activez le périphérique de stockage USB, certaines applications que vous utilisez se fermeront et risquent de n\'être de nouveau disponibles qu\'après la désactivation du périphérique."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Échec du fonctionnement USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formater la carte SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formater le stockage partagé"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formater la carte SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Voulez-vous vraiment formater la carte SD ? Toutes les données de cette carte seront perdues."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Formater le stockage partagé en effaçant tout le contenu ? Cette action est irréversible !"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Voulez-vous vraiment formater la carte SD ? Toutes les données de cette carte seront perdues."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Débogage USB connecté"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidats"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Préparation de la carte SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Préparation du stockage partagé"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Préparation de la carte SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Recherche d\'erreurs"</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Carte SD vide"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Stockage partagé vide"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Carte SD vide"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"La carte SD est vide ou utilise un système de fichiers non pris en charge."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Le stockage partagé est vide ou son système de fichiers n\'est pas pris en charge."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"La carte SD est vide ou son système de fichiers n\'est pas pris en charge."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Carte SD endommagée"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Stockage partagé endommagé"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Carte SD endommagée"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"La carte SD est endommagée. Vous devrez peut-être reformater votre carte."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Le stockage partagé est endommagé. Vous devrez peut-être le reformater."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"La carte SD est endommagée. Vous devrez peut-être la reformater."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Carte SD retirée inopinément"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Stockage partagé retiré inopinément"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Carte SD retirée inopinément"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Désactiver la carte SD avant de la retirer pour éviter toute perte de données."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Démonter le stockage partagé avant de le retirer pour éviter toute perte de données."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Désactiver la carte SD avant de la retirer pour éviter toute perte de données."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"La carte SD peut être retirée en toute sécurité"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Le stockage partagé peut être retiré en toute sécurité"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"La carte SD peut être retirée en toute sécurité"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"Vous pouvez désormais retirer la carte SD en toute sécurité."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Vous pouvez retirer le stockage partagé en toute sécurité."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Vous pouvez retirer la carte SD en toute sécurité."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Carte SD manquante"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Stockage partagé retiré"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Carte SD manquante"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Carte SD manquante. Insérez une autre carte pour augmenter la capacité de stockage."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Stockage partagé retiré. Insérez un nouveau support."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"La carte SD a été retirée. Insérez-en une autre."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Aucune activité correspondante trouvée"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"mettre à jour les données statistiques du composant"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 4e8d19a..536de5a 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Strumenti di sviluppo"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funzionalità necessarie soltanto agli sviluppatori di applicazioni."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Archiviazione"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Accesso alla scheda SD."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accesso all\'archivio condiviso."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Accesso alla scheda SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"disattivare o modificare la barra di stato"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Consente all\'applicazione di disattivare la barra di stato o di aggiungere e rimuovere icone di sistema."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Consente montaggio e smontaggio da parte dell\'applicazione dei filesystem degli archivi rimovibili."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formattazione archivio esterno"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Consente all\'applicazione di formattare l\'archivio rimovibile."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"recupero di informazioni sull\'archiviazione protetta"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Consente all\'applicazione di ottenere informazioni sull\'archiviazione protetta."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"creazione archiviazione protetta"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Consente all\'applicazione di creare un\'archiviazione protetta."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"eliminazione archiviazione protetta"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Consente all\'applicazione di eliminare l\'archiviazione protetta."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"montaggio/smontaggio archiviazione protetta"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Consente all\'applicazione di montare/smontare l\'archiviazione protetta."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"rinominazione archiviazione protetta"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Consente all\'applicazione di rinominare l\'archiviazione protetta."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"recupero di informazioni sull\'archiviazione protetta"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Consente all\'applicazione di ottenere informazioni sull\'archiviazione protetta."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"creazione archiviazione protetta"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Consente all\'applicazione di creare un\'archiviazione protetta."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"eliminazione archiviazione protetta"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Consente all\'applicazione di eliminare l\'archiviazione protetta."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"montaggio/smontaggio archiviazione protetta"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Consente all\'applicazione di montare/smontare l\'archiviazione protetta."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"rinominazione archiviazione protetta"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Consente all\'applicazione di rinominare l\'archiviazione protetta."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"controllo vibrazione"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Consente all\'applicazione di controllare la vibrazione."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"controllo flash"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Consente a un\'applicazione di configurare il telefono Bluetooth locale e di rilevare e abbinare dispositivi remoti."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"creazione connessioni Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Consente a un\'applicazione di visualizzare la configurazione del telefono Bluetooth locale e di stabilire e accettare connessioni con dispositivi associati."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Gestione NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Consente a un\'applicazione di configurare il telefono NFC locale."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Accesso completo NFC a dispositivo remoto"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Consente a un\'applicazione di accedere ai dispositivi NFC remoti."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Notifica NFC da dispositivo remoto"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Consente a un\'applicazione di ricevere notifiche su operazioni correlate ai dispositivi NFC."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Notifica NFC da dispositivo LLCP remoto"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Consente a un\'applicazione di ricevere notifiche su operazioni LLCP correlate ai dispositivi NFC."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"disattivazione blocco tastiera"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Consente la disattivazione da parte di un\'applicazione del blocco tastiera e di eventuali protezioni tramite password associate. Un valido esempio è la disattivazione da parte del telefono del blocco tastiera quando riceve una telefonata in entrata, e la successiva riattivazione del blocco al termine della chiamata."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"lettura impostazioni di sincronizz."</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Consente a un\'applicazione di leggere parole, nomi e frasi private che l\'utente potrebbe aver memorizzato nel dizionario utente."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"scrittura nel dizionario definito dall\'utente"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Consente a un\'applicazione di scrivere nuove parole nel dizionario utente."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"modificare/eliminare i contenuti della scheda SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modifica/eliminaz. contenuti arch. cond."</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificare/eliminare i contenuti della scheda SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Consente a un\'applicazione di scrivere sulla scheda SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Consente a un\'applicazione di scrivere nell\'arch. cond."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Consente a un\'applicazione di scrivere sulla scheda SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"accesso al filesystem nella cache"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Consente a un\'applicazione di leggere e scrivere il filesystem nella cache."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Limita password"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Limita i tipi di password che sei autorizzato a utilizzare."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Controlla i tentativi di accesso"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Monitora i tentativi non riusciti di accedere al dispositivo per eseguire un\'azione."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Reimposta password"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Forza un nuovo valore per la password, chiedendo all\'amministratore di concedertelo prima di poter eseguire l\'accesso."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Forza blocco"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Controlla quando il dispositivo si blocca, chiedendoti di reinserire la password."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Imposta regole password"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Controlla la lunghezza e i caratteri ammessi nelle password di sblocco dello schermo"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Monitora tentativi di sblocco dello schermo"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Monitora il numero di password errate inserite durante lo sblocco dello schermo e blocca il telefono o cancella tutti i dati del telefono se vengono inserite troppe password errate"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Cambia la password di sblocco dello schermo"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Cambia la password di sblocco dello schermo"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Blocca lo schermo"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Controlla come e quando si blocca lo schermo"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Cancella tutti i dati"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Esegui un ripristino di fabbrica, eliminando tutti i tuoi dati senza conferma."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Cancella i dati del telefono senza preavviso eseguendo un ripristino dati di fabbrica"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Casa"</item>
<item msgid="869923650527136615">"Cellulare"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Consente all\'applicazione di leggere tutti gli URL visitati e tutti i segnalibri del browser."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"creazione cronologia e segnalibri del browser"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Consente a un\'applicazione di modificare la cronologia o i segnalibri del browser memorizzati sul telefono. Le applicazioni dannose possono sfruttare questa possibilità per cancellare o modificare i dati del browser."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"impostazione allarmi nella sveglia"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Consente all\'applicazione di impostare un allarme in un\'applicazione sveglia installata. Alcune applicazioni sveglia potrebbero non supportare questa funzione."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifica le autorizzazioni di localizzazione geografica del browser"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Consente a un\'applicazione di modificare le autorizzazioni di localizzazione geografica del browser. Le applicazioni dannose possono utilizzare questa autorizzazione per consentire l\'invio di informazioni sulla posizione a siti web arbitrari."</string>
<string name="save_password_message" msgid="767344687139195790">"Memorizzare la password nel browser?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostra tutto"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Archiviazione di massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB collegata"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Il telefono è stato collegato al computer tramite USB. Seleziona il pulsante sottostante se desideri copiare file tra il computer e la scheda SD di Android."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Il telefono è stato collegato al computer tramite USB. Seleziona il pulsante sottostante se desideri copiare file tra il computer e l\'archivio condiviso di Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Il telefono è stato collegato al computer tramite USB. Seleziona il pulsante sottostante se desideri copiare file tra il computer e la scheda SD di Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Attiva archivio USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Problema di utilizzo della scheda SD per l\'archiviazione USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Problema di utilizzo della scheda SD per l\'archiviazione USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Problema di utilizzo dell\'archivio condiviso per l\'archiviazione USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Problema di utilizzo dell\'archivio condiviso per l\'archiviazione USB."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB collegata"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Seleziona per copiare file sul/dal tuo computer."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Disattiva archivio USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Seleziona per disattivare archivio USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"Archiviazione USB in uso"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Prima di disattivare l\'archiviazione USB, assicurati di avere smontato (\"espulso\") la scheda SD di Android dal computer."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Prima di disattivare l\'archiviazione USB, assicurati di avere smontato (\"espulso\") l\'archivio condiviso di Android dal computer."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Prima di disattivare l\'archiviazione USB, assicurati di avere smontato (\"espulso\") la scheda SD di Android dal computer."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Disattiva archiviazione USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Si è verificato un problema durante la disattivazione dell\'archiviazione USB. Verifica di avere smontato l\'host USB e riprova."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Se attivi l\'archivio USB, alcune applicazioni in uso si bloccheranno e potrebbero risultare non disponibili finché non disattiverai l\'archivio USB."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Operazione USB non riuscita"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formatta scheda SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatta archivio cond."</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatta scheda SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Formattare la scheda SD? Tutti i dati sulla scheda verranno persi."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Formattare l\'archivio condiviso cancellando tutti i file memorizzati al suo interno? Questa azione è irreversibile."</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Formattare la scheda SD? Tutti i dati sulla scheda verranno persi."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatta"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Debug USB collegato"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidati"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Preparazione scheda SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Preparazione archivio condiviso"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Preparazione scheda SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Ricerca errori."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Scheda SD vuota"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Archivio condiviso vuoto"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Scheda SD vuota"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"La scheda SD è vuota o utilizza un file system non supportato."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Archivio condiviso vuoto o con filesystem non supportato."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Scheda SD vuota o con filesystem non supportato."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Scheda SD danneggiata"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Archivio condiviso danneggiato"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Scheda SD danneggiata"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"La scheda SD è danneggiata. Potrebbe essere necessario riformattarla."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Archivio condiviso danneggiato. Potrebbe essere necessario riformattarlo."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Scheda SD danneggiata. Potrebbe essere necessario riformattarla."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Rimozione imprevista della scheda SD"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Rimozione inaspettata archivio cond."</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Rimozione imprevista della scheda SD"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Smonta scheda SD prima della rimozione per evitare la perdita di dati."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Smonta l\'archivio condiviso prima della rimozione per evitare la perdita di dati."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Smonta scheda SD prima della rimozione per evitare la perdita di dati."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"È possibile rimuovere la scheda SD"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Puoi rimuovere l\'archivio cond."</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"È possibile rimuovere la scheda SD"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"È ora possibile rimuovere la scheda SD in modo sicuro."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Puoi rimuovere l\'archivio condiviso in tutta sicurezza."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Puoi rimuovere la scheda SD in tutta sicurezza."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Scheda SD rimossa"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Archivio condiviso rimosso"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Scheda SD rimossa"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Inserisci una nuova scheda SD per aumentare la memoria del dispositivo."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Archivio condiviso rimosso. Inserisci un nuovo supporto."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Scheda SD rimossa. Inseriscine un\'altra."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Nessuna attività corrispondente trovata"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"aggiornare le statistiche di utilizzo dei componenti"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index a4d07a8..52e3fcd 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"開発ツール"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"アプリケーションのデベロッパーにのみ必要な機能です。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"ストレージ"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"SDカードにアクセスします。"</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"共有ストレージへのアクセス"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SDカードにアクセスします。"</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"ステータスバーの無効化や変更"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"ステータスバーの無効化やシステムアイコンの追加や削除をアプリケーションに許可します。"</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"リムーバブルメモリのファイルシステムのマウントとマウント解除をアプリケーションに許可します。"</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"外部ストレージのフォーマット"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"アプリケーションがリムーバブルストレージをフォーマットすることを許可します。"</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"セキュアストレージ上の情報の取得"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"セキュアストレージ上の情報の取得をアプリケーションに許可します。"</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"セキュアストレージの作成"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"セキュアストレージの作成をアプリケーションに許可します。"</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"セキュアストレージの破棄"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"セキュアストレージの破棄をアプリケーションに許可します。"</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"セキュアストレージのマウント/マウント解除"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"セキュアストレージのマウント/マウント解除をアプリケーションに許可します。"</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"セキュアストレージ名の変更"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"セキュアストレージ名の変更をアプリケーションに許可します。"</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"セキュアストレージ上の情報の取得"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"セキュアストレージ上の情報の取得をアプリケーションに許可します。"</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"セキュアストレージの作成"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"セキュアストレージの作成をアプリケーションに許可します。"</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"セキュアストレージの破棄"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"セキュアストレージの破棄をアプリケーションに許可します。"</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"セキュアストレージのマウント/マウント解除"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"セキュアストレージのマウント/マウント解除をアプリケーションに許可します。"</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"セキュアストレージ名の変更"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"セキュアストレージ名の変更をアプリケーションに許可します。"</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"バイブレーション制御"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"バイブレーションの制御をアプリケーションに許可します。"</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"ライトのコントロール"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"このBluetooth端末の設定、およびリモート端末を検出してペアに設定することをアプリケーションに許可します。"</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"Bluetooth接続の作成"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"このBluetooth端末の設定表示、および別の端末をペアとして設定し接続を承認することをアプリケーションに許可します。"</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFCの管理"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"ローカルNFC端末の設定をアプリケーションに許可します。"</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"リモートデバイスへのNFCフルアクセス"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"リモートNFCデバイスへのアクセスをアプリケーションに許可します。"</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"リモートデバイスからのNFC通知"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"リモートNFCデバイスに関連する処理の通知を受けることをアプリケーションに許可します。"</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"リモートLLCPデバイスからのNFC通知"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"リモートNFCデバイスに関連するLLCP処理の通知を受けることをアプリケーションに許可します。"</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"キーロックを無効にする"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"キーロックや関連するパスワードセキュリティを無効にすることをアプリケーションに許可します。正当な利用の例では、かかってきた電話を受信する際にキーロックを無効にし、通話の終了時にキーロックを有効にし直します。"</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"同期設定の読み取り"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"アプリケーションが単語リストに登録されている個人的な語句や名前を読み込むことを許可します。"</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"単語リストへの書き込み"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"アプリケーションが単語リストに新しい語句を書き込むことを許可します。"</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"SDカードのコンテンツを修正/削除する"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"共有ストレージのコンテンツの変更/削除"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SDカードのコンテンツを修正/削除する"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"SDカードへの書き込みをアプリケーションに許可します。"</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"共有ストレージへの書き込みをアプリケーションに許可します。"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"SDカードへの書き込みをアプリケーションに許可します。"</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"キャッシュファイルシステムにアクセス"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"キャッシュファイルシステムへの読み書きをアプリケーションに許可します。"</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"パスワードの制限"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"使用できるパスワードの種類を制限します。"</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"ログインの監視"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"携帯電話へのログインの失敗を監視し、何らかの処置をとります。"</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"パスワードのリセット"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"パスワードを強制的に新しい値に変更します。ログインするには管理者からその値を通知してもらう必要があります。"</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"強制ロック"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"携帯電話のロック時を管理します。パスワードの再入力が必要となります。"</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"パスワードルールの設定"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"画面ロック解除パスワードの長さと使用できる文字数を制御する"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"画面ロック解除試行の監視"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"画面ロック解除のために入力されたパスワードが間違っていた回数を監視し、回数が多すぎる場合は端末をロックするか、端末内のデータをすべて削除します。"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"画面ロック解除パスワードの変更"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"画面ロック解除パスワードの変更"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"画面のロック"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"画面をロックする方法とタイミングを制御する"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"すべてのデータを消去"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"出荷時設定にリセットします。確認なしでデータがすべて削除されます。"</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"警告せずにデータの初期化を実行して端末内のデータを消去します。"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"自宅"</item>
<item msgid="869923650527136615">"携帯"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"ブラウザでアクセスしたすべてのURLおよびブラウザのすべてのブックマークの読み取りをアプリケーションに許可します。"</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"ブラウザの履歴とブックマークを書き込む"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"携帯電話に保存されているブラウザの履歴やブックマークの修正をアプリケーショに許可します。これにより悪意のあるアプリケーションが、ブラウザのデータを消去または変更する恐れがあります。"</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"アラームの設定"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"インストール済みアラームアプリケーションのアラーム設定をアプリケーションに許可します。この機能が実装されていないアラームアプリケーションもあります。"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"ブラウザの位置情報へのアクセス権を変更"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"ブラウザの位置情報に対するアクセス権の変更をアプリケーションに許可します。この設定では、悪意のあるアプリケーションが任意のウェブサイトに位置情報を送信する可能性があります。"</string>
<string name="save_password_message" msgid="767344687139195790">"このパスワードをブラウザで保存しますか?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"すべて表示"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USBマスストレージ"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB接続"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"携帯電話をUSBでパソコンに接続しています。パソコンとAndroidのSDカード間でファイルをコピーするには、下のボタンを選択します。"</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"携帯端末をUSBでパソコンに接続しています。パソコンとAndroidの共有ストレージ間でファイルをコピーするには、下のボタンを選択します。"</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"携帯電話をUSBでパソコンに接続しています。パソコンとAndroidのSDカード間でファイルをコピーするには、下のボタンを選択します。"</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"USBストレージをONにする"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"USBメモリにSDカードを使用する際に問題が発生しました。"</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"USBメモリにSDカードを使用する際に問題が発生しました。"</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"共有ストレージをUSBストレージとして使用する際に問題が発生しました。"</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"共有ストレージをUSBストレージとして使用する際に問題が発生しました。"</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB接続"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"パソコンとの間でファイルをコピーします。"</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USBストレージをOFFにする"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"USBストレージをOFFにする場合に選択します。"</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USBストレージを使用中"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"USBストレージをOFFにする前に、パソコンで必ずAndroidのSDカードのマウントを解除して(カードを取り出して)ください。"</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"USBストレージをOFFにする前に、パソコンで必ずAndroidの共有ストレージのマウントを解除して(ストレージを取り出して)ください。"</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"USBストレージをOFFにする前に、パソコンで必ずAndroidのSDカードのマウントを解除して(カードを取り出して)ください。"</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USBストレージをOFFにする"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"USBストレージをOFFにする際に問題が発生しました。USBホストのマウントが解除されていることを確認してからもう一度お試しください。"</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USBストレージをONにすると、使用中のアプリケーションの一部が停止し、USBストレージをOFFにするまで使用できなくなる場合があります。"</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB操作に失敗しました"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"SDカードをフォーマット"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"共有ストレージのフォーマット"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SDカードをフォーマット"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"SDカードをフォーマットしてもよろしいですか?カード内のすべてのデータが失われます。"</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"共有ストレージをフォーマットして、保存されているすべてのファイルを消去しますか?この操作は元に戻せません。"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"SDカードをフォーマットしてもよろしいですか?カード内のすべてのデータが失われます。"</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"フォーマット"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USBデバッグが接続されました"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"候補"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"SDカードの準備中"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"共有ストレージの準備中"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SDカードの準備中"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"エラーを確認しています。"</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"空のSDカード"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"共有ストレージが空です"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"空のSDカード"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"SDカードが空か、サポート対象外のファイルシステムを使用しています。"</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"共有ストレージが空であるか、サポートされていないファイルシステムを使用しています。"</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SDカードが空か、サポート対象外のファイルシステムを使用しています。"</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"破損したSDカード"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"共有ストレージが破損しています"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"破損したSDカード"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"SDカードが破損しています。カードのフォーマットが必要な可能性があります。"</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"共有ストレージが破損しています。ストレージの再フォーマットが必要な可能性があります。"</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SDカードが破損しています。カードのフォーマットが必要な可能性があります。"</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SDカードが予期せず取り外されました"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"共有ストレージが不適切に取り外されました"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SDカードが予期せず取り外されました"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"データの喪失を防ぐためSDカードを取り外す前にマウントを解除してください。"</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"データの喪失を防ぐため共有ストレージを取り外す前にマウントを解除してください。"</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"データの喪失を防ぐためSDカードを取り外す前にマウントを解除してください。"</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"SDカードを安全に取り外しました"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"共有ストレージの安全な取り外し"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SDカードを安全に取り外しました"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"SDカードを安全に取り外せます。"</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"共有ストレージを安全に取り外せます。"</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"SDカードは安全に取り外せます。"</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"SDカードが取り外されています"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"共有ストレージが取り外されています"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SDカードが取り外されています"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"SDカードがありません。メモリを使用する際はカードを挿入してください。"</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"共有ストレージが取り外されています。新しいメディアを挿入してください。"</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SDカードが取り外されました。新しいカードを挿入してください。"</string>
<string name="activity_list_empty" msgid="4168820609403385789">"一致するアクティビティが見つかりません"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"コンポーネント使用状況に関する統計情報の更新"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 56495d6..4c22975 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"개발 도구"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"애플리케이션 개발자에게만 필요한 기능입니다."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"저장"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"SD 카드에 액세스합니다."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"공유 저장용량에 액세스합니다."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD 카드에 액세스합니다."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"상태 표시줄 사용 중지 또는 수정"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"애플리케이션이 상태 표시줄을 사용 중지하거나 시스템 아이콘을 추가 및 제거할 수 있도록 합니다."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"애플리케이션이 이동식 저장소의 파일 시스템을 마운트하고 마운트 해제할 수 있도록 합니다."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"외부 저장소 포맷"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"애플리케이션이 이동식 저장소를 포맷할 수 있도록 합니다."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"보안 저장소에 대한 정보 가져오기"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"애플리케이션이 보안 저장소의 정보를 가져올 수 있도록 합니다."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"보안 저장소 만들기"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"애플리케이션이 보안 저장소를 만들 수 있도록 합니다."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"보안 저장소 제거"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"애플리케이션이 보안 저장소를 제거할 수 있도록 합니다."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"보안 저장소 마운트/마운트 해제"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"애플리케이션이 보안 저장소를 마운트/마운트 해제할 수 있도록 합니다."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"보안 저장소 이름 바꾸기"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"애플리케이션이 보안 저장소의 이름을 바꿀 수 있도록 합니다."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"보안 저장소에 대한 정보 가져오기"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"애플리케이션이 보안 저장소의 정보를 가져올 수 있도록 합니다."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"보안 저장소 만들기"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"애플리케이션이 보안 저장소를 만들 수 있도록 합니다."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"보안 저장소 제거"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"애플리케이션이 보안 저장소를 제거할 수 있도록 합니다."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"보안 저장소 마운트/마운트 해제"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"애플리케이션이 보안 저장소를 마운트/마운트 해제할 수 있도록 합니다."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"보안 저장소 이름 바꾸기"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"애플리케이션이 보안 저장소의 이름을 바꿀 수 있도록 합니다."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"진동 제어"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"애플리케이션이 진동을 제어할 수 있도록 합니다."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"카메라 플래시 제어"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"애플리케이션이 로컬 Bluetooth 휴대전화를 구성한 다음 원격 장치를 검색하여 페어링할 수 있도록 합니다."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"Bluetooth 연결 만들기"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"애플리케이션이 로컬 Bluetooth 전화의 구성을 보고 페어링된 장치에 연결하며 연결을 수락할 수 있도록 합니다."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFC 관리"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"애플리케이션이 로컬 NFC 휴대전화를 구성할 수 있도록 합니다."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"원격 기기에 대한 NFC 전체 액세스 권한"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"애플리케이션이 원격 NFC 기기에 액세스할 수 있도록 합니다."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"원격 기기의 NFC 알림"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"원격 NFC 기기 관련 작업에 대한 알림이 애플리케이션에 전달되도록 합니다."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"원격 LLCP 기기의 NFC 알림"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"원격 NFC 기기 관련 LLCP 작업에 대한 알림이 애플리케이션에 전달되도록 합니다."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"키 잠금 사용 중지"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"애플리케이션이 키 잠금 및 관련 비밀번호 보안을 사용 중지할 수 있도록 합니다. 예를 들어, 휴대전화가 수신전화를 받을 때 키 잠금을 사용 중지했다가 통화가 끝나면 키 잠금을 다시 사용할 수 있습니다."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"동기화 설정 읽기"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"애플리케이션이 사용자 사전에 보관되어 있는 비공개 단어, 이름 및 구문을 읽도록 합니다."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"사용자정의 사전에 작성"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"애플리케이션이 사용자 사전에 새 단어를 입력할 수 있도록 합니다."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"SD 카드 콘텐츠 수정/삭제"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"공유 저장용량 콘텐츠 수정/삭제"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SD 카드 콘텐츠 수정/삭제"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"애플리케이션이 SD 카드에 쓸 수 있도록 합니다."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"애플리케이션이 공유 저장용량에 쓸 수 있도록 합니다."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"애플리케이션이 SD 카드에 쓸 수 있도록 합니다."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"캐시 파일시스템 액세스"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"애플리케이션이 캐시 파일시스템을 읽고 쓸 수 있도록 합니다."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"비밀번호 제한"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"사용할 수 있는 비밀번호 유형을 제한합니다."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"로그인 시도 보기"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"몇 가지 작업을 수행하기 위해 기기에 대해 실패한 로그인 시도를 모니터링합니다."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"비밀번호 재설정"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"비밀번호를 새 값으로 강제 설정합니다. 이를 수행하려면 로그인하기 전에 관리자에게 새로 지정할 비밀번호 값을 요청해야 합니다."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"강제 잠금"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"기기가 잠겨 있을 때 작동하려면 비밀번호를 다시 입력해야 합니다."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"비밀번호 규칙 설정"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"화면 잠금해제 비밀번호에 허용되는 길이 및 문자 수를 제어합니다."</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"화면 잠금해제 시도 모니터링"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"화면 잠금해제 시 비밀번호를 잘못 입력한 횟수를 모니터링하고, 잘못된 비밀번호 입력 횟수가 너무 많은 경우 휴대전화를 잠그거나 휴대전화에 있는 데이터를 모두 지웁니다."</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"화면 잠금해제 비밀번호를 변경합니다."</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"화면 잠금해제 비밀번호를 변경합니다."</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"화면 잠금"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"화면을 잠그는 방법과 시기를 제어합니다."</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"모든 데이터 삭제"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"초기화를 수행하여 모든 데이터를 확인하지 않고 삭제합니다."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"초기화를 수행하여 경고 없이 휴대전화 데이터를 지웁니다."</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"집"</item>
<item msgid="869923650527136615">"모바일"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"애플리케이션이 브라우저로 방문한 모든 URL과 브라우저의 모든 북마크를 읽도록 허용합니다."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"브라우저의 기록 및 북마크 쓰기"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"애플리케이션이 휴대전화에 저장된 브라우저 기록 또는 북마크를 수정할 수 있도록 허용합니다. 이 경우 악성 애플리케이션이 브라우저의 데이터를 지우거나 수정할 수 있습니다."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"알람 시계에 알람 설정"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"실치된 알람 시계 애플리케이션에 알람을 설정하도록 허용합니다. 일부 알람 시계 애플리케이션은 이 기능을 구현하지 않을 수 있습니다."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"브라우저 위치 정보 수정 권한"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"애플리케이션이 브라우저의 위치 정보 권한을 수정할 수 있도록 합니다. 악성 애플리케이션이 이를 사용하여 임의의 웹사이트에 위치 정보를 보낼 수도 있습니다."</string>
<string name="save_password_message" msgid="767344687139195790">"브라우저에 이 비밀번호를 저장하시겠습니까?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"모두 표시"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB 대용량 저장소"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB 연결됨"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"USB를 통해 휴대전화를 컴퓨터에 연결했습니다. 컴퓨터와 Android의 SD 카드 간에 파일을 복사하려면 아래의 버튼을 선택하세요."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"USB를 통해 휴대전화를 컴퓨터에 연결했습니다. 컴퓨터와 Android의 공유 저장용량 간에 파일을 복사하려면 아래의 버튼을 선택하세요."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"USB를 통해 휴대전화를 컴퓨터에 연결했습니다. 컴퓨터와 Android의 SD 카드 간에 파일을 복사하려면 아래의 버튼을 선택하세요."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"USB 저장소 사용"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"USB 저장소로 SD 카드를 사용하는 동안 문제가 발생했습니다."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"USB 저장소로 SD 카드를 사용하는 동안 문제가 발생했습니다."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"USB 저장소로 공유 저장용량을 사용하는 동안 문제가 발생했습니다."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"USB 저장소로 공유 저장용량을 사용하는 동안 문제가 발생했습니다."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB 연결됨"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"컴퓨터에 파일을 복사하거나 컴퓨터의 파일을 복사하려면 선택합니다."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB 저장소 끄기"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"USB 저장소 끄기를 선택하세요."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB 저장소 사용 중"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"USB 저장소를 사용하지 않도록 설정하기 전에 컴퓨터에서 Android의 SD 카드를 마운트 해제했는지(꺼냈는지) 확인하시기 바랍니다."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"USB 저장소를 사용하지 않도록 설정하기 전에 컴퓨터에서 Android의 공유 저장용량을 마운트 해제했는지(꺼냈는지) 확인하시기 바랍니다."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"USB 저장소를 사용하지 않도록 설정하기 전에 컴퓨터에서 Android의 SD 카드를 마운트 해제했는지(꺼냈는지) 확인하시기 바랍니다."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB 저장소 사용 안함"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"USB 저장소를 사용하지 않도록 설정하는 동안 문제가 발생했습니다. USB 호스트와 연결을 해제했는지 확인한 다음 다시 시도하세요."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USB 저장소를 사용 설정하면 사용 중인 일부 애플리케이션이 중지되고 USB 저장소를 사용 중지할 때까지 사용할 수 없게 됩니다."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB 작업 실패"</string>
<string name="dlg_ok" msgid="7376953167039865701">"확인"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"SD 카드 포맷"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"공유 저장용량 포맷"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD 카드 포맷"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"SD 카드를 포맷하시겠습니까? 포맷하면 카드의 모든 데이터를 잃게 됩니다."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"공유 저장용량을 포맷하여 저장된 파일을 모두 지우시겠습니까? 실행취소할 수 없는 작업입니다."</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"SD 카드를 포맷하시겠습니까? 포맷하면 카드의 모든 데이터를 잃게 됩니다."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"포맷"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB 디버깅 연결됨"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"가능한 원인"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"SD 카드 준비 중"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"공유 저장용량 준비 중"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD 카드 준비 중"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"오류 확인 중입니다."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"빈 SD 카드"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"공유 저장용량 비어 있음"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"빈 SD 카드"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"SD 카드가 비어 있거나 지원되지 않는 파일시스템을 사용 중입니다."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"공유 저장용량이 비어 있거나 지원되지 않는 파일 시스템을 사용합니다."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD 카드가 비어 있거나 지원되지 않는 파일 시스템을 사용합니다."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"손상된 SD 카드"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"공유 저장용량 손상됨"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"손상된 SD 카드"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"SD 카드가 손상되었습니다. 카드를 다시 포맷하시기 바랍니다."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"공유 저장용량이 손상되었습니다. 다시 포맷해야 할 수도 있습니다."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD 카드가 손상되었습니다. 카드를 다시 포맷해야 할 수 있습니다."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SD 카드가 예상치 않게 제거되었습니다."</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"공유 저장용량이 예기치 못하게 제거됨"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD 카드가 예상치 않게 제거되었습니다."</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"데이터 손실을 피하려면 SD 카드를 제거하기 전에 마운트 해제합니다."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"데이터 손실을 피하려면 공유 저장용량을 제거하기 전에 마운트 해제합니다."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"데이터 손실을 피하려면 SD 카드를 제거하기 전에 마운트 해제합니다."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"SD 카드 제거 가능"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"공유 저장용량 안전하게 제거"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD 카드 제거 가능"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"이제 SD 카드를 안전하게 제거할 수 있습니다."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"공유 저장용량을 안전하게 제거할 수 있습니다."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"안전하게 SD 카드를 제거할 수 있습니다."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"SD 카드 없음"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"공유 저장용량 분리함"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD 카드 없음"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"SD가 제거되었습니다. 기기의 저장 용량을 늘리려면 새 SD 카드를 삽입하세요."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"공유 저장용량을 제거했습니다. 새 미디어를 삽입하세요."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD 카드가 없습니다. SD 카드를 넣으세요."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"일치하는 활동이 없습니다."</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"구성 요소 사용 통계 업데이트"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 375e592..a5c24c0 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utviklingsverktøy"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funksjonalitet kun utviklere trenger."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Tilgang til minnekortet."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Tilgang til delt lagring."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Tilgang til minnekortet."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"deaktivere eller endre statusfeltet"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Lar applikasjonen deaktivere statusfeltet, samt legge til og fjerne systemikoner."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Lar applikasjonen montere og avmontere filsystemer for uttagbar lagring."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formatere ekstern lagringsplass"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Lar applikasjonen formatere ekstern lagringsplass."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"få informasjon om sikker lagring"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Tillater programmet å innhente informasjon om sikker lagring."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"opprette sikker lagring"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Tillater programmet å opprette sikker lagring."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"stenge sikker lagring"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Tillater programmet å stenge sikker lagring."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"koble til eller fra sikker lagring"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Tillater programmet å koble sikker lagring til eller fra."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"gi nytt navn til sikker lagring"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Tillater programmet å gi nytt navn til sikker lagring."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"få informasjon om sikker lagring"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Tillater programmet å innhente informasjon om sikker lagring."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"opprette sikker lagring"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Tillater programmet å opprette sikker lagring."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"stenge sikker lagring"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Tillater programmet å stenge sikker lagring."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"koble til eller fra sikker lagring"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Tillater programmet å koble sikker lagring til eller fra."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"gi nytt navn til sikker lagring"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Tillater programmet å gi nytt navn til sikker lagring."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"kontrollere vibratoren"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Lar applikasjonen kontrollere vibratoren."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"kontrollere lommelykten"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Lar applikasjonen konfigurere den lokale Bluetooth-telefonen, og å oppdage og pare med andre enheter."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"opprette Bluetooth-tilkoblinger"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Lar applikasjonen se konfigurasjonen til den lokale Bluetooth-telefonen, og å opprette og godta tilkoblinger med parede enheter."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFC-administrasjon"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Tillater et program å konfigurere lokal NFC-telefon."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"NFC full tilgang til ekstern enhet"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Tillater et program å få tilgang til eksterne NFC-enheter."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"NFC varsel fra ekstern enhet"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Tillater et program å bli varslet om operasjoner knyttet til eksterne NFC-enheter."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"NFC varsel fra ekstern LLCP-enhet"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Tillater et program å bli varslet om LLCP-operasjoner knyttet til eksterne NFC-enheter."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"slå av tastaturlås"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Lar applikasjonen slå av tastaturlåsen og enhver tilknyttet passordsikkerhet. Et legitimt eksempel på dette er at telefonen slår av tastaturlåsen når den mottar et innkommende anrop, og så slår den på igjen når samtalen er over."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"lese synkroniseringsinnstillinger"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Lar applikasjonen lese private ord, navn og uttrykk som brukeren har lagret i den brukerdefinerte ordlisten."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"skrive til brukerdefinert ordliste"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Lar applikasjonen skrive nye ord til den brukerdefinerte ordlisten."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"redigere/slette innhold på minnekort"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"endre/slette innh. i delt lagr."</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"redigere/slette innhold på minnekort"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Lar applikasjonen skrive til minnekortet."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Prog. skriver til delt lagr."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Lar applikasjonen skrive til minnekortet."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"tilgang til bufrede filer"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Tillater et program å lese og skrive til bufrede filer."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Begrens passord"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Begrense typene passord du kan bruke."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Overvåk påloggingsforsøk"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Overvåk mislykkede påloggingsforsøk eller forsøk på handlinger på enheten."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Tilbakestill passordet"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Fremtving tilbakestilling av passord, slik at administratoren må gi deg et nytt passord når du skal logge deg på."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Obligatorisk låsing"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Kontrollerer når enheten låses. Du må skrive inn passordet på nytt for å låse den opp."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Angi passordregler"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Kontroller tillatt lengde og tegn i passord for opplåsing av skjerm"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Overvåk forsøk på opplåsing av skjerm"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Overvåk antall feil passordforsøk ved opplåsing av skjerm. Lås telefonen eller slett alle data ved for mange feil passordforsøk"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Endre passord for opplåsing av skjerm"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Endre passord for opplåsing av skjerm"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Lås skjermen"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Kontroller hvordan og når skjermen låses"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Slett alle data"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Utfører tilbakestilling til fabrikkstandard. Alle data slettes uten varsel."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Tilbakestill telefonens data uten advarsel ved å utføre tilbakestilling til fabrikkstandard"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hjemmenummer"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Lar applikasjonen lese alle adresser nettleseren har besøkt, og alle nettleserens bokmerker."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"skrive til nettleserens logg og bokmerker"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Lar applikasjonen endre nettleserens logg og bokmerker lagret på telefonen. Ondsinnede applikasjoner kan bruke dette til å fjerne eller redigere nettleserens data."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"angi alarm i alarmklokke"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Lar programmet angi en alarm i et installert alarmklokkeprogram. Det kan hende at enkelte alarmklokkeprogrammer ikke implementerer denne funksjonen."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Endre nettleserens tillatelser for geografisk posisjonering"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Tillater programmet å endre nettleserens tillatelser for geografisk posisjonering. Skadelige programmer kan bruke denne funksjonen til å sende posisjonsopplysninger til vilkårlige nettsteder."</string>
<string name="save_password_message" msgid="767344687139195790">"Ønsker du at nettleseren skal huske dette passordet?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Vis alle"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-masselagring"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB koblet til"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Du har koblet telefonen til datamaskinen via USB. Velg knappen nedenfor hvis du vil kopiere filer mellom datamaskinen og minnekortet i telefonen."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Du har koblet telefonen til datamaskinen via USB. Velg knappen nedenfor hvis du vil kopiere filer mellom datamaskinen og delt lagring for Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Du har koblet telefonen til datamaskinen via USB. Velg knappen nedenfor hvis du vil kopiere filer mellom datamaskinen og minnekortet i telefonen."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Slå på USB-lagring"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Det oppsto et problem med å bruke minnekortet ditt for USB-lagring."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Det oppsto et problem med å bruke minnekortet ditt for USB-lagring."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Det oppstod et problem under delt lagring for USB-enheten."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Det oppstod et problem under delt lagring for USB-enheten."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB tilkoblet"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Velg om du ønsker å kopiere filer til/fra en datamaskin."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Slå av USB-lagring"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Velg for å slå av USB-lagring."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB-lagring er i bruk"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Før du slår av USB-lagring, sjekk at du har avmontert telefonen på datamaskinen."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Før du slår av USB-lagring, må du kontrollere at du har koblet fra den delte lagringsenheten for Android fra datamaskinen."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Før du slår av USB-lagring, sjekk at du har avmontert telefonen på datamaskinen."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Slå av USB-lagring"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Det oppstod et problem ved deaktivering av USB-lagring. Kontroller at du har demontert USB-verten, og prøv på nytt."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Hvis du aktiverer USB-lagring, virker ikke lenger enkelte av programmene du bruker, og de kan være utilgjengelige inntil du deaktiverer USB-lagringen."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB-operasjonen mislyktes"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formatere minnekort"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatér delt lagr."</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatere minnekort"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Er du sikker på at du ønsker å formatere minnekortet? Alle data på kortet vil gå tapt."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Vil du formatere delt lagring og slette alle lagrede filer? Handlingen kan ikke angres!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Er du sikker på at du ønsker å formatere minnekortet? Alle data på kortet vil gå tapt."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatér"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-debugging tilkoblet"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string>
<string name="candidates_style" msgid="4333913089637062257">"TAG_FONT"<u>"kandidater"</u>"CLOSE_FONT"</string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Forbereder minnekort"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Forbereder delt lagring"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Forbereder minnekort"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Sjekker for feil."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Tomt minnekort"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Delt lagring er tom"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Tomt minnekort"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"Minnekortet er tomt eller bruker et ustøttet filsystem."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Delt lagring er tom eller har et filsystem som ikke håndteres."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Minnekortet er tomt eller har et ikke-støttet filsystem."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Skadet minnekort"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Delt lagring skadet"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Skadet minnekort"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"Minnekortet er skadet. Det kan være du må formatere kortet."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Delt lagring er skadet. Det kan være nødvendig å formatere enheten."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Minnekortet er skadet. Du må kanskje formatere det."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Minnekortet ble tatt ut uventet"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Delt lagring fjernet uventet"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Minnekortet ble tatt ut uventet"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Avmonter minnekortet før det tas ut, for å unngå datatap."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Koble fra delt lagring før enheten tas ut av maskinen for å unngå tap av data."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Avmonter minnekortet før det tas ut, for å unngå datatap."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"Trygt å ta ut minnekort"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Delt lagring kan trygt fjernes"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Trygt å ta ut minnekort"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"Minnekortet kan nå trygt tas ut."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Det er trygt å ta ut enheten for delt lagring."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Det er trygt å ta ut minnekortet."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Minnekortet ble tatt ut"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Fjernet delt lagring"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Minnekortet ble tatt ut"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Minnekortet ble tatt ut. Sett inn et nytt minnekort for å øke lagringsplassen."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Delt lagring fjernet. Sett inn et nytt medium."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Minnekortet ble fjernet. Sett inn et nytt."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Fant ingen tilsvarende aktiviteter"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"oppdater statistikk over komponentbruk"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 2dedd7b..e023244 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ontwikkelingshulpprogramma\'s"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Functies die alleen door toepassingsontwikkelaars worden gebruikt."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Opslagruimte"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Toegang tot de SD-kaart."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Toegang krijgen tot de gedeelde opslag."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Toegang tot de SD-kaart."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"statusbalk uitschakelen of wijzigen"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Hiermee kan een toepassing de statusbalk uitschakelen of systeempictogrammen toevoegen en verwijderen."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Hiermee kan de toepassing bestandssystemen koppelen en ontkoppelen voor verwisselbare opslagruimte."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"externe opslag formatteren"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Hiermee kan de toepassing de externe opslag formatteren."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"informatie over de beveiligde opslag verkrijgen"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Staat de toepassing toe informatie over de beveiligde opslag te verkrijgen."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"beveiligde opslag maken"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Staat de toepassing toe beveiligde opslag te maken."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"beveiligde opslag vernietigen"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Staat de toepassing toe de beveiligde opslag te vernietigen."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"beveiligde opslag koppelen/ontkoppelen"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Staat de toepassing toe de beveiligde opslag te koppelen/ontkoppelen."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"naam van beveiligde opslag wijzigen"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Staat de toepassing toe de naam van de beveiligde opslag te wijzigen."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"informatie over de beveiligde opslag verkrijgen"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Staat de toepassing toe informatie over de beveiligde opslag te verkrijgen."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"beveiligde opslag maken"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Staat de toepassing toe beveiligde opslag te maken."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"beveiligde opslag vernietigen"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Staat de toepassing toe de beveiligde opslag te vernietigen."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"beveiligde opslag koppelen/ontkoppelen"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Staat de toepassing toe de beveiligde opslag te koppelen/ontkoppelen."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"naam van beveiligde opslag wijzigen"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Staat de toepassing toe de naam van de beveiligde opslag te wijzigen."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"trilstand beheren"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Hiermee kan de toepassing de trilstand beheren."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"zaklamp bedienen"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Hiermee kan een toepassing de lokale Bluetooth-telefoon configureren en externe apparaten zoeken en aansluiten."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"Bluetooth-verbindingen maken"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Hiermee kan een toepassing de configuratie van een lokale Bluetooth-telefoon bekijken en verbindingen met gekoppelde apparaten maken en accepteren."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFC-beheer"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Hiermee kan een toepassing de lokale NFC-telefoon configureren."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"NFC volledige toegang tot extern apparaat"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Hiermee kan een toepassing toegang krijgen tot externe NFC-apparaten."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"NFC-melding van extern apparaat"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Hiermee kan een toepassing op de hoogte worden gesteld van bewerkingen gerelateerd aan externe NFC-apparaten."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"NFC-melding van extern LLCP-apparaat"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Hiermee kan een toepassing op de hoogte worden gesteld van LLCP-bewerkingen gerelateerd aan externe NFC-apparaten."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"toetsvergrendeling uitschakelen"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Hiermee kan een toepassing de toetsvergrendeling en bijbehorende wachtwoordbeveiliging uitschakelen. Een voorbeeld: de telefoon schakelt de toetsvergrendeling uit als er een oproep binnenkomt en schakelt de toetsvergrendeling weer in als de oproep is beëindigd."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"synchronisatie-instellingen lezen"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Hiermee kan een toepassing privéwoorden, namen en woordcombinaties lezen die de gebruiker heeft opgeslagen in het gebruikerswoordenboek."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"schrijven naar door gebruiker gedefinieerd woordenboek"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Hiermee kan een toepassing nieuwe woorden schrijven naar het gebruikerswoordenboek."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"inhoud op de SD-kaart aanpassen/verwijderen"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"inhoud van gedeelde opslag aanpassen/verwijderen"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"inhoud op de SD-kaart aanpassen/verwijderen"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Hiermee kan een toepassing schrijven naar de SD-kaart."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Hiermee kan een toepassing schrijven naar de gedeelde opslag."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Hiermee kan een toepassing schrijven naar de SD-kaart."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"het cachebestandssysteem openen"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Staat een toepassing toe het cachebestandssysteem te lezen en te schrijven."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Wachtwoord beperken"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"De typen wachtwoorden beperken die u mag gebruiken."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Aanmeldingspogingen controleren"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Mislukte pogingen controleren voor aanmelding bij het apparaat om een bepaalde actie uit te voeren."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Wachtwoord opnieuw instellen"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Uw wachtwoord gedwongen wijzigen in een nieuwe waarde, wat vereist dat de beheerder u het wachtwoord geeft voordat u zich kunt aanmelden."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Gedwongen vergrendelen"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Beheren wanneer het apparaat wordt vergrendeld, wat vereist dat u het wachtwoord opnieuw invoert."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Wachtwoordregels instellen"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"De lengte en tekens beheren die zijn toegestaan in wachtwoorden voor schermontgrendeling"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Pogingen voor schermontgrendeling bijhouden"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Bijhouden hoe vaak onjuiste wachtwoorden worden ingevoerd wanneer het scherm wordt ontgrendeld en de telefoon vergrendelen of alle gegevens op de telefoon wissen als er te veel onjuiste wachtwoorden worden ingevoerd"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Het wachtwoord voor schermontgrendeling wijzigen"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Het wachtwoord voor schermontgrendeling wijzigen"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Het scherm vergrendelen"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Beheren hoe en wanneer het scherm wordt vergrendeld"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Alle gegevens wissen"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"De fabrieksinstellingen herstellen, waarbij alle gegevens worden verwijderd zonder bevestiging."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"De gegevens van de telefoon zonder waarschuwing wissen door de fabrieksinstellingen te herstellen"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Thuis"</item>
<item msgid="869923650527136615">"Mobiel"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Hiermee kan een toepassing de URL\'s lezen die u via de browser heeft bezocht, evenals alle bladwijzers van de browser."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"browsergeschiedenis en bladwijzers schrijven"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Hiermee kan een toepassing de op uw telefoon opgeslagen browsergeschiedenis of bladwijzers wijzigen. Schadelijke toepassingen kunnen hiermee uw browsergegevens verwijderen of wijzigen."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"alarm instellen in wekker"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Hiermee kan de toepassing een alarm instellen in een geïnstalleerde wekkertoepassing. Deze functie wordt door sommige wekkertoepassingen niet geïmplementeerd."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Geolocatierechten voor browser aanpassen"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Staat een toepassing toe de geolocatierechten van de browser aan te passen. Schadelijke toepassingen kunnen dit gebruiken om locatiegegevens te verzenden naar willekeurige websites."</string>
<string name="save_password_message" msgid="767344687139195790">"Wilt u dat de browser dit wachtwoord onthoudt?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Alles weergeven"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-massaopslag"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-verbinding"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"U heeft uw telefoon via USB op uw computer aangesloten. Selecteer de onderstaande knop als u bestanden tussen uw computer en de SD-kaart van uw Android wilt kopiëren."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"U heeft uw telefoon via USB op uw computer aangesloten. Selecteer de onderstaande knop als u bestanden tussen uw computer en de gedeelde opslag van uw Android wilt kopiëren."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"U heeft uw telefoon via USB op uw computer aangesloten. Selecteer de onderstaande knop als u bestanden tussen uw computer en de SD-kaart van uw Android wilt kopiëren."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"USB-opslag inschakelen"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Er is een probleem bij het gebruik van uw SD-kaart voor USB-opslag."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Er is een probleem bij het gebruik van uw SD-kaart voor USB-opslag."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Er is een probleem bij het gebruik van uw gedeelde opslag voor USB-opslag."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Er is een probleem bij het gebruik van uw gedeelde opslag voor USB-opslag."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB-verbinding"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Selecteer dit om bestanden naar/van uw computer te kopiëren."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB-opslag uitschakelen"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Selecteer dit om USB-opslag uit te schakelen."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB-opslag in gebruik"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Voordat u USB-opslag uitschakelt, moet u de SD-kaart van uw Android hebben ontkoppeld (\'uitgeworpen\') van uw computer."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Voordat u USB-opslag uitschakelt, moet u de gedeelde opslag van uw Android hebben ontkoppeld (\'uitgeworpen\') van uw computer."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Voordat u USB-opslag uitschakelt, moet u de SD-kaart van uw Android hebben ontkoppeld (\'uitgeworpen\') van uw computer."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB-opslag uitschakelen"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Er is een probleem opgetreden tijdens het uitschakelen van de USB-opslag. Controleer of u de USB-host heeft losgekoppeld en probeer het opnieuw."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Als u USB-opslag inschakelt, worden bepaalde toepassingen die u gebruikt, gestopt en worden deze mogelijk pas weer beschikbaar wanneer u USB-opslag uitschakelt."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB-bewerking mislukt"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"SD-kaart formatteren"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Gedeelde opslag formatteren"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD-kaart formatteren"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Weet u zeker dat u de SD-kaart wilt formatteren? Alle gegevens op uw kaart gaan dan verloren."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Gedeelde opslag formatteren en alle opgeslagen bestanden wissen? Actie kan niet ongedaan worden gemaakt."</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Weet u zeker dat u de SD-kaart wilt formatteren? Alle gegevens op uw kaart gaan dan verloren."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatteren"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-foutopsporing verbonden"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidaten"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"SD-kaart voorbereiden"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Gedeelde opslag voorbereiden"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD-kaart voorbereiden"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Controleren op fouten."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Lege SD-kaart"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Lege gedeelde opslag"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Lege SD-kaart"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"De SD-kaart is leeg of gebruikt een niet-ondersteund bestandssysteem."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Gedeelde opslag leeg of heeft een niet-ondersteund bestandssysteem."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD-kaart is leeg of heeft een niet-ondersteund bestandssysteem."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Beschadigde SD-kaart"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Gedeelde opslag beschadigd"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Beschadigde SD-kaart"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"De SD-kaart is beschadigd. U moet de kaart mogelijk opnieuw formatteren."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Gedeelde opslag beschadigd. U moet de opslag mogelijk opnieuw formatteren."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD-kaart beschadigd. U moet de kaart mogelijk opnieuw formatteren."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SD-kaart onverwachts verwijderd"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Gedeelde opslag onverwachts verwijderd"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-kaart onverwachts verwijderd"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Ontkoppel de SD-kaart voordat u deze verwijdert om gegevensverlies te voorkomen."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Ontkoppel de gedeelde opslag voordat u deze verwijdert om gegevensverlies te voorkomen."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Ontkoppel de SD-kaart voordat u deze verwijdert om gegevensverlies te voorkomen."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"De SD-kaart kan veilig worden verwijderd"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Gedeelde opslag kan veilig worden verwijderd"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"De SD-kaart kan veilig worden verwijderd"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"De SD-kaart kan nu veilig worden verwijderd."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"U kunt de gedeelde opslag veilig verwijderen."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"U kunt de SD-kaart veilig verwijderen."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"SD-kaart is verwijderd"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Gedeelde opslag verwijderen"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD-kaart is verwijderd"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"De SD-kaart is verwijderd. Plaats een nieuwe SD-kaart om de opslagcapaciteit van uw apparaat te vergroten."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Gedeelde opslag verwijderd. Plaats nieuw medium."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-kaart verwijderd. Plaats een nieuwe."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Geen overeenkomende activiteiten gevonden"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"gebruiksstatistieken van component bijwerken"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 4e5256f..027df18 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Narzędzia programistyczne"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funkcje potrzebne jedynie programistom"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Pamięć"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Dostęp do karty SD."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Dostęp do pamięci udostępnionej."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Dostęp do karty SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"wyłączanie lub zmienianie paska stanu"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Pozwala aplikacjom na wyłączenie paska stanu lub dodawanie i usuwanie ikon systemowych."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Pozwala aplikacjom na podłączanie i odłączanie systemów plików w pamięciach przenośnych."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formatowanie pamięci zewnętrznej"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Zezwala aplikacji na formatowanie wymiennych nośników."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"uzyskiwanie informacji o bezpiecznym magazynie"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Zezwala aplikacji na uzyskiwanie informacji o bezpiecznym magazynie."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"tworzenie bezpiecznego magazynu"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Zezwala aplikacji na tworzenie bezpiecznego magazynu."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"usuwanie bezpiecznego magazynu"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Zezwala aplikacji na usuwanie bezpiecznego magazynu."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"podłączanie/odłączanie bezpiecznego magazynu"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Zezwala aplikacji na podłączanie/odłączanie bezpiecznego magazynu."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"zmiana nazwy bezpiecznego magazynu"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Zezwala aplikacji na zmianę nazwy bezpiecznego magazynu."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"uzyskiwanie informacji o bezpiecznym magazynie"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Zezwala aplikacji na uzyskiwanie informacji o bezpiecznym magazynie."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"tworzenie bezpiecznego magazynu"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Zezwala aplikacji na tworzenie bezpiecznego magazynu."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"usuwanie bezpiecznego magazynu"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Zezwala aplikacji na usuwanie bezpiecznego magazynu."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"podłączanie/odłączanie bezpiecznego magazynu"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Zezwala aplikacji na podłączanie/odłączanie bezpiecznego magazynu."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"zmiana nazwy bezpiecznego magazynu"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Zezwala aplikacji na zmianę nazwy bezpiecznego magazynu."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"kontrolowanie wibracji"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Pozwala aplikacjom na kontrolowanie wibracji."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"kontrolowanie latarki"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Pozwala aplikacji na konfigurowanie lokalnego telefonu Bluetooth, wyszukiwanie urządzeń zdalnych i łączenie się z nimi."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"tworzenie połączeń Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Pozwala aplikacji na wyświetlanie konfiguracji lokalnego telefonu Bluetooth oraz na tworzenie i akceptowanie połączeń ze sparowanymi urządzeniami."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Administracja komunikacją NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Zezwala aplikacji na konfigurowanie obsługi komunikacji NFC w tym telefonie."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Pełny dostęp do urządzenia zdalnego za pomocą komunikacji NFC"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Zezwala aplikacji na uzyskiwanie dostępu do zdalnych urządzeń obsługujących komunikację NFC."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Powiadomienie w ramach komunikacji NFC z urządzenia zdalnego"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Zezwala aplikacji na otrzymywanie powiadomień o operacjach związanych ze zdalnymi urządzeniami obsługującymi komunikację NFC."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Powiadomienie w ramach komunikacji NFC z urządzenia obsługującego protokół LLCP"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Zezwala aplikacji na otrzymywanie powiadomień o operacjach LLCP związanych ze zdalnymi urządzeniami obsługującymi komunikację NFC."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"wyłączanie blokady klawiatury"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Pozwala aplikacji na wyłączenie blokady klawiatury i wszystkich związanych z tym haseł zabezpieczających. Typowym przykładem takiego działania jest wyłączanie blokady klawiatury, gdy pojawia się połączenie przychodzące, a następnie ponowne jej włączanie po zakończeniu połączenia."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"czytanie ustawień synchronizowania"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Zezwala aplikacji na odczytywanie wszelkich prywatnych słów, nazw i wyrażeń zapisanych przez użytkownika w swoim słowniku."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"zapisywanie w słowniku zdefiniowanym przez użytkownika"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Zezwala aplikacjom na zapisywanie nowych słów w słowniku użytkownika."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"modyfikowanie/usuwanie zawartości karty SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modyfikowanie/usuwanie zawartości pamięci udostępnionej"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modyfikowanie/usuwanie zawartości karty SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Umożliwia aplikacji zapis na karcie SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Zezwala aplikacji na zapis w pamięci udostępnionej."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Umożliwia aplikacji zapis na karcie SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"dostęp do systemu plików pamięci podręcznej"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Zezwala aplikacji na odczyt i zapis w systemie plików pamięci podręcznej."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Ogranicz liczbę prób wprowadzenia hasła"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Ogranicza dozwolone typy haseł użytkownika."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Monitoruj próby logowania"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Monitoruje nieudane próby zalogowania do urządzenia w celu wykonania określonego działania."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Resetuj hasło"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Wymusza podanie nowej wartości hasła, wymagając przekazania go użytkownikowi przez administratora przed zalogowaniem."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Wymuś zablokowanie"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Kontroluje, kiedy urządzenie jest blokowane, wymagając ponownego wprowadzenia hasła."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Określ reguły hasła"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Kontrolowanie długości haseł odblokowania ekranu i dozwolonych w nich znaków"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Monitoruj próby odblokowania ekranu"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Monitorowanie liczby przypadków wprowadzenia nieprawidłowego hasła podczas odblokowywania ekranu oraz blokowanie telefonu lub wymazywanie z niego wszystkich danych po wprowadzeniu zbyt wielu nieprawidłowych haseł"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Zmień hasło odblokowania ekranu"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Zmień hasło odblokowania ekranu"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Zablokuj ekran"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Kontrolowanie sposobu i warunków blokowania ekranu"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Usuń wszystkie dane"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Wykonuje reset fabryczny, usuwając wszystkie dane użytkownika bez żadnego potwierdzenia."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Wymazywanie danych z telefonu bez ostrzeżenia, przez przywrócenie danych fabrycznych"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Dom"</item>
<item msgid="869923650527136615">"Komórka"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Umożliwia aplikacji odczyt wszystkich adresów URL odwiedzonych przez przeglądarkę, a także wszystkich zakładek przeglądarki."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"zapis historii i zakładek przeglądarki"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Umożliwia aplikacji modyfikowanie historii lub zakładek przeglądarki zapisanych w telefonie. Złośliwe aplikacje mogą używać tej opcji do usuwania lub modyfikowania danych przeglądarki."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"ustaw alarm w budziku"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Umożliwia aplikacji ustawienie alarmu w zainstalowanej aplikacji budzika. W niektórych aplikacjach budzika funkcja ta może nie być zaimplementowana."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modyfikowanie uprawnień przeglądarki dotyczących lokalizacji geograficznej"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Zezwala aplikacji na modyfikowanie uprawnień przeglądarki dotyczących lokalizacji geograficznej. Złośliwe aplikacje mogą używać tej opcji do wysyłania informacji o lokalizacji do dowolnych witryn internetowych."</string>
<string name="save_password_message" msgid="767344687139195790">"Czy chcesz, aby zapamiętać to hasło w przeglądarce?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Pokaż wszystko"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Pamięć masowa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Połączenie przez USB"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Telefon został połączony z komputerem za pośrednictwem USB. Wybierz poniższy przycisk, aby skopiować pliki między komputerem a kartą SD systemu Android."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Telefon został połączony z komputerem za pośrednictwem USB. Wybierz poniższy przycisk, aby skopiować pliki między komputerem a pamięcią udostępnioną systemu Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Telefon został połączony z komputerem za pośrednictwem USB. Wybierz poniższy przycisk, aby skopiować pliki między komputerem a kartą SD systemu Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Włącz nośnik USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Wystąpił problem z wykorzystaniem karty SD dla pamięci USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Wystąpił problem z wykorzystaniem karty SD dla pamięci USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Wystąpił problem z użyciem pamięci udostępnionej jako nośnika USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Wystąpił problem z użyciem pamięci udostępnionej jako nośnika USB."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"Połączenie przez USB"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Wybierz, aby skopiować pliki do/z komputera"</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Wyłącz nośnik USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Wybierz, aby wyłączyć nośnik USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"Nośnik USB w użyciu"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Przed wyłączeniem nośnika USB upewnij się, że karta SD systemu Android została odłączona („wyjęta”) od komputera."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Przed wyłączeniem nośnika USB upewnij się, że pamięć udostępniona systemu Android została odłączona od komputera („wyjęta”)."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Przed wyłączeniem nośnika USB upewnij się, że karta SD systemu Android została odłączona („wyjęta”) od komputera."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Wyłącz nośnik USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Wystąpił problem podczas wyłączania nośnika USB. Upewnij się, że host USB został odłączony, a następnie spróbuj ponownie."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Po włączeniu nośnika USB niektóre używane aplikacje zostaną zatrzymane i mogą być niedostępne do chwili wyłączenia nośnika USB."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Operacja USB nie powiodła się"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formatuj kartę SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatuj pamięć udostępnioną"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatuj kartę SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Czy na pewno sformatować kartę SD? Wszystkie dane na karcie zostaną utracone."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Czy sformatować pamięć udostępnioną i wymazać wszystkie zapisane tam pliki? Tej czynności nie można cofnąć."</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Czy na pewno sformatować kartę SD? Wszystkie dane na karcie zostaną utracone."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatuj"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Podłączono moduł debugowania USB"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandydaci"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Przygotowywanie karty SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Przygotowywanie pamięci udostępnionej"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Przygotowywanie karty SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Sprawdzanie w poszukiwaniu błędów."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Pusta karta SD"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Pusta pamięć udostępniona"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Pusta karta SD"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"Karta SD jest pusta lub używa nieobsługiwanego systemu plików."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Pamięć udostępniona jest pusta lub zawiera nieobsługiwany system plików."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Karta SD jest pusta lub zawiera nieobsługiwany system plików."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Uszkodzona karta SD"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Uszkodzona pamięć udostępniona"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Uszkodzona karta SD"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"Karta SD jest uszkodzona. Konieczne może być przeformatowanie karty."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Pamięć udostępniona jest uszkodzona. Konieczne może być ponowne sformatowanie."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Karta SD jest uszkodzona. Konieczne może być ponowne sformatowanie."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Karta SD została nieoczekiwanie wyjęta"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Nośnik pamięci udostępnionej został wyjęty"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Karta SD została nieoczekiwanie wyjęta"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Odłącz kartę SD przed jej wyjęciem, aby uniknąć utraty danych."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Odłącz pamięć udostępnioną przed wyjęciem jej nośnika, aby uniknąć utraty danych."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Odłącz kartę SD przed jej wyjęciem, aby uniknąć utraty danych."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"Można bezpiecznie usunąć kartę SD"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Można wyjąć nośnik pamięci udostępnionej"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Można bezpiecznie usunąć kartę SD"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"Można teraz bezpiecznie usunąć kartę SD."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Możesz bezpiecznie wyjąć nośnik pamięci udostępnionej."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Możesz bezpiecznie wyjąć kartę SD."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Usunięta karta SD"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Brak pamięci udostępnionej"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Usunięta karta SD"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Karta SD została usunięta. Włóż nową kartę SD, aby zwiększyć pamięć urządzenia."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Nośnik pamięci udostępnionej został wyjęty. Włóż nowy nośnik."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Karta SD została wyjęta. Włóż nową kartę."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Nie znaleziono pasujących działań"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"aktualizowanie statystyk użycia komponentu"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 55fdd18..bfd99bc 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ferramentas de desenvolvimento"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funcionalidades apenas necessárias para programadores de aplicações."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Aceder ao cartão SD."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Aceder ao armaz. partilhado."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Aceder ao cartão SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"desactivar ou modificar barra de estado"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Permite à aplicação desactivar a barra de estado ou adicionar e remover ícones do sistema."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Permite à aplicação montar e desmontar sistemas de ficheiros para armazenamento removível."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formatar armazenamento externo"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Permite a uma aplicação formatar o armazenamento removível."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"obter informações sobre o armazenamento seguro"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Permite à aplicação obter informações sobre o armazenamento seguro."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"criar armazenamento seguro"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Permite à aplicação criar armazenamento seguro."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"destruir armazenamento seguro"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Permite à aplicação destruir o armazenamento seguro."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"instalar/desinstalar armazenamento seguro"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Permite à aplicação instalar/desinstalar o armazenamento seguro."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"mudar o nome do armazenamento seguro"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Permite à aplicação mudar o nome do armazenamento seguro."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"obter informações sobre o armazenamento seguro"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Permite à aplicação obter informações sobre o armazenamento seguro."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"criar armazenamento seguro"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Permite à aplicação criar armazenamento seguro."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"destruir armazenamento seguro"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Permite à aplicação destruir o armazenamento seguro."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"instalar/desinstalar armazenamento seguro"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Permite à aplicação instalar/desinstalar o armazenamento seguro."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"mudar o nome do armazenamento seguro"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Permite à aplicação mudar o nome do armazenamento seguro."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"controlar vibrador"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Permite à aplicação controlar o vibrador."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"controlar lanterna"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Permite a uma aplicação configurar o telefone Bluetooth local, bem como descobrir e emparelhar com dispositivos remotos."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"criar ligações Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Permite a uma aplicação ver a configuração do telefone Bluetooth local, bem como efectuar e aceitar ligações com dispositivos emparelhados."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Administração de NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Permite que uma aplicação configure o telefone NFC local."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Acesso total de NFC ao dispositivo remoto"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Permite que uma aplicação aceda a dispositivos NFC remotos."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Notificação NFC a partir do dispositivo remoto"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Permite que uma aplicação seja notificada sobre operações relacionadas com dispositivos NFC remotos."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Notificação NFC a partir do dispositivo LLCP remoto"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Permite que uma aplicação seja notificada sobre operações LLCP relacionadas com dispositivos NFC remotos."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"desactivar bloqueio de teclas"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permite a uma aplicação desactivar o bloqueio de teclas e qualquer segurança por palavra-passe associada. Um exemplo legítimo é a desactivação do bloqueio de teclas pelo telefone ao receber uma chamada, reactivando, em seguida, o bloqueio de teclas ao terminar a chamada."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"ler definições de sincronização"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Permite a uma aplicação ler quaisquer palavras, nomes e expressões privadas que o utilizador possa ter armazenado no dicionário do utilizador."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"escrever no dicionário definido pelo utilizador"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Permite a uma aplicação escrever novas palavras no dicionário do utilizador."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"modificar/eliminar conteúdo do cartão SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modif./elim. conteúdo do armaz. part."</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/eliminar conteúdo do cartão SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Permite que uma aplicação escreva no cartão SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Permite que uma aplicação escreva no armaz. partilhado."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Permite que uma aplicação escreva no cartão SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"aceder ao sistema de ficheiros da cache"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Permite a uma aplicação ler e escrever no sistema de ficheiros da cache."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Limitar palavra-passe"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Restrinja os tipos de palavras-passe que está autorizado a utilizar."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Ver tentativas de início de sessão"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"O monitor falhou as tentativas de iniciar sessão no dispositivo para efectuar algumas acções."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Repor palavra-passe"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Force a palavra-passe para um novo valor, sendo necessário que o administrador lho forneça antes de poder iniciar sessão."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Forçar bloqueio"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Controle quando o dispositivo é bloqueado, sendo necessário reintroduzir a respectiva palavra-passe."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Definir regras de palavra-passe"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Controlar o comprimento e os caracteres permitidos nas palavras-passe de desbloqueio do ecrã"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Monitorizar tentativas de desbloqueio do ecrã"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Monitorize o número de palavras-passe incorrectas introduzidas ao desbloquear o ecrã e bloqueie o telefone ou apague todos os dados do telefone se forem introduzidas demasiadas palavras-passe incorrectas"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Alterar a palavra-passe de desbloqueio do ecrã"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Alterar a palavra-passe de desbloqueio do ecrã"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Bloquear o ecrã"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Controlar como e quando ocorre o bloqueio do ecrã"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Apagar todos os dados"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Efectue uma reposição de fábrica, eliminando todos os dados sem qualquer confirmação."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Apagar os dados do telefone sem avisar, ao efectuar uma reposição de dados de fábrica"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Residência"</item>
<item msgid="869923650527136615">"Móvel"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Permite que a aplicação leia todos os URLs visitados pelo browser e todos os marcadores do browser."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"gravar histórico e marcadores do browser"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Permite que uma aplicação modifique o histórico e os marcadores do browser armazenados no telefone. As aplicações maliciosas podem utilizar esta permissão para apagar ou modificar os dados do browser."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"definir alarme no despertador"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite que a aplicação defina um alarme numa aplicação de despertador instalada. Algumas aplicações de despertador podem não integrar esta funcionalidade."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modificar permissões de localização geográfica do Navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite a uma aplicação modificar as permissões de localização geográfica do Navegador. As aplicações mal intencionadas podem utilizar isto para enviar informações de localização para Web sites arbitrários."</string>
<string name="save_password_message" msgid="767344687139195790">"Quer que o browser memorize esta palavra-passe?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar tudo"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Armazenamento em massa USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Ligado através de USB"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Ligou o telefone ao computador através de USB. Seleccione o botão abaixo se pretender copiar ficheiros entre o computador e o cartão SD do Android."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Ligou o telefone ao computador através de USB. Seleccione o botão abaixo se pretender copiar ficheiros entre o computador e o armazenamento partilhado do Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Ligou o telefone ao computador através de USB. Seleccione o botão abaixo se pretender copiar ficheiros entre o computador e o cartão SD do Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Activar armazenamento USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Existe um problema ao utilizar o cartão SD para armazenamento USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Existe um problema ao utilizar o cartão SD para armazenamento USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Existe um problema ao utilizar o armazenamento partilhado para o armazenamento USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Existe um problema ao utilizar o armazenamento partilhado para o armazenamento USB."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"Ligado através de USB"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Seleccione para copiar ficheiro para/do seu computador."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Desactivar armazenamento USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Opte por desactivar o armazenamento USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"O armazenamento USB está a ser utilizado"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Antes de desactivar o armazenamento USB, certifique-se de que desinstalou (\"ejectou\") o cartão SD do Android do computador."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Antes de desactivar o armazenamento USB, certifique-se de que desmontou (\"ejectou\") o armazenamento partilhado do Android do computador."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Antes de desactivar o armazenamento USB, certifique-se de que desinstalou (\"ejectou\") o cartão SD do Android do computador."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Desactivar armazenamento USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Ocorreu um problema ao desactivar o armazenamento USB. Confirme se desinstalou o anfitrião USB e, em seguida, tente novamente."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Se activar o armazenamento USB, algumas aplicações que estiver a utilizar serão paradas e poderão ficar indisponíveis até desactivar o armazenamento USB."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Falha na operação USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formatar cartão SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatar armaz. part."</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatar cartão SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Tem a certeza de que pretende formatar o cartão SD? Perder-se-ão todos os dados no cartão."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Formatar armazenamento partilhado e apagar todos os ficheiros armazenados? Não é possível reverter a acção!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Tem a certeza de que pretende formatar o cartão SD? Perder-se-ão todos os dados no cartão."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatar"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB ligada"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"A preparar cartão SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"A preparar armaz. partilhado"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"A preparar cartão SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"A verificar a presença de erros."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Cartão SD vazio"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Armazenamento partilhado vazio"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Cartão SD vazio"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"O cartão SD está vazio ou a utilizar um sistema de ficheiros não suportado."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"O armazenamento partilhado está vazio ou tem um sistema de ficheiros não suportado."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Cartão SD vazio ou sistema de ficheiros não suportado."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Cartão SD danificado"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Armazen. partilhado danificado"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Cartão SD danificado"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"O cartão SD está danificado. Poderá ser necessário reformatar o cartão."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"O armazenamento partilhado está danificado. Poderá ser necessário reformatá-lo."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"Cartão SD danificado. Poderá ser necessário reformatá-lo."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Cartão SD removido de forma inesperada"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Armaz. part. remov. forma inesperada"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Cartão SD removido de forma inesperada"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Desmonte o cartão SD antes de retirá-lo para evitar a perda de dados."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Desmonte o armazenamento partilhado antes de removê-lo para evitar a perda de dados."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Desmonte o cartão SD antes de retirá-lo para evitar a perda de dados."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"É seguro retirar o cartão SD"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Seguro remover arm. partilhado"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"É seguro retirar o cartão SD"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"É possível remover agora o cartão SD em segurança."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Pode remover o armazenamento partilhado com segurança."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Pode remover o cartão SD com segurança."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Cartão SD removido"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Armazen. partilhado removido"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Cartão SD removido"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"O cartão SD foi removido. Introduza um novo cartão SD para aumentar a capacidade de armazenamento do dispositivo."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"O armazenamento partilhado foi removido. Insira um novo suporte de dados."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Cartão SD removido. Insira um novo cartão."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Nenhuma actividade correspondente encontrada"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"actualizar estatísticas de utilização de componentes"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index d5e1ca0..bf3c2a5 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ferramentas de desenvolvimento"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Recursos necessários apenas para desenvolvedores de aplicativo."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Acessar o cartão SD."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Acessa o armazenamento comp."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Acessar o cartão SD."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"desativar ou modificar a barra de status"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Permite que o aplicativo desative a barra de status ou adicione e remova ícones do sistema."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Permite que o aplicativo monte e desmonte arquivos de sistema para armazenamento removível."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formatar armazenamento externo"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Permite que o aplicativo formate o armazenamento removível."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"obter informações sobre o armazenamento seguro"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Permite que o aplicativo obtenha informações sobre armazenamento seguro."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"criar armazenamento seguro"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Permite que o aplicativo crie um armazenamento seguro."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"destrói o armazenamento seguro"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Permite que o aplicativo destrua o armazenamento seguro."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"conectar/desconectar armazenamento seguro"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Permite que o aplicativo conecte/desconecte o armazenamento seguro."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"renomear o armazenamento seguro"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Permite que o aplicativo renomeie o armazenamento seguro."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"obter informações sobre o armazenamento seguro"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Permite que o aplicativo obtenha informações sobre armazenamento seguro."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"criar armazenamento seguro"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Permite que o aplicativo crie um armazenamento seguro."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"destrói o armazenamento seguro"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Permite que o aplicativo destrua o armazenamento seguro."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"conectar/desconectar armazenamento seguro"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Permite que o aplicativo conecte/desconecte o armazenamento seguro."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"renomear o armazenamento seguro"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Permite que o aplicativo renomeie o armazenamento seguro."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"controlar o vibrador"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Permite que o aplicativo controle o vibrador."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"controlar lanterna"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Permite que um aplicativo configure o telefone Bluetooth local, descubra e pareie com dispositivos remotos."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"criar conexões Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Permite que um aplicativo veja a configuração do telefone Bluetooth local e que possa fazer e aceitar conexões com dispositivos pareados."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Administração do NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Permite que um aplicativo configure o telefone NFC local."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Acesso completo do NFC ao aparelho remoto"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Permite que um aplicativo acesse aparelhos NFC remotos"</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Notificação NFC do aparelho remoto"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Permite que um aplicativo seja notificado sobre operações relacionadas a aparelhos NFC remotos."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Notificação NFC do aparelho LLCP remoto"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Permite que um aplicativo seja notificado sobre operações LLCP relacionadas a aparelhos NFC remotos."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"desativar o bloqueio de teclas"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Permite que um aplicativo desative o bloqueio de teclas e qualquer segurança por senha associada. Um exemplo legítimo disso é a desativação do bloqueio de teclas pelo telefone ao receber uma chamada e a reativação do bloqueio quando a chamada é finalizada."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"ler as configurações de sincronização"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Permite que um aplicativo leia quaisquer palavras, nomes e frases particulares armazenados pelo usuário no dicionário do usuário."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"gravar no dicionário definido pelo usuário"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Permite que um aplicativo grave novas palavras no dicionário do usuário."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"modificar/excluir conteúdo do cartão SD"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificar/excluir cont. armaz."</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/excluir conteúdo do cartão SD"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Permite que um aplicativo grave no cartão SD."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Perm. aplic. grave arm. comp."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Permite que um aplicativo grave no cartão SD."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"acessar o sistema de arquivos de cache"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Permite que um aplicativo leia e grave no sistema de arquivos de cache."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Limitar senha"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Restringe os tipos de senha que você tem permissão de usar."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Exibir tentativas de login"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Monitora as tentativas malsucedidas de login no aparelho para executar alguma ação."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Redefinir senha"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Força a sua senha para um novo valor, exigindo que o administrador a forneça antes que você possa fazer login."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Forçar bloqueio"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Controla o bloqueio do aparelho, exigindo que a senha seja digitada novamente."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Definir regras para senha"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Controla o tamanho e os caracteres permitidos nas senhas de desbloqueio de tela"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Monitorar tentativas de desbloqueio da tela"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Monitora o número de senhas incorretas inseridas ao desbloquear a tela e bloqueia o telefone ou apaga todos os dados do telefone se muitas senhas incorretas forem inseridas"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Alterar a senha para desbloqueio da tela"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Altera a senha para desbloqueio da tela"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Bloquear a tela"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Controla como e quando a tela é bloqueada"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Apagar todos os dados"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Execute uma redefinição de fábrica, excluindo todos os seus dados sem qualquer confirmação."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Apaga os dados do telefone sem aviso, executando uma redefinição da configuração original"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Residencial"</item>
<item msgid="869923650527136615">"Celular"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Permite que o aplicativo leia todos os URLs visitados pelo Navegador e todos os favoritos do Navegador."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"gravar histórico e favoritos do Navegador"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Permite que um aplicativo modifique o histórico ou os favoritos do Navegador armazenados no seu telefone. Aplicativos maliciosos podem usar isso para apagar ou modificar os dados do seu Navegador."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"definir alarme no despertador"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Permite que o aplicativo defina um alarme em um aplicativo de despertador instalado. Talvez alguns aplicativos de despertador não implementem esse recurso."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Modifique as permissões de geolocalização do seu navegador"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Permite que um aplicativo modifique as permissões de geolocalização do navegador. Aplicativos maliciosos podem usar isso para permitir o envio de informações de localização a sites arbitrários."</string>
<string name="save_password_message" msgid="767344687139195790">"Deseja que o navegador lembre desta senha?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostrar todas"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Armazenamento USB em massa"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"Conectado por USB"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Você conectou o telefone ao computador via USB. Selecione o botão abaixo se quiser copiar arquivos entre o computador e o cartão SD do seu Android."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Você conectou o telefone ao computador via USB. Selecione o botão abaixo se quiser copiar arquivos entre seu computador e o armazenamento compartilhado do Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Você conectou o telefone ao computador via USB. Selecione o botão abaixo se quiser copiar arquivos entre o computador e o cartão SD do seu Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Ativar o armazenamento USB"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Há um problema com o uso do seu cartão SD para armazenamento USB."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Há um problema com o uso do seu cartão SD para armazenamento USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Há um problema com o uso do seu armazenamento compartilhado para armazenamento USB."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Há um problema com o uso do seu armazenamento compartilhado para armazenamento USB."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"Conectado por USB"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Selecione para copiar arquivos para/do seu computador."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Desativar o armazenamento USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Selecione para desativar o armazenamento USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"Armazenamento USB em uso"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Antes de desativar o armazenamento USB, verifique se desconectou (“ejetou”) o cartão SD do Android do computador."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Antes de desativar o armazenamento USB, verifique se desconectou (“ejetou”) o armazenamento compartilhado do Android do computador."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Antes de desativar o armazenamento USB, verifique se desconectou (“ejetou”) o cartão SD do Android do computador."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Desativar o armazenamento USB"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Houve um problema ao desativar o armazenamento USB. Verifique se desconectou o host USB e tente novamente."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Se você ativar o armazenamento USB, alguns aplicativos que estão em uso serão interrompidos e poderão não estar disponíveis até você desativar o armazenamento USB."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Falha de operação de USB"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formatar cartão SD"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatar arm. comp."</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatar cartão SD"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Tem certeza de que deseja formatar o cartão SD? Todos os dados no seu cartão serão perdidos."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Formatar o armazenamento compartilhado, apagando todos os arquivos armazenados? A ação não pode ser revertida!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Tem certeza de que deseja formatar o cartão SD? Todos os dados no seu cartão serão perdidos."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatar"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB conectada"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Preparando o cartão SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Preparando armazen. compart."</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Preparando o cartão SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Procurando erros."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Cartão SD em branco"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Armazenamento compart. vazio"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Cartão SD em branco"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"O cartão SD está em branco ou está usando um sistema de arquivos não suportado."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"O armazenamento compartilhado está vazio ou possui sistema de arquivos incompatível."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"Cartão SD vazio ou com sistema de arquivos incompatível."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Cartão SD danificado"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Armaz. compart. danificado"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Cartão SD danificado"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"O cartão SD está danificado. Talvez seja necessário reformatar o seu cartão."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"O armazenamento compartilhado está danificado. Talvez seja necessário reformatá-lo."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"O cartão SD está danificado. Talvez seja necessário reformatá-lo."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Cartão SD removido inesperadamente."</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Armaz. comp. remov. inesperad."</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Cartão SD removido inesperadamente."</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Desmonte o cartão SD antes da remoção para evitar a perda de dados."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Desconecte o armazenamento compartilhado antes da remoção para evitar a perda de dados."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Desmonte o cartão SD antes da remoção para evitar a perda de dados."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"O cartão SD já pode ser removido com segurança."</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"É seguro remover armaz. comp."</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"O cartão SD já pode ser removido com segurança."</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"O cartão SD já pode ser removido com segurança."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Você pode remover com segurança o armazenamento compartilhado."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Você pode remover o cartão SD com segurança."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Cartão SD removido"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Armazen. compart. removido"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Cartão SD removido"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"O SD foi removido. Insira um novo cartão SD para aumentar o armazenamento do seu dispositivo."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Armazenamento compartilhado removido. Insira nova mídia."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Cartão SD removido. Insira um novo."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Nenhum atividade correspondente foi encontrada"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"atualizar estatísticas de uso do componente"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index b61635f..cb70818 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Инструменты разработки"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Функции, необходимые только разработчикам приложений."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Память"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Доступ к SD-карте."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Доступ к общему накопителю."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ к SD-карте."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"отключать или изменять строку состояния"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Позволяет приложению отключать строку состояния или добавлять/удалять системные значки."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Позволяет приложению монтировать и удалять файловые системы съемных носителей."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"форматировать внешний накопитель"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Позволяет приложению форматировать съемный накопитель."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"получать сведения о защищенном хранилище"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Позволяет программе получать сведения о защищенном хранилище."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"создать защищенное хранилище"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Позволяет программам создавать защищенные хранилища."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"удалять защищенное хранилище"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Позволяет программе удалять защищенные хранилища."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"подключать / отключать защищенное хранилище"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Позволяет программе подключать и отключать защищенные хранилища."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"переименовать защищенное хранилище"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Позволяет программам переименовывать защищенные хранилища."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"получать сведения о защищенном хранилище"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Позволяет программе получать сведения о защищенном хранилище."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"создать защищенное хранилище"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Позволяет программам создавать защищенные хранилища."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"удалять защищенное хранилище"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Позволяет программе удалять защищенные хранилища."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"подключать / отключать защищенное хранилище"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Позволяет программе подключать и отключать защищенные хранилища."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"переименовать защищенное хранилище"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Позволяет программам переименовывать защищенные хранилища."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"управлять вибровызовом"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Позволяет приложению управлять виброзвонком."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"управлять вспышкой"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Позволяет приложению настраивать локальный телефон Bluetooth, обнаруживать и выполнять сопряжение удаленных устройств."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"создавать подключения Bluetooth"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Позволяет приложению просматривать конфигурацию локального телефона Bluetooth, создавать подключения с сопряженными устройствами."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Администрировать NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Разрешает приложению настраивать локальный телефон NFC."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Разрешает полный доступ к удаленному устройству с NFC"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Разрешает приложению доступ к удаленным устройствам NFC."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Присылать оповещения с удаленных устройств на NFC"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Разрешает приложению получать оповещения об операциях с удаленными устройствами NFC."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Присылать оповещения с удаленных устройств LLCP на NFC"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Разрешает приложению получать оповещения об операциях LLCP с удаленными устройствами NFC."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"отключать блокировку клавиатуры"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Позволяет приложению отключить блокировку клавиатуры и другие функции защиты паролем. Примером допустимого использования этой функции является отключение блокировки клавиатуры при получении входящего вызова и включение блокировки после завершения разговора."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"считывать настройки синхронизации"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Позволяет приложению считывать любые слова, имена и фразы личного пользования, которые могут храниться в пользовательском словаре."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"записывать в словарь пользователя"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Позволяет приложению записывать новые слова в словарь пользователя."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"изменять/удалять содержимое SD-карты"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"изменять и удалять содержимое общего накопителя"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"изменять/удалять содержимое SD-карты"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Разрешает приложению запись на SD-карту"</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Разрешает приложению запись на общий накопитель."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Разрешает приложению запись на SD-карту"</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"получать доступ к кэшу файловой системы"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Разрешает программам доступ для записи и чтения к кэшу файловой системы."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Ограничить пароль"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Ограничить типы паролей, доступных для использования."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Просмотр попыток входа"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Мониторинг неудачных попыток подключения к устройству для выполнения определенных действий."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Сбросить пароль"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Принудительно изменить пароль, который администратор должен будет сообщить вам, чтобы вы смогли выполнить вход."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Принудительная блокировка"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Управление блокировкой устройства, требующей ввода пароля."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Правила задания паролей"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Контролирует длину и символы при вводе паролей снятия блокировки экрана"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Отслеживать попытки снятия блокировки экрана"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Отслеживать количество неверно введенных паролей для снятия блокировки экрана и блокировать телефон либо уничтожить все данные на нем, если было введено слишком много неверных паролей"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Изменять пароль блокировки экрана"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Изменять пароль блокировки экрана"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Блокировать экран"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Контролирует способ и время блокировки экрана"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Удалить все данные"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Выполнить сброс к начальным настройкам с удалением всех данных без запроса подтверждения."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Уничтожить все данные на телефоне без предупреждения путем сброса настроек"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Домашний"</item>
<item msgid="869923650527136615">"Мобильный"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Разрешает приложению считывать все URL, посещенные браузером, и все его закладки."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"записывать историю и закладки браузера"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Разрешает приложению изменять историю и закладки браузера, сохраненные в вашем телефоне. Вредоносное ПО может пользоваться этим, чтобы стирать или изменять данные вашего браузера."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"настраивать сигнал будильника"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Позволяет настраивать сигнал установленного приложения будильника. Для некоторых приложений будильника эта функция может быть недоступна."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Изменить разрешения браузера для доступа к географическому местоположению"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Позволяет программе изменять разрешения браузера для доступа к географическому положению. Вредоносные программы могут пользоваться этим для отправки информации о местоположении на некоторые сайты."</string>
<string name="save_password_message" msgid="767344687139195790">"Вы хотите, чтобы браузер запомнил этот пароль?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Показать все"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Запоминающее устройство USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-подключение установлено"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Телефон подключен к компьютеру через порт USB. Нажмите кнопку ниже, если необходимо копировать файлы с компьютера на SD-карту устройства Android (или наоборот)."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Телефон подключен к компьютеру через порт USB. Для копирования файлов между компьютером и общим накопителем Android нажмите кнопку ниже."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Телефон подключен к компьютеру через порт USB. Нажмите кнопку ниже, если необходимо копировать файлы с компьютера на SD-карту устройства Android (или наоборот)."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Включить USB-накопитель"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"При использовании SD-карты как USB-накопителя возникла неполадка."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"При использовании SD-карты как USB-накопителя возникла неполадка."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"При использовании общего накопителя как USB-накопителя возникла ошибка."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"При использовании общего накопителя как USB-накопителя возникла ошибка."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB-подключение установлено"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Выберите копирование файлов на компьютер или с компьютера."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Выключить USB-накопитель"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Выберите, чтобы выключить USB-накопитель."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB-накопитель используется"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Перед отключением USB-накопителя убедитесь, что SD-карта устройства Android была отключена от компьютера."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Перед отключением USB-накопителя убедитесь, что общий накопитель Android был отключен от компьютера."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Перед отключением USB-накопителя убедитесь, что SD-карта устройства Android была отключена от компьютера."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Выключить USB-накопитель"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"При выключении USB-накопителя произошла неполадка. Убедитесь, что USB-хост отключен, и повторите попытку."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"При включении USB-накопителя некоторые используемые приложения могут прекратить работу и оставаться недоступными до отключения USB-накопителя."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"Сбой операции USB-подключения"</string>
<string name="dlg_ok" msgid="7376953167039865701">"ОК"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Очистить SD-карту"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Форматировать"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Очистить SD-карту"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Отформатировать карту SD? Все данные, находящиеся на карте, будут уничтожены."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Форматирование общего накопителя безвозвратно удалит все файлы на нем! Продолжить?"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Отформатировать карту SD? Все данные, находящиеся на карте, будут уничтожены."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Формат"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"Отладка по USB разрешена"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"варианты"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Подготовка карты SD"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Подготавливается общий накопитель"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Подготовка карты SD"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Проверка ошибок."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Пустая карта SD"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Нет данных на общем накопителе"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Пустая карта SD"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"Карта SD пуста или использует неподдерживаемую файловую систему."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"На общем накопителе нет данных или его файловая система не поддерживается."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD-карта пуста или использует неподдерживаемую файловую систему"</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Поврежденная карта SD"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Общий накопитель поврежден"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Поврежденная карта SD"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"Карта SD повреждена. Возможно, потребуется отформатировать ее."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Общий накопитель поврежден. Попробуйте отформатировать его."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD-карта повреждена. Попробуйте отформатировать ее."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"Карта SD неожиданно извлечена"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Общий накопитель неожиданно отключен"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Карта SD неожиданно извлечена"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Перед извлечением карты SD отключите ее во избежание потери данных."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Перед извлечением общего накопителя отключите его во избежание потери данных."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Перед извлечением карты SD отключите ее во избежание потери данных."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"Безопасное удаление карты SD"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Общий накопитель безопасно отключен"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Безопасное удаление карты SD"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"Теперь карту SD можно безопасно удалить."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Теперь общий накопитель может быть безопасно отключен."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Можно безопасно извлечь SD-карту."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Отсутствует карта SD"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Общий накопитель удален"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Отсутствует карта SD"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"Карта SD отсутствует. Для увеличения емкости устройства вставьте новую карту SD."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Общий накопитель отключен. Вставьте другой накопитель."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-карта извлечена. Вставьте новую карту."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Подходящих действий не найдено"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"обновлять статистику использования компонентов"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 8bc598d..b8b596a 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Utvecklingsverktyg"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Funktioner som endast behövs för programutvecklare."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"Få åtkomst till SD-kortet."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få åtkomst till SD-kortet."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få åtkomst till SD-kortet."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"inaktivera eller ändra statusfält"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Tillåter att programmet inaktiverar statusfältet eller lägger till och tar bort systemikoner."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Tillåter att programmet monterar och demonterar filsystem för flyttbara lagringsmedia."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formatera extern lagring"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Tillåter att programmet formaterar flyttbara lagringsmedia."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"få information om säker lagring"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Tillåter att programmet får information om säker lagring."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"skapa säker lagring"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Tillåter att programmet skapar säker lagring."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"förstör säker lagring"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Tillåter att programmet förstör säker lagring."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"montera/avmontera säker lagring"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Tillåter att programmet monterar/avmonterar säker lagring."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"byt namn på säker lagring"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Tillåter att programmet byter namn på säker lagring."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"få information om säker lagring"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Tillåter att programmet får information om säker lagring."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"skapa säker lagring"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Tillåter att programmet skapar säker lagring."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"förstör säker lagring"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Tillåter att programmet förstör säker lagring."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"montera/avmontera säker lagring"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Tillåter att programmet monterar/avmonterar säker lagring."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"byt namn på säker lagring"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Tillåter att programmet byter namn på säker lagring."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"kontrollera vibration"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Tillåter att programmet styr vibratorn."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"styra lampa"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Tillåter att ett program konfigurerar den lokala Bluetooth-telefonen samt upptäcker och parkopplar den med fjärranslutna enheter."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"skapa Bluetooth-anslutningar"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Tillåter att ett program ser den lokala Bluetooth-telefonens konfiguration, och skapar och accepterar anslutningar med parkopplade enheter."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"Administrera NFC"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Tillåter att ett program konfigurerar den lokala NFC-telefonen."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"NFC har fullständig åtkomst till fjärrenhet"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Tillåter att ett program får åtkomst till NFC-fjärrenheter."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"NFC-avisering från fjärrenhet"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Tillåter att ett program får information om åtgärder relaterade till NFC-fjärrenheter."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"NFC-avisering från LLCP-fjärrenhet"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Tillåter att ett program får information om LLCP-åtgärder relaterade till NFC-fjärrenheter."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"inaktivera tangentlås"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Tillåter att ett program inaktiverar tangentlåset och tillhörande lösenordsskydd. Ett exempel på detta är att telefonen inaktiverar tangentlåset vid inkommande samtal och sedan aktiverar det igen när samtalet är avslutat."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"läsa synkroniseringsinställningar"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Tillåt att ett program läser alla privata ord, namn och fraser som användaren lagrar i sin ordlista."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"skriva till användardefinierad ordlista"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Tillåter att ett program skriver in nya ord i användarordlistan."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"ändra/ta bort innehåll på SD-kortet"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"ändra/ta bort innehåll på SD-kortet"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"ändra/ta bort innehåll på SD-kortet"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Tillåter att ett program skriver till SD-kortet."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Program får skriva t. SD-kort."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Tillåter att ett program skriver till SD-kortet."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"åtkomst till cachefilsystemet"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Tillåter att ett program läser och skriver till cachefilsystemet."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Begränsa lösenord"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Begränsar vilka typer av lösenord som får användas."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Visa inloggningsförsök"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Övervaka misslyckade inloggningsförsök på enheten för att utföra åtgärder."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Återställ lösenord"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Framtvinga ett nytt värde för ditt lösenord. Kräver att administratören tillhandahåller det innan du kan logga in."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Framtvinga låsning"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Kontrollera när enheten låses, vilket kräver att du anger lösenordet igen."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Ange lösenordsregler"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Bestäm längdbegränsning och vilka tecken som är tillåtna i skärmlåsets lösenord"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Övervaka försök att låsa upp skärmen"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Övervaka antalet felaktiga lösenord som angivits för skärmlåset och lås telefonen eller ta bort alla data från telefonen om för många felaktiga försök görs"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Ändra skärmlåsets lösenord"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Ändra skärmlåsets lösenord"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Lås skärmen"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Kontrollera hur och när skärmlåset aktiveras"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Radera alla data"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Återställ fabriksinställningarna och ta bort alla data utan någon bekräftelse."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Ta bort data på telefonen utan förvarning genom att återställa standardinställningarna"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Hem"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Tillåter att program läser alla webbadresser som webbläsaren har öppnat och alla webbläsarens bokmärken."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"skriva webbläsarhistorik och bokmärken"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Tillåter att ett program ändrar webbläsarhistoriken och bokmärkena i din telefon. Skadliga program kan använda detta för att ta bort eller ändra data i webbläsaren."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"ställa in alarm i alarmklocka"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Tillåter att programmet ställer in ett alarm i ett installerat alarmprogram. Vissa alarmprogram har inte den här funktionen."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Ändra geografisk plats för webbläsaren"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Tillåter att ett program ändrar webbläsarens behörigheter för geografisk plats. Skadliga program kan använda detta för att tillåta att platsinformation skickas till godtyckliga webbplatser."</string>
<string name="save_password_message" msgid="767344687139195790">"Vill du att webbläsaren ska komma ihåg lösenordet?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Visa alla"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-masslagring"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB-ansluten"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Du har anslutit telefonen till datorn via USB. Välj knappen nedan om du vill kopiera filer mellan datorn och SD-kortet i din Android."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Du har anslutit telefonen till datorn via USB. Välj knappen nedan om du vill kopiera filer mellan datorn och SD-kortet i din Android."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Du har anslutit telefonen till datorn via USB. Välj knappen nedan om du vill kopiera filer mellan datorn och SD-kortet i din Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Aktivera USB-lagring"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"Det gick inte att använda ditt SD-kort för USB-lagring."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"Det gick inte att använda ditt SD-kort för USB-lagring."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Det gick inte att använda ditt SD-kort för USB-lagring."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Det gick inte att använda ditt SD-kort för USB-lagring."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB-ansluten"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Välj om du vill kopiera filer till/från din dator."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Inaktivera USB-lagring"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Välj om USB-lagring ska inaktiveras."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB-lagret används"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"Kontrollera att du har demonterat (\"matat ut\") Android-telefonens SD-kort från datorn, innan du inaktiverar USB-lagring."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"Kontrollera att du har monterat bort (\"matat ut\") Android-telefonens SD-kort från datorn innan du inaktiverar USB-lagring."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"Kontrollera att du har demonterat (\"matat ut\") Android-telefonens SD-kort från datorn, innan du inaktiverar USB-lagring."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Inaktivera USB-lagring"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"Ett problem uppstod när USB-lagringsplatsen skulle inaktiveras. Kontrollera att USB-värden har demonterats och försök igen."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"Om du aktiverar USB-lagring avbryts några av de program som körs och de kanske inte blir tillgängliga igen förrän du inaktiverar USB-lagring."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB-åtgärd misslyckades"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"Formatera SD-kort"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formatera SD-kort"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formatera SD-kort"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"Vill du formatera SD-kortet? Alla data på ditt kort kommer att gå förlorade."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Formatera SD-kort, radera alla filer? Åtgärden kan inte ångras!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"Vill du formatera SD-kortet? Alla data på ditt kort kommer att gå förlorade."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-felsökning ansluten"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"kandidater"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"Förbereder SD-kort"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Förbereder SD-kort"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Förbereder SD-kort"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Söker efter fel."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Tomt SD-kort"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Tomt SD-kort"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Tomt SD-kort"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"SD-kortet är tomt eller så använder det ett filsystem som inte stöds."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"SD-kortet är tomt eller så har det ett filsystem som inte stöds."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD-kortet är tomt eller så har det ett filsystem som inte stöds."</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Skadat SD-kort"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Skadat SD-kort"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Skadat SD-kort"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"SD-kortet är skadat. Du måste eventuellt formatera om ditt kort."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"SD-kortet är skadat. Du måste eventuellt formatera om det."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD-kortet är skadat. Du måste eventuellt formatera om det."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SD-kort togs oväntat bort"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"SD-kort togs oväntat bort"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-kort togs oväntat bort"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Demontera SD-kort innan borttagning för att undvika dataförlust."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Montera bort SD-kortet före borttagning för att undvika dataförlust."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Demontera SD-kort innan borttagning för att undvika dataförlust."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"Säkert att ta bort SD-kort"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Säkert att ta bort SD-kort"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Säkert att ta bort SD-kort"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"SD-kortet kan nu tas bort."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Det är nu säkert att ta bort SD-kortet."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Det är nu säkert att ta bort SD-kortet."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"Borttaget SD-kort"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"SD-kortet har tagits bort"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Borttaget SD-kort"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"SD har tagits bort. Sätt i ett nytt SD-kort för att öka enhetens lagringsutrymme."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"SD-kortet har tagits bort. Sätt i ett nytt."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-kortet har tagits bort. Sätt i ett nytt."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Inga matchande aktiviteter hittades"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"uppdatera statistik över användning av komponenter"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 58eb42a..85e0028 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Geliştirme araçları"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Yalnızca uygulama geliştiriciler için gerekli özellikler."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Depolama"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"SD karta erişin."</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Payl depolama birimine erişin."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD karta erişin."</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"durum çubuğunu devre dışı bırak veya değiştir"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Uygulamanın durum çubuğunu devre dışı bırakmasına veya sistem simgeleri ekleyip kaldırmasına izin verir."</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Uygulamaların çıkarılabilir depolama birimleri için dosya sistemleri ile bağlantı kurmasına ve bağlantıyı kesmesine izin verir."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"harici depolama birimini biçimlendir"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Uygulamanın çıkarılabilir depolama birimini biçimlendirmesine izin verir."</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"güvenli depolama birimi hakkında bilgi al"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"Uygulamanın güvenli depolama birimi hakkında bilgi almasına izin verir."</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"güvenli depolama birimi oluştur"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"Uygulamanın güvenli depolama birimi oluşturmasına izin verir."</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"güvenli depolama birimini yok et"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"Uygulamanın güvenli depolama birimini yok etmesine izin verir."</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"güvenli depolama birimini ekle / kaldır"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"Uygulamanın güvenli depolama birimini yeniden eklemesine / kaldırmasına izin verir."</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"güvenli depolama birimini yeniden adlandır"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"Uygulamanın güvenli depolama birimini yeniden adlandırmasına izin verir."</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"güvenli depolama birimi hakkında bilgi al"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"Uygulamanın güvenli depolama birimi hakkında bilgi almasına izin verir."</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"güvenli depolama birimi oluştur"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"Uygulamanın güvenli depolama birimi oluşturmasına izin verir."</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"güvenli depolama birimini yok et"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Uygulamanın güvenli depolama birimini yok etmesine izin verir."</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"güvenli depolama birimini ekle / kaldır"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Uygulamanın güvenli depolama birimini yeniden eklemesine / kaldırmasına izin verir."</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"güvenli depolama birimini yeniden adlandır"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"Uygulamanın güvenli depolama birimini yeniden adlandırmasına izin verir."</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"titreşimi denetle"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Uygulamanın titreşimi denetlemesine izin verir."</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"flaşı denetle"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"Uygulamaların yerel Bluetooth telefonunu yapılandırmasına ve uzak cihazları keşfedip bunlar ile eşleşmesine izin verir."</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"Bluetooth bağlantıları oluştur"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"Uygulamaların yerel Bluetooth telefonunun yapılandırmasını görüntülemesine ve eşleşilmiş cihazlar ile bağlantı kurup kabul etmesine izin verir."</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFC yönetimi"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"Uygulamanın, yerel NFC telefonunu yapılandırmasına izin verir."</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"Uzak cihaza tam NFC erişimi"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"Uygulamaya, uzak NFC cihazlarına erişme izni verir."</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"Uzak cihazdan NFC bildirimi"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"Uygulamaya, uzak NFC cihazlarıyla ilgili işlemlerin bildirilmesine izin verir."</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"Uzak LLCP cihazından NFC bildirimi"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"Uygulamaya, uzak NFC cihazlarıyla ilgili LLCP işlemlerinin bildirilmesine izin verir."</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"tuş kilidini devre dışı bırak"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Uygulamaların tuş kilidini ve ilgili şifreli güvenlik önlemini devre dışı bırakmasına izin verir. Bunun geçerli bir örneği gelen bir çağrı alındığında tuş kilidinin devre dışı bırakılması, sonra çağrı bittiğinde kilidin yeniden devreye sokulmasıdır."</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"senk. ayarlarını oku"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Kullanıcının kullanıcı sözlüğünde depolamış olabileceği kişisel kelimeleri, adları ve kelime öbeklerini uygulamaların okumasına izin verir."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"kullanıcı tanımlı sözlüğe yaz"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Uygulamaların kullanıcı sözlüğüne yeni kelimeler yazmasına izin verir."</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"SD kart içeriklerini değiştir/sil"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"payl deplm birm içeriğini değiştr/sil"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SD kart içeriklerini değiştir/sil"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"Bir uygulamaya SD karta yazma izni verir."</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Uygulamaya, payl deplolama birimine yazma izni verir."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Bir uygulamaya SD karta yazma izni verir."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"önbellek dosya sistemine eriş"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Bir uygulamanın önbellek dosya sisteminde okuma yazma yapmasına izin verir."</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"Şifreyi sınırla"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"Kullanmanıza izin verilen şifre türlerini sınırlayın."</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"Oturum açma denemelerini izle"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"Bir işlem gerçekleştirmek için cihazdaki başarısız oturum açma girişimlerini izleyin."</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"Şifre sıfırlama"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"Şifrenizi yeni bir değer alması için zorlayın. Giriş yapabilmeniz için yöneticinin size yeni bir değer sağlamasını gerekecektir."</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"Kilitlemeye zorlama"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"Cihaz kilitlendiğinde, şifresini yeniden girmenizi gerektiren denetim."</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"Şifre kuralları ayarla"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"Ekran kilidini açma şifrelerinde izin verilen uzunluğu ve karakterleri kontrol edin"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"Ekran kilidini açma denemelerini izle"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"Ekran kilidi açılırken girilen yanlış şifre sayısını izler ve çok fazla sayıda yanlış şifre girilirse telefonu kilitler veya telefondaki tüm verileri siler"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"Ekran kilidini açma şifresini değiştir"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"Ekran kilidini açma şifresini değiştirin"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"Ekranı kilitle"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"Ekranın nasıl ve ne zaman kilitlendiğini kontrol edin"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Tüm verileri sil"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"Tüm verilerinizi onay olmadan silmek için fabrika ayarlarına sıfırlayın."</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"Fabrika verilerine sıfırlama işlemi gerçekleştirerek telefondaki verileri uyarıda bulunmadan silin"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Ev"</item>
<item msgid="869923650527136615">"Mobil"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Uygulamaya Tarayıcının ziyaret etmiş olduğu tüm URL\'leri ve Tarayıcının tüm favorilerini okuma izni verir."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"Tarayıcı geçmişini ve favorileri yaz"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"Uygulamaya telefonunuzda depolanan Tarayıcı geçmişini veya favorileri değiştirme izni verir. Kötü amaçlı uygulamalar bunu Tarayıcı verilerinizi silmek veya değiştirmek için kullanabilir."</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"çalar saatte alarm ayarla"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"Uygulamanın yüklü bir çalar saat uygulamasında bir alarm ayarlamasına izin verir. Bazı çalar saat uygulamaları bu özelliği kullanmayabilir."</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"Tarayıcı\'nın coğrafi konum izinlerini değiştir"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"Bir uygulamanın, Tarayıcı\'nın coğrafi konum izinlerini değiştirmesine izin verir. Kötü amaçlı uygulamalar, bu özelliği konum bilgilerini rastgele web sitelerine göndermek için kullanabilir."</string>
<string name="save_password_message" msgid="767344687139195790">"Tarayıcının bu şifreyi anımsamasını istiyor musunuz?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"Tümünü göster"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB Yığın Depolama"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB bağlandı"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"Telefonunuzu USB ile bilgisayarınıza bağladınız. Bilgisayarınız ile Android\'inizin SD kartı arasında dosya kopyalamak istiyorsanız aşağıdaki düğmeyi seçin."</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"Telefonunuzu USB ile bilgisayarınıza bağladınız. Bilgisayarınız ile Android\'inizin paylaşılan depolama birimi arasında dosya kopyalamak istiyorsanız aşağıdaki düğmeyi seçin."</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"Telefonunuzu USB ile bilgisayarınıza bağladınız. Bilgisayarınız ile Android\'inizin SD kartı arasında dosya kopyalamak istiyorsanız aşağıdaki düğmeyi seçin."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"USB depolama birimini aç"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"SD kartınızı USB depolama birimi için kullanmada bir sorun var."</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"SD kartınızı USB depolama birimi için kullanmada bir sorun var."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Paylaşılan depolama biriminizi USB depolama amaçlı kullanmayla ilgili bir sorun var."</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Paylaşılan depolama biriminizi USB depolama amaçlı kullanmayla ilgili bir sorun var."</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB bağlandı"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"Bilgisayarınıza/bilgisayarınızdan dosya kopyalamak için seçin."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB depolama birimini kapat"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"USB depolama birimini kapatmak için seçin."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB depolama birimi kullanılıyor"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"USB depolama birimini kapatmadan önce Android SD kartını bilgisayarınızdan kaldırdığınızdan (\"çıkardığınızdan\") emin olun."</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"USB depolama birimini kapatmadan önce Android\'inizin paylaşılan depolama biriminin bilgisayarınızla olan bağlantısını kestiğinizden (\"çıkardığınızdan\") emin olun."</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"USB depolama birimini kapatmadan önce Android SD kartını bilgisayarınızdan kaldırdığınızdan (\"çıkardığınızdan\") emin olun."</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB depolama birimini kapat"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"USB depolama birimini kapatırken bir sorun oluştu. USB ana makinesini kaldırdığınızdan emin olun ve daha sonra tekrar deneyin."</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"USB depolama birimini açarsanız, kullanmakta olduğunuz bazı uygulamalar durur ve USB depolama birimi kapatılıncaya kadar kullanılamayabilir."</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB işlemi başarısız oldu"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Tamam"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"SD kartı biçimlendir"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Pay dep birm biçmlndr"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD kartı biçimlendir"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"SD kartı biçimlendirmek istediğinizden emin misiniz? Kartınızdaki tüm veriler yok olacak."</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Paylaşılan depolama birimi biçimlendirilsin mi? Depolama biriminde saklanan tüm dosyalar silinir. İşlem geri alınamaz!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"SD kartı biçimlendirmek istediğinizden emin misiniz? Kartınızdaki tüm veriler yok olacak."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Biçimlendir"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB hata ayıklaması bağlandı"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"adaylar"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"SD kart hazırlanıyor"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Payl depl birimi hazırlanıyor"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD kart hazırlanıyor"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Hatalar denetleniyor."</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"Boş SD kart"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Boş paylaşılan depolama birimi"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Boş SD kart"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"SD kart boş veya desteklenmeyen bir dosya sistemi kullanıyor."</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"Paylaşılan depolama birimi boş veya desteklenmeyen bir dosya sistemine sahip."</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD kart boş veya desteklenmeyen dosya sistemi içeriyor"</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"Hasarlı SD kart"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Paylş deplm birimi zarar gördü"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Hasarlı SD kart"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"SD kart hasarlı. Kartınızı yeniden biçimlendirmeniz gerekebilir."</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"Paylaşılan depolama birimi zarar gördü. Yeniden biçimlendirmeniz gerekebilir."</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD kart zarar gördü. Yeniden biçimlendirmeniz gerekebilir."</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SD kart beklenmedik biçimde çıkarıldı"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Payl depl brm beklnmdk şekl çıkarld"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD kart beklenmedik biçimde çıkarıldı"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"Veri kaybından kaçınmak için SD kartı çıkarmadan önce bağlantısını kesin."</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Veri kaybı olmaması için paylaşılan depolama birimini çıkarmadan önce bağlantısını kesin."</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Veri kaybından kaçınmak için SD kartı çıkarmadan önce bağlantısını kesin."</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"SD kart güvenle çıkarılabilir"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Payl dep birm güvenle çıkrlblr"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD kart güvenle çıkarılabilir"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"SD kart şimdi güvenli bir şekilde çıkarılabilir."</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Paylaşılan depolama birimini güvenli bir şekilde çıkarabilirsiniz."</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"SD kartı güvenle kaldırabilirsiniz."</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"SD kart çıkarılmış"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Payl depolama birimi çıkarıldı"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD kart çıkarılmış"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"SD kart çıkarılmış. Cihazınızın depolama alanını artırmak için yeni bir SD kart takın."</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Paylaşılan depolama birimi çıkarıldı. Yeni ortamı takın."</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD kart çıkarıldı. Yeni bir SD kart takın."</string>
<string name="activity_list_empty" msgid="4168820609403385789">"Eşleşen hiçbir etkinlik bulunamadı"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"bileşen kullanım istatistiklerini güncelle"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index aad56fd..1d419aa 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"开发工具"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"只有应用程序开发人员才会用到的功能。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"存储"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"访问 SD 卡。"</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"访问共享存储设备。"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"访问 SD 卡。"</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"停用或修改状态栏"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"允许应用程序停用状态栏或者增删系统图标。"</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"允许应用程序装载和卸载可移动存储器的文件系统。"</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"格式化外部存储设备"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"允许应用程序格式化可移除的存储设备。"</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"获取有关安全存储的信息"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"允许应用程序获取有关安全存储的信息。"</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"创建安全存储"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"允许应用程序创建安全存储。"</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"清除安全存储"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"允许应用程序清除安全存储。"</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"安装/卸载安全存储"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"允许应用程序安装/卸载安全存储。"</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"重命名安全存储"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"允许应用程序重命名安全存储。"</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"获取有关安全存储的信息"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"允许应用程序获取有关安全存储的信息。"</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"创建安全存储"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"允许应用程序创建安全存储。"</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"清除安全存储"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"允许应用程序清除安全存储。"</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"安装/卸载安全存储"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"允许应用程序安装/卸载安全存储。"</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"重命名安全存储"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"允许应用程序重命名安全存储。"</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"控制振动器"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"允许应用程序控制振动器。"</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"控制闪光灯"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"允许应用程序配置本地蓝牙手机,以及发现远程设备并与其配对。"</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"创建蓝牙连接"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"允许应用程序查看本地蓝牙手机的配置,以及建立或接受与配对设备的连接。"</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFC 管理"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"允许应用程序配置本地 NFC 手机。"</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"NFC 可完全访问线控设备"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"允许应用程序访问线控 NFC 设备。"</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"来自线控设备的 NFC 通知"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"当线控 NFC 设备发生操作时,允许通知应用程序。"</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"来自线控 LLCP 设备的 NFC 通知"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"当线控 NFC 设备发生 LLCP 操作时,允许通知应用程序。"</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"停用键锁"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"允许应用程序停用键锁和任何关联的密码安全设置。例如,在手机上接听电话时停用键锁,在通话结束后重新启用键锁。"</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"读取同步设置"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"允许应用程序读取用户在用户词典中存储的任意私有字词、名称和短语。"</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"写入用户定义的词典"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"允许应用程序向用户词典中写入新词。"</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"修改/删除 SD 卡中的内容"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"修改/删除共享存储设备内容"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"修改/删除 SD 卡中的内容"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"允许应用程序写入 SD 卡。"</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"允许应用程序写入共享存储设备。"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"允许应用程序写入 SD 卡。"</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"访问缓存文件系统"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"允许应用程序读取和写入缓存文件系统。"</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"限制密码选择"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"限制您能够使用的密码类型。"</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"监控登录尝试"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"监控对于登录设备和执行某项操作的失败尝试。"</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"重置密码"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"强行更新密码,您需要获得管理员提供的新密码才能登录。"</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"强行锁定"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"控制何时锁定设备,这需要您重新输入密码。"</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"设置密码规则"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"控制屏幕解锁密码允许的长度和字符数"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"监视屏幕解锁尝试次数"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"监视锁定屏幕前密码输入错误的次数;如果密码输入错误次数太多,则会锁定手机或擦除手机上的所有数据。"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"更改屏幕解锁密码"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"更改屏幕解锁密码"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"锁定屏幕"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"控制锁定屏幕的方式和时间"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"清除所有数据"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"恢复出厂设置,这会在不提示确认的情况下删除您的所有数据。"</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"恢复出厂设置时,将擦除手机上的数据而不发送警告"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"住宅"</item>
<item msgid="869923650527136615">"手机"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"允许应用程序读取用浏览器访问过的所有网址,以及浏览器的所有书签。"</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"写入浏览器的历史记录和书签"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"允许应用程序修改存储在手机中的浏览器历史记录或书签。恶意应用程序可借此清除或修改浏览器数据。"</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"在闹钟中设置警报"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"允许应用程序在安装的闹钟应用程序中设置警报。某些闹钟应用程序没有实现此功能。"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"修改浏览器的地理位置权限"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"允许应用程序修改浏览器的地理位置权限。恶意应用程序会利用这一点将位置信息发送到任意网站。"</string>
<string name="save_password_message" msgid="767344687139195790">"是否希望浏览器记住此密码?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"全部显示"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB 大容量存储"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB 已连接"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"您已通过 USB 将手机连接至计算机。如果您要在计算机和 Android 手机的 SD 卡之间复制文件,请点击下面的按钮。"</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"您已通过 USB 将手机连接至计算机。如果您要在计算机和 Android 手机的共享存储设备之间复制文件,请选择下面的按钮。"</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"您已通过 USB 将手机连接至计算机。如果您要在计算机和 Android 手机的 SD 卡之间复制文件,请点击下面的按钮。"</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"打开 USB 存储设备"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"使用 SD 卡进行 USB 存储时出现问题。"</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"使用 SD 卡进行 USB 存储时出现问题。"</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"使用共享存储设备作为 USB 存储时出现问题。"</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"使用共享存储设备作为 USB 存储时出现问题。"</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB 已连接"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"选择将文件复制到计算机或从计算机复制到存储设备。"</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"关闭 USB 存储设备"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"选中以关闭 USB 存储设备。"</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"使用中的 USB 存储设备"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"在关闭 USB 存储设备前,请确保您已从计算机中卸载(“弹出”)Android 手机的 SD 卡。"</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"在关闭 USB 存储前,请确保您已从计算机中卸载(“弹出”)Android 手机的共享存储设备。"</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"在关闭 USB 存储设备前,请确保您已从计算机中卸载(“弹出”)Android 手机的 SD 卡。"</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"关闭 USB 存储设备"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"关闭 USB 存储设备时遇到问题。请检查并确保已卸载了 USB 主设备,然后重试。"</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"如果您打开了 USB 存储设备,则您当前使用的某些应用程序会停止,而且在您关闭 USB 存储设备前可能都无法使用。"</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB 操作失败"</string>
<string name="dlg_ok" msgid="7376953167039865701">"确定"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"格式化 SD 卡"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"格式化共享存储设备"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"格式化 SD 卡"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"确定要将 SD 卡格式化吗?该卡上的所有数据都将丢失。"</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"确定要格式化共享存储设备,擦除其存储的所有文件吗?该操作将无法撤消!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"确定要将 SD 卡格式化吗?该卡上的所有数据都将丢失。"</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"格式化"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"已连接 USB 调试"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"候选"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"正在准备 SD 卡"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"正在准备共享存储设备"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"正在准备 SD 卡"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"正在检查是否有错误。"</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"空 SD 卡"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"共享存储设备中无文件"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"空 SD 卡"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"SD 卡为空或使用不支持的文件系统。"</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"共享存储设备中无文件或使用了不受支持的文件系统。"</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD 卡无文件系统,或文件系统不受支持。"</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"SD 卡受损"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"共享存储设备已损坏"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"SD 卡受损"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"SD 卡受损。您可能需要重新格式化您的卡。"</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"共享存储设备已损坏。您可能必须将其重新格式化。"</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD 卡已损坏。您可能必须将其重新格式化。"</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SD 卡未正常移除"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"共享存储设备被意外移除"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD 卡未正常移除"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"请先卸载 SD 卡,再将其移除,以防数据丢失。"</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"请先卸载共享存储设备,再将其移除,以防数据丢失。"</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"请先卸载 SD 卡,再将其移除,以防数据丢失。"</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"SD 卡已安全移除"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"共享存储设备可安全移除"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD 卡已安全移除"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"现在可以安全移除 SD 卡。"</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"可以安全移除共享存储设备。"</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"您现在可以安全移除 SD 卡。"</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"已移除 SD 卡"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"共享存储设备已移除"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"已移除 SD 卡"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"SD 卡已移除。请插入新 SD 卡来增加您的设备存储空间。"</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"共享存储设备已移除。请插入新媒体。"</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD 卡已移除。请插入新的 SD 卡。"</string>
<string name="activity_list_empty" msgid="4168820609403385789">"找不到匹配的活动"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"更新组件使用情况统计"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 6490c55..e21dbae 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -169,7 +169,7 @@
<string name="permgrouplab_developmentTools" msgid="3446164584710596513">"開發工具"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"只有開發者需要此功能。"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"儲存"</string>
- <!-- outdated translation 9203302214915355774 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="5455804353220581312">"存取 SD 卡。"</string>
+ <!-- outdated translation 5455804353220581312 --> <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"存取共用儲存裝置。"</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"存取 SD 卡。"</string>
<string name="permlab_statusBar" msgid="7417192629601890791">"停用或變更狀態列"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"允許應用程式停用狀態列或新增、移除系統圖示。"</string>
@@ -321,16 +321,16 @@
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"允許應用程式掛載/卸載抽取式儲存設備的檔案系統。"</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"將外接式儲存裝置格式化"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"允許應用程式將可移除式儲存裝置格式化。"</string>
- <string name="permlab_asec_access" msgid="1070364079249834666">"取得安全儲存空間的資訊"</string>
- <string name="permdesc_asec_access" msgid="7691616292170590244">"允許應用程式取得安全儲存空間的資訊。"</string>
- <string name="permlab_asec_create" msgid="7312078032326928899">"建立安全儲存空間"</string>
- <string name="permdesc_asec_create" msgid="7041802322759014035">"允許應用程式建立安全儲存空間。"</string>
- <string name="permlab_asec_destroy" msgid="7787322878955261006">"銷毀安全儲存空間"</string>
- <string name="permdesc_asec_destroy" msgid="5740754114967893169">"允許應用程式銷毀安全儲存空間。"</string>
- <string name="permlab_asec_mount_unmount" msgid="7517449694667828592">"掛載/卸載安全儲存空間"</string>
- <string name="permdesc_asec_mount_unmount" msgid="5438078121718738625">"允許應用程式掛載/卸載安全儲存空間。"</string>
- <string name="permlab_asec_rename" msgid="5685344390439934495">"重新命名安全儲存空間"</string>
- <string name="permdesc_asec_rename" msgid="1387881770708872470">"允許應用程式重新命名安全儲存空間。"</string>
+ <!-- outdated translation 1070364079249834666 --> <string name="permlab_asec_access" msgid="3411338632002193846">"取得安全儲存空間的資訊"</string>
+ <!-- outdated translation 7691616292170590244 --> <string name="permdesc_asec_access" msgid="8820326551687285439">"允許應用程式取得安全儲存空間的資訊。"</string>
+ <!-- outdated translation 7312078032326928899 --> <string name="permlab_asec_create" msgid="6414757234789336327">"建立安全儲存空間"</string>
+ <!-- outdated translation 7041802322759014035 --> <string name="permdesc_asec_create" msgid="2621346764995731250">"允許應用程式建立安全儲存空間。"</string>
+ <!-- outdated translation 7787322878955261006 --> <string name="permlab_asec_destroy" msgid="526928328301618022">"銷毀安全儲存空間"</string>
+ <!-- outdated translation 5740754114967893169 --> <string name="permdesc_asec_destroy" msgid="2746706889208066256">"允許應用程式銷毀安全儲存空間。"</string>
+ <!-- outdated translation 7517449694667828592 --> <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"掛載/卸載安全儲存空間"</string>
+ <!-- outdated translation 5438078121718738625 --> <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"允許應用程式掛載/卸載安全儲存空間。"</string>
+ <!-- outdated translation 5685344390439934495 --> <string name="permlab_asec_rename" msgid="7496633954080472417">"重新命名安全儲存空間"</string>
+ <!-- outdated translation 1387881770708872470 --> <string name="permdesc_asec_rename" msgid="2152829985238876790">"允許應用程式重新命名安全儲存空間。"</string>
<string name="permlab_vibrate" msgid="7768356019980849603">"控制震動"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"允許應用程式控制震動。"</string>
<string name="permlab_flashlight" msgid="2155920810121984215">"控制閃光燈"</string>
@@ -403,22 +403,14 @@
<string name="permdesc_bluetoothAdmin" msgid="7256289774667054555">"允許應用程式設定本機藍牙電話,以及偵測與配對其他遠端裝置。"</string>
<string name="permlab_bluetooth" msgid="8361038707857018732">"建立藍牙連線"</string>
<string name="permdesc_bluetooth" msgid="762515380679392945">"允許應用程式檢視本機藍牙電話設定,並與其他配對裝置連線。"</string>
- <!-- no translation found for permlab_nfcAdmin (2251302233012250056) -->
- <skip />
- <!-- no translation found for permdesc_nfcAdmin (1935842611464895785) -->
- <skip />
- <!-- no translation found for permlab_nfcRaw (4423471711114325708) -->
- <skip />
- <!-- no translation found for permdesc_nfcRaw (5533022736559385665) -->
- <skip />
- <!-- no translation found for permlab_nfcNotify (478470360082792358) -->
- <skip />
- <!-- no translation found for permdesc_nfcNotify (2990053517962070617) -->
- <skip />
- <!-- no translation found for permlab_nfcLlcp (4972051461007030426) -->
- <skip />
- <!-- no translation found for permdesc_nfcLlcp (91592127786004640) -->
- <skip />
+ <string name="permlab_nfcAdmin" msgid="2251302233012250056">"NFC 管理"</string>
+ <string name="permdesc_nfcAdmin" msgid="1935842611464895785">"允許應用程式設定本機 NFC 手機。"</string>
+ <string name="permlab_nfcRaw" msgid="4423471711114325708">"NFC 可完整存取遠端裝置"</string>
+ <string name="permdesc_nfcRaw" msgid="5533022736559385665">"允許應用程式存取遠端 NFC 裝置。"</string>
+ <string name="permlab_nfcNotify" msgid="478470360082792358">"來自遠端裝置的 NFC 通知"</string>
+ <string name="permdesc_nfcNotify" msgid="2990053517962070617">"執行與遠端 NFC 裝置相關的作業時,允許應用程式收到通知。"</string>
+ <string name="permlab_nfcLlcp" msgid="4972051461007030426">"來自遠端 LLCP 裝置的 NFC 通知"</string>
+ <string name="permdesc_nfcLlcp" msgid="91592127786004640">"執行與遠端 NFC 裝置相關的 LLCP 作業時,允許應用程式收到通知。"</string>
<string name="permlab_disableKeyguard" msgid="4977406164311535092">"停用按鍵鎖定"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"允許應用程式停用按鍵鎖定以及其他相關的密碼安全性。例如:收到來電時解除按鍵鎖定,通話結束後重新啟動按鍵鎖定。"</string>
<string name="permlab_readSyncSettings" msgid="6201810008230503052">"讀取同步處理設定"</string>
@@ -435,22 +427,26 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"允許應用程式讀取使用者儲存在使用者字典內的任何私人字詞、名稱和詞組。"</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"寫入使用者定義的字典"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"允許應用程式將新字詞寫入使用者的字典。"</string>
- <!-- outdated translation 8079403759001777291 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="993707436941016913">"修改/刪除 SD 卡的內容"</string>
+ <!-- outdated translation 993707436941016913 --> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"修改/刪除共用儲存裝置內容"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"修改/刪除 SD 卡的內容"</string>
- <!-- outdated translation 6643963204976471878 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="4131871541127211526">"允許應用程式寫入 SD 卡。"</string>
+ <!-- outdated translation 4131871541127211526 --> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"允許應用程式寫入共用儲存裝置。"</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"允許應用程式寫入 SD 卡。"</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"存取快取檔案系統"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"允許應用程式讀取及寫入快取檔案系統。"</string>
- <!-- outdated translation 4307861496302850201 --> <string name="policylab_limitPassword" msgid="4497420728857585791">"限制密碼設定規則"</string>
- <!-- outdated translation 1719877245692318299 --> <string name="policydesc_limitPassword" msgid="9083400080861728056">"限制允許使用的密碼類型。"</string>
- <!-- outdated translation 7374780712664285321 --> <string name="policylab_watchLogin" msgid="914130646942199503">"查看登入嘗試記錄"</string>
- <!-- outdated translation 1961251179624843483 --> <string name="policydesc_watchLogin" msgid="7227578260165172673">"監視者無法登入裝置執行部分動作。"</string>
- <!-- outdated translation 9084772090797485420 --> <string name="policylab_resetPassword" msgid="2620077191242688955">"重設密碼"</string>
- <!-- outdated translation 3332167600331799991 --> <string name="policydesc_resetPassword" msgid="5391240616981297361">"強制重新設定密碼。您必須取得以管理員提供的新密碼,才能登入。"</string>
- <!-- outdated translation 5760466025247634488 --> <string name="policylab_forceLock" msgid="2274085384704248431">"強制鎖定"</string>
- <!-- outdated translation 2819868664946089740 --> <string name="policydesc_forceLock" msgid="5696964126226028442">"裝置鎖定時可取得控制,但必須重新輸入密碼。"</string>
+ <!-- no translation found for permlab_use_sip (5986952362795870502) -->
+ <skip />
+ <!-- no translation found for permdesc_use_sip (6320376185606661843) -->
+ <skip />
+ <string name="policylab_limitPassword" msgid="4497420728857585791">"設定密碼規則"</string>
+ <string name="policydesc_limitPassword" msgid="9083400080861728056">"控制螢幕解鎖密碼所允許的長度和字元"</string>
+ <string name="policylab_watchLogin" msgid="914130646942199503">"監視螢幕解鎖嘗試次數"</string>
+ <string name="policydesc_watchLogin" msgid="7227578260165172673">"監視螢幕解鎖時密碼輸入錯誤的次數,如果密碼輸入錯誤的次數過多,則會鎖定手機或清除手機的所有資料"</string>
+ <string name="policylab_resetPassword" msgid="2620077191242688955">"變更螢幕解鎖密碼"</string>
+ <string name="policydesc_resetPassword" msgid="5391240616981297361">"變更螢幕解鎖密碼"</string>
+ <string name="policylab_forceLock" msgid="2274085384704248431">"鎖定螢幕"</string>
+ <string name="policydesc_forceLock" msgid="5696964126226028442">"控制鎖定螢幕的方式和時間"</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"清除所有資料"</string>
- <!-- outdated translation 2314060933796396205 --> <string name="policydesc_wipeData" msgid="7669895333814222586">"重設為原廠設定 (系統會刪除所有資料,且不會向您進行確認)。"</string>
+ <string name="policydesc_wipeData" msgid="7669895333814222586">"執行重設為原廠設定時,系統會直接清除手機資料而不提出警告"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"住家電話"</item>
<item msgid="869923650527136615">"行動電話"</item>
@@ -610,10 +606,8 @@
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"允許應用程式讀取瀏覽器曾經造訪過的所有網址,以及瀏覽器的所有書籤。"</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"寫入瀏覽器的記錄與書籤"</string>
<string name="permdesc_writeHistoryBookmarks" msgid="945571990357114950">"允許應用程式修改儲存在電話上的瀏覽記錄或書籤。請注意:惡意應用程式可能會使用此選項來清除或修改您瀏覽器的資料。"</string>
- <!-- no translation found for permlab_setAlarm (5924401328803615165) -->
- <skip />
- <!-- no translation found for permdesc_setAlarm (5966966598149875082) -->
- <skip />
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"在鬧鐘應用程式中設定鬧鈴"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"允許應用程式設定您所安裝的鬧鐘應用程式執行鬧鈴功能 (有些鬧鐘應用程式並不支援此功能)。"</string>
<string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"修改瀏覽器地理資訊的權限"</string>
<string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"允許應用程式修改瀏覽器的地理位置權限,惡意應用程式可能會透過此方式允許將您的位置資訊任意傳送給某些網站。"</string>
<string name="save_password_message" msgid="767344687139195790">"是否記住此密碼?"</string>
@@ -808,17 +802,17 @@
<string name="perms_show_all" msgid="2671791163933091180"><b>"顯示全部"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB 大量儲存裝置"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB 已連接"</string>
- <!-- outdated translation 4796759646167247178 --> <string name="usb_storage_message" product="nosdcard" msgid="8231462750010066896">"已透過 USB 連接手機與電腦。如要從電腦或 Android 系統的 SD 卡複製檔案,請選取下方按鈕。"</string>
+ <!-- outdated translation 8231462750010066896 --> <string name="usb_storage_message" product="nosdcard" msgid="115779324551502062">"已透過 USB 連接手機與電腦。如要在電腦和 Android 的共用儲存裝置之間複製檔案,請選取下方按鈕。"</string>
<string name="usb_storage_message" product="default" msgid="4796759646167247178">"已透過 USB 連接手機與電腦。如要從電腦或 Android 系統的 SD 卡複製檔案,請選取下方按鈕。"</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"開啟 USB 儲存裝置"</string>
- <!-- outdated translation 2534784751603345363 --> <string name="usb_storage_error_message" product="nosdcard" msgid="4818347756402740261">"把 SD 卡當成 USB 儲存裝置時發生問題。"</string>
- <string name="usb_storage_error_message" product="default" msgid="2534784751603345363">"把 SD 卡當成 USB 儲存裝置時發生問題。"</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"使用 USB 儲存裝置的共用儲存空間時發生問題。"</string>
+ <!-- outdated translation 4818347756402740261 --> <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"使用 USB 儲存裝置的共用儲存空間時發生問題。"</string>
<string name="usb_storage_notification_title" msgid="8175892554757216525">"USB 已連接"</string>
<string name="usb_storage_notification_message" msgid="7380082404288219341">"選取此項將檔案複製到電腦,或從電腦複製。"</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"關閉 USB 儲存裝置"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"選取此處關閉 USB 儲存裝置。"</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB 儲存空間使用中"</string>
- <!-- outdated translation 3613713396426604104 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="8745345260780267185">"關閉 USB 儲存裝置前,請務必先將 Android 系統的 SD 卡從電腦上卸下 (退出)。"</string>
+ <!-- outdated translation 8745345260780267185 --> <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"關閉 USB 儲存裝置前,請務必先從電腦卸載 (退出) Android 手機的共用儲存裝置。"</string>
<string name="usb_storage_stop_message" product="default" msgid="3613713396426604104">"關閉 USB 儲存裝置前,請務必先將 Android 系統的 SD 卡從電腦上卸下 (退出)。"</string>
<string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"關閉 USB 儲存裝置"</string>
<string name="usb_storage_stop_error_message" msgid="143881914840412108">"關閉 USB 儲存裝置時發生問題。請檢查您是否已卸載 USB Host,然後再試一次。"</string>
@@ -826,9 +820,9 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"如果您開啟 USB 儲存裝置,則您正在使用的某些應用程式會停止運作,而且可能無法使用,待您將 USB 儲存裝置關閉才會恢復正常。"</string>
<string name="dlg_error_title" msgid="8048999973837339174">"USB 操作失敗"</string>
<string name="dlg_ok" msgid="7376953167039865701">"確定"</string>
- <!-- outdated translation 8663247929551095854 --> <string name="extmedia_format_title" product="nosdcard" msgid="6577908006949742217">"將 SD 卡格式化"</string>
+ <!-- outdated translation 6577908006949742217 --> <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"格式化共用儲存裝置"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"將 SD 卡格式化"</string>
- <!-- outdated translation 3621369962433523619 --> <string name="extmedia_format_message" product="nosdcard" msgid="3470815140068502824">"確定要將 SD 卡格式化嗎?該 SD 卡中的所有資料將會遺失。"</string>
+ <!-- outdated translation 3470815140068502824 --> <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"格式化共用儲存裝置時,是否清除其中儲存的所有檔案?這項動作無法復原!"</string>
<string name="extmedia_format_message" product="default" msgid="3621369962433523619">"確定要將 SD 卡格式化嗎?該 SD 卡中的所有資料將會遺失。"</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"格式化"</string>
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB 偵錯模式已啟用"</string>
@@ -837,28 +831,28 @@
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"待選項目"</u></string>
- <!-- outdated translation 5457603418970994050 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="4239516675028438997">"正在準備 SD 卡"</string>
+ <!-- outdated translation 4239516675028438997 --> <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"正在準備共用儲存裝置"</string>
<string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"正在準備 SD 卡"</string>
<string name="ext_media_checking_notification_message" msgid="8287319882926737053">"正在檢查錯誤。"</string>
- <!-- outdated translation 780477838241212997 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="3937345577983730873">"SD 卡為空白"</string>
+ <!-- outdated translation 3937345577983730873 --> <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"共用儲存裝置沒有內容"</string>
<string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"SD 卡為空白"</string>
- <!-- outdated translation 1312266820092958014 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="1606660756124629708">"SD 卡為空白或使用不支援的檔案系統。"</string>
+ <!-- outdated translation 1606660756124629708 --> <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"共用儲存裝置無內容或使用不受支援的檔案系統。"</string>
<string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD 卡內無檔案系統,或檔案系統不受支援。"</string>
- <!-- outdated translation 6410723906019100189 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="1724619902076528889">"SD 卡已損壞"</string>
+ <!-- outdated translation 1724619902076528889 --> <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"共用儲存裝置已損壞"</string>
<string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"SD 卡已損壞"</string>
- <!-- outdated translation 2679412884290061775 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="6460311835130671194">"SD 卡已損壞。您可能需要將 SD 卡重新格式化。"</string>
+ <!-- outdated translation 6460311835130671194 --> <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"共用儲存裝置已損壞,您可能必須重新格式化。"</string>
<string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD 卡已毀損,您可能必須予以重新格式化。"</string>
- <!-- outdated translation 6872152882604407837 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="2582175016060432034">"SD 卡未正常移除"</string>
+ <!-- outdated translation 2582175016060432034 --> <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"共用儲存裝置已意外移除"</string>
<string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD 卡未正常移除"</string>
- <!-- outdated translation 7260183293747448241 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="2005396464494648937">"請先卸載 SD 卡,再將其移除,以免資料遺失。"</string>
+ <!-- outdated translation 2005396464494648937 --> <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"請先卸載共用儲存裝置,再將其移除,以免資料遺失。"</string>
<string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"請先卸載 SD 卡,再將其移除,以免資料遺失。"</string>
- <!-- outdated translation 6729801130790616200 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="36525881018679515">"可安全移除 SD 卡"</string>
+ <!-- outdated translation 36525881018679515 --> <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"共用儲存裝置已可安全移除"</string>
<string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"可安全移除 SD 卡"</string>
- <!-- outdated translation 7613960686747592770 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="7503769106285188703">"現在可以安全移除 SD 卡。"</string>
+ <!-- outdated translation 7503769106285188703 --> <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"您可安全移除共用儲存裝置了。"</string>
<string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"您現在可以安全地移除 SD 卡。"</string>
- <!-- outdated translation 8902518030404381318 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="1874889764367085562">"已移除 SD 卡"</string>
+ <!-- outdated translation 1874889764367085562 --> <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"共用儲存裝置已移除"</string>
<string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"已移除 SD 卡"</string>
- <!-- outdated translation 4205117227342822275 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="2730890441331344776">"已移除 SD 卡。請插入新的 SD 卡來增加裝置的儲存容量。"</string>
+ <!-- outdated translation 2730890441331344776 --> <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"共用儲存裝置已移除。請插入新媒體。"</string>
<string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD 卡已移除,請插入新的 SD 卡。"</string>
<string name="activity_list_empty" msgid="4168820609403385789">"找不到符合的活動"</string>
<string name="permlab_pkgUsageStats" msgid="8787352074326748892">"更新元件使用統計資料"</string>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 5c60fd5..075cc66 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -382,7 +382,7 @@
<!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgrouplab_storage">Storage</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
- <string name="permgroupdesc_storage" product="nosdcard">Access the shared storage.</string>
+ <string name="permgroupdesc_storage" product="nosdcard">Access the USB storage.</string>
<!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permgroupdesc_storage" product="default">Access the SD card.</string>
@@ -890,29 +890,29 @@
<string name="permdesc_mount_format_filesystems">Allows the application to format removable storage.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_asec_access">get information on secure storage</string>
+ <string name="permlab_asec_access">get information on internal storage</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_asec_access">Allows the application to get information on secure storage.</string>
+ <string name="permdesc_asec_access">Allows the application to get information on internal storage.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_asec_create">create secure storage</string>
+ <string name="permlab_asec_create">create internal storage</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_asec_create">Allows the application to create secure storage.</string>
+ <string name="permdesc_asec_create">Allows the application to create internal storage.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_asec_destroy">destroy secure storage</string>
+ <string name="permlab_asec_destroy">destroy internal storage</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_asec_destroy">Allows the application to destroy secure storage.</string>
+ <string name="permdesc_asec_destroy">Allows the application to destroy internal storage.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_asec_mount_unmount">mount / unmount secure storage</string>
+ <string name="permlab_asec_mount_unmount">mount / unmount internal storage</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_asec_mount_unmount">Allows the application to mount / unmount secure storage.</string>
+ <string name="permdesc_asec_mount_unmount">Allows the application to mount / unmount internal storage.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_asec_rename">rename secure storage</string>
+ <string name="permlab_asec_rename">rename internal storage</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_asec_rename">Allows the application to rename secure storage.</string>
+ <string name="permdesc_asec_rename">Allows the application to rename internal storage.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_vibrate">control vibrator</string>
@@ -1153,28 +1153,10 @@
connections with paired devices.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_nfcAdmin">NFC administration</string>
+ <string name="permlab_nfc">control Near Field Communication</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_nfcAdmin">Allows an application to configure
- the local NFC phone.</string>
-
- <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_nfcRaw">NFC full access to remote device</string>
- <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_nfcRaw">Allows an application to access
- remote NFC devices.</string>
-
- <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_nfcNotify">NFC notification from remote device</string>
- <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_nfcNotify">Allows an application to be notified
- of operations related to remote NFC devices.</string>
-
- <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permlab_nfcLlcp">NFC notification from remote LLCP device</string>
- <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
- <string name="permdesc_nfcLlcp">Allows an application to be notified
- of LLCP operations related to remote NFC devices.</string>
+ <string name="permdesc_nfc">Allows an application to communicate
+ with Near Field Communication (NFC) tags, cards, and readers.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_disableKeyguard">disable keylock</string>
@@ -1227,11 +1209,11 @@
user dictionary.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
- <string name="permlab_sdcardWrite" product="nosdcard">modify/delete shared storage contents</string>
+ <string name="permlab_sdcardWrite" product="nosdcard">modify/delete USB storage contents</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_sdcardWrite" product="default">modify/delete SD card contents</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] -->
- <string name="permdesc_sdcardWrite" product="nosdcard">Allows an application to write to the shared storage.</string>
+ <string name="permdesc_sdcardWrite" product="nosdcard">Allows an application to write to the USB storage.</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_sdcardWrite" product="default">Allows an application to write to the SD card.</string>
@@ -2091,15 +2073,15 @@
<!-- See USB_STORAGE. USB_STORAGE_DIALOG: After the user selects the notification, a dialog is shown asking if he wants to mount. This is the title. -->
<string name="usb_storage_title">USB connected</string>
<!-- See USB_STORAGE. This is the message. [CHAR LIMIT=NONE] -->
- <string name="usb_storage_message" product="nosdcard">You have connected your phone to your computer via USB. Select the button below if you want to copy files between your computer and your Android\u2018s shared storage.</string>
+ <string name="usb_storage_message" product="nosdcard">You have connected your phone to your computer via USB. Select the button below if you want to copy files between your computer and your Android\u2018s USB storage.</string>
<!-- See USB_STORAGE. This is the message. -->
<string name="usb_storage_message" product="default">You have connected your phone to your computer via USB. Select the button below if you want to copy files between your computer and your Android\u2018s SD card.</string>
<!-- See USB_STORAGE. This is the button text to mount the phone on the computer. -->
<string name="usb_storage_button_mount">Turn on USB storage</string>
<!-- See USB_STORAGE_DIALOG. If there was an error mounting, this is the text. [CHAR LIMIT=NONE] -->
- <string name="usb_storage_error_message" product="nosdcard">There is a problem using your shared storage for USB storage.</string>
+ <string name="usb_storage_error_message" product="nosdcard">There is a problem using your USB storage for USB mass storage.</string>
<!-- See USB_STORAGE_DIALOG. If there was an error mounting, this is the text. -->
- <string name="usb_storage_error_message" product="default">There is a problem using your SD card for USB storage.</string>
+ <string name="usb_storage_error_message" product="default">There is a problem using your SD card for USB mass storage.</string>
<!-- USB_STORAGE: When the user connects the phone to a computer via USB, we show a notification asking if he wants to share files across. This is the title -->
<string name="usb_storage_notification_title">USB connected</string>
<!-- See USB_STORAGE. This is the message. -->
@@ -2115,7 +2097,7 @@
<!-- See USB_STORAGE_STOP. USB_STORAGE_STOP_DIALOG: After the user selects the notification, a dialog is shown asking if he wants to stop usb storage. This is the title. -->
<string name="usb_storage_stop_title">USB storage in use</string>
<!-- See USB_STORAGE_STOP. This is the message. [CHAR LIMIT=NONE] -->
- <string name="usb_storage_stop_message" product="nosdcard">Before turning off USB storage, make sure you have unmounted (\u201cejected\u201d) your Android\u2018s shared storage from your computer.</string>
+ <string name="usb_storage_stop_message" product="nosdcard">Before turning off USB storage, make sure you have unmounted (\u201cejected\u201d) your Android\u2018s USB storage from your computer.</string>
<!-- See USB_STORAGE_STOP. This is the message. -->
<string name="usb_storage_stop_message" product="default">Before turning off USB storage, make sure you have unmounted (\u201cejected\u201d) your Android\u2018s SD card from your computer.</string>
<!-- See USB_STORAGE_STOP. This is the button text to stop usb storage. -->
@@ -2135,11 +2117,11 @@
<!-- External media format dialog strings -->
<!-- This is the label for the activity, and should never be visible to the user. -->
<!-- See EXTMEDIA_FORMAT. EXTMEDIA_FORMAT_DIALOG: After the user selects the notification, a dialog is shown asking if he wants to format the SD card. This is the title. [CHAR LIMIT=20] -->
- <string name="extmedia_format_title" product="nosdcard">Format shared storage</string>
+ <string name="extmedia_format_title" product="nosdcard">Format USB storage</string>
<!-- See EXTMEDIA_FORMAT. EXTMEDIA_FORMAT_DIALOG: After the user selects the notification, a dialog is shown asking if he wants to format the SD card. This is the title. -->
<string name="extmedia_format_title" product="default">Format SD card</string>
<!-- See EXTMEDIA_FORMAT. This is the message. [CHAR LIMIT=NONE] -->
- <string name="extmedia_format_message" product="nosdcard">Format shared storage, erasing all files stored there? Action cannot be reversed!</string>
+ <string name="extmedia_format_message" product="nosdcard">Format USB storage, erasing all files stored there? Action cannot be reversed!</string>
<!-- See EXTMEDIA_FORMAT. This is the message. -->
<string name="extmedia_format_message" product="default">Are you sure you want to format the SD card? All data on your card will be lost.</string>
<!-- See EXTMEDIA_FORMAT. This is the button text to format the sd card. -->
@@ -2167,49 +2149,49 @@
<!-- External media notification strings -->
<!-- Shown when external media is being checked [CHAR LIMIT=30] -->
- <string name="ext_media_checking_notification_title" product="nosdcard">Preparing shared storage</string>
+ <string name="ext_media_checking_notification_title" product="nosdcard">Preparing USB storage</string>
<!-- Shown when external media is being checked -->
<string name="ext_media_checking_notification_title" product="default">Preparing SD card</string>
<string name="ext_media_checking_notification_message">Checking for errors.</string>
<!-- Shown when external media is blank (or unsupported filesystem) [CHAR LIMIT=30] -->
- <string name="ext_media_nofs_notification_title" product="nosdcard">Blank shared storage</string>
+ <string name="ext_media_nofs_notification_title" product="nosdcard">Blank USB storage</string>
<!-- Shown when external media is blank (or unsupported filesystem) -->
<string name="ext_media_nofs_notification_title" product="default">Blank SD card</string>
- <!-- Shown when shared storage cannot be read. [CHAR LIMIT=NONE] -->
- <string name="ext_media_nofs_notification_message" product="nosdcard">Shared storage blank or has unsupported filesystem.</string>
+ <!-- Shown when USB storage cannot be read. [CHAR LIMIT=NONE] -->
+ <string name="ext_media_nofs_notification_message" product="nosdcard">USB storage blank or has unsupported filesystem.</string>
<string name="ext_media_nofs_notification_message" product="default">SD card blank or has unsupported filesystem.</string>
<!-- Shown when external media is unmountable (corrupt)) [CHAR LIMIT=30] -->
- <string name="ext_media_unmountable_notification_title" product="nosdcard">Damaged shared storage</string>
+ <string name="ext_media_unmountable_notification_title" product="nosdcard">Damaged USB storage</string>
<!-- Shown when external media is unmountable (corrupt)) -->
<string name="ext_media_unmountable_notification_title" product="default">Damaged SD card</string>
- <!-- Shown when shared storage cannot be read. [CHAR LIMIT=NONE] -->
- <string name="ext_media_unmountable_notification_message" product="nosdcard">Shared storage damaged. You may have to reformat it.</string>
+ <!-- Shown when USB storage cannot be read. [CHAR LIMIT=NONE] -->
+ <string name="ext_media_unmountable_notification_message" product="nosdcard">USB storage damaged. You may have to reformat it.</string>
<string name="ext_media_unmountable_notification_message" product="default">SD card damaged. You may have to reformat it.</string>
<!-- Shown when external media is unsafely removed [CHAR LIMIT=30] -->
- <string name="ext_media_badremoval_notification_title" product="nosdcard">Shared storage unexpectedly removed</string>
+ <string name="ext_media_badremoval_notification_title" product="nosdcard">USB storage unexpectedly removed</string>
<!-- Shown when external media is unsafely removed -->
<string name="ext_media_badremoval_notification_title" product="default">SD card unexpectedly removed</string>
<!-- Shown when external media is unsafely removed. [CHAR LIMIT=NONE] -->
- <string name="ext_media_badremoval_notification_message" product="nosdcard">Unmount shared storage before removing to avoid data loss.</string>
+ <string name="ext_media_badremoval_notification_message" product="nosdcard">Unmount USB storage before removing to avoid data loss.</string>
<string name="ext_media_badremoval_notification_message" product="default">Unmount SD card before removing to avoid data loss.</string>
<!-- Shown when external media has been safely removed [CHAR LIMIT=30] -->
- <string name="ext_media_safe_unmount_notification_title" product="nosdcard">Shared storage safe to remove</string>
+ <string name="ext_media_safe_unmount_notification_title" product="nosdcard">USB storage safe to remove</string>
<!-- Shown when external media has been safely removed -->
<string name="ext_media_safe_unmount_notification_title" product="default">SD card safe to remove</string>
<!-- Shown when external media has been safely removed. [CHAR LIMIT=NONE] -->
- <string name="ext_media_safe_unmount_notification_message" product="nosdcard">You can safely remove shared storage.</string>
+ <string name="ext_media_safe_unmount_notification_message" product="nosdcard">You can safely remove USB storage.</string>
<string name="ext_media_safe_unmount_notification_message" product="default">You can safely remove SD card.</string>
<!-- Shown when external media is missing [CHAR LIMIT=30] -->
- <string name="ext_media_nomedia_notification_title" product="nosdcard">Removed shared storage</string>
+ <string name="ext_media_nomedia_notification_title" product="nosdcard">Removed USB storage</string>
<!-- Shown when external media is missing -->
<string name="ext_media_nomedia_notification_title" product="default">Removed SD card</string>
<!-- Shown when external media is missing. [CHAR LIMIT=NONE] -->
- <string name="ext_media_nomedia_notification_message" product="nosdcard">Shared storage removed. Insert new media.</string>
+ <string name="ext_media_nomedia_notification_message" product="nosdcard">USB storage removed. Insert new media.</string>
<string name="ext_media_nomedia_notification_message" product="default">SD card removed. Insert a new one.</string>
<!-- Shown in LauncherActivity when the requested target Intent didn't return any matching Activities, leaving the list empty. -->
@@ -2337,4 +2319,33 @@
<!-- Shown when the users bandwidth is reduced because of excessive data use -->
<string name="throttled_notification_title">Mobile data limit exceeded</string>
<string name="throttled_notification_message">Touch to learn more about mobile data use</string>
+
+ <!-- Strings for ExternalStorageFormatter service. -->
+ <!-- Text for progress dialog while unmounting USB storage volume [CHAR LIMIT=NONE] -->
+ <string name="progress_unmounting" product="nosdcard">Unmounting USB storage...</string>
+ <!-- Text for progress dialog while unmounting SD card [CHAR LIMIT=NONE] -->
+ <string name="progress_unmounting" product="default">Unmounting SD card...</string>
+ <!-- Text for progress dialog while erasing USB storage volume [CHAR LIMIT=NONE] -->
+ <string name="progress_erasing" product="nosdcard">Erasing USB storage...</string>
+ <!-- Text for progress dialog while erasing SD card [CHAR LIMIT=NONE] -->
+ <string name="progress_erasing" product="default">Erasing SD card...</string>
+ <!-- Text for message to user that an error happened when formatting USB storage [CHAR LIMIT=NONE] -->
+ <string name="format_error" product="nosdcard">Failed to erase USB storage.</string>
+ <!-- Text for message to user that an error happened when formatting SD card [CHAR LIMIT=NONE] -->
+ <string name="format_error" product="default">Failed to erase SD card.</string>
+ <!-- Text for message to user that SD card has been removed while in use [CHAR LIMIT=NONE] -->
+ <string name="media_bad_removal">SD card was removed before being unmounted.</string>
+ <!-- Text for message to user USB storage is currently being checked [CHAR LIMIT=NONE] -->
+ <string name="media_checking" product="nosdcard">USB storage is currently being checked.</string>
+ <!-- Text for message to user SD card is currently being checked [CHAR LIMIT=NONE] -->
+ <string name="media_checking" product="default">SD card is currently being checked.</string>
+ <!-- Text for message to user SD card has been removed [CHAR LIMIT=NONE] -->
+ <string name="media_removed">SD card has been removed.</string>
+ <!-- Text for message to user USB storage is currently mounted on a computer [CHAR LIMIT=NONE] -->
+ <string name="media_shared" product="nosdcard">USB storage is currently in use by a computer.</string>
+ <!-- Text for message to user SD card is currently mounted on a computer [CHAR LIMIT=NONE] -->
+ <string name="media_shared" product="default">SD card is currently in use by a computer.</string>
+ <!-- Text for message for an unknown external media state [CHAR LIMIT=NONE] -->
+ <string name="media_unknown_state">External media in unknown state.</string>
+
</resources>
diff --git a/core/tests/coretests/res/raw/test1.obb b/core/tests/coretests/res/raw/test1.obb
index 170e36f..8466588 100644
--- a/core/tests/coretests/res/raw/test1.obb
+++ b/core/tests/coretests/res/raw/test1.obb
Binary files differ
diff --git a/core/tests/coretests/res/raw/test1_wrongpackage.obb b/core/tests/coretests/res/raw/test1_wrongpackage.obb
index 2e02eaa..d0aafe1 100644
--- a/core/tests/coretests/res/raw/test1_wrongpackage.obb
+++ b/core/tests/coretests/res/raw/test1_wrongpackage.obb
Binary files differ
diff --git a/core/tests/coretests/src/android/net/http/CookiesTest.java b/core/tests/coretests/src/android/net/http/CookiesTest.java
new file mode 100644
index 0000000..c9eca03
--- /dev/null
+++ b/core/tests/coretests/src/android/net/http/CookiesTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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 android.net.http;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+import java.util.logging.StreamHandler;
+import junit.framework.TestCase;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
+import tests.http.MockResponse;
+import tests.http.MockWebServer;
+
+public final class CookiesTest extends TestCase {
+
+ private MockWebServer server = new MockWebServer();
+
+ @Override protected void tearDown() throws Exception {
+ server.shutdown();
+ super.tearDown();
+ }
+
+ /**
+ * Test that we don't log potentially sensitive cookie values.
+ * http://b/3095990
+ */
+ public void testCookiesAreNotLogged() throws IOException, URISyntaxException {
+ // enqueue an HTTP response with a cookie that will be rejected
+ server.enqueue(new MockResponse()
+ .addHeader("Set-Cookie: password=secret; Domain=fake.domain"));
+ server.play();
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ Logger logger = Logger.getLogger("org.apache.http");
+ StreamHandler handler = new StreamHandler(out, new SimpleFormatter());
+ logger.addHandler(handler);
+ try {
+ HttpClient client = new DefaultHttpClient();
+ client.execute(new HttpGet(server.getUrl("/").toURI()));
+ handler.close();
+
+ String log = out.toString("UTF-8");
+ assertTrue(log, log.contains("password"));
+ assertTrue(log, log.contains("fake.domain"));
+ assertFalse(log, log.contains("secret"));
+
+ } finally {
+ logger.removeHandler(handler);
+ }
+ }
+}
diff --git a/docs/html/guide/topics/providers/content-providers.jd b/docs/html/guide/topics/providers/content-providers.jd
index 2aed5e1..2a84c26 100644
--- a/docs/html/guide/topics/providers/content-providers.jd
+++ b/docs/html/guide/topics/providers/content-providers.jd
@@ -838,8 +838,8 @@
</p>
<pre>
-<provider name="com.example.autos.AutoInfoProvider"
- authorities="com.example.autos.autoinfoprovider"
+<provider android:name="com.example.autos.AutoInfoProvider"
+ android:authorities="com.example.autos.autoinfoprovider"
. . . />
</provider>
</pre>
@@ -891,8 +891,8 @@
(reduced to lowercase) to ensure uniqueness. The authority is declared in
the {@code <provider>} element's {@code authorities} attribute:</p>
-<pre><provider name=".TransportationProvider"
- authorities="com.example.transportationprovider"
+<pre><provider android:name=".TransportationProvider"
+ android:authorities="com.example.transportationprovider"
. . . ></pre></li>
<li><p>The path that the content provider uses to determine what kind of data is
diff --git a/docs/html/guide/topics/testing/index.jd b/docs/html/guide/topics/testing/index.jd
index 92ed5a7..42a9db5 100644
--- a/docs/html/guide/topics/testing/index.jd
+++ b/docs/html/guide/topics/testing/index.jd
@@ -13,14 +13,6 @@
<h4>Concepts</h4>
<ul>
<li>
- Testing Tools describes the Eclipse with ADT and command-line tools you use to test
- Android applications.
- </li>
- <li>
- What to Test is an overview of the types of testing you should do. It focuses on testing
- system-wide aspects of Android that can affect every component in your application.
- </li>
- <li>
<a href="{@docRoot}guide/topics/testing/activity_testing.html">
Activity Testing</a> focuses on testing activities. It describes how instrumentation allows
you to control activities outside the normal application lifecycle. It also lists
@@ -38,6 +30,11 @@
Service Testing</a> focuses on testing services. It also lists service-specific features
you should test.
</li>
+ <li>
+ <a href="{@docRoot}guide/topics/testing/what_to_test.html">What to Test</a>
+ is an overview of the types of testing you should do. It focuses on testing
+ system-wide aspects of Android that can affect every component in your application.
+ </li>
</ul>
<h4>Procedures</h4>
<ul>
@@ -65,9 +62,8 @@
<h4>Samples</h4>
<ul>
<li>
- <a href="{@docRoot}resources/samples/NotePadTest.html">Note Pad Provider
- Test</a> is a test package for the
- <a href="{@docRoot}resources/samples/NotePad.html">Note Pad</a> sample
+ <a href="{@docRoot}resources/samples/NotePadTest.html">Note Pad Test</a> is a test
+ package for the <a href="{@docRoot}resources/samples/NotePad.html">Note Pad</a> sample
application. It provides a simple example of unit testing
a {@link android.content.ContentProvider}.
</li>
diff --git a/docs/html/guide/topics/wireless/bluetooth.jd b/docs/html/guide/topics/wireless/bluetooth.jd
index fa2875b..98b6e7d 100644
--- a/docs/html/guide/topics/wireless/bluetooth.jd
+++ b/docs/html/guide/topics/wireless/bluetooth.jd
@@ -9,7 +9,7 @@
<li>Android's bluetooth APIs allow your application to perform wireless data transactions with
other devices</li>
</ul>
-
+
<h2>In this document</h2>
<ol>
<li><a href="#TheBasics">The Basics</a></li>
@@ -32,7 +32,7 @@
</li>
<li><a href="#ManagingAConnection">Managing a Connection</a></li>
</ol>
-
+
<h2>Key classes</h2>
<ol>
<li>{@link android.bluetooth.BluetoothAdapter}</li>
@@ -289,7 +289,7 @@
of paired devices to see if the desired device is already known. To do so,
call {@link android.bluetooth.BluetoothAdapter#getBondedDevices()}. This
will return a Set of {@link android.bluetooth.BluetoothDevice}s representing
-paired devices. For example, you can query all paired devices and then add then
+paired devices. For example, you can query all paired devices and then
show the name of each device to the user, using an ArrayAdapter:</p>
<pre>
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h
index 2bb7783..1d94160 100644
--- a/include/media/stagefright/OMXCodec.h
+++ b/include/media/stagefright/OMXCodec.h
@@ -33,7 +33,11 @@
public MediaBufferObserver {
enum CreationFlags {
kPreferSoftwareCodecs = 1,
- kIgnoreCodecSpecificData = 2
+ kIgnoreCodecSpecificData = 2,
+
+ // The client wants to access the output buffer's video
+ // data for example for thumbnail extraction.
+ kClientNeedsFramebuffer = 4,
};
static sp<MediaSource> Create(
const sp<IOMX> &omx,
diff --git a/include/media/stagefright/openmax/OMX_Audio.h b/include/media/stagefright/openmax/OMX_Audio.h
new file mode 100644
index 0000000..3482841
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_Audio.h
@@ -0,0 +1,1328 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/*
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/** @file OMX_Audio.h - OpenMax IL version 1.1.2
+ * The structures needed by Audio components to exchange
+ * parameters and configuration data with the componenmilts.
+ */
+
+#ifndef OMX_Audio_h
+#define OMX_Audio_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* Each OMX header must include all required header files to allow the
+ * header to compile without errors. The includes below are required
+ * for this header file to compile successfully
+ */
+
+#include <OMX_Core.h>
+
+/** @defgroup midi MIDI
+ * @ingroup audio
+ */
+
+/** @defgroup effects Audio effects
+ * @ingroup audio
+ */
+
+/** @defgroup audio OpenMAX IL Audio Domain
+ * Structures for OpenMAX IL Audio domain
+ * @{
+ */
+
+/** Enumeration used to define the possible audio codings.
+ * If "OMX_AUDIO_CodingUnused" is selected, the coding selection must
+ * be done in a vendor specific way. Since this is for an audio
+ * processing element this enum is relevant. However, for another
+ * type of component other enums would be in this area.
+ */
+typedef enum OMX_AUDIO_CODINGTYPE {
+ OMX_AUDIO_CodingUnused = 0, /**< Placeholder value when coding is N/A */
+ OMX_AUDIO_CodingAutoDetect, /**< auto detection of audio format */
+ OMX_AUDIO_CodingPCM, /**< Any variant of PCM coding */
+ OMX_AUDIO_CodingADPCM, /**< Any variant of ADPCM encoded data */
+ OMX_AUDIO_CodingAMR, /**< Any variant of AMR encoded data */
+ OMX_AUDIO_CodingGSMFR, /**< Any variant of GSM fullrate (i.e. GSM610) */
+ OMX_AUDIO_CodingGSMEFR, /**< Any variant of GSM Enhanced Fullrate encoded data*/
+ OMX_AUDIO_CodingGSMHR, /**< Any variant of GSM Halfrate encoded data */
+ OMX_AUDIO_CodingPDCFR, /**< Any variant of PDC Fullrate encoded data */
+ OMX_AUDIO_CodingPDCEFR, /**< Any variant of PDC Enhanced Fullrate encoded data */
+ OMX_AUDIO_CodingPDCHR, /**< Any variant of PDC Halfrate encoded data */
+ OMX_AUDIO_CodingTDMAFR, /**< Any variant of TDMA Fullrate encoded data (TIA/EIA-136-420) */
+ OMX_AUDIO_CodingTDMAEFR, /**< Any variant of TDMA Enhanced Fullrate encoded data (TIA/EIA-136-410) */
+ OMX_AUDIO_CodingQCELP8, /**< Any variant of QCELP 8kbps encoded data */
+ OMX_AUDIO_CodingQCELP13, /**< Any variant of QCELP 13kbps encoded data */
+ OMX_AUDIO_CodingEVRC, /**< Any variant of EVRC encoded data */
+ OMX_AUDIO_CodingSMV, /**< Any variant of SMV encoded data */
+ OMX_AUDIO_CodingG711, /**< Any variant of G.711 encoded data */
+ OMX_AUDIO_CodingG723, /**< Any variant of G.723 dot 1 encoded data */
+ OMX_AUDIO_CodingG726, /**< Any variant of G.726 encoded data */
+ OMX_AUDIO_CodingG729, /**< Any variant of G.729 encoded data */
+ OMX_AUDIO_CodingAAC, /**< Any variant of AAC encoded data */
+ OMX_AUDIO_CodingMP3, /**< Any variant of MP3 encoded data */
+ OMX_AUDIO_CodingSBC, /**< Any variant of SBC encoded data */
+ OMX_AUDIO_CodingVORBIS, /**< Any variant of VORBIS encoded data */
+ OMX_AUDIO_CodingWMA, /**< Any variant of WMA encoded data */
+ OMX_AUDIO_CodingRA, /**< Any variant of RA encoded data */
+ OMX_AUDIO_CodingMIDI, /**< Any variant of MIDI encoded data */
+ OMX_AUDIO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_CodingMax = 0x7FFFFFFF
+} OMX_AUDIO_CODINGTYPE;
+
+
+/** The PortDefinition structure is used to define all of the parameters
+ * necessary for the compliant component to setup an input or an output audio
+ * path. If additional information is needed to define the parameters of the
+ * port (such as frequency), additional structures must be sent such as the
+ * OMX_AUDIO_PARAM_PCMMODETYPE structure to supply the extra parameters for the port.
+ */
+typedef struct OMX_AUDIO_PORTDEFINITIONTYPE {
+ OMX_STRING cMIMEType; /**< MIME type of data for the port */
+ OMX_NATIVE_DEVICETYPE pNativeRender; /** < platform specific reference
+ for an output device,
+ otherwise this field is 0 */
+ OMX_BOOL bFlagErrorConcealment; /**< Turns on error concealment if it is
+ supported by the OMX component */
+ OMX_AUDIO_CODINGTYPE eEncoding; /**< Type of data expected for this
+ port (e.g. PCM, AMR, MP3, etc) */
+} OMX_AUDIO_PORTDEFINITIONTYPE;
+
+
+/** Port format parameter. This structure is used to enumerate
+ * the various data input/output format supported by the port.
+ */
+typedef struct OMX_AUDIO_PARAM_PORTFORMATTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Indicates which port to set */
+ OMX_U32 nIndex; /**< Indicates the enumeration index for the format from 0x0 to N-1 */
+ OMX_AUDIO_CODINGTYPE eEncoding; /**< Type of data expected for this port (e.g. PCM, AMR, MP3, etc) */
+} OMX_AUDIO_PARAM_PORTFORMATTYPE;
+
+
+/** PCM mode type */
+typedef enum OMX_AUDIO_PCMMODETYPE {
+ OMX_AUDIO_PCMModeLinear = 0, /**< Linear PCM encoded data */
+ OMX_AUDIO_PCMModeALaw, /**< A law PCM encoded data (G.711) */
+ OMX_AUDIO_PCMModeMULaw, /**< Mu law PCM encoded data (G.711) */
+ OMX_AUDIO_PCMModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_PCMModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_PCMModeMax = 0x7FFFFFFF
+} OMX_AUDIO_PCMMODETYPE;
+
+
+typedef enum OMX_AUDIO_CHANNELTYPE {
+ OMX_AUDIO_ChannelNone = 0x0, /**< Unused or empty */
+ OMX_AUDIO_ChannelLF = 0x1, /**< Left front */
+ OMX_AUDIO_ChannelRF = 0x2, /**< Right front */
+ OMX_AUDIO_ChannelCF = 0x3, /**< Center front */
+ OMX_AUDIO_ChannelLS = 0x4, /**< Left surround */
+ OMX_AUDIO_ChannelRS = 0x5, /**< Right surround */
+ OMX_AUDIO_ChannelLFE = 0x6, /**< Low frequency effects */
+ OMX_AUDIO_ChannelCS = 0x7, /**< Back surround */
+ OMX_AUDIO_ChannelLR = 0x8, /**< Left rear. */
+ OMX_AUDIO_ChannelRR = 0x9, /**< Right rear. */
+ OMX_AUDIO_ChannelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_ChannelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_ChannelMax = 0x7FFFFFFF
+} OMX_AUDIO_CHANNELTYPE;
+
+#define OMX_AUDIO_MAXCHANNELS 16 /**< maximum number distinct audio channels that a buffer may contain */
+#define OMX_MIN_PCMPAYLOAD_MSEC 5 /**< Minimum audio buffer payload size for uncompressed (PCM) audio */
+
+/** PCM format description */
+typedef struct OMX_AUDIO_PARAM_PCMMODETYPE {
+ OMX_U32 nSize; /**< Size of this structure, in Bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels (e.g. 2 for stereo) */
+ OMX_NUMERICALDATATYPE eNumData; /**< indicates PCM data as signed or unsigned */
+ OMX_ENDIANTYPE eEndian; /**< indicates PCM data as little or big endian */
+ OMX_BOOL bInterleaved; /**< True for normal interleaved data; false for
+ non-interleaved data (e.g. block data) */
+ OMX_U32 nBitPerSample; /**< Bit per sample */
+ OMX_U32 nSamplingRate; /**< Sampling rate of the source data. Use 0 for
+ variable or unknown sampling rate. */
+ OMX_AUDIO_PCMMODETYPE ePCMMode; /**< PCM mode enumeration */
+ OMX_AUDIO_CHANNELTYPE eChannelMapping[OMX_AUDIO_MAXCHANNELS]; /**< Slot i contains channel defined by eChannelMap[i] */
+
+} OMX_AUDIO_PARAM_PCMMODETYPE;
+
+
+/** Audio channel mode. This is used by both AAC and MP3, although the names are more appropriate
+ * for the MP3. For example, JointStereo for MP3 is CouplingChannels for AAC.
+ */
+typedef enum OMX_AUDIO_CHANNELMODETYPE {
+ OMX_AUDIO_ChannelModeStereo = 0, /**< 2 channels, the bitrate allocation between those
+ two channels changes accordingly to each channel information */
+ OMX_AUDIO_ChannelModeJointStereo, /**< mode that takes advantage of what is common between
+ 2 channels for higher compression gain */
+ OMX_AUDIO_ChannelModeDual, /**< 2 mono-channels, each channel is encoded with half
+ the bitrate of the overall bitrate */
+ OMX_AUDIO_ChannelModeMono, /**< Mono channel mode */
+ OMX_AUDIO_ChannelModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_ChannelModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_ChannelModeMax = 0x7FFFFFFF
+} OMX_AUDIO_CHANNELMODETYPE;
+
+
+typedef enum OMX_AUDIO_MP3STREAMFORMATTYPE {
+ OMX_AUDIO_MP3StreamFormatMP1Layer3 = 0, /**< MP3 Audio MPEG 1 Layer 3 Stream format */
+ OMX_AUDIO_MP3StreamFormatMP2Layer3, /**< MP3 Audio MPEG 2 Layer 3 Stream format */
+ OMX_AUDIO_MP3StreamFormatMP2_5Layer3, /**< MP3 Audio MPEG2.5 Layer 3 Stream format */
+ OMX_AUDIO_MP3StreamFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_MP3StreamFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_MP3StreamFormatMax = 0x7FFFFFFF
+} OMX_AUDIO_MP3STREAMFORMATTYPE;
+
+/** MP3 params */
+typedef struct OMX_AUDIO_PARAM_MP3TYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels */
+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable
+ rate or unknown bit rates */
+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for
+ variable or unknown sampling rate. */
+ OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should
+ limit the audio signal. Use 0 to let encoder decide */
+ OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */
+ OMX_AUDIO_MP3STREAMFORMATTYPE eFormat; /**< MP3 stream format */
+} OMX_AUDIO_PARAM_MP3TYPE;
+
+
+typedef enum OMX_AUDIO_AACSTREAMFORMATTYPE {
+ OMX_AUDIO_AACStreamFormatMP2ADTS = 0, /**< AAC Audio Data Transport Stream 2 format */
+ OMX_AUDIO_AACStreamFormatMP4ADTS, /**< AAC Audio Data Transport Stream 4 format */
+ OMX_AUDIO_AACStreamFormatMP4LOAS, /**< AAC Low Overhead Audio Stream format */
+ OMX_AUDIO_AACStreamFormatMP4LATM, /**< AAC Low overhead Audio Transport Multiplex */
+ OMX_AUDIO_AACStreamFormatADIF, /**< AAC Audio Data Interchange Format */
+ OMX_AUDIO_AACStreamFormatMP4FF, /**< AAC inside MPEG-4/ISO File Format */
+ OMX_AUDIO_AACStreamFormatRAW, /**< AAC Raw Format */
+ OMX_AUDIO_AACStreamFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_AACStreamFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_AACStreamFormatMax = 0x7FFFFFFF
+} OMX_AUDIO_AACSTREAMFORMATTYPE;
+
+
+/** AAC mode type. Note that the term profile is used with the MPEG-2
+ * standard and the term object type and profile is used with MPEG-4 */
+typedef enum OMX_AUDIO_AACPROFILETYPE{
+ OMX_AUDIO_AACObjectNull = 0, /**< Null, not used */
+ OMX_AUDIO_AACObjectMain = 1, /**< AAC Main object */
+ OMX_AUDIO_AACObjectLC, /**< AAC Low Complexity object (AAC profile) */
+ OMX_AUDIO_AACObjectSSR, /**< AAC Scalable Sample Rate object */
+ OMX_AUDIO_AACObjectLTP, /**< AAC Long Term Prediction object */
+ OMX_AUDIO_AACObjectHE, /**< AAC High Efficiency (object type SBR, HE-AAC profile) */
+ OMX_AUDIO_AACObjectScalable, /**< AAC Scalable object */
+ OMX_AUDIO_AACObjectERLC = 17, /**< ER AAC Low Complexity object (Error Resilient AAC-LC) */
+ OMX_AUDIO_AACObjectLD = 23, /**< AAC Low Delay object (Error Resilient) */
+ OMX_AUDIO_AACObjectHE_PS = 29, /**< AAC High Efficiency with Parametric Stereo coding (HE-AAC v2, object type PS) */
+ OMX_AUDIO_AACObjectKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_AACObjectVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_AACObjectMax = 0x7FFFFFFF
+} OMX_AUDIO_AACPROFILETYPE;
+
+
+/** AAC tool usage (for nAACtools in OMX_AUDIO_PARAM_AACPROFILETYPE).
+ * Required for encoder configuration and optional as decoder info output.
+ * For MP3, OMX_AUDIO_CHANNELMODETYPE is sufficient. */
+#define OMX_AUDIO_AACToolNone 0x00000000 /**< no AAC tools allowed (encoder config) or active (decoder info output) */
+#define OMX_AUDIO_AACToolMS 0x00000001 /**< MS: Mid/side joint coding tool allowed or active */
+#define OMX_AUDIO_AACToolIS 0x00000002 /**< IS: Intensity stereo tool allowed or active */
+#define OMX_AUDIO_AACToolTNS 0x00000004 /**< TNS: Temporal Noise Shaping tool allowed or active */
+#define OMX_AUDIO_AACToolPNS 0x00000008 /**< PNS: MPEG-4 Perceptual Noise substitution tool allowed or active */
+#define OMX_AUDIO_AACToolLTP 0x00000010 /**< LTP: MPEG-4 Long Term Prediction tool allowed or active */
+#define OMX_AUDIO_AACToolAll 0x7FFFFFFF /**< all AAC tools allowed or active (*/
+
+/** MPEG-4 AAC error resilience (ER) tool usage (for nAACERtools in OMX_AUDIO_PARAM_AACPROFILETYPE).
+ * Required for ER encoder configuration and optional as decoder info output */
+#define OMX_AUDIO_AACERNone 0x00000000 /**< no AAC ER tools allowed/used */
+#define OMX_AUDIO_AACERVCB11 0x00000001 /**< VCB11: Virtual Code Books for AAC section data */
+#define OMX_AUDIO_AACERRVLC 0x00000002 /**< RVLC: Reversible Variable Length Coding */
+#define OMX_AUDIO_AACERHCR 0x00000004 /**< HCR: Huffman Codeword Reordering */
+#define OMX_AUDIO_AACERAll 0x7FFFFFFF /**< all AAC ER tools allowed/used */
+
+
+/** AAC params */
+typedef struct OMX_AUDIO_PARAM_AACPROFILETYPE {
+ OMX_U32 nSize; /**< Size of this structure, in Bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels */
+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for
+ variable or unknown sampling rate. */
+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable
+ rate or unknown bit rates */
+ OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should
+ limit the audio signal. Use 0 to let encoder decide */
+ OMX_U32 nFrameLength; /**< Frame length (in audio samples per channel) of the codec.
+ Can be 1024 or 960 (AAC-LC), 2048 (HE-AAC), 480 or 512 (AAC-LD).
+ Use 0 to let encoder decide */
+ OMX_U32 nAACtools; /**< AAC tool usage */
+ OMX_U32 nAACERtools; /**< MPEG-4 AAC error resilience tool usage */
+ OMX_AUDIO_AACPROFILETYPE eAACProfile; /**< AAC profile enumeration */
+ OMX_AUDIO_AACSTREAMFORMATTYPE eAACStreamFormat; /**< AAC stream format enumeration */
+ OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */
+} OMX_AUDIO_PARAM_AACPROFILETYPE;
+
+
+/** VORBIS params */
+typedef struct OMX_AUDIO_PARAM_VORBISTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels */
+ OMX_U32 nBitRate; /**< Bit rate of the encoded data data. Use 0 for variable
+ rate or unknown bit rates. Encoding is set to the
+ bitrate closest to specified value (in bps) */
+ OMX_U32 nMinBitRate; /**< Sets minimum bitrate (in bps). */
+ OMX_U32 nMaxBitRate; /**< Sets maximum bitrate (in bps). */
+
+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for
+ variable or unknown sampling rate. */
+ OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should
+ limit the audio signal. Use 0 to let encoder decide */
+ OMX_S32 nQuality; /**< Sets encoding quality to n, between -1 (low) and 10 (high).
+ In the default mode of operation, teh quality level is 3.
+ Normal quality range is 0 - 10. */
+ OMX_BOOL bManaged; /**< Set bitrate management mode. This turns off the
+ normal VBR encoding, but allows hard or soft bitrate
+ constraints to be enforced by the encoder. This mode can
+ be slower, and may also be lower quality. It is
+ primarily useful for streaming. */
+ OMX_BOOL bDownmix; /**< Downmix input from stereo to mono (has no effect on
+ non-stereo streams). Useful for lower-bitrate encoding. */
+} OMX_AUDIO_PARAM_VORBISTYPE;
+
+
+/** WMA Version */
+typedef enum OMX_AUDIO_WMAFORMATTYPE {
+ OMX_AUDIO_WMAFormatUnused = 0, /**< format unused or unknown */
+ OMX_AUDIO_WMAFormat7, /**< Windows Media Audio format 7 */
+ OMX_AUDIO_WMAFormat8, /**< Windows Media Audio format 8 */
+ OMX_AUDIO_WMAFormat9, /**< Windows Media Audio format 9 */
+ OMX_AUDIO_WMAFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_WMAFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_WMAFormatMax = 0x7FFFFFFF
+} OMX_AUDIO_WMAFORMATTYPE;
+
+
+/** WMA Profile */
+typedef enum OMX_AUDIO_WMAPROFILETYPE {
+ OMX_AUDIO_WMAProfileUnused = 0, /**< profile unused or unknown */
+ OMX_AUDIO_WMAProfileL1, /**< Windows Media audio version 9 profile L1 */
+ OMX_AUDIO_WMAProfileL2, /**< Windows Media audio version 9 profile L2 */
+ OMX_AUDIO_WMAProfileL3, /**< Windows Media audio version 9 profile L3 */
+ OMX_AUDIO_WMAProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_WMAProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_WMAProfileMax = 0x7FFFFFFF
+} OMX_AUDIO_WMAPROFILETYPE;
+
+
+/** WMA params */
+typedef struct OMX_AUDIO_PARAM_WMATYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U16 nChannels; /**< Number of channels */
+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable
+ rate or unknown bit rates */
+ OMX_AUDIO_WMAFORMATTYPE eFormat; /**< Version of WMA stream / data */
+ OMX_AUDIO_WMAPROFILETYPE eProfile; /**< Profile of WMA stream / data */
+ OMX_U32 nSamplingRate; /**< Sampling rate of the source data */
+ OMX_U16 nBlockAlign; /**< is the block alignment, or block size, in bytes of the audio codec */
+ OMX_U16 nEncodeOptions; /**< WMA Type-specific data */
+ OMX_U32 nSuperBlockAlign; /**< WMA Type-specific data */
+} OMX_AUDIO_PARAM_WMATYPE;
+
+/**
+ * RealAudio format
+ */
+typedef enum OMX_AUDIO_RAFORMATTYPE {
+ OMX_AUDIO_RAFormatUnused = 0, /**< Format unused or unknown */
+ OMX_AUDIO_RA8, /**< RealAudio 8 codec */
+ OMX_AUDIO_RA9, /**< RealAudio 9 codec */
+ OMX_AUDIO_RA10_AAC, /**< MPEG-4 AAC codec for bitrates of more than 128kbps */
+ OMX_AUDIO_RA10_CODEC, /**< RealAudio codec for bitrates less than 128 kbps */
+ OMX_AUDIO_RA10_LOSSLESS, /**< RealAudio Lossless */
+ OMX_AUDIO_RA10_MULTICHANNEL, /**< RealAudio Multichannel */
+ OMX_AUDIO_RA10_VOICE, /**< RealAudio Voice for bitrates below 15 kbps */
+ OMX_AUDIO_RAFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_RAFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_RAFormatMax = 0x7FFFFFFF
+} OMX_AUDIO_RAFORMATTYPE;
+
+/** RA (Real Audio) params */
+typedef struct OMX_AUDIO_PARAM_RATYPE {
+ OMX_U32 nSize; /**< Size of this structure, in Bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels */
+ OMX_U32 nSamplingRate; /**< is the sampling rate of the source data */
+ OMX_U32 nBitsPerFrame; /**< is the value for bits per frame */
+ OMX_U32 nSamplePerFrame; /**< is the value for samples per frame */
+ OMX_U32 nCouplingQuantBits; /**< is the number of coupling quantization bits in the stream */
+ OMX_U32 nCouplingStartRegion; /**< is the coupling start region in the stream */
+ OMX_U32 nNumRegions; /**< is the number of regions value */
+ OMX_AUDIO_RAFORMATTYPE eFormat; /**< is the RealAudio audio format */
+} OMX_AUDIO_PARAM_RATYPE;
+
+
+/** SBC Allocation Method Type */
+typedef enum OMX_AUDIO_SBCALLOCMETHODTYPE {
+ OMX_AUDIO_SBCAllocMethodLoudness, /**< Loudness allocation method */
+ OMX_AUDIO_SBCAllocMethodSNR, /**< SNR allocation method */
+ OMX_AUDIO_SBCAllocMethodKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_SBCAllocMethodVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_SBCAllocMethodMax = 0x7FFFFFFF
+} OMX_AUDIO_SBCALLOCMETHODTYPE;
+
+
+/** SBC params */
+typedef struct OMX_AUDIO_PARAM_SBCTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels */
+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable
+ rate or unknown bit rates */
+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for
+ variable or unknown sampling rate. */
+ OMX_U32 nBlocks; /**< Number of blocks */
+ OMX_U32 nSubbands; /**< Number of subbands */
+ OMX_U32 nBitPool; /**< Bitpool value */
+ OMX_BOOL bEnableBitrate; /**< Use bitrate value instead of bitpool */
+ OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */
+ OMX_AUDIO_SBCALLOCMETHODTYPE eSBCAllocType; /**< SBC Allocation method type */
+} OMX_AUDIO_PARAM_SBCTYPE;
+
+
+/** ADPCM stream format parameters */
+typedef struct OMX_AUDIO_PARAM_ADPCMTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_U32 nBitsPerSample; /**< Number of bits in each sample */
+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for
+ variable or unknown sampling rate. */
+} OMX_AUDIO_PARAM_ADPCMTYPE;
+
+
+/** G723 rate */
+typedef enum OMX_AUDIO_G723RATE {
+ OMX_AUDIO_G723ModeUnused = 0, /**< AMRNB Mode unused / unknown */
+ OMX_AUDIO_G723ModeLow, /**< 5300 bps */
+ OMX_AUDIO_G723ModeHigh, /**< 6300 bps */
+ OMX_AUDIO_G723ModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_G723ModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_G723ModeMax = 0x7FFFFFFF
+} OMX_AUDIO_G723RATE;
+
+
+/** G723 - Sample rate must be 8 KHz */
+typedef struct OMX_AUDIO_PARAM_G723TYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_AUDIO_G723RATE eBitRate; /**< todo: Should this be moved to a config? */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+ OMX_BOOL bPostFilter; /**< Enable Post Filter */
+} OMX_AUDIO_PARAM_G723TYPE;
+
+
+/** ITU G726 (ADPCM) rate */
+typedef enum OMX_AUDIO_G726MODE {
+ OMX_AUDIO_G726ModeUnused = 0, /**< G726 Mode unused / unknown */
+ OMX_AUDIO_G726Mode16, /**< 16 kbps */
+ OMX_AUDIO_G726Mode24, /**< 24 kbps */
+ OMX_AUDIO_G726Mode32, /**< 32 kbps, most common rate, also G721 */
+ OMX_AUDIO_G726Mode40, /**< 40 kbps */
+ OMX_AUDIO_G726ModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_G726ModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_G726ModeMax = 0x7FFFFFFF
+} OMX_AUDIO_G726MODE;
+
+
+/** G.726 stream format parameters - must be at 8KHz */
+typedef struct OMX_AUDIO_PARAM_G726TYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_AUDIO_G726MODE eG726Mode;
+} OMX_AUDIO_PARAM_G726TYPE;
+
+
+/** G729 coder type */
+typedef enum OMX_AUDIO_G729TYPE {
+ OMX_AUDIO_G729 = 0, /**< ITU G.729 encoded data */
+ OMX_AUDIO_G729A, /**< ITU G.729 annex A encoded data */
+ OMX_AUDIO_G729B, /**< ITU G.729 with annex B encoded data */
+ OMX_AUDIO_G729AB, /**< ITU G.729 annexes A and B encoded data */
+ OMX_AUDIO_G729KhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_G729VendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_G729Max = 0x7FFFFFFF
+} OMX_AUDIO_G729TYPE;
+
+
+/** G729 stream format parameters - fixed 6KHz sample rate */
+typedef struct OMX_AUDIO_PARAM_G729TYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_AUDIO_G729TYPE eBitType;
+} OMX_AUDIO_PARAM_G729TYPE;
+
+
+/** AMR Frame format */
+typedef enum OMX_AUDIO_AMRFRAMEFORMATTYPE {
+ OMX_AUDIO_AMRFrameFormatConformance = 0, /**< Frame Format is AMR Conformance
+ (Standard) Format */
+ OMX_AUDIO_AMRFrameFormatIF1, /**< Frame Format is AMR Interface
+ Format 1 */
+ OMX_AUDIO_AMRFrameFormatIF2, /**< Frame Format is AMR Interface
+ Format 2*/
+ OMX_AUDIO_AMRFrameFormatFSF, /**< Frame Format is AMR File Storage
+ Format */
+ OMX_AUDIO_AMRFrameFormatRTPPayload, /**< Frame Format is AMR Real-Time
+ Transport Protocol Payload Format */
+ OMX_AUDIO_AMRFrameFormatITU, /**< Frame Format is ITU Format (added at Motorola request) */
+ OMX_AUDIO_AMRFrameFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_AMRFrameFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_AMRFrameFormatMax = 0x7FFFFFFF
+} OMX_AUDIO_AMRFRAMEFORMATTYPE;
+
+
+/** AMR band mode */
+typedef enum OMX_AUDIO_AMRBANDMODETYPE {
+ OMX_AUDIO_AMRBandModeUnused = 0, /**< AMRNB Mode unused / unknown */
+ OMX_AUDIO_AMRBandModeNB0, /**< AMRNB Mode 0 = 4750 bps */
+ OMX_AUDIO_AMRBandModeNB1, /**< AMRNB Mode 1 = 5150 bps */
+ OMX_AUDIO_AMRBandModeNB2, /**< AMRNB Mode 2 = 5900 bps */
+ OMX_AUDIO_AMRBandModeNB3, /**< AMRNB Mode 3 = 6700 bps */
+ OMX_AUDIO_AMRBandModeNB4, /**< AMRNB Mode 4 = 7400 bps */
+ OMX_AUDIO_AMRBandModeNB5, /**< AMRNB Mode 5 = 7950 bps */
+ OMX_AUDIO_AMRBandModeNB6, /**< AMRNB Mode 6 = 10200 bps */
+ OMX_AUDIO_AMRBandModeNB7, /**< AMRNB Mode 7 = 12200 bps */
+ OMX_AUDIO_AMRBandModeWB0, /**< AMRWB Mode 0 = 6600 bps */
+ OMX_AUDIO_AMRBandModeWB1, /**< AMRWB Mode 1 = 8850 bps */
+ OMX_AUDIO_AMRBandModeWB2, /**< AMRWB Mode 2 = 12650 bps */
+ OMX_AUDIO_AMRBandModeWB3, /**< AMRWB Mode 3 = 14250 bps */
+ OMX_AUDIO_AMRBandModeWB4, /**< AMRWB Mode 4 = 15850 bps */
+ OMX_AUDIO_AMRBandModeWB5, /**< AMRWB Mode 5 = 18250 bps */
+ OMX_AUDIO_AMRBandModeWB6, /**< AMRWB Mode 6 = 19850 bps */
+ OMX_AUDIO_AMRBandModeWB7, /**< AMRWB Mode 7 = 23050 bps */
+ OMX_AUDIO_AMRBandModeWB8, /**< AMRWB Mode 8 = 23850 bps */
+ OMX_AUDIO_AMRBandModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_AMRBandModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_AMRBandModeMax = 0x7FFFFFFF
+} OMX_AUDIO_AMRBANDMODETYPE;
+
+
+/** AMR Discontinuous Transmission mode */
+typedef enum OMX_AUDIO_AMRDTXMODETYPE {
+ OMX_AUDIO_AMRDTXModeOff = 0, /**< AMR Discontinuous Transmission Mode is disabled */
+ OMX_AUDIO_AMRDTXModeOnVAD1, /**< AMR Discontinuous Transmission Mode using
+ Voice Activity Detector 1 (VAD1) is enabled */
+ OMX_AUDIO_AMRDTXModeOnVAD2, /**< AMR Discontinuous Transmission Mode using
+ Voice Activity Detector 2 (VAD2) is enabled */
+ OMX_AUDIO_AMRDTXModeOnAuto, /**< The codec will automatically select between
+ Off, VAD1 or VAD2 modes */
+
+ OMX_AUDIO_AMRDTXasEFR, /**< DTX as EFR instead of AMR standard (3GPP 26.101, frame type =8,9,10) */
+
+ OMX_AUDIO_AMRDTXModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_AMRDTXModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_AMRDTXModeMax = 0x7FFFFFFF
+} OMX_AUDIO_AMRDTXMODETYPE;
+
+
+/** AMR params */
+typedef struct OMX_AUDIO_PARAM_AMRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels */
+ OMX_U32 nBitRate; /**< Bit rate read only field */
+ OMX_AUDIO_AMRBANDMODETYPE eAMRBandMode; /**< AMR Band Mode enumeration */
+ OMX_AUDIO_AMRDTXMODETYPE eAMRDTXMode; /**< AMR DTX Mode enumeration */
+ OMX_AUDIO_AMRFRAMEFORMATTYPE eAMRFrameFormat; /**< AMR frame format enumeration */
+} OMX_AUDIO_PARAM_AMRTYPE;
+
+
+/** GSM_FR (ETSI 06.10, 3GPP 46.010) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_GSMFRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+} OMX_AUDIO_PARAM_GSMFRTYPE;
+
+
+/** GSM-HR (ETSI 06.20, 3GPP 46.020) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_GSMHRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+} OMX_AUDIO_PARAM_GSMHRTYPE;
+
+
+/** GSM-EFR (ETSI 06.60, 3GPP 46.060) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_GSMEFRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+} OMX_AUDIO_PARAM_GSMEFRTYPE;
+
+
+/** TDMA FR (TIA/EIA-136-420, VSELP 7.95kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_TDMAFRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+} OMX_AUDIO_PARAM_TDMAFRTYPE;
+
+
+/** TDMA EFR (TIA/EIA-136-410, ACELP 7.4kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_TDMAEFRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+} OMX_AUDIO_PARAM_TDMAEFRTYPE;
+
+
+/** PDC FR ( RCR-27, VSELP 6.7kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_PDCFRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+} OMX_AUDIO_PARAM_PDCFRTYPE;
+
+
+/** PDC EFR ( RCR-27, ACELP 6.7kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_PDCEFRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+} OMX_AUDIO_PARAM_PDCEFRTYPE;
+
+/** PDC HR ( RCR-27, PSI-CELP 3.45kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_PDCHRTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */
+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */
+} OMX_AUDIO_PARAM_PDCHRTYPE;
+
+
+/** CDMA Rate types */
+typedef enum OMX_AUDIO_CDMARATETYPE {
+ OMX_AUDIO_CDMARateBlank = 0, /**< CDMA encoded frame is blank */
+ OMX_AUDIO_CDMARateFull, /**< CDMA encoded frame in full rate */
+ OMX_AUDIO_CDMARateHalf, /**< CDMA encoded frame in half rate */
+ OMX_AUDIO_CDMARateQuarter, /**< CDMA encoded frame in quarter rate */
+ OMX_AUDIO_CDMARateEighth, /**< CDMA encoded frame in eighth rate (DTX)*/
+ OMX_AUDIO_CDMARateErasure, /**< CDMA erasure frame */
+ OMX_AUDIO_CDMARateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_CDMARateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_CDMARateMax = 0x7FFFFFFF
+} OMX_AUDIO_CDMARATETYPE;
+
+
+/** QCELP8 (TIA/EIA-96, up to 8kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_QCELP8TYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable
+ rate or unknown bit rates */
+ OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */
+ OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */
+ OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */
+} OMX_AUDIO_PARAM_QCELP8TYPE;
+
+
+/** QCELP13 ( CDMA, EIA/TIA-733, 13.3kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_QCELP13TYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */
+ OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */
+ OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */
+} OMX_AUDIO_PARAM_QCELP13TYPE;
+
+
+/** EVRC ( CDMA, EIA/TIA-127, RCELP up to 8.55kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_EVRCTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_AUDIO_CDMARATETYPE eCDMARate; /**< actual Frame rate */
+ OMX_BOOL bRATE_REDUCon; /**< RATE_REDUCtion is requested for this frame */
+ OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */
+ OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */
+ OMX_BOOL bHiPassFilter; /**< Enable encoder's High Pass Filter */
+ OMX_BOOL bNoiseSuppressor; /**< Enable encoder's noise suppressor pre-processing */
+ OMX_BOOL bPostFilter; /**< Enable decoder's post Filter */
+} OMX_AUDIO_PARAM_EVRCTYPE;
+
+
+/** SMV ( up to 8.55kbps coder) stream format parameters */
+typedef struct OMX_AUDIO_PARAM_SMVTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannels; /**< Number of channels in the data stream (not
+ necessarily the same as the number of channels
+ to be rendered. */
+ OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */
+ OMX_BOOL bRATE_REDUCon; /**< RATE_REDUCtion is requested for this frame */
+ OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 ??*/
+ OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 ??*/
+ OMX_BOOL bHiPassFilter; /**< Enable encoder's High Pass Filter ??*/
+ OMX_BOOL bNoiseSuppressor; /**< Enable encoder's noise suppressor pre-processing */
+ OMX_BOOL bPostFilter; /**< Enable decoder's post Filter ??*/
+} OMX_AUDIO_PARAM_SMVTYPE;
+
+
+/** MIDI Format
+ * @ingroup midi
+ */
+typedef enum OMX_AUDIO_MIDIFORMATTYPE
+{
+ OMX_AUDIO_MIDIFormatUnknown = 0, /**< MIDI Format unknown or don't care */
+ OMX_AUDIO_MIDIFormatSMF0, /**< Standard MIDI File Type 0 */
+ OMX_AUDIO_MIDIFormatSMF1, /**< Standard MIDI File Type 1 */
+ OMX_AUDIO_MIDIFormatSMF2, /**< Standard MIDI File Type 2 */
+ OMX_AUDIO_MIDIFormatSPMIDI, /**< SP-MIDI */
+ OMX_AUDIO_MIDIFormatXMF0, /**< eXtensible Music Format type 0 */
+ OMX_AUDIO_MIDIFormatXMF1, /**< eXtensible Music Format type 1 */
+ OMX_AUDIO_MIDIFormatMobileXMF, /**< Mobile XMF (eXtensible Music Format type 2) */
+ OMX_AUDIO_MIDIFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_MIDIFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_MIDIFormatMax = 0x7FFFFFFF
+} OMX_AUDIO_MIDIFORMATTYPE;
+
+
+/** MIDI params
+ * @ingroup midi
+ */
+typedef struct OMX_AUDIO_PARAM_MIDITYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nFileSize; /**< size of the MIDI file in bytes, where the entire
+ MIDI file passed in, otherwise if 0x0, the MIDI data
+ is merged and streamed (instead of passed as an
+ entire MIDI file) */
+ OMX_BU32 sMaxPolyphony; /**< Specifies the maximum simultaneous polyphonic
+ voices. A value of zero indicates that the default
+ polyphony of the device is used */
+ OMX_BOOL bLoadDefaultSound; /**< Whether to load default sound
+ bank at initialization */
+ OMX_AUDIO_MIDIFORMATTYPE eMidiFormat; /**< Version of the MIDI file */
+} OMX_AUDIO_PARAM_MIDITYPE;
+
+
+/** Type of the MIDI sound bank
+ * @ingroup midi
+ */
+typedef enum OMX_AUDIO_MIDISOUNDBANKTYPE {
+ OMX_AUDIO_MIDISoundBankUnused = 0, /**< unused/unknown soundbank type */
+ OMX_AUDIO_MIDISoundBankDLS1, /**< DLS version 1 */
+ OMX_AUDIO_MIDISoundBankDLS2, /**< DLS version 2 */
+ OMX_AUDIO_MIDISoundBankMobileDLSBase, /**< Mobile DLS, using the base functionality */
+ OMX_AUDIO_MIDISoundBankMobileDLSPlusOptions, /**< Mobile DLS, using the specification-defined optional feature set */
+ OMX_AUDIO_MIDISoundBankKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_MIDISoundBankVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_MIDISoundBankMax = 0x7FFFFFFF
+} OMX_AUDIO_MIDISOUNDBANKTYPE;
+
+
+/** Bank Layout describes how bank MSB & LSB are used in the DLS instrument definitions sound bank
+ * @ingroup midi
+ */
+typedef enum OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE {
+ OMX_AUDIO_MIDISoundBankLayoutUnused = 0, /**< unused/unknown soundbank type */
+ OMX_AUDIO_MIDISoundBankLayoutGM, /**< GS layout (based on bank MSB 0x00) */
+ OMX_AUDIO_MIDISoundBankLayoutGM2, /**< General MIDI 2 layout (using MSB 0x78/0x79, LSB 0x00) */
+ OMX_AUDIO_MIDISoundBankLayoutUser, /**< Does not conform to any bank numbering standards */
+ OMX_AUDIO_MIDISoundBankLayoutKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_MIDISoundBankLayoutVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_MIDISoundBankLayoutMax = 0x7FFFFFFF
+} OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE;
+
+
+/** MIDI params to load/unload user soundbank
+ * @ingroup midi
+ */
+typedef struct OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nDLSIndex; /**< DLS file index to be loaded */
+ OMX_U32 nDLSSize; /**< Size in bytes */
+ OMX_PTR pDLSData; /**< Pointer to DLS file data */
+ OMX_AUDIO_MIDISOUNDBANKTYPE eMidiSoundBank; /**< Midi sound bank type enumeration */
+ OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE eMidiSoundBankLayout; /**< Midi sound bank layout enumeration */
+} OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE;
+
+
+/** Structure for Live MIDI events and MIP messages.
+ * (MIP = Maximum Instantaneous Polyphony; part of the SP-MIDI standard.)
+ * @ingroup midi
+ */
+typedef struct OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port that this structure applies to */
+ OMX_U32 nMidiEventSize; /**< Size of immediate MIDI events or MIP message in bytes */
+ OMX_U8 nMidiEvents[1]; /**< MIDI event array to be rendered immediately, or an
+ array for the MIP message buffer, where the size is
+ indicated by nMidiEventSize */
+} OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE;
+
+
+/** MIDI sound bank/ program pair in a given channel
+ * @ingroup midi
+ */
+typedef struct OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port that this structure applies to */
+ OMX_U32 nChannel; /**< Valid channel values range from 1 to 16 */
+ OMX_U16 nIDProgram; /**< Valid program ID range is 1 to 128 */
+ OMX_U16 nIDSoundBank; /**< Sound bank ID */
+ OMX_U32 nUserSoundBankIndex;/**< User soundbank index, easier to access soundbanks
+ by index if multiple banks are present */
+} OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE;
+
+
+/** MIDI control
+ * @ingroup midi
+ */
+typedef struct OMX_AUDIO_CONFIG_MIDICONTROLTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BS32 sPitchTransposition; /**< Pitch transposition in semitones, stored as Q22.10
+ format based on JAVA MMAPI (JSR-135) requirement */
+ OMX_BU32 sPlayBackRate; /**< Relative playback rate, stored as Q14.17 fixed-point
+ number based on JSR-135 requirement */
+ OMX_BU32 sTempo ; /**< Tempo in beats per minute (BPM), stored as Q22.10
+ fixed-point number based on JSR-135 requirement */
+ OMX_U32 nMaxPolyphony; /**< Specifies the maximum simultaneous polyphonic
+ voices. A value of zero indicates that the default
+ polyphony of the device is used */
+ OMX_U32 nNumRepeat; /**< Number of times to repeat playback */
+ OMX_U32 nStopTime; /**< Time in milliseconds to indicate when playback
+ will stop automatically. Set to zero if not used */
+ OMX_U16 nChannelMuteMask; /**< 16 bit mask for channel mute status */
+ OMX_U16 nChannelSoloMask; /**< 16 bit mask for channel solo status */
+ OMX_U32 nTrack0031MuteMask; /**< 32 bit mask for track mute status. Note: This is for tracks 0-31 */
+ OMX_U32 nTrack3263MuteMask; /**< 32 bit mask for track mute status. Note: This is for tracks 32-63 */
+ OMX_U32 nTrack0031SoloMask; /**< 32 bit mask for track solo status. Note: This is for tracks 0-31 */
+ OMX_U32 nTrack3263SoloMask; /**< 32 bit mask for track solo status. Note: This is for tracks 32-63 */
+
+} OMX_AUDIO_CONFIG_MIDICONTROLTYPE;
+
+
+/** MIDI Playback States
+ * @ingroup midi
+ */
+typedef enum OMX_AUDIO_MIDIPLAYBACKSTATETYPE {
+ OMX_AUDIO_MIDIPlayBackStateUnknown = 0, /**< Unknown state or state does not map to
+ other defined states */
+ OMX_AUDIO_MIDIPlayBackStateClosedEngaged, /**< No MIDI resource is currently open.
+ The MIDI engine is currently processing
+ MIDI events. */
+ OMX_AUDIO_MIDIPlayBackStateParsing, /**< A MIDI resource is open and is being
+ primed. The MIDI engine is currently
+ processing MIDI events. */
+ OMX_AUDIO_MIDIPlayBackStateOpenEngaged, /**< A MIDI resource is open and primed but
+ not playing. The MIDI engine is currently
+ processing MIDI events. The transition to
+ this state is only possible from the
+ OMX_AUDIO_MIDIPlayBackStatePlaying state,
+ when the 'playback head' reaches the end
+ of media data or the playback stops due
+ to stop time set.*/
+ OMX_AUDIO_MIDIPlayBackStatePlaying, /**< A MIDI resource is open and currently
+ playing. The MIDI engine is currently
+ processing MIDI events.*/
+ OMX_AUDIO_MIDIPlayBackStatePlayingPartially, /**< Best-effort playback due to SP-MIDI/DLS
+ resource constraints */
+ OMX_AUDIO_MIDIPlayBackStatePlayingSilently, /**< Due to system resource constraints and
+ SP-MIDI content constraints, there is
+ no audible MIDI content during playback
+ currently. The situation may change if
+ resources are freed later.*/
+ OMX_AUDIO_MIDIPlayBackStateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_MIDIPlayBackStateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_MIDIPlayBackStateMax = 0x7FFFFFFF
+} OMX_AUDIO_MIDIPLAYBACKSTATETYPE;
+
+
+/** MIDI status
+ * @ingroup midi
+ */
+typedef struct OMX_AUDIO_CONFIG_MIDISTATUSTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U16 nNumTracks; /**< Number of MIDI tracks in the file, read only field.
+ NOTE: May not return a meaningful value until the entire
+ file is parsed and buffered. */
+ OMX_U32 nDuration; /**< The length of the currently open MIDI resource
+ in milliseconds. NOTE: May not return a meaningful value
+ until the entire file is parsed and buffered. */
+ OMX_U32 nPosition; /**< Current Position of the MIDI resource being played
+ in milliseconds */
+ OMX_BOOL bVibra; /**< Does Vibra track exist? NOTE: May not return a meaningful
+ value until the entire file is parsed and buffered. */
+ OMX_U32 nNumMetaEvents; /**< Total number of MIDI Meta Events in the currently
+ open MIDI resource. NOTE: May not return a meaningful value
+ until the entire file is parsed and buffered. */
+ OMX_U32 nNumActiveVoices; /**< Number of active voices in the currently playing
+ MIDI resource. NOTE: May not return a meaningful value until
+ the entire file is parsed and buffered. */
+ OMX_AUDIO_MIDIPLAYBACKSTATETYPE eMIDIPlayBackState; /**< MIDI playback state enumeration, read only field */
+} OMX_AUDIO_CONFIG_MIDISTATUSTYPE;
+
+
+/** MIDI Meta Event structure one per Meta Event.
+ * MIDI Meta Events are like audio metadata, except that they are interspersed
+ * with the MIDI content throughout the file and are not localized in the header.
+ * As such, it is necessary to retrieve information about these Meta Events from
+ * the engine, as it encounters these Meta Events within the MIDI content.
+ * For example, SMF files can have up to 14 types of MIDI Meta Events (copyright,
+ * author, default tempo, etc.) scattered throughout the file.
+ * @ingroup midi
+ */
+typedef struct OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE{
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nIndex; /**< Index of Meta Event */
+ OMX_U8 nMetaEventType; /**< Meta Event Type, 7bits (i.e. 0 - 127) */
+ OMX_U32 nMetaEventSize; /**< size of the Meta Event in bytes */
+ OMX_U32 nTrack; /**< track number for the meta event */
+ OMX_U32 nPosition; /**< Position of the meta-event in milliseconds */
+} OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE;
+
+
+/** MIDI Meta Event Data structure - one per Meta Event.
+ * @ingroup midi
+ */
+typedef struct OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE{
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nIndex; /**< Index of Meta Event */
+ OMX_U32 nMetaEventSize; /**< size of the Meta Event in bytes */
+ OMX_U8 nData[1]; /**< array of one or more bytes of meta data
+ as indicated by the nMetaEventSize field */
+} OMX_AUDIO_CONFIG__MIDIMETAEVENTDATATYPE;
+
+
+/** Audio Volume adjustment for a port */
+typedef struct OMX_AUDIO_CONFIG_VOLUMETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port index indicating which port to
+ set. Select the input port to set
+ just that port's volume. Select the
+ output port to adjust the master
+ volume. */
+ OMX_BOOL bLinear; /**< Is the volume to be set in linear (0.100)
+ or logarithmic scale (mB) */
+ OMX_BS32 sVolume; /**< Volume linear setting in the 0..100 range, OR
+ Volume logarithmic setting for this port. The values
+ for volume are in mB (millibels = 1/100 dB) relative
+ to a gain of 1 (e.g. the output is the same as the
+ input level). Values are in mB from nMax
+ (maximum volume) to nMin mB (typically negative).
+ Since the volume is "voltage"
+ and not a "power", it takes a setting of
+ -600 mB to decrease the volume by 1/2. If
+ a component cannot accurately set the
+ volume to the requested value, it must
+ set the volume to the closest value BELOW
+ the requested value. When getting the
+ volume setting, the current actual volume
+ must be returned. */
+} OMX_AUDIO_CONFIG_VOLUMETYPE;
+
+
+/** Audio Volume adjustment for a channel */
+typedef struct OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port index indicating which port to
+ set. Select the input port to set
+ just that port's volume. Select the
+ output port to adjust the master
+ volume. */
+ OMX_U32 nChannel; /**< channel to select from 0 to N-1,
+ using OMX_ALL to apply volume settings
+ to all channels */
+ OMX_BOOL bLinear; /**< Is the volume to be set in linear (0.100) or
+ logarithmic scale (mB) */
+ OMX_BS32 sVolume; /**< Volume linear setting in the 0..100 range, OR
+ Volume logarithmic setting for this port.
+ The values for volume are in mB
+ (millibels = 1/100 dB) relative to a gain
+ of 1 (e.g. the output is the same as the
+ input level). Values are in mB from nMax
+ (maximum volume) to nMin mB (typically negative).
+ Since the volume is "voltage"
+ and not a "power", it takes a setting of
+ -600 mB to decrease the volume by 1/2. If
+ a component cannot accurately set the
+ volume to the requested value, it must
+ set the volume to the closest value BELOW
+ the requested value. When getting the
+ volume setting, the current actual volume
+ must be returned. */
+ OMX_BOOL bIsMIDI; /**< TRUE if nChannel refers to a MIDI channel,
+ FALSE otherwise */
+} OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE;
+
+
+/** Audio balance setting */
+typedef struct OMX_AUDIO_CONFIG_BALANCETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port index indicating which port to
+ set. Select the input port to set
+ just that port's balance. Select the
+ output port to adjust the master
+ balance. */
+ OMX_S32 nBalance; /**< balance setting for this port
+ (-100 to 100, where -100 indicates
+ all left, and no right */
+} OMX_AUDIO_CONFIG_BALANCETYPE;
+
+
+/** Audio Port mute */
+typedef struct OMX_AUDIO_CONFIG_MUTETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port index indicating which port to
+ set. Select the input port to set
+ just that port's mute. Select the
+ output port to adjust the master
+ mute. */
+ OMX_BOOL bMute; /**< Mute setting for this port */
+} OMX_AUDIO_CONFIG_MUTETYPE;
+
+
+/** Audio Channel mute */
+typedef struct OMX_AUDIO_CONFIG_CHANNELMUTETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nChannel; /**< channel to select from 0 to N-1,
+ using OMX_ALL to apply mute settings
+ to all channels */
+ OMX_BOOL bMute; /**< Mute setting for this channel */
+ OMX_BOOL bIsMIDI; /**< TRUE if nChannel refers to a MIDI channel,
+ FALSE otherwise */
+} OMX_AUDIO_CONFIG_CHANNELMUTETYPE;
+
+
+
+/** Enable / Disable for loudness control, which boosts bass and to a
+ * smaller extent high end frequencies to compensate for hearing
+ * ability at the extreme ends of the audio spectrum
+ */
+typedef struct OMX_AUDIO_CONFIG_LOUDNESSTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bLoudness; /**< Enable/disable for loudness */
+} OMX_AUDIO_CONFIG_LOUDNESSTYPE;
+
+
+/** Enable / Disable for bass, which controls low frequencies
+ */
+typedef struct OMX_AUDIO_CONFIG_BASSTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bEnable; /**< Enable/disable for bass control */
+ OMX_S32 nBass; /**< bass setting for the port, as a
+ continuous value from -100 to 100
+ (0 means no change in bass level)*/
+} OMX_AUDIO_CONFIG_BASSTYPE;
+
+
+/** Enable / Disable for treble, which controls high frequencies tones
+ */
+typedef struct OMX_AUDIO_CONFIG_TREBLETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bEnable; /**< Enable/disable for treble control */
+ OMX_S32 nTreble; /**< treble setting for the port, as a
+ continuous value from -100 to 100
+ (0 means no change in treble level) */
+} OMX_AUDIO_CONFIG_TREBLETYPE;
+
+
+/** An equalizer is typically used for two reasons: to compensate for an
+ * sub-optimal frequency response of a system to make it sound more natural
+ * or to create intentionally some unnatural coloring to the sound to create
+ * an effect.
+ * @ingroup effects
+ */
+typedef struct OMX_AUDIO_CONFIG_EQUALIZERTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bEnable; /**< Enable/disable for equalizer */
+ OMX_BU32 sBandIndex; /**< Band number to be set. Upper Limit is
+ N-1, where N is the number of bands, lower limit is 0 */
+ OMX_BU32 sCenterFreq; /**< Center frequecies in Hz. This is a
+ read only element and is used to determine
+ the lower, center and upper frequency of
+ this band. */
+ OMX_BS32 sBandLevel; /**< band level in millibels */
+} OMX_AUDIO_CONFIG_EQUALIZERTYPE;
+
+
+/** Stereo widening mode type
+ * @ingroup effects
+ */
+typedef enum OMX_AUDIO_STEREOWIDENINGTYPE {
+ OMX_AUDIO_StereoWideningHeadphones, /**< Stereo widening for loudspeakers */
+ OMX_AUDIO_StereoWideningLoudspeakers, /**< Stereo widening for closely spaced loudspeakers */
+ OMX_AUDIO_StereoWideningKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_StereoWideningVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_StereoWideningMax = 0x7FFFFFFF
+} OMX_AUDIO_STEREOWIDENINGTYPE;
+
+
+/** Control for stereo widening, which is a special 2-channel
+ * case of the audio virtualizer effect. For example, for 5.1-channel
+ * output, it translates to virtual surround sound.
+ * @ingroup effects
+ */
+typedef struct OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bEnable; /**< Enable/disable for stereo widening control */
+ OMX_AUDIO_STEREOWIDENINGTYPE eWideningType; /**< Stereo widening algorithm type */
+ OMX_U32 nStereoWidening; /**< stereo widening setting for the port,
+ as a continuous value from 0 to 100 */
+} OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE;
+
+
+/** The chorus effect (or ``choralizer'') is any signal processor which makes
+ * one sound source (such as a voice) sound like many such sources singing
+ * (or playing) in unison. Since performance in unison is never exact, chorus
+ * effects simulate this by making independently modified copies of the input
+ * signal. Modifications may include (1) delay, (2) frequency shift, and
+ * (3) amplitude modulation.
+ * @ingroup effects
+ */
+typedef struct OMX_AUDIO_CONFIG_CHORUSTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bEnable; /**< Enable/disable for chorus */
+ OMX_BU32 sDelay; /**< average delay in milliseconds */
+ OMX_BU32 sModulationRate; /**< rate of modulation in millihertz */
+ OMX_U32 nModulationDepth; /**< depth of modulation as a percentage of
+ delay (i.e. 0 to 100) */
+ OMX_BU32 nFeedback; /**< Feedback from chorus output to input in percentage */
+} OMX_AUDIO_CONFIG_CHORUSTYPE;
+
+
+/** Reverberation is part of the reflected sound that follows the early
+ * reflections. In a typical room, this consists of a dense succession of
+ * echoes whose energy decays exponentially. The reverberation effect structure
+ * as defined here includes both (early) reflections as well as (late) reverberations.
+ * @ingroup effects
+ */
+typedef struct OMX_AUDIO_CONFIG_REVERBERATIONTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bEnable; /**< Enable/disable for reverberation control */
+ OMX_BS32 sRoomLevel; /**< Intensity level for the whole room effect
+ (i.e. both early reflections and late
+ reverberation) in millibels */
+ OMX_BS32 sRoomHighFreqLevel; /**< Attenuation at high frequencies
+ relative to the intensity at low
+ frequencies in millibels */
+ OMX_BS32 sReflectionsLevel; /**< Intensity level of early reflections
+ (relative to room value), in millibels */
+ OMX_BU32 sReflectionsDelay; /**< Delay time of the first reflection relative
+ to the direct path, in milliseconds */
+ OMX_BS32 sReverbLevel; /**< Intensity level of late reverberation
+ relative to room level, in millibels */
+ OMX_BU32 sReverbDelay; /**< Time delay from the first early reflection
+ to the beginning of the late reverberation
+ section, in milliseconds */
+ OMX_BU32 sDecayTime; /**< Late reverberation decay time at low
+ frequencies, in milliseconds */
+ OMX_BU32 nDecayHighFreqRatio; /**< Ratio of high frequency decay time relative
+ to low frequency decay time in percent */
+ OMX_U32 nDensity; /**< Modal density in the late reverberation decay,
+ in percent (i.e. 0 - 100) */
+ OMX_U32 nDiffusion; /**< Echo density in the late reverberation decay,
+ in percent (i.e. 0 - 100) */
+ OMX_BU32 sReferenceHighFreq; /**< Reference high frequency in Hertz. This is
+ the frequency used as the reference for all
+ the high-frequency settings above */
+
+} OMX_AUDIO_CONFIG_REVERBERATIONTYPE;
+
+
+/** Possible settings for the Echo Cancelation structure to use
+ * @ingroup effects
+ */
+typedef enum OMX_AUDIO_ECHOCANTYPE {
+ OMX_AUDIO_EchoCanOff = 0, /**< Echo Cancellation is disabled */
+ OMX_AUDIO_EchoCanNormal, /**< Echo Cancellation normal operation -
+ echo from plastics and face */
+ OMX_AUDIO_EchoCanHFree, /**< Echo Cancellation optimized for
+ Hands Free operation */
+ OMX_AUDIO_EchoCanCarKit, /**< Echo Cancellation optimized for
+ Car Kit (longer echo) */
+ OMX_AUDIO_EchoCanKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_AUDIO_EchoCanVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_AUDIO_EchoCanMax = 0x7FFFFFFF
+} OMX_AUDIO_ECHOCANTYPE;
+
+
+/** Enable / Disable for echo cancelation, which removes undesired echo's
+ * from the audio
+ * @ingroup effects
+ */
+typedef struct OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_AUDIO_ECHOCANTYPE eEchoCancelation; /**< Echo cancelation settings */
+} OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE;
+
+
+/** Enable / Disable for noise reduction, which undesired noise from
+ * the audio
+ * @ingroup effects
+ */
+typedef struct OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BOOL bNoiseReduction; /**< Enable/disable for noise reduction */
+} OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE;
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
+
diff --git a/include/media/stagefright/openmax/OMX_Component.h b/include/media/stagefright/openmax/OMX_Component.h
new file mode 100644
index 0000000..b5b784ea
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_Component.h
@@ -0,0 +1,596 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/*
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/** OMX_Component.h - OpenMax IL version 1.1.2
+ * The OMX_Component header file contains the definitions used to define
+ * the public interface of a component. This header file is intended to
+ * be used by both the application and the component.
+ */
+
+#ifndef OMX_Component_h
+#define OMX_Component_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+
+/* Each OMX header must include all required header files to allow the
+ * header to compile without errors. The includes below are required
+ * for this header file to compile successfully
+ */
+
+#include <OMX_Audio.h>
+#include <OMX_Video.h>
+#include <OMX_Image.h>
+#include <OMX_Other.h>
+
+/** @ingroup comp */
+typedef enum OMX_PORTDOMAINTYPE {
+ OMX_PortDomainAudio,
+ OMX_PortDomainVideo,
+ OMX_PortDomainImage,
+ OMX_PortDomainOther,
+ OMX_PortDomainKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_PortDomainVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_PortDomainMax = 0x7ffffff
+} OMX_PORTDOMAINTYPE;
+
+/** @ingroup comp */
+typedef struct OMX_PARAM_PORTDEFINITIONTYPE {
+ OMX_U32 nSize; /**< Size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port number the structure applies to */
+ OMX_DIRTYPE eDir; /**< Direction (input or output) of this port */
+ OMX_U32 nBufferCountActual; /**< The actual number of buffers allocated on this port */
+ OMX_U32 nBufferCountMin; /**< The minimum number of buffers this port requires */
+ OMX_U32 nBufferSize; /**< Size, in bytes, for buffers to be used for this channel */
+ OMX_BOOL bEnabled; /**< Ports default to enabled and are enabled/disabled by
+ OMX_CommandPortEnable/OMX_CommandPortDisable.
+ When disabled a port is unpopulated. A disabled port
+ is not populated with buffers on a transition to IDLE. */
+ OMX_BOOL bPopulated; /**< Port is populated with all of its buffers as indicated by
+ nBufferCountActual. A disabled port is always unpopulated.
+ An enabled port is populated on a transition to OMX_StateIdle
+ and unpopulated on a transition to loaded. */
+ OMX_PORTDOMAINTYPE eDomain; /**< Domain of the port. Determines the contents of metadata below. */
+ union {
+ OMX_AUDIO_PORTDEFINITIONTYPE audio;
+ OMX_VIDEO_PORTDEFINITIONTYPE video;
+ OMX_IMAGE_PORTDEFINITIONTYPE image;
+ OMX_OTHER_PORTDEFINITIONTYPE other;
+ } format;
+ OMX_BOOL bBuffersContiguous;
+ OMX_U32 nBufferAlignment;
+} OMX_PARAM_PORTDEFINITIONTYPE;
+
+/** @ingroup comp */
+typedef struct OMX_PARAM_U32TYPE {
+ OMX_U32 nSize; /**< Size of this structure, in Bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_U32 nU32; /**< U32 value */
+} OMX_PARAM_U32TYPE;
+
+/** @ingroup rpm */
+typedef enum OMX_SUSPENSIONPOLICYTYPE {
+ OMX_SuspensionDisabled, /**< No suspension; v1.0 behavior */
+ OMX_SuspensionEnabled, /**< Suspension allowed */
+ OMX_SuspensionPolicyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_SuspensionPolicyStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_SuspensionPolicyMax = 0x7fffffff
+} OMX_SUSPENSIONPOLICYTYPE;
+
+/** @ingroup rpm */
+typedef struct OMX_PARAM_SUSPENSIONPOLICYTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_SUSPENSIONPOLICYTYPE ePolicy;
+} OMX_PARAM_SUSPENSIONPOLICYTYPE;
+
+/** @ingroup rpm */
+typedef enum OMX_SUSPENSIONTYPE {
+ OMX_NotSuspended, /**< component is not suspended */
+ OMX_Suspended, /**< component is suspended */
+ OMX_SuspensionKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_SuspensionVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_SuspendMax = 0x7FFFFFFF
+} OMX_SUSPENSIONTYPE;
+
+/** @ingroup rpm */
+typedef struct OMX_PARAM_SUSPENSIONTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_SUSPENSIONTYPE eType;
+} OMX_PARAM_SUSPENSIONTYPE ;
+
+typedef struct OMX_CONFIG_BOOLEANTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_BOOL bEnabled;
+} OMX_CONFIG_BOOLEANTYPE;
+
+/* Parameter specifying the content uri to use. */
+/** @ingroup cp */
+typedef struct OMX_PARAM_CONTENTURITYPE
+{
+ OMX_U32 nSize; /**< size of the structure in bytes, including
+ actual URI name */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U8 contentURI[1]; /**< The URI name */
+} OMX_PARAM_CONTENTURITYPE;
+
+/* Parameter specifying the pipe to use. */
+/** @ingroup cp */
+typedef struct OMX_PARAM_CONTENTPIPETYPE
+{
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_HANDLETYPE hPipe; /**< The pipe handle*/
+} OMX_PARAM_CONTENTPIPETYPE;
+
+/** @ingroup rpm */
+typedef struct OMX_RESOURCECONCEALMENTTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_BOOL bResourceConcealmentForbidden; /**< disallow the use of resource concealment
+ methods (like degrading algorithm quality to
+ lower resource consumption or functional bypass)
+ on a component as a resolution to resource conflicts. */
+} OMX_RESOURCECONCEALMENTTYPE;
+
+
+/** @ingroup metadata */
+typedef enum OMX_METADATACHARSETTYPE {
+ OMX_MetadataCharsetUnknown = 0,
+ OMX_MetadataCharsetASCII,
+ OMX_MetadataCharsetBinary,
+ OMX_MetadataCharsetCodePage1252,
+ OMX_MetadataCharsetUTF8,
+ OMX_MetadataCharsetJavaConformantUTF8,
+ OMX_MetadataCharsetUTF7,
+ OMX_MetadataCharsetImapUTF7,
+ OMX_MetadataCharsetUTF16LE,
+ OMX_MetadataCharsetUTF16BE,
+ OMX_MetadataCharsetGB12345,
+ OMX_MetadataCharsetHZGB2312,
+ OMX_MetadataCharsetGB2312,
+ OMX_MetadataCharsetGB18030,
+ OMX_MetadataCharsetGBK,
+ OMX_MetadataCharsetBig5,
+ OMX_MetadataCharsetISO88591,
+ OMX_MetadataCharsetISO88592,
+ OMX_MetadataCharsetISO88593,
+ OMX_MetadataCharsetISO88594,
+ OMX_MetadataCharsetISO88595,
+ OMX_MetadataCharsetISO88596,
+ OMX_MetadataCharsetISO88597,
+ OMX_MetadataCharsetISO88598,
+ OMX_MetadataCharsetISO88599,
+ OMX_MetadataCharsetISO885910,
+ OMX_MetadataCharsetISO885913,
+ OMX_MetadataCharsetISO885914,
+ OMX_MetadataCharsetISO885915,
+ OMX_MetadataCharsetShiftJIS,
+ OMX_MetadataCharsetISO2022JP,
+ OMX_MetadataCharsetISO2022JP1,
+ OMX_MetadataCharsetISOEUCJP,
+ OMX_MetadataCharsetSMS7Bit,
+ OMX_MetadataCharsetKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_MetadataCharsetVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_MetadataCharsetTypeMax= 0x7FFFFFFF
+} OMX_METADATACHARSETTYPE;
+
+/** @ingroup metadata */
+typedef enum OMX_METADATASCOPETYPE
+{
+ OMX_MetadataScopeAllLevels,
+ OMX_MetadataScopeTopLevel,
+ OMX_MetadataScopePortLevel,
+ OMX_MetadataScopeNodeLevel,
+ OMX_MetadataScopeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_MetadataScopeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_MetadataScopeTypeMax = 0x7fffffff
+} OMX_METADATASCOPETYPE;
+
+/** @ingroup metadata */
+typedef enum OMX_METADATASEARCHMODETYPE
+{
+ OMX_MetadataSearchValueSizeByIndex,
+ OMX_MetadataSearchItemByIndex,
+ OMX_MetadataSearchNextItemByKey,
+ OMX_MetadataSearchKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_MetadataSearchVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_MetadataSearchTypeMax = 0x7fffffff
+} OMX_METADATASEARCHMODETYPE;
+/** @ingroup metadata */
+typedef struct OMX_CONFIG_METADATAITEMCOUNTTYPE
+{
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_METADATASCOPETYPE eScopeMode;
+ OMX_U32 nScopeSpecifier;
+ OMX_U32 nMetadataItemCount;
+} OMX_CONFIG_METADATAITEMCOUNTTYPE;
+
+/** @ingroup metadata */
+typedef struct OMX_CONFIG_METADATAITEMTYPE
+{
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_METADATASCOPETYPE eScopeMode;
+ OMX_U32 nScopeSpecifier;
+ OMX_U32 nMetadataItemIndex;
+ OMX_METADATASEARCHMODETYPE eSearchMode;
+ OMX_METADATACHARSETTYPE eKeyCharset;
+ OMX_U8 nKeySizeUsed;
+ OMX_U8 nKey[128];
+ OMX_METADATACHARSETTYPE eValueCharset;
+ OMX_STRING sLanguageCountry;
+ OMX_U32 nValueMaxSize;
+ OMX_U32 nValueSizeUsed;
+ OMX_U8 nValue[1];
+} OMX_CONFIG_METADATAITEMTYPE;
+
+/* @ingroup metadata */
+typedef struct OMX_CONFIG_CONTAINERNODECOUNTTYPE
+{
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_BOOL bAllKeys;
+ OMX_U32 nParentNodeID;
+ OMX_U32 nNumNodes;
+} OMX_CONFIG_CONTAINERNODECOUNTTYPE;
+
+/** @ingroup metadata */
+typedef struct OMX_CONFIG_CONTAINERNODEIDTYPE
+{
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_BOOL bAllKeys;
+ OMX_U32 nParentNodeID;
+ OMX_U32 nNodeIndex;
+ OMX_U32 nNodeID;
+ OMX_STRING cNodeName;
+ OMX_BOOL bIsLeafType;
+} OMX_CONFIG_CONTAINERNODEIDTYPE;
+
+/** @ingroup metadata */
+typedef struct OMX_PARAM_METADATAFILTERTYPE
+{
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_BOOL bAllKeys; /* if true then this structure refers to all keys and
+ * the three key fields below are ignored */
+ OMX_METADATACHARSETTYPE eKeyCharset;
+ OMX_U32 nKeySizeUsed;
+ OMX_U8 nKey [128];
+ OMX_U32 nLanguageCountrySizeUsed;
+ OMX_U8 nLanguageCountry[128];
+ OMX_BOOL bEnabled; /* if true then key is part of filter (e.g.
+ * retained for query later). If false then
+ * key is not part of filter */
+} OMX_PARAM_METADATAFILTERTYPE;
+
+/** The OMX_HANDLETYPE structure defines the component handle. The component
+ * handle is used to access all of the component's public methods and also
+ * contains pointers to the component's private data area. The component
+ * handle is initialized by the OMX core (with help from the component)
+ * during the process of loading the component. After the component is
+ * successfully loaded, the application can safely access any of the
+ * component's public functions (although some may return an error because
+ * the state is inappropriate for the access).
+ *
+ * @ingroup comp
+ */
+typedef struct OMX_COMPONENTTYPE
+{
+ /** The size of this structure, in bytes. It is the responsibility
+ of the allocator of this structure to fill in this value. Since
+ this structure is allocated by the GetHandle function, this
+ function will fill in this value. */
+ OMX_U32 nSize;
+
+ /** nVersion is the version of the OMX specification that the structure
+ is built against. It is the responsibility of the creator of this
+ structure to initialize this value and every user of this structure
+ should verify that it knows how to use the exact version of
+ this structure found herein. */
+ OMX_VERSIONTYPE nVersion;
+
+ /** pComponentPrivate is a pointer to the component private data area.
+ This member is allocated and initialized by the component when the
+ component is first loaded. The application should not access this
+ data area. */
+ OMX_PTR pComponentPrivate;
+
+ /** pApplicationPrivate is a pointer that is a parameter to the
+ OMX_GetHandle method, and contains an application private value
+ provided by the IL client. This application private data is
+ returned to the IL Client by OMX in all callbacks */
+ OMX_PTR pApplicationPrivate;
+
+ /** refer to OMX_GetComponentVersion in OMX_core.h or the OMX IL
+ specification for details on the GetComponentVersion method.
+ */
+ OMX_ERRORTYPE (*GetComponentVersion)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_OUT OMX_STRING pComponentName,
+ OMX_OUT OMX_VERSIONTYPE* pComponentVersion,
+ OMX_OUT OMX_VERSIONTYPE* pSpecVersion,
+ OMX_OUT OMX_UUIDTYPE* pComponentUUID);
+
+ /** refer to OMX_SendCommand in OMX_core.h or the OMX IL
+ specification for details on the SendCommand method.
+ */
+ OMX_ERRORTYPE (*SendCommand)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_COMMANDTYPE Cmd,
+ OMX_IN OMX_U32 nParam1,
+ OMX_IN OMX_PTR pCmdData);
+
+ /** refer to OMX_GetParameter in OMX_core.h or the OMX IL
+ specification for details on the GetParameter method.
+ */
+ OMX_ERRORTYPE (*GetParameter)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_INDEXTYPE nParamIndex,
+ OMX_INOUT OMX_PTR pComponentParameterStructure);
+
+
+ /** refer to OMX_SetParameter in OMX_core.h or the OMX IL
+ specification for details on the SetParameter method.
+ */
+ OMX_ERRORTYPE (*SetParameter)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_INDEXTYPE nIndex,
+ OMX_IN OMX_PTR pComponentParameterStructure);
+
+
+ /** refer to OMX_GetConfig in OMX_core.h or the OMX IL
+ specification for details on the GetConfig method.
+ */
+ OMX_ERRORTYPE (*GetConfig)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_INDEXTYPE nIndex,
+ OMX_INOUT OMX_PTR pComponentConfigStructure);
+
+
+ /** refer to OMX_SetConfig in OMX_core.h or the OMX IL
+ specification for details on the SetConfig method.
+ */
+ OMX_ERRORTYPE (*SetConfig)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_INDEXTYPE nIndex,
+ OMX_IN OMX_PTR pComponentConfigStructure);
+
+
+ /** refer to OMX_GetExtensionIndex in OMX_core.h or the OMX IL
+ specification for details on the GetExtensionIndex method.
+ */
+ OMX_ERRORTYPE (*GetExtensionIndex)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_STRING cParameterName,
+ OMX_OUT OMX_INDEXTYPE* pIndexType);
+
+
+ /** refer to OMX_GetState in OMX_core.h or the OMX IL
+ specification for details on the GetState method.
+ */
+ OMX_ERRORTYPE (*GetState)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_OUT OMX_STATETYPE* pState);
+
+
+ /** The ComponentTunnelRequest method will interact with another OMX
+ component to determine if tunneling is possible and to setup the
+ tunneling. The return codes for this method can be used to
+ determine if tunneling is not possible, or if tunneling is not
+ supported.
+
+ Base profile components (i.e. non-interop) do not support this
+ method and should return OMX_ErrorNotImplemented
+
+ The interop profile component MUST support tunneling to another
+ interop profile component with a compatible port parameters.
+ A component may also support proprietary communication.
+
+ If proprietary communication is supported the negotiation of
+ proprietary communication is done outside of OMX in a vendor
+ specific way. It is only required that the proper result be
+ returned and the details of how the setup is done is left
+ to the component implementation.
+
+ When this method is invoked when nPort in an output port, the
+ component will:
+ 1. Populate the pTunnelSetup structure with the output port's
+ requirements and constraints for the tunnel.
+
+ When this method is invoked when nPort in an input port, the
+ component will:
+ 1. Query the necessary parameters from the output port to
+ determine if the ports are compatible for tunneling
+ 2. If the ports are compatible, the component should store
+ the tunnel step provided by the output port
+ 3. Determine which port (either input or output) is the buffer
+ supplier, and call OMX_SetParameter on the output port to
+ indicate this selection.
+
+ The component will return from this call within 5 msec.
+
+ @param [in] hComp
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle method.
+ @param [in] nPort
+ nPort is used to select the port on the component to be used
+ for tunneling.
+ @param [in] hTunneledComp
+ Handle of the component to tunnel with. This is the component
+ handle returned by the call to the OMX_GetHandle method. When
+ this parameter is 0x0 the component should setup the port for
+ communication with the application / IL Client.
+ @param [in] nPortOutput
+ nPortOutput is used indicate the port the component should
+ tunnel with.
+ @param [in] pTunnelSetup
+ Pointer to the tunnel setup structure. When nPort is an output port
+ the component should populate the fields of this structure. When
+ When nPort is an input port the component should review the setup
+ provided by the component with the output port.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup tun
+ */
+
+ OMX_ERRORTYPE (*ComponentTunnelRequest)(
+ OMX_IN OMX_HANDLETYPE hComp,
+ OMX_IN OMX_U32 nPort,
+ OMX_IN OMX_HANDLETYPE hTunneledComp,
+ OMX_IN OMX_U32 nTunneledPort,
+ OMX_INOUT OMX_TUNNELSETUPTYPE* pTunnelSetup);
+
+ /** refer to OMX_UseBuffer in OMX_core.h or the OMX IL
+ specification for details on the UseBuffer method.
+ @ingroup buf
+ */
+ OMX_ERRORTYPE (*UseBuffer)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
+ OMX_IN OMX_U32 nPortIndex,
+ OMX_IN OMX_PTR pAppPrivate,
+ OMX_IN OMX_U32 nSizeBytes,
+ OMX_IN OMX_U8* pBuffer);
+
+ /** refer to OMX_AllocateBuffer in OMX_core.h or the OMX IL
+ specification for details on the AllocateBuffer method.
+ @ingroup buf
+ */
+ OMX_ERRORTYPE (*AllocateBuffer)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer,
+ OMX_IN OMX_U32 nPortIndex,
+ OMX_IN OMX_PTR pAppPrivate,
+ OMX_IN OMX_U32 nSizeBytes);
+
+ /** refer to OMX_FreeBuffer in OMX_core.h or the OMX IL
+ specification for details on the FreeBuffer method.
+ @ingroup buf
+ */
+ OMX_ERRORTYPE (*FreeBuffer)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_U32 nPortIndex,
+ OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
+
+ /** refer to OMX_EmptyThisBuffer in OMX_core.h or the OMX IL
+ specification for details on the EmptyThisBuffer method.
+ @ingroup buf
+ */
+ OMX_ERRORTYPE (*EmptyThisBuffer)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
+
+ /** refer to OMX_FillThisBuffer in OMX_core.h or the OMX IL
+ specification for details on the FillThisBuffer method.
+ @ingroup buf
+ */
+ OMX_ERRORTYPE (*FillThisBuffer)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
+
+ /** The SetCallbacks method is used by the core to specify the callback
+ structure from the application to the component. This is a blocking
+ call. The component will return from this call within 5 msec.
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the GetHandle function.
+ @param [in] pCallbacks
+ pointer to an OMX_CALLBACKTYPE structure used to provide the
+ callback information to the component
+ @param [in] pAppData
+ pointer to an application defined value. It is anticipated that
+ the application will pass a pointer to a data structure or a "this
+ pointer" in this area to allow the callback (in the application)
+ to determine the context of the call
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ */
+ OMX_ERRORTYPE (*SetCallbacks)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_CALLBACKTYPE* pCallbacks,
+ OMX_IN OMX_PTR pAppData);
+
+ /** ComponentDeInit method is used to deinitialize the component
+ providing a means to free any resources allocated at component
+ initialization. NOTE: After this call the component handle is
+ not valid for further use.
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the GetHandle function.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ */
+ OMX_ERRORTYPE (*ComponentDeInit)(
+ OMX_IN OMX_HANDLETYPE hComponent);
+
+ /** @ingroup buf */
+ OMX_ERRORTYPE (*UseEGLImage)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
+ OMX_IN OMX_U32 nPortIndex,
+ OMX_IN OMX_PTR pAppPrivate,
+ OMX_IN void* eglImage);
+
+ OMX_ERRORTYPE (*ComponentRoleEnum)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_OUT OMX_U8 *cRole,
+ OMX_IN OMX_U32 nIndex);
+
+} OMX_COMPONENTTYPE;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
diff --git a/include/media/stagefright/openmax/OMX_ContentPipe.h b/include/media/stagefright/openmax/OMX_ContentPipe.h
new file mode 100644
index 0000000..ee9e4db
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_ContentPipe.h
@@ -0,0 +1,212 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/*
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/** OMX_ContentPipe.h - OpenMax IL version 1.1.2
+ * The OMX_ContentPipe header file contains the definitions used to define
+ * the public interface for content piples. This header file is intended to
+ * be used by the component.
+ */
+
+#ifndef OMX_CONTENTPIPE_H
+#define OMX_CONTENTPIPE_H
+
+#ifndef KD_EACCES
+/* OpenKODE error codes. CPResult values may be zero (indicating success
+ or one of the following values) */
+#define KD_EACCES (1)
+#define KD_EADDRINUSE (2)
+#define KD_EAGAIN (5)
+#define KD_EBADF (7)
+#define KD_EBUSY (8)
+#define KD_ECONNREFUSED (9)
+#define KD_ECONNRESET (10)
+#define KD_EDEADLK (11)
+#define KD_EDESTADDRREQ (12)
+#define KD_ERANGE (35)
+#define KD_EEXIST (13)
+#define KD_EFBIG (14)
+#define KD_EHOSTUNREACH (15)
+#define KD_EINVAL (17)
+#define KD_EIO (18)
+#define KD_EISCONN (20)
+#define KD_EISDIR (21)
+#define KD_EMFILE (22)
+#define KD_ENAMETOOLONG (23)
+#define KD_ENOENT (24)
+#define KD_ENOMEM (25)
+#define KD_ENOSPC (26)
+#define KD_ENOSYS (27)
+#define KD_ENOTCONN (28)
+#define KD_EPERM (33)
+#define KD_ETIMEDOUT (36)
+#define KD_EILSEQ (19)
+#endif
+
+/** Map types from OMX standard types only here so interface is as generic as possible. */
+typedef OMX_U32 CPresult;
+typedef char * CPstring;
+typedef void * CPhandle;
+typedef OMX_U32 CPuint;
+typedef OMX_S32 CPint;
+typedef char CPbyte;
+typedef OMX_BOOL CPbool;
+
+/** enumeration of origin types used in the CP_PIPETYPE's Seek function
+ * @ingroup cp
+ */
+typedef enum CP_ORIGINTYPE {
+ CP_OriginBegin,
+ CP_OriginCur,
+ CP_OriginEnd,
+ CP_OriginKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ CP_OriginVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ CP_OriginMax = 0X7FFFFFFF
+} CP_ORIGINTYPE;
+
+/** enumeration of contact access types used in the CP_PIPETYPE's Open function
+ * @ingroup cp
+ */
+typedef enum CP_ACCESSTYPE {
+ CP_AccessRead,
+ CP_AccessWrite,
+ CP_AccessReadWrite ,
+ CP_AccessKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ CP_AccessVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ CP_AccessMax = 0X7FFFFFFF
+} CP_ACCESSTYPE;
+
+/** enumeration of results returned by the CP_PIPETYPE's CheckAvailableBytes function
+ * @ingroup cp
+ */
+typedef enum CP_CHECKBYTESRESULTTYPE
+{
+ CP_CheckBytesOk, /**< There are at least the request number
+ of bytes available */
+ CP_CheckBytesNotReady, /**< The pipe is still retrieving bytes
+ and presently lacks sufficient bytes.
+ Client will be called when they are
+ sufficient bytes are available. */
+ CP_CheckBytesInsufficientBytes , /**< The pipe has retrieved all bytes
+ but those available are less than those
+ requested */
+ CP_CheckBytesAtEndOfStream, /**< The pipe has reached the end of stream
+ and no more bytes are available. */
+ CP_CheckBytesOutOfBuffers, /**< All read/write buffers are currently in use. */
+ CP_CheckBytesKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ CP_CheckBytesVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ CP_CheckBytesMax = 0X7FFFFFFF
+} CP_CHECKBYTESRESULTTYPE;
+
+/** enumeration of content pipe events sent to the client callback.
+ * @ingroup cp
+ */
+typedef enum CP_EVENTTYPE{
+ CP_BytesAvailable, /** bytes requested in a CheckAvailableBytes call are now available*/
+ CP_Overflow, /** enumeration of content pipe events sent to the client callback*/
+ CP_PipeDisconnected , /** enumeration of content pipe events sent to the client callback*/
+ CP_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ CP_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ CP_EventMax = 0X7FFFFFFF
+} CP_EVENTTYPE;
+
+/** content pipe definition
+ * @ingroup cp
+ */
+typedef struct CP_PIPETYPE
+{
+ /** Open a content stream for reading or writing. */
+ CPresult (*Open)( CPhandle* hContent, CPstring szURI, CP_ACCESSTYPE eAccess );
+
+ /** Close a content stream. */
+ CPresult (*Close)( CPhandle hContent );
+
+ /** Create a content source and open it for writing. */
+ CPresult (*Create)( CPhandle *hContent, CPstring szURI );
+
+ /** Check the that specified number of bytes are available for reading or writing (depending on access type).*/
+ CPresult (*CheckAvailableBytes)( CPhandle hContent, CPuint nBytesRequested, CP_CHECKBYTESRESULTTYPE *eResult );
+
+ /** Seek to certain position in the content relative to the specified origin. */
+ CPresult (*SetPosition)( CPhandle hContent, CPint nOffset, CP_ORIGINTYPE eOrigin);
+
+ /** Retrieve the current position relative to the start of the content. */
+ CPresult (*GetPosition)( CPhandle hContent, CPuint *pPosition);
+
+ /** Retrieve data of the specified size from the content stream (advance content pointer by size of data).
+ Note: pipe client provides pointer. This function is appropriate for small high frequency reads. */
+ CPresult (*Read)( CPhandle hContent, CPbyte *pData, CPuint nSize);
+
+ /** Retrieve a buffer allocated by the pipe that contains the requested number of bytes.
+ Buffer contains the next block of bytes, as specified by nSize, of the content. nSize also
+ returns the size of the block actually read. Content pointer advances the by the returned size.
+ Note: pipe provides pointer. This function is appropriate for large reads. The client must call
+ ReleaseReadBuffer when done with buffer.
+
+ In some cases the requested block may not reside in contiguous memory within the
+ pipe implementation. For instance if the pipe leverages a circular buffer then the requested
+ block may straddle the boundary of the circular buffer. By default a pipe implementation
+ performs a copy in this case to provide the block to the pipe client in one contiguous buffer.
+ If, however, the client sets bForbidCopy, then the pipe returns only those bytes preceding the memory
+ boundary. Here the client may retrieve the data in segments over successive calls. */
+ CPresult (*ReadBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint *nSize, CPbool bForbidCopy);
+
+ /** Release a buffer obtained by ReadBuffer back to the pipe. */
+ CPresult (*ReleaseReadBuffer)(CPhandle hContent, CPbyte *pBuffer);
+
+ /** Write data of the specified size to the content (advance content pointer by size of data).
+ Note: pipe client provides pointer. This function is appropriate for small high frequency writes. */
+ CPresult (*Write)( CPhandle hContent, CPbyte *data, CPuint nSize);
+
+ /** Retrieve a buffer allocated by the pipe used to write data to the content.
+ Client will fill buffer with output data. Note: pipe provides pointer. This function is appropriate
+ for large writes. The client must call WriteBuffer when done it has filled the buffer with data.*/
+ CPresult (*GetWriteBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint nSize);
+
+ /** Deliver a buffer obtained via GetWriteBuffer to the pipe. Pipe will write the
+ the contents of the buffer to content and advance content pointer by the size of the buffer */
+ CPresult (*WriteBuffer)( CPhandle hContent, CPbyte *pBuffer, CPuint nFilledSize);
+
+ /** Register a per-handle client callback with the content pipe. */
+ CPresult (*RegisterCallback)( CPhandle hContent, CPresult (*ClientCallback)(CP_EVENTTYPE eEvent, CPuint iParam));
+
+} CP_PIPETYPE;
+
+#endif
+
diff --git a/include/media/stagefright/openmax/OMX_Core.h b/include/media/stagefright/openmax/OMX_Core.h
new file mode 100644
index 0000000..9fb0f6f
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_Core.h
@@ -0,0 +1,1448 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/*
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/** OMX_Core.h - OpenMax IL version 1.1.2
+ * The OMX_Core header file contains the definitions used by both the
+ * application and the component to access common items.
+ */
+
+#ifndef OMX_Core_h
+#define OMX_Core_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* Each OMX header shall include all required header files to allow the
+ * header to compile without errors. The includes below are required
+ * for this header file to compile successfully
+ */
+
+#include <OMX_Index.h>
+
+
+/** The OMX_COMMANDTYPE enumeration is used to specify the action in the
+ * OMX_SendCommand macro.
+ * @ingroup core
+ */
+typedef enum OMX_COMMANDTYPE
+{
+ OMX_CommandStateSet, /**< Change the component state */
+ OMX_CommandFlush, /**< Flush the data queue(s) of a component */
+ OMX_CommandPortDisable, /**< Disable a port on a component. */
+ OMX_CommandPortEnable, /**< Enable a port on a component. */
+ OMX_CommandMarkBuffer, /**< Mark a component/buffer for observation */
+ OMX_CommandKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_CommandVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_CommandMax = 0X7FFFFFFF
+} OMX_COMMANDTYPE;
+
+
+
+/** The OMX_STATETYPE enumeration is used to indicate or change the component
+ * state. This enumeration reflects the current state of the component when
+ * used with the OMX_GetState macro or becomes the parameter in a state change
+ * command when used with the OMX_SendCommand macro.
+ *
+ * The component will be in the Loaded state after the component is initially
+ * loaded into memory. In the Loaded state, the component is not allowed to
+ * allocate or hold resources other than to build it's internal parameter
+ * and configuration tables. The application will send one or more
+ * SetParameters/GetParameters and SetConfig/GetConfig commands to the
+ * component and the component will record each of these parameter and
+ * configuration changes for use later. When the application sends the
+ * Idle command, the component will acquire the resources needed for the
+ * specified configuration and will transition to the idle state if the
+ * allocation is successful. If the component cannot successfully
+ * transition to the idle state for any reason, the state of the component
+ * shall be fully rolled back to the Loaded state (e.g. all allocated
+ * resources shall be released). When the component receives the command
+ * to go to the Executing state, it shall begin processing buffers by
+ * sending all input buffers it holds to the application. While
+ * the component is in the Idle state, the application may also send the
+ * Pause command. If the component receives the pause command while in the
+ * Idle state, the component shall send all input buffers it holds to the
+ * application, but shall not begin processing buffers. This will allow the
+ * application to prefill buffers.
+ *
+ * @ingroup comp
+ */
+
+typedef enum OMX_STATETYPE
+{
+ OMX_StateInvalid, /**< component has detected that it's internal data
+ structures are corrupted to the point that
+ it cannot determine it's state properly */
+ OMX_StateLoaded, /**< component has been loaded but has not completed
+ initialization. The OMX_SetParameter macro
+ and the OMX_GetParameter macro are the only
+ valid macros allowed to be sent to the
+ component in this state. */
+ OMX_StateIdle, /**< component initialization has been completed
+ successfully and the component is ready to
+ to start. */
+ OMX_StateExecuting, /**< component has accepted the start command and
+ is processing data (if data is available) */
+ OMX_StatePause, /**< component has received pause command */
+ OMX_StateWaitForResources, /**< component is waiting for resources, either after
+ preemption or before it gets the resources requested.
+ See specification for complete details. */
+ OMX_StateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_StateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_StateMax = 0X7FFFFFFF
+} OMX_STATETYPE;
+
+/** The OMX_ERRORTYPE enumeration defines the standard OMX Errors. These
+ * errors should cover most of the common failure cases. However,
+ * vendors are free to add additional error messages of their own as
+ * long as they follow these rules:
+ * 1. Vendor error messages shall be in the range of 0x90000000 to
+ * 0x9000FFFF.
+ * 2. Vendor error messages shall be defined in a header file provided
+ * with the component. No error messages are allowed that are
+ * not defined.
+ */
+typedef enum OMX_ERRORTYPE
+{
+ OMX_ErrorNone = 0,
+
+ /** There were insufficient resources to perform the requested operation */
+ OMX_ErrorInsufficientResources = (OMX_S32) 0x80001000,
+
+ /** There was an error, but the cause of the error could not be determined */
+ OMX_ErrorUndefined = (OMX_S32) 0x80001001,
+
+ /** The component name string was not valid */
+ OMX_ErrorInvalidComponentName = (OMX_S32) 0x80001002,
+
+ /** No component with the specified name string was found */
+ OMX_ErrorComponentNotFound = (OMX_S32) 0x80001003,
+
+ /** The component specified did not have a "OMX_ComponentInit" or
+ "OMX_ComponentDeInit entry point */
+ OMX_ErrorInvalidComponent = (OMX_S32) 0x80001004,
+
+ /** One or more parameters were not valid */
+ OMX_ErrorBadParameter = (OMX_S32) 0x80001005,
+
+ /** The requested function is not implemented */
+ OMX_ErrorNotImplemented = (OMX_S32) 0x80001006,
+
+ /** The buffer was emptied before the next buffer was ready */
+ OMX_ErrorUnderflow = (OMX_S32) 0x80001007,
+
+ /** The buffer was not available when it was needed */
+ OMX_ErrorOverflow = (OMX_S32) 0x80001008,
+
+ /** The hardware failed to respond as expected */
+ OMX_ErrorHardware = (OMX_S32) 0x80001009,
+
+ /** The component is in the state OMX_StateInvalid */
+ OMX_ErrorInvalidState = (OMX_S32) 0x8000100A,
+
+ /** Stream is found to be corrupt */
+ OMX_ErrorStreamCorrupt = (OMX_S32) 0x8000100B,
+
+ /** Ports being connected are not compatible */
+ OMX_ErrorPortsNotCompatible = (OMX_S32) 0x8000100C,
+
+ /** Resources allocated to an idle component have been
+ lost resulting in the component returning to the loaded state */
+ OMX_ErrorResourcesLost = (OMX_S32) 0x8000100D,
+
+ /** No more indicies can be enumerated */
+ OMX_ErrorNoMore = (OMX_S32) 0x8000100E,
+
+ /** The component detected a version mismatch */
+ OMX_ErrorVersionMismatch = (OMX_S32) 0x8000100F,
+
+ /** The component is not ready to return data at this time */
+ OMX_ErrorNotReady = (OMX_S32) 0x80001010,
+
+ /** There was a timeout that occurred */
+ OMX_ErrorTimeout = (OMX_S32) 0x80001011,
+
+ /** This error occurs when trying to transition into the state you are already in */
+ OMX_ErrorSameState = (OMX_S32) 0x80001012,
+
+ /** Resources allocated to an executing or paused component have been
+ preempted, causing the component to return to the idle state */
+ OMX_ErrorResourcesPreempted = (OMX_S32) 0x80001013,
+
+ /** A non-supplier port sends this error to the IL client (via the EventHandler callback)
+ during the allocation of buffers (on a transition from the LOADED to the IDLE state or
+ on a port restart) when it deems that it has waited an unusually long time for the supplier
+ to send it an allocated buffer via a UseBuffer call. */
+ OMX_ErrorPortUnresponsiveDuringAllocation = (OMX_S32) 0x80001014,
+
+ /** A non-supplier port sends this error to the IL client (via the EventHandler callback)
+ during the deallocation of buffers (on a transition from the IDLE to LOADED state or
+ on a port stop) when it deems that it has waited an unusually long time for the supplier
+ to request the deallocation of a buffer header via a FreeBuffer call. */
+ OMX_ErrorPortUnresponsiveDuringDeallocation = (OMX_S32) 0x80001015,
+
+ /** A supplier port sends this error to the IL client (via the EventHandler callback)
+ during the stopping of a port (either on a transition from the IDLE to LOADED
+ state or a port stop) when it deems that it has waited an unusually long time for
+ the non-supplier to return a buffer via an EmptyThisBuffer or FillThisBuffer call. */
+ OMX_ErrorPortUnresponsiveDuringStop = (OMX_S32) 0x80001016,
+
+ /** Attempting a state transtion that is not allowed */
+ OMX_ErrorIncorrectStateTransition = (OMX_S32) 0x80001017,
+
+ /* Attempting a command that is not allowed during the present state. */
+ OMX_ErrorIncorrectStateOperation = (OMX_S32) 0x80001018,
+
+ /** The values encapsulated in the parameter or config structure are not supported. */
+ OMX_ErrorUnsupportedSetting = (OMX_S32) 0x80001019,
+
+ /** The parameter or config indicated by the given index is not supported. */
+ OMX_ErrorUnsupportedIndex = (OMX_S32) 0x8000101A,
+
+ /** The port index supplied is incorrect. */
+ OMX_ErrorBadPortIndex = (OMX_S32) 0x8000101B,
+
+ /** The port has lost one or more of its buffers and it thus unpopulated. */
+ OMX_ErrorPortUnpopulated = (OMX_S32) 0x8000101C,
+
+ /** Component suspended due to temporary loss of resources */
+ OMX_ErrorComponentSuspended = (OMX_S32) 0x8000101D,
+
+ /** Component suspended due to an inability to acquire dynamic resources */
+ OMX_ErrorDynamicResourcesUnavailable = (OMX_S32) 0x8000101E,
+
+ /** When the macroblock error reporting is enabled the component returns new error
+ for every frame that has errors */
+ OMX_ErrorMbErrorsInFrame = (OMX_S32) 0x8000101F,
+
+ /** A component reports this error when it cannot parse or determine the format of an input stream. */
+ OMX_ErrorFormatNotDetected = (OMX_S32) 0x80001020,
+
+ /** The content open operation failed. */
+ OMX_ErrorContentPipeOpenFailed = (OMX_S32) 0x80001021,
+
+ /** The content creation operation failed. */
+ OMX_ErrorContentPipeCreationFailed = (OMX_S32) 0x80001022,
+
+ /** Separate table information is being used */
+ OMX_ErrorSeperateTablesUsed = (OMX_S32) 0x80001023,
+
+ /** Tunneling is unsupported by the component*/
+ OMX_ErrorTunnelingUnsupported = (OMX_S32) 0x80001024,
+
+ OMX_ErrorKhronosExtensions = (OMX_S32)0x8F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_ErrorVendorStartUnused = (OMX_S32)0x90000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_ErrorMax = 0x7FFFFFFF
+} OMX_ERRORTYPE;
+
+/** @ingroup core */
+typedef OMX_ERRORTYPE (* OMX_COMPONENTINITTYPE)(OMX_IN OMX_HANDLETYPE hComponent);
+
+/** @ingroup core */
+typedef struct OMX_COMPONENTREGISTERTYPE
+{
+ const char * pName; /* Component name, 128 byte limit (including '\0') applies */
+ OMX_COMPONENTINITTYPE pInitialize; /* Component instance initialization function */
+} OMX_COMPONENTREGISTERTYPE;
+
+/** @ingroup core */
+extern OMX_COMPONENTREGISTERTYPE OMX_ComponentRegistered[];
+
+/** @ingroup rpm */
+typedef struct OMX_PRIORITYMGMTTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nGroupPriority; /**< Priority of the component group */
+ OMX_U32 nGroupID; /**< ID of the component group */
+} OMX_PRIORITYMGMTTYPE;
+
+/* Component name and Role names are limited to 128 characters including the terminating '\0'. */
+#define OMX_MAX_STRINGNAME_SIZE 128
+
+/** @ingroup comp */
+typedef struct OMX_PARAM_COMPONENTROLETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U8 cRole[OMX_MAX_STRINGNAME_SIZE]; /**< name of standard component which defines component role */
+} OMX_PARAM_COMPONENTROLETYPE;
+
+/** End of Stream Buffer Flag:
+ *
+ * A component sets EOS when it has no more data to emit on a particular
+ * output port. Thus an output port shall set EOS on the last buffer it
+ * emits. A component's determination of when an output port should
+ * cease sending data is implemenation specific.
+ * @ingroup buf
+ */
+
+#define OMX_BUFFERFLAG_EOS 0x00000001
+
+/** Start Time Buffer Flag:
+ *
+ * The source of a stream (e.g. a demux component) sets the STARTTIME
+ * flag on the buffer that contains the starting timestamp for the
+ * stream. The starting timestamp corresponds to the first data that
+ * should be displayed at startup or after a seek.
+ * The first timestamp of the stream is not necessarily the start time.
+ * For instance, in the case of a seek to a particular video frame,
+ * the target frame may be an interframe. Thus the first buffer of
+ * the stream will be the intra-frame preceding the target frame and
+ * the starttime will occur with the target frame (with any other
+ * required frames required to reconstruct the target intervening).
+ *
+ * The STARTTIME flag is directly associated with the buffer's
+ * timestamp ' thus its association to buffer data and its
+ * propagation is identical to the timestamp's.
+ *
+ * When a Sync Component client receives a buffer with the
+ * STARTTIME flag it shall perform a SetConfig on its sync port
+ * using OMX_ConfigTimeClientStartTime and passing the buffer's
+ * timestamp.
+ *
+ * @ingroup buf
+ */
+
+#define OMX_BUFFERFLAG_STARTTIME 0x00000002
+
+
+
+/** Decode Only Buffer Flag:
+ *
+ * The source of a stream (e.g. a demux component) sets the DECODEONLY
+ * flag on any buffer that should shall be decoded but should not be
+ * displayed. This flag is used, for instance, when a source seeks to
+ * a target interframe that requires the decode of frames preceding the
+ * target to facilitate the target's reconstruction. In this case the
+ * source would emit the frames preceding the target downstream
+ * but mark them as decode only.
+ *
+ * The DECODEONLY is associated with buffer data and propagated in a
+ * manner identical to the buffer timestamp.
+ *
+ * A component that renders data should ignore all buffers with
+ * the DECODEONLY flag set.
+ *
+ * @ingroup buf
+ */
+
+#define OMX_BUFFERFLAG_DECODEONLY 0x00000004
+
+
+/* Data Corrupt Flag: This flag is set when the IL client believes the data in the associated buffer is corrupt
+ * @ingroup buf
+ */
+
+#define OMX_BUFFERFLAG_DATACORRUPT 0x00000008
+
+/* End of Frame: The buffer contains exactly one end of frame and no data
+ * occurs after the end of frame. This flag is an optional hint. The absence
+ * of this flag does not imply the absence of an end of frame within the buffer.
+ * @ingroup buf
+*/
+#define OMX_BUFFERFLAG_ENDOFFRAME 0x00000010
+
+/* Sync Frame Flag: This flag is set when the buffer content contains a coded sync frame '
+ * a frame that has no dependency on any other frame information
+ * @ingroup buf
+ */
+#define OMX_BUFFERFLAG_SYNCFRAME 0x00000020
+
+/* Extra data present flag: there is extra data appended to the data stream
+ * residing in the buffer
+ * @ingroup buf
+ */
+#define OMX_BUFFERFLAG_EXTRADATA 0x00000040
+
+/** Codec Config Buffer Flag:
+* OMX_BUFFERFLAG_CODECCONFIG is an optional flag that is set by an
+* output port when all bytes in the buffer form part or all of a set of
+* codec specific configuration data. Examples include SPS/PPS nal units
+* for OMX_VIDEO_CodingAVC or AudioSpecificConfig data for
+* OMX_AUDIO_CodingAAC. Any component that for a given stream sets
+* OMX_BUFFERFLAG_CODECCONFIG shall not mix codec configuration bytes
+* with frame data in the same buffer, and shall send all buffers
+* containing codec configuration bytes before any buffers containing
+* frame data that those configurations bytes describe.
+* If the stream format for a particular codec has a frame specific
+* header at the start of each frame, for example OMX_AUDIO_CodingMP3 or
+* OMX_AUDIO_CodingAAC in ADTS mode, then these shall be presented as
+* normal without setting OMX_BUFFERFLAG_CODECCONFIG.
+ * @ingroup buf
+ */
+#define OMX_BUFFERFLAG_CODECCONFIG 0x00000080
+
+
+
+/** @ingroup buf */
+typedef struct OMX_BUFFERHEADERTYPE
+{
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U8* pBuffer; /**< Pointer to actual block of memory
+ that is acting as the buffer */
+ OMX_U32 nAllocLen; /**< size of the buffer allocated, in bytes */
+ OMX_U32 nFilledLen; /**< number of bytes currently in the
+ buffer */
+ OMX_U32 nOffset; /**< start offset of valid data in bytes from
+ the start of the buffer */
+ OMX_PTR pAppPrivate; /**< pointer to any data the application
+ wants to associate with this buffer */
+ OMX_PTR pPlatformPrivate; /**< pointer to any data the platform
+ wants to associate with this buffer */
+ OMX_PTR pInputPortPrivate; /**< pointer to any data the input port
+ wants to associate with this buffer */
+ OMX_PTR pOutputPortPrivate; /**< pointer to any data the output port
+ wants to associate with this buffer */
+ OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will generate a
+ mark event upon processing this buffer. */
+ OMX_PTR pMarkData; /**< Application specific data associated with
+ the mark sent on a mark event to disambiguate
+ this mark from others. */
+ OMX_U32 nTickCount; /**< Optional entry that the component and
+ application can update with a tick count
+ when they access the component. This
+ value should be in microseconds. Since
+ this is a value relative to an arbitrary
+ starting point, this value cannot be used
+ to determine absolute time. This is an
+ optional entry and not all components
+ will update it.*/
+ OMX_TICKS nTimeStamp; /**< Timestamp corresponding to the sample
+ starting at the first logical sample
+ boundary in the buffer. Timestamps of
+ successive samples within the buffer may
+ be inferred by adding the duration of the
+ of the preceding buffer to the timestamp
+ of the preceding buffer.*/
+ OMX_U32 nFlags; /**< buffer specific flags */
+ OMX_U32 nOutputPortIndex; /**< The index of the output port (if any) using
+ this buffer */
+ OMX_U32 nInputPortIndex; /**< The index of the input port (if any) using
+ this buffer */
+} OMX_BUFFERHEADERTYPE;
+
+/** The OMX_EXTRADATATYPE enumeration is used to define the
+ * possible extra data payload types.
+ * NB: this enum is binary backwards compatible with the previous
+ * OMX_EXTRADATA_QUANT define. This should be replaced with
+ * OMX_ExtraDataQuantization.
+ */
+typedef enum OMX_EXTRADATATYPE
+{
+ OMX_ExtraDataNone = 0, /**< Indicates that no more extra data sections follow */
+ OMX_ExtraDataQuantization, /**< The data payload contains quantization data */
+ OMX_ExtraDataKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_ExtraDataVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_ExtraDataMax = 0x7FFFFFFF
+} OMX_EXTRADATATYPE;
+
+
+typedef struct OMX_OTHER_EXTRADATATYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_EXTRADATATYPE eType; /* Extra Data type */
+ OMX_U32 nDataSize; /* Size of the supporting data to follow */
+ OMX_U8 data[1]; /* Supporting data hint */
+} OMX_OTHER_EXTRADATATYPE;
+
+/** @ingroup comp */
+typedef struct OMX_PORT_PARAM_TYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPorts; /**< The number of ports for this component */
+ OMX_U32 nStartPortNumber; /** first port number for this type of port */
+} OMX_PORT_PARAM_TYPE;
+
+/** @ingroup comp */
+typedef enum OMX_EVENTTYPE
+{
+ OMX_EventCmdComplete, /**< component has sucessfully completed a command */
+ OMX_EventError, /**< component has detected an error condition */
+ OMX_EventMark, /**< component has detected a buffer mark */
+ OMX_EventPortSettingsChanged, /**< component is reported a port settings change */
+ OMX_EventBufferFlag, /**< component has detected an EOS */
+ OMX_EventResourcesAcquired, /**< component has been granted resources and is
+ automatically starting the state change from
+ OMX_StateWaitForResources to OMX_StateIdle. */
+ OMX_EventComponentResumed, /**< Component resumed due to reacquisition of resources */
+ OMX_EventDynamicResourcesAvailable, /**< Component has acquired previously unavailable dynamic resources */
+ OMX_EventPortFormatDetected, /**< Component has detected a supported format. */
+ OMX_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_EventMax = 0x7FFFFFFF
+} OMX_EVENTTYPE;
+
+typedef struct OMX_CALLBACKTYPE
+{
+ /** The EventHandler method is used to notify the application when an
+ event of interest occurs. Events are defined in the OMX_EVENTTYPE
+ enumeration. Please see that enumeration for details of what will
+ be returned for each type of event. Callbacks should not return
+ an error to the component, so if an error occurs, the application
+ shall handle it internally. This is a blocking call.
+
+ The application should return from this call within 5 msec to avoid
+ blocking the component for an excessively long period of time.
+
+ @param hComponent
+ handle of the component to access. This is the component
+ handle returned by the call to the GetHandle function.
+ @param pAppData
+ pointer to an application defined value that was provided in the
+ pAppData parameter to the OMX_GetHandle method for the component.
+ This application defined value is provided so that the application
+ can have a component specific context when receiving the callback.
+ @param eEvent
+ Event that the component wants to notify the application about.
+ @param nData1
+ nData will be the OMX_ERRORTYPE for an error event and will be
+ an OMX_COMMANDTYPE for a command complete event and OMX_INDEXTYPE for a OMX_PortSettingsChanged event.
+ @param nData2
+ nData2 will hold further information related to the event. Can be OMX_STATETYPE for
+ a OMX_CommandStateSet command or port index for a OMX_PortSettingsChanged event.
+ Default value is 0 if not used. )
+ @param pEventData
+ Pointer to additional event-specific data (see spec for meaning).
+ */
+
+ OMX_ERRORTYPE (*EventHandler)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_PTR pAppData,
+ OMX_IN OMX_EVENTTYPE eEvent,
+ OMX_IN OMX_U32 nData1,
+ OMX_IN OMX_U32 nData2,
+ OMX_IN OMX_PTR pEventData);
+
+ /** The EmptyBufferDone method is used to return emptied buffers from an
+ input port back to the application for reuse. This is a blocking call
+ so the application should not attempt to refill the buffers during this
+ call, but should queue them and refill them in another thread. There
+ is no error return, so the application shall handle any errors generated
+ internally.
+
+ The application should return from this call within 5 msec.
+
+ @param hComponent
+ handle of the component to access. This is the component
+ handle returned by the call to the GetHandle function.
+ @param pAppData
+ pointer to an application defined value that was provided in the
+ pAppData parameter to the OMX_GetHandle method for the component.
+ This application defined value is provided so that the application
+ can have a component specific context when receiving the callback.
+ @param pBuffer
+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
+ or AllocateBuffer indicating the buffer that was emptied.
+ @ingroup buf
+ */
+ OMX_ERRORTYPE (*EmptyBufferDone)(
+ OMX_IN OMX_HANDLETYPE hComponent,
+ OMX_IN OMX_PTR pAppData,
+ OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
+
+ /** The FillBufferDone method is used to return filled buffers from an
+ output port back to the application for emptying and then reuse.
+ This is a blocking call so the application should not attempt to
+ empty the buffers during this call, but should queue the buffers
+ and empty them in another thread. There is no error return, so
+ the application shall handle any errors generated internally. The
+ application shall also update the buffer header to indicate the
+ number of bytes placed into the buffer.
+
+ The application should return from this call within 5 msec.
+
+ @param hComponent
+ handle of the component to access. This is the component
+ handle returned by the call to the GetHandle function.
+ @param pAppData
+ pointer to an application defined value that was provided in the
+ pAppData parameter to the OMX_GetHandle method for the component.
+ This application defined value is provided so that the application
+ can have a component specific context when receiving the callback.
+ @param pBuffer
+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
+ or AllocateBuffer indicating the buffer that was filled.
+ @ingroup buf
+ */
+ OMX_ERRORTYPE (*FillBufferDone)(
+ OMX_OUT OMX_HANDLETYPE hComponent,
+ OMX_OUT OMX_PTR pAppData,
+ OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer);
+
+} OMX_CALLBACKTYPE;
+
+/** The OMX_BUFFERSUPPLIERTYPE enumeration is used to dictate port supplier
+ preference when tunneling between two ports.
+ @ingroup tun buf
+*/
+typedef enum OMX_BUFFERSUPPLIERTYPE
+{
+ OMX_BufferSupplyUnspecified = 0x0, /**< port supplying the buffers is unspecified,
+ or don't care */
+ OMX_BufferSupplyInput, /**< input port supplies the buffers */
+ OMX_BufferSupplyOutput, /**< output port supplies the buffers */
+ OMX_BufferSupplyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_BufferSupplyVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_BufferSupplyMax = 0x7FFFFFFF
+} OMX_BUFFERSUPPLIERTYPE;
+
+
+/** buffer supplier parameter
+ * @ingroup tun
+ */
+typedef struct OMX_PARAM_BUFFERSUPPLIERTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_BUFFERSUPPLIERTYPE eBufferSupplier; /**< buffer supplier */
+} OMX_PARAM_BUFFERSUPPLIERTYPE;
+
+
+/**< indicates that buffers received by an input port of a tunnel
+ may not modify the data in the buffers
+ @ingroup tun
+ */
+#define OMX_PORTTUNNELFLAG_READONLY 0x00000001
+
+
+/** The OMX_TUNNELSETUPTYPE structure is used to pass data from an output
+ port to an input port as part the two ComponentTunnelRequest calls
+ resulting from a OMX_SetupTunnel call from the IL Client.
+ @ingroup tun
+ */
+typedef struct OMX_TUNNELSETUPTYPE
+{
+ OMX_U32 nTunnelFlags; /**< bit flags for tunneling */
+ OMX_BUFFERSUPPLIERTYPE eSupplier; /**< supplier preference */
+} OMX_TUNNELSETUPTYPE;
+
+/* OMX Component headers is included to enable the core to use
+ macros for functions into the component for OMX release 1.0.
+ Developers should not access any structures or data from within
+ the component header directly */
+/* TO BE REMOVED - #include <OMX_Component.h> */
+
+/** GetComponentVersion will return information about the component.
+ This is a blocking call. This macro will go directly from the
+ application to the component (via a core macro). The
+ component will return from this call within 5 msec.
+ @param [in] hComponent
+ handle of component to execute the command
+ @param [out] pComponentName
+ pointer to an empty string of length 128 bytes. The component
+ will write its name into this string. The name will be
+ terminated by a single zero byte. The name of a component will
+ be 127 bytes or less to leave room for the trailing zero byte.
+ An example of a valid component name is "OMX.ABC.ChannelMixer\0".
+ @param [out] pComponentVersion
+ pointer to an OMX Version structure that the component will fill
+ in. The component will fill in a value that indicates the
+ component version. NOTE: the component version is NOT the same
+ as the OMX Specification version (found in all structures). The
+ component version is defined by the vendor of the component and
+ its value is entirely up to the component vendor.
+ @param [out] pSpecVersion
+ pointer to an OMX Version structure that the component will fill
+ in. The SpecVersion is the version of the specification that the
+ component was built against. Please note that this value may or
+ may not match the structure's version. For example, if the
+ component was built against the 2.0 specification, but the
+ application (which creates the structure is built against the
+ 1.0 specification the versions would be different.
+ @param [out] pComponentUUID
+ pointer to the UUID of the component which will be filled in by
+ the component. The UUID is a unique identifier that is set at
+ RUN time for the component and is unique to each instantion of
+ the component.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp
+ */
+#define OMX_GetComponentVersion( \
+ hComponent, \
+ pComponentName, \
+ pComponentVersion, \
+ pSpecVersion, \
+ pComponentUUID) \
+ ((OMX_COMPONENTTYPE*)hComponent)->GetComponentVersion( \
+ hComponent, \
+ pComponentName, \
+ pComponentVersion, \
+ pSpecVersion, \
+ pComponentUUID) /* Macro End */
+
+
+/** Send a command to the component. This call is a non-blocking call.
+ The component should check the parameters and then queue the command
+ to the component thread to be executed. The component thread shall
+ send the EventHandler() callback at the conclusion of the command.
+ This macro will go directly from the application to the component (via
+ a core macro). The component will return from this call within 5 msec.
+
+ When the command is "OMX_CommandStateSet" the component will queue a
+ state transition to the new state idenfied in nParam.
+
+ When the command is "OMX_CommandFlush", to flush a port's buffer queues,
+ the command will force the component to return all buffers NOT CURRENTLY
+ BEING PROCESSED to the application, in the order in which the buffers
+ were received.
+
+ When the command is "OMX_CommandPortDisable" or
+ "OMX_CommandPortEnable", the component's port (given by the value of
+ nParam) will be stopped or restarted.
+
+ When the command "OMX_CommandMarkBuffer" is used to mark a buffer, the
+ pCmdData will point to a OMX_MARKTYPE structure containing the component
+ handle of the component to examine the buffer chain for the mark. nParam1
+ contains the index of the port on which the buffer mark is applied.
+
+ Specification text for more details.
+
+ @param [in] hComponent
+ handle of component to execute the command
+ @param [in] Cmd
+ Command for the component to execute
+ @param [in] nParam
+ Parameter for the command to be executed. When Cmd has the value
+ OMX_CommandStateSet, value is a member of OMX_STATETYPE. When Cmd has
+ the value OMX_CommandFlush, value of nParam indicates which port(s)
+ to flush. -1 is used to flush all ports a single port index will
+ only flush that port. When Cmd has the value "OMX_CommandPortDisable"
+ or "OMX_CommandPortEnable", the component's port is given by
+ the value of nParam. When Cmd has the value "OMX_CommandMarkBuffer"
+ the components pot is given by the value of nParam.
+ @param [in] pCmdData
+ Parameter pointing to the OMX_MARKTYPE structure when Cmd has the value
+ "OMX_CommandMarkBuffer".
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp
+ */
+#define OMX_SendCommand( \
+ hComponent, \
+ Cmd, \
+ nParam, \
+ pCmdData) \
+ ((OMX_COMPONENTTYPE*)hComponent)->SendCommand( \
+ hComponent, \
+ Cmd, \
+ nParam, \
+ pCmdData) /* Macro End */
+
+
+/** The OMX_GetParameter macro will get one of the current parameter
+ settings from the component. This macro cannot only be invoked when
+ the component is in the OMX_StateInvalid state. The nParamIndex
+ parameter is used to indicate which structure is being requested from
+ the component. The application shall allocate the correct structure
+ and shall fill in the structure size and version information before
+ invoking this macro. When the parameter applies to a port, the
+ caller shall fill in the appropriate nPortIndex value indicating the
+ port on which the parameter applies. If the component has not had
+ any settings changed, then the component should return a set of
+ valid DEFAULT parameters for the component. This is a blocking
+ call.
+
+ The component should return from this call within 20 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [in] nParamIndex
+ Index of the structure to be filled. This value is from the
+ OMX_INDEXTYPE enumeration.
+ @param [in,out] pComponentParameterStructure
+ Pointer to application allocated structure to be filled by the
+ component.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp
+ */
+#define OMX_GetParameter( \
+ hComponent, \
+ nParamIndex, \
+ pComponentParameterStructure) \
+ ((OMX_COMPONENTTYPE*)hComponent)->GetParameter( \
+ hComponent, \
+ nParamIndex, \
+ pComponentParameterStructure) /* Macro End */
+
+
+/** The OMX_SetParameter macro will send an initialization parameter
+ structure to a component. Each structure shall be sent one at a time,
+ in a separate invocation of the macro. This macro can only be
+ invoked when the component is in the OMX_StateLoaded state, or the
+ port is disabled (when the parameter applies to a port). The
+ nParamIndex parameter is used to indicate which structure is being
+ passed to the component. The application shall allocate the
+ correct structure and shall fill in the structure size and version
+ information (as well as the actual data) before invoking this macro.
+ The application is free to dispose of this structure after the call
+ as the component is required to copy any data it shall retain. This
+ is a blocking call.
+
+ The component should return from this call within 20 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [in] nIndex
+ Index of the structure to be sent. This value is from the
+ OMX_INDEXTYPE enumeration.
+ @param [in] pComponentParameterStructure
+ pointer to application allocated structure to be used for
+ initialization by the component.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp
+ */
+#define OMX_SetParameter( \
+ hComponent, \
+ nParamIndex, \
+ pComponentParameterStructure) \
+ ((OMX_COMPONENTTYPE*)hComponent)->SetParameter( \
+ hComponent, \
+ nParamIndex, \
+ pComponentParameterStructure) /* Macro End */
+
+
+/** The OMX_GetConfig macro will get one of the configuration structures
+ from a component. This macro can be invoked anytime after the
+ component has been loaded. The nParamIndex call parameter is used to
+ indicate which structure is being requested from the component. The
+ application shall allocate the correct structure and shall fill in the
+ structure size and version information before invoking this macro.
+ If the component has not had this configuration parameter sent before,
+ then the component should return a set of valid DEFAULT values for the
+ component. This is a blocking call.
+
+ The component should return from this call within 5 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [in] nIndex
+ Index of the structure to be filled. This value is from the
+ OMX_INDEXTYPE enumeration.
+ @param [in,out] pComponentConfigStructure
+ pointer to application allocated structure to be filled by the
+ component.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp
+*/
+#define OMX_GetConfig( \
+ hComponent, \
+ nConfigIndex, \
+ pComponentConfigStructure) \
+ ((OMX_COMPONENTTYPE*)hComponent)->GetConfig( \
+ hComponent, \
+ nConfigIndex, \
+ pComponentConfigStructure) /* Macro End */
+
+
+/** The OMX_SetConfig macro will send one of the configuration
+ structures to a component. Each structure shall be sent one at a time,
+ each in a separate invocation of the macro. This macro can be invoked
+ anytime after the component has been loaded. The application shall
+ allocate the correct structure and shall fill in the structure size
+ and version information (as well as the actual data) before invoking
+ this macro. The application is free to dispose of this structure after
+ the call as the component is required to copy any data it shall retain.
+ This is a blocking call.
+
+ The component should return from this call within 5 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [in] nConfigIndex
+ Index of the structure to be sent. This value is from the
+ OMX_INDEXTYPE enumeration above.
+ @param [in] pComponentConfigStructure
+ pointer to application allocated structure to be used for
+ initialization by the component.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp
+ */
+#define OMX_SetConfig( \
+ hComponent, \
+ nConfigIndex, \
+ pComponentConfigStructure) \
+ ((OMX_COMPONENTTYPE*)hComponent)->SetConfig( \
+ hComponent, \
+ nConfigIndex, \
+ pComponentConfigStructure) /* Macro End */
+
+
+/** The OMX_GetExtensionIndex macro will invoke a component to translate
+ a vendor specific configuration or parameter string into an OMX
+ structure index. There is no requirement for the vendor to support
+ this command for the indexes already found in the OMX_INDEXTYPE
+ enumeration (this is done to save space in small components). The
+ component shall support all vendor supplied extension indexes not found
+ in the master OMX_INDEXTYPE enumeration. This is a blocking call.
+
+ The component should return from this call within 5 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the GetHandle function.
+ @param [in] cParameterName
+ OMX_STRING that shall be less than 128 characters long including
+ the trailing null byte. This is the string that will get
+ translated by the component into a configuration index.
+ @param [out] pIndexType
+ a pointer to a OMX_INDEXTYPE to receive the index value.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp
+ */
+#define OMX_GetExtensionIndex( \
+ hComponent, \
+ cParameterName, \
+ pIndexType) \
+ ((OMX_COMPONENTTYPE*)hComponent)->GetExtensionIndex( \
+ hComponent, \
+ cParameterName, \
+ pIndexType) /* Macro End */
+
+
+/** The OMX_GetState macro will invoke the component to get the current
+ state of the component and place the state value into the location
+ pointed to by pState.
+
+ The component should return from this call within 5 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [out] pState
+ pointer to the location to receive the state. The value returned
+ is one of the OMX_STATETYPE members
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp
+ */
+#define OMX_GetState( \
+ hComponent, \
+ pState) \
+ ((OMX_COMPONENTTYPE*)hComponent)->GetState( \
+ hComponent, \
+ pState) /* Macro End */
+
+
+/** The OMX_UseBuffer macro will request that the component use
+ a buffer (and allocate its own buffer header) already allocated
+ by another component, or by the IL Client. This is a blocking
+ call.
+
+ The component should return from this call within 20 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [out] ppBuffer
+ pointer to an OMX_BUFFERHEADERTYPE structure used to receive the
+ pointer to the buffer header
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp buf
+ */
+
+#define OMX_UseBuffer( \
+ hComponent, \
+ ppBufferHdr, \
+ nPortIndex, \
+ pAppPrivate, \
+ nSizeBytes, \
+ pBuffer) \
+ ((OMX_COMPONENTTYPE*)hComponent)->UseBuffer( \
+ hComponent, \
+ ppBufferHdr, \
+ nPortIndex, \
+ pAppPrivate, \
+ nSizeBytes, \
+ pBuffer)
+
+
+/** The OMX_AllocateBuffer macro will request that the component allocate
+ a new buffer and buffer header. The component will allocate the
+ buffer and the buffer header and return a pointer to the buffer
+ header. This is a blocking call.
+
+ The component should return from this call within 5 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [out] ppBuffer
+ pointer to an OMX_BUFFERHEADERTYPE structure used to receive
+ the pointer to the buffer header
+ @param [in] nPortIndex
+ nPortIndex is used to select the port on the component the buffer will
+ be used with. The port can be found by using the nPortIndex
+ value as an index into the Port Definition array of the component.
+ @param [in] pAppPrivate
+ pAppPrivate is used to initialize the pAppPrivate member of the
+ buffer header structure.
+ @param [in] nSizeBytes
+ size of the buffer to allocate. Used when bAllocateNew is true.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp buf
+ */
+#define OMX_AllocateBuffer( \
+ hComponent, \
+ ppBuffer, \
+ nPortIndex, \
+ pAppPrivate, \
+ nSizeBytes) \
+ ((OMX_COMPONENTTYPE*)hComponent)->AllocateBuffer( \
+ hComponent, \
+ ppBuffer, \
+ nPortIndex, \
+ pAppPrivate, \
+ nSizeBytes) /* Macro End */
+
+
+/** The OMX_FreeBuffer macro will release a buffer header from the component
+ which was allocated using either OMX_AllocateBuffer or OMX_UseBuffer. If
+ the component allocated the buffer (see the OMX_UseBuffer macro) then
+ the component shall free the buffer and buffer header. This is a
+ blocking call.
+
+ The component should return from this call within 20 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [in] nPortIndex
+ nPortIndex is used to select the port on the component the buffer will
+ be used with.
+ @param [in] pBuffer
+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
+ or AllocateBuffer.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp buf
+ */
+#define OMX_FreeBuffer( \
+ hComponent, \
+ nPortIndex, \
+ pBuffer) \
+ ((OMX_COMPONENTTYPE*)hComponent)->FreeBuffer( \
+ hComponent, \
+ nPortIndex, \
+ pBuffer) /* Macro End */
+
+
+/** The OMX_EmptyThisBuffer macro will send a buffer full of data to an
+ input port of a component. The buffer will be emptied by the component
+ and returned to the application via the EmptyBufferDone call back.
+ This is a non-blocking call in that the component will record the buffer
+ and return immediately and then empty the buffer, later, at the proper
+ time. As expected, this macro may be invoked only while the component
+ is in the OMX_StateExecuting. If nPortIndex does not specify an input
+ port, the component shall return an error.
+
+ The component should return from this call within 5 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [in] pBuffer
+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
+ or AllocateBuffer.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp buf
+ */
+#define OMX_EmptyThisBuffer( \
+ hComponent, \
+ pBuffer) \
+ ((OMX_COMPONENTTYPE*)hComponent)->EmptyThisBuffer( \
+ hComponent, \
+ pBuffer) /* Macro End */
+
+
+/** The OMX_FillThisBuffer macro will send an empty buffer to an
+ output port of a component. The buffer will be filled by the component
+ and returned to the application via the FillBufferDone call back.
+ This is a non-blocking call in that the component will record the buffer
+ and return immediately and then fill the buffer, later, at the proper
+ time. As expected, this macro may be invoked only while the component
+ is in the OMX_ExecutingState. If nPortIndex does not specify an output
+ port, the component shall return an error.
+
+ The component should return from this call within 5 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [in] pBuffer
+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer
+ or AllocateBuffer.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp buf
+ */
+#define OMX_FillThisBuffer( \
+ hComponent, \
+ pBuffer) \
+ ((OMX_COMPONENTTYPE*)hComponent)->FillThisBuffer( \
+ hComponent, \
+ pBuffer) /* Macro End */
+
+
+
+/** The OMX_UseEGLImage macro will request that the component use
+ a EGLImage provided by EGL (and allocate its own buffer header)
+ This is a blocking call.
+
+ The component should return from this call within 20 msec.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the OMX_GetHandle function.
+ @param [out] ppBuffer
+ pointer to an OMX_BUFFERHEADERTYPE structure used to receive the
+ pointer to the buffer header. Note that the memory location used
+ for this buffer is NOT visible to the IL Client.
+ @param [in] nPortIndex
+ nPortIndex is used to select the port on the component the buffer will
+ be used with. The port can be found by using the nPortIndex
+ value as an index into the Port Definition array of the component.
+ @param [in] pAppPrivate
+ pAppPrivate is used to initialize the pAppPrivate member of the
+ buffer header structure.
+ @param [in] eglImage
+ eglImage contains the handle of the EGLImage to use as a buffer on the
+ specified port. The component is expected to validate properties of
+ the EGLImage against the configuration of the port to ensure the component
+ can use the EGLImage as a buffer.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup comp buf
+ */
+#define OMX_UseEGLImage( \
+ hComponent, \
+ ppBufferHdr, \
+ nPortIndex, \
+ pAppPrivate, \
+ eglImage) \
+ ((OMX_COMPONENTTYPE*)hComponent)->UseEGLImage( \
+ hComponent, \
+ ppBufferHdr, \
+ nPortIndex, \
+ pAppPrivate, \
+ eglImage)
+
+/** The OMX_Init method is used to initialize the OMX core. It shall be the
+ first call made into OMX and it should only be executed one time without
+ an interviening OMX_Deinit call.
+
+ The core should return from this call within 20 msec.
+
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup core
+ */
+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Init(void);
+
+
+/** The OMX_Deinit method is used to deinitialize the OMX core. It shall be
+ the last call made into OMX. In the event that the core determines that
+ thare are components loaded when this call is made, the core may return
+ with an error rather than try to unload the components.
+
+ The core should return from this call within 20 msec.
+
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup core
+ */
+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Deinit(void);
+
+
+/** The OMX_ComponentNameEnum method will enumerate through all the names of
+ recognised valid components in the system. This function is provided
+ as a means to detect all the components in the system run-time. There is
+ no strict ordering to the enumeration order of component names, although
+ each name will only be enumerated once. If the OMX core supports run-time
+ installation of new components, it is only requried to detect newly
+ installed components when the first call to enumerate component names
+ is made (i.e. when nIndex is 0x0).
+
+ The core should return from this call in 20 msec.
+
+ @param [out] cComponentName
+ pointer to a null terminated string with the component name. The
+ names of the components are strings less than 127 bytes in length
+ plus the trailing null for a maximum size of 128 bytes. An example
+ of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0". Names are
+ assigned by the vendor, but shall start with "OMX." and then have
+ the Vendor designation next.
+ @param [in] nNameLength
+ number of characters in the cComponentName string. With all
+ component name strings restricted to less than 128 characters
+ (including the trailing null) it is recomended that the caller
+ provide a input string for the cComponentName of 128 characters.
+ @param [in] nIndex
+ number containing the enumeration index for the component.
+ Multiple calls to OMX_ComponentNameEnum with increasing values
+ of nIndex will enumerate through the component names in the
+ system until OMX_ErrorNoMore is returned. The value of nIndex
+ is 0 to (N-1), where N is the number of valid installed components
+ in the system.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. When the value of nIndex exceeds the number of
+ components in the system minus 1, OMX_ErrorNoMore will be
+ returned. Otherwise the appropriate OMX error will be returned.
+ @ingroup core
+ */
+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_ComponentNameEnum(
+ OMX_OUT OMX_STRING cComponentName,
+ OMX_IN OMX_U32 nNameLength,
+ OMX_IN OMX_U32 nIndex);
+
+
+/** The OMX_GetHandle method will locate the component specified by the
+ component name given, load that component into memory and then invoke
+ the component's methods to create an instance of the component.
+
+ The core should return from this call within 20 msec.
+
+ @param [out] pHandle
+ pointer to an OMX_HANDLETYPE pointer to be filled in by this method.
+ @param [in] cComponentName
+ pointer to a null terminated string with the component name. The
+ names of the components are strings less than 127 bytes in length
+ plus the trailing null for a maximum size of 128 bytes. An example
+ of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0". Names are
+ assigned by the vendor, but shall start with "OMX." and then have
+ the Vendor designation next.
+ @param [in] pAppData
+ pointer to an application defined value that will be returned
+ during callbacks so that the application can identify the source
+ of the callback.
+ @param [in] pCallBacks
+ pointer to a OMX_CALLBACKTYPE structure that will be passed to the
+ component to initialize it with.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup core
+ */
+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_GetHandle(
+ OMX_OUT OMX_HANDLETYPE* pHandle,
+ OMX_IN OMX_STRING cComponentName,
+ OMX_IN OMX_PTR pAppData,
+ OMX_IN OMX_CALLBACKTYPE* pCallBacks);
+
+
+/** The OMX_FreeHandle method will free a handle allocated by the OMX_GetHandle
+ method. If the component reference count goes to zero, the component will
+ be unloaded from memory.
+
+ The core should return from this call within 20 msec when the component is
+ in the OMX_StateLoaded state.
+
+ @param [in] hComponent
+ Handle of the component to be accessed. This is the component
+ handle returned by the call to the GetHandle function.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ @ingroup core
+ */
+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_FreeHandle(
+ OMX_IN OMX_HANDLETYPE hComponent);
+
+
+
+/** The OMX_SetupTunnel method will handle the necessary calls to the components
+ to setup the specified tunnel the two components. NOTE: This is
+ an actual method (not a #define macro). This method will make calls into
+ the component ComponentTunnelRequest method to do the actual tunnel
+ connection.
+
+ The ComponentTunnelRequest method on both components will be called.
+ This method shall not be called unless the component is in the
+ OMX_StateLoaded state except when the ports used for the tunnel are
+ disabled. In this case, the component may be in the OMX_StateExecuting,
+ OMX_StatePause, or OMX_StateIdle states.
+
+ The core should return from this call within 20 msec.
+
+ @param [in] hOutput
+ Handle of the component to be accessed. Also this is the handle
+ of the component whose port, specified in the nPortOutput parameter
+ will be used the source for the tunnel. This is the component handle
+ returned by the call to the OMX_GetHandle function. There is a
+ requirement that hOutput be the source for the data when
+ tunelling (i.e. nPortOutput is an output port). If 0x0, the component
+ specified in hInput will have it's port specified in nPortInput
+ setup for communication with the application / IL client.
+ @param [in] nPortOutput
+ nPortOutput is used to select the source port on component to be
+ used in the tunnel.
+ @param [in] hInput
+ This is the component to setup the tunnel with. This is the handle
+ of the component whose port, specified in the nPortInput parameter
+ will be used the destination for the tunnel. This is the component handle
+ returned by the call to the OMX_GetHandle function. There is a
+ requirement that hInput be the destination for the data when
+ tunelling (i.e. nPortInut is an input port). If 0x0, the component
+ specified in hOutput will have it's port specified in nPortPOutput
+ setup for communication with the application / IL client.
+ @param [in] nPortInput
+ nPortInput is used to select the destination port on component to be
+ used in the tunnel.
+ @return OMX_ERRORTYPE
+ If the command successfully executes, the return code will be
+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned.
+ When OMX_ErrorNotImplemented is returned, one or both components is
+ a non-interop component and does not support tunneling.
+
+ On failure, the ports of both components are setup for communication
+ with the application / IL Client.
+ @ingroup core tun
+ */
+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_SetupTunnel(
+ OMX_IN OMX_HANDLETYPE hOutput,
+ OMX_IN OMX_U32 nPortOutput,
+ OMX_IN OMX_HANDLETYPE hInput,
+ OMX_IN OMX_U32 nPortInput);
+
+/** @ingroup cp */
+OMX_API OMX_ERRORTYPE OMX_GetContentPipe(
+ OMX_OUT OMX_HANDLETYPE *hPipe,
+ OMX_IN OMX_STRING szURI);
+
+/** The OMX_GetComponentsOfRole method will return the number of components that support the given
+ role and (if the compNames field is non-NULL) the names of those components. The call will fail if
+ an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the
+ client should:
+ * first call this function with the compNames field NULL to determine the number of component names
+ * second call this function with the compNames field pointing to an array of names allocated
+ according to the number returned by the first call.
+
+ The core should return from this call within 5 msec.
+
+ @param [in] role
+ This is generic standard component name consisting only of component class
+ name and the type within that class (e.g. 'audio_decoder.aac').
+ @param [inout] pNumComps
+ This is used both as input and output.
+
+ If compNames is NULL, the input is ignored and the output specifies how many components support
+ the given role.
+
+ If compNames is not NULL, on input it bounds the size of the input structure and
+ on output, it specifies the number of components string names listed within the compNames parameter.
+ @param [inout] compNames
+ If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings which accepts
+ a list of the names of all physical components that implement the specified standard component name.
+ Each name is NULL terminated. numComps indicates the number of names.
+ @ingroup core
+ */
+OMX_API OMX_ERRORTYPE OMX_GetComponentsOfRole (
+ OMX_IN OMX_STRING role,
+ OMX_INOUT OMX_U32 *pNumComps,
+ OMX_INOUT OMX_U8 **compNames);
+
+/** The OMX_GetRolesOfComponent method will return the number of roles supported by the given
+ component and (if the roles field is non-NULL) the names of those roles. The call will fail if
+ an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the
+ client should:
+ * first call this function with the roles field NULL to determine the number of role names
+ * second call this function with the roles field pointing to an array of names allocated
+ according to the number returned by the first call.
+
+ The core should return from this call within 5 msec.
+
+ @param [in] compName
+ This is the name of the component being queried about.
+ @param [inout] pNumRoles
+ This is used both as input and output.
+
+ If roles is NULL, the input is ignored and the output specifies how many roles the component supports.
+
+ If compNames is not NULL, on input it bounds the size of the input structure and
+ on output, it specifies the number of roles string names listed within the roles parameter.
+ @param [out] roles
+ If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings
+ which accepts a list of the names of all standard components roles implemented on the
+ specified component name. numComps indicates the number of names.
+ @ingroup core
+ */
+OMX_API OMX_ERRORTYPE OMX_GetRolesOfComponent (
+ OMX_IN OMX_STRING compName,
+ OMX_INOUT OMX_U32 *pNumRoles,
+ OMX_OUT OMX_U8 **roles);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
+
diff --git a/include/media/stagefright/openmax/OMX_IVCommon.h b/include/media/stagefright/openmax/OMX_IVCommon.h
new file mode 100644
index 0000000..4a8be7b
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_IVCommon.h
@@ -0,0 +1,937 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/**
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/**
+ * @file OMX_IVCommon.h - OpenMax IL version 1.1.2
+ * The structures needed by Video and Image components to exchange
+ * parameters and configuration data with the components.
+ */
+#ifndef OMX_IVCommon_h
+#define OMX_IVCommon_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * Each OMX header must include all required header files to allow the header
+ * to compile without errors. The includes below are required for this header
+ * file to compile successfully
+ */
+
+#include <OMX_Core.h>
+
+/** @defgroup iv OpenMAX IL Imaging and Video Domain
+ * Common structures for OpenMAX IL Imaging and Video domains
+ * @{
+ */
+
+
+/**
+ * Enumeration defining possible uncompressed image/video formats.
+ *
+ * ENUMS:
+ * Unused : Placeholder value when format is N/A
+ * Monochrome : black and white
+ * 8bitRGB332 : Red 7:5, Green 4:2, Blue 1:0
+ * 12bitRGB444 : Red 11:8, Green 7:4, Blue 3:0
+ * 16bitARGB4444 : Alpha 15:12, Red 11:8, Green 7:4, Blue 3:0
+ * 16bitARGB1555 : Alpha 15, Red 14:10, Green 9:5, Blue 4:0
+ * 16bitRGB565 : Red 15:11, Green 10:5, Blue 4:0
+ * 16bitBGR565 : Blue 15:11, Green 10:5, Red 4:0
+ * 18bitRGB666 : Red 17:12, Green 11:6, Blue 5:0
+ * 18bitARGB1665 : Alpha 17, Red 16:11, Green 10:5, Blue 4:0
+ * 19bitARGB1666 : Alpha 18, Red 17:12, Green 11:6, Blue 5:0
+ * 24bitRGB888 : Red 24:16, Green 15:8, Blue 7:0
+ * 24bitBGR888 : Blue 24:16, Green 15:8, Red 7:0
+ * 24bitARGB1887 : Alpha 23, Red 22:15, Green 14:7, Blue 6:0
+ * 25bitARGB1888 : Alpha 24, Red 23:16, Green 15:8, Blue 7:0
+ * 32bitBGRA8888 : Blue 31:24, Green 23:16, Red 15:8, Alpha 7:0
+ * 32bitARGB8888 : Alpha 31:24, Red 23:16, Green 15:8, Blue 7:0
+ * YUV411Planar : U,Y are subsampled by a factor of 4 horizontally
+ * YUV411PackedPlanar : packed per payload in planar slices
+ * YUV420Planar : Three arrays Y,U,V.
+ * YUV420PackedPlanar : packed per payload in planar slices
+ * YUV420SemiPlanar : Two arrays, one is all Y, the other is U and V
+ * YUV422Planar : Three arrays Y,U,V.
+ * YUV422PackedPlanar : packed per payload in planar slices
+ * YUV422SemiPlanar : Two arrays, one is all Y, the other is U and V
+ * YCbYCr : Organized as 16bit YUYV (i.e. YCbYCr)
+ * YCrYCb : Organized as 16bit YVYU (i.e. YCrYCb)
+ * CbYCrY : Organized as 16bit UYVY (i.e. CbYCrY)
+ * CrYCbY : Organized as 16bit VYUY (i.e. CrYCbY)
+ * YUV444Interleaved : Each pixel contains equal parts YUV
+ * RawBayer8bit : SMIA camera output format
+ * RawBayer10bit : SMIA camera output format
+ * RawBayer8bitcompressed : SMIA camera output format
+ */
+typedef enum OMX_COLOR_FORMATTYPE {
+ OMX_COLOR_FormatUnused,
+ OMX_COLOR_FormatMonochrome,
+ OMX_COLOR_Format8bitRGB332,
+ OMX_COLOR_Format12bitRGB444,
+ OMX_COLOR_Format16bitARGB4444,
+ OMX_COLOR_Format16bitARGB1555,
+ OMX_COLOR_Format16bitRGB565,
+ OMX_COLOR_Format16bitBGR565,
+ OMX_COLOR_Format18bitRGB666,
+ OMX_COLOR_Format18bitARGB1665,
+ OMX_COLOR_Format19bitARGB1666,
+ OMX_COLOR_Format24bitRGB888,
+ OMX_COLOR_Format24bitBGR888,
+ OMX_COLOR_Format24bitARGB1887,
+ OMX_COLOR_Format25bitARGB1888,
+ OMX_COLOR_Format32bitBGRA8888,
+ OMX_COLOR_Format32bitARGB8888,
+ OMX_COLOR_FormatYUV411Planar,
+ OMX_COLOR_FormatYUV411PackedPlanar,
+ OMX_COLOR_FormatYUV420Planar,
+ OMX_COLOR_FormatYUV420PackedPlanar,
+ OMX_COLOR_FormatYUV420SemiPlanar,
+ OMX_COLOR_FormatYUV422Planar,
+ OMX_COLOR_FormatYUV422PackedPlanar,
+ OMX_COLOR_FormatYUV422SemiPlanar,
+ OMX_COLOR_FormatYCbYCr,
+ OMX_COLOR_FormatYCrYCb,
+ OMX_COLOR_FormatCbYCrY,
+ OMX_COLOR_FormatCrYCbY,
+ OMX_COLOR_FormatYUV444Interleaved,
+ OMX_COLOR_FormatRawBayer8bit,
+ OMX_COLOR_FormatRawBayer10bit,
+ OMX_COLOR_FormatRawBayer8bitcompressed,
+ OMX_COLOR_FormatL2,
+ OMX_COLOR_FormatL4,
+ OMX_COLOR_FormatL8,
+ OMX_COLOR_FormatL16,
+ OMX_COLOR_FormatL24,
+ OMX_COLOR_FormatL32,
+ OMX_COLOR_FormatYUV420PackedSemiPlanar,
+ OMX_COLOR_FormatYUV422PackedSemiPlanar,
+ OMX_COLOR_Format18BitBGR666,
+ OMX_COLOR_Format24BitARGB6666,
+ OMX_COLOR_Format24BitABGR6666,
+ OMX_COLOR_FormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_COLOR_FormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_COLOR_FormatMax = 0x7FFFFFFF
+} OMX_COLOR_FORMATTYPE;
+
+
+/**
+ * Defines the matrix for conversion from RGB to YUV or vice versa.
+ * iColorMatrix should be initialized with the fixed point values
+ * used in converting between formats.
+ */
+typedef struct OMX_CONFIG_COLORCONVERSIONTYPE {
+ OMX_U32 nSize; /**< Size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version info */
+ OMX_U32 nPortIndex; /**< Port that this struct applies to */
+ OMX_S32 xColorMatrix[3][3]; /**< Stored in signed Q16 format */
+ OMX_S32 xColorOffset[4]; /**< Stored in signed Q16 format */
+}OMX_CONFIG_COLORCONVERSIONTYPE;
+
+
+/**
+ * Structure defining percent to scale each frame dimension. For example:
+ * To make the width 50% larger, use fWidth = 1.5 and to make the width
+ * 1/2 the original size, use fWidth = 0.5
+ */
+typedef struct OMX_CONFIG_SCALEFACTORTYPE {
+ OMX_U32 nSize; /**< Size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version info */
+ OMX_U32 nPortIndex; /**< Port that this struct applies to */
+ OMX_S32 xWidth; /**< Fixed point value stored as Q16 */
+ OMX_S32 xHeight; /**< Fixed point value stored as Q16 */
+}OMX_CONFIG_SCALEFACTORTYPE;
+
+
+/**
+ * Enumeration of possible image filter types
+ */
+typedef enum OMX_IMAGEFILTERTYPE {
+ OMX_ImageFilterNone,
+ OMX_ImageFilterNoise,
+ OMX_ImageFilterEmboss,
+ OMX_ImageFilterNegative,
+ OMX_ImageFilterSketch,
+ OMX_ImageFilterOilPaint,
+ OMX_ImageFilterHatch,
+ OMX_ImageFilterGpen,
+ OMX_ImageFilterAntialias,
+ OMX_ImageFilterDeRing,
+ OMX_ImageFilterSolarize,
+ OMX_ImageFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_ImageFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_ImageFilterMax = 0x7FFFFFFF
+} OMX_IMAGEFILTERTYPE;
+
+
+/**
+ * Image filter configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eImageFilter : Image filter type enumeration
+ */
+typedef struct OMX_CONFIG_IMAGEFILTERTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_IMAGEFILTERTYPE eImageFilter;
+} OMX_CONFIG_IMAGEFILTERTYPE;
+
+
+/**
+ * Customized U and V for color enhancement
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * bColorEnhancement : Enable/disable color enhancement
+ * nCustomizedU : Practical values: 16-240, range: 0-255, value set for
+ * U component
+ * nCustomizedV : Practical values: 16-240, range: 0-255, value set for
+ * V component
+ */
+typedef struct OMX_CONFIG_COLORENHANCEMENTTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL bColorEnhancement;
+ OMX_U8 nCustomizedU;
+ OMX_U8 nCustomizedV;
+} OMX_CONFIG_COLORENHANCEMENTTYPE;
+
+
+/**
+ * Define color key and color key mask
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nARGBColor : 32bit Alpha, Red, Green, Blue Color
+ * nARGBMask : 32bit Mask for Alpha, Red, Green, Blue channels
+ */
+typedef struct OMX_CONFIG_COLORKEYTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nARGBColor;
+ OMX_U32 nARGBMask;
+} OMX_CONFIG_COLORKEYTYPE;
+
+
+/**
+ * List of color blend types for pre/post processing
+ *
+ * ENUMS:
+ * None : No color blending present
+ * AlphaConstant : Function is (alpha_constant * src) +
+ * (1 - alpha_constant) * dst)
+ * AlphaPerPixel : Function is (alpha * src) + (1 - alpha) * dst)
+ * Alternate : Function is alternating pixels from src and dst
+ * And : Function is (src & dst)
+ * Or : Function is (src | dst)
+ * Invert : Function is ~src
+ */
+typedef enum OMX_COLORBLENDTYPE {
+ OMX_ColorBlendNone,
+ OMX_ColorBlendAlphaConstant,
+ OMX_ColorBlendAlphaPerPixel,
+ OMX_ColorBlendAlternate,
+ OMX_ColorBlendAnd,
+ OMX_ColorBlendOr,
+ OMX_ColorBlendInvert,
+ OMX_ColorBlendKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_ColorBlendVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_ColorBlendMax = 0x7FFFFFFF
+} OMX_COLORBLENDTYPE;
+
+
+/**
+ * Color blend configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nRGBAlphaConstant : Constant global alpha values when global alpha is used
+ * eColorBlend : Color blend type enumeration
+ */
+typedef struct OMX_CONFIG_COLORBLENDTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nRGBAlphaConstant;
+ OMX_COLORBLENDTYPE eColorBlend;
+} OMX_CONFIG_COLORBLENDTYPE;
+
+
+/**
+ * Hold frame dimension
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nWidth : Frame width in pixels
+ * nHeight : Frame height in pixels
+ */
+typedef struct OMX_FRAMESIZETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nWidth;
+ OMX_U32 nHeight;
+} OMX_FRAMESIZETYPE;
+
+
+/**
+ * Rotation configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nRotation : +/- integer rotation value
+ */
+typedef struct OMX_CONFIG_ROTATIONTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_S32 nRotation;
+} OMX_CONFIG_ROTATIONTYPE;
+
+
+/**
+ * Possible mirroring directions for pre/post processing
+ *
+ * ENUMS:
+ * None : No mirroring
+ * Vertical : Vertical mirroring, flip on X axis
+ * Horizontal : Horizontal mirroring, flip on Y axis
+ * Both : Both vertical and horizontal mirroring
+ */
+typedef enum OMX_MIRRORTYPE {
+ OMX_MirrorNone = 0,
+ OMX_MirrorVertical,
+ OMX_MirrorHorizontal,
+ OMX_MirrorBoth,
+ OMX_MirrorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_MirrorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_MirrorMax = 0x7FFFFFFF
+} OMX_MIRRORTYPE;
+
+
+/**
+ * Mirroring configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eMirror : Mirror type enumeration
+ */
+typedef struct OMX_CONFIG_MIRRORTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_MIRRORTYPE eMirror;
+} OMX_CONFIG_MIRRORTYPE;
+
+
+/**
+ * Position information only
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nX : X coordinate for the point
+ * nY : Y coordinate for the point
+ */
+typedef struct OMX_CONFIG_POINTTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_S32 nX;
+ OMX_S32 nY;
+} OMX_CONFIG_POINTTYPE;
+
+
+/**
+ * Frame size plus position
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nLeft : X Coordinate of the top left corner of the rectangle
+ * nTop : Y Coordinate of the top left corner of the rectangle
+ * nWidth : Width of the rectangle
+ * nHeight : Height of the rectangle
+ */
+typedef struct OMX_CONFIG_RECTTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_S32 nLeft;
+ OMX_S32 nTop;
+ OMX_U32 nWidth;
+ OMX_U32 nHeight;
+} OMX_CONFIG_RECTTYPE;
+
+
+/**
+ * Deblocking state; it is required to be set up before starting the codec
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * bDeblocking : Enable/disable deblocking mode
+ */
+typedef struct OMX_PARAM_DEBLOCKINGTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL bDeblocking;
+} OMX_PARAM_DEBLOCKINGTYPE;
+
+
+/**
+ * Stabilization state
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * bStab : Enable/disable frame stabilization state
+ */
+typedef struct OMX_CONFIG_FRAMESTABTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL bStab;
+} OMX_CONFIG_FRAMESTABTYPE;
+
+
+/**
+ * White Balance control type
+ *
+ * STRUCT MEMBERS:
+ * SunLight : Referenced in JSR-234
+ * Flash : Optimal for device's integrated flash
+ */
+typedef enum OMX_WHITEBALCONTROLTYPE {
+ OMX_WhiteBalControlOff = 0,
+ OMX_WhiteBalControlAuto,
+ OMX_WhiteBalControlSunLight,
+ OMX_WhiteBalControlCloudy,
+ OMX_WhiteBalControlShade,
+ OMX_WhiteBalControlTungsten,
+ OMX_WhiteBalControlFluorescent,
+ OMX_WhiteBalControlIncandescent,
+ OMX_WhiteBalControlFlash,
+ OMX_WhiteBalControlHorizon,
+ OMX_WhiteBalControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_WhiteBalControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_WhiteBalControlMax = 0x7FFFFFFF
+} OMX_WHITEBALCONTROLTYPE;
+
+
+/**
+ * White Balance control configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eWhiteBalControl : White balance enumeration
+ */
+typedef struct OMX_CONFIG_WHITEBALCONTROLTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_WHITEBALCONTROLTYPE eWhiteBalControl;
+} OMX_CONFIG_WHITEBALCONTROLTYPE;
+
+
+/**
+ * Exposure control type
+ */
+typedef enum OMX_EXPOSURECONTROLTYPE {
+ OMX_ExposureControlOff = 0,
+ OMX_ExposureControlAuto,
+ OMX_ExposureControlNight,
+ OMX_ExposureControlBackLight,
+ OMX_ExposureControlSpotLight,
+ OMX_ExposureControlSports,
+ OMX_ExposureControlSnow,
+ OMX_ExposureControlBeach,
+ OMX_ExposureControlLargeAperture,
+ OMX_ExposureControlSmallApperture,
+ OMX_ExposureControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_ExposureControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_ExposureControlMax = 0x7FFFFFFF
+} OMX_EXPOSURECONTROLTYPE;
+
+
+/**
+ * White Balance control configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eExposureControl : Exposure control enumeration
+ */
+typedef struct OMX_CONFIG_EXPOSURECONTROLTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_EXPOSURECONTROLTYPE eExposureControl;
+} OMX_CONFIG_EXPOSURECONTROLTYPE;
+
+
+/**
+ * Defines sensor supported mode.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nFrameRate : Single shot mode is indicated by a 0
+ * bOneShot : Enable for single shot, disable for streaming
+ * sFrameSize : Framesize
+ */
+typedef struct OMX_PARAM_SENSORMODETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nFrameRate;
+ OMX_BOOL bOneShot;
+ OMX_FRAMESIZETYPE sFrameSize;
+} OMX_PARAM_SENSORMODETYPE;
+
+
+/**
+ * Defines contrast level
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nContrast : Values allowed for contrast -100 to 100, zero means no change
+ */
+typedef struct OMX_CONFIG_CONTRASTTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_S32 nContrast;
+} OMX_CONFIG_CONTRASTTYPE;
+
+
+/**
+ * Defines brightness level
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nBrightness : 0-100%
+ */
+typedef struct OMX_CONFIG_BRIGHTNESSTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nBrightness;
+} OMX_CONFIG_BRIGHTNESSTYPE;
+
+
+/**
+ * Defines backlight level configuration for a video sink, e.g. LCD panel
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nBacklight : Values allowed for backlight 0-100%
+ * nTimeout : Number of milliseconds before backlight automatically turns
+ * off. A value of 0x0 disables backight timeout
+ */
+typedef struct OMX_CONFIG_BACKLIGHTTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nBacklight;
+ OMX_U32 nTimeout;
+} OMX_CONFIG_BACKLIGHTTYPE;
+
+
+/**
+ * Defines setting for Gamma
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nGamma : Values allowed for gamma -100 to 100, zero means no change
+ */
+typedef struct OMX_CONFIG_GAMMATYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_S32 nGamma;
+} OMX_CONFIG_GAMMATYPE;
+
+
+/**
+ * Define for setting saturation
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nSaturation : Values allowed for saturation -100 to 100, zero means
+ * no change
+ */
+typedef struct OMX_CONFIG_SATURATIONTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_S32 nSaturation;
+} OMX_CONFIG_SATURATIONTYPE;
+
+
+/**
+ * Define for setting Lightness
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nLightness : Values allowed for lightness -100 to 100, zero means no
+ * change
+ */
+typedef struct OMX_CONFIG_LIGHTNESSTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_S32 nLightness;
+} OMX_CONFIG_LIGHTNESSTYPE;
+
+
+/**
+ * Plane blend configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Index of input port associated with the plane.
+ * nDepth : Depth of the plane in relation to the screen. Higher
+ * numbered depths are "behind" lower number depths.
+ * This number defaults to the Port Index number.
+ * nAlpha : Transparency blending component for the entire plane.
+ * See blending modes for more detail.
+ */
+typedef struct OMX_CONFIG_PLANEBLENDTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nDepth;
+ OMX_U32 nAlpha;
+} OMX_CONFIG_PLANEBLENDTYPE;
+
+
+/**
+ * Define interlace type
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * bEnable : Enable control variable for this functionality
+ * (see below)
+ * nInterleavePortIndex : Index of input or output port associated with
+ * the interleaved plane.
+ * pPlanarPortIndexes[4] : Index of input or output planar ports.
+ */
+typedef struct OMX_PARAM_INTERLEAVETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL bEnable;
+ OMX_U32 nInterleavePortIndex;
+} OMX_PARAM_INTERLEAVETYPE;
+
+
+/**
+ * Defines the picture effect used for an input picture
+ */
+typedef enum OMX_TRANSITIONEFFECTTYPE {
+ OMX_EffectNone,
+ OMX_EffectFadeFromBlack,
+ OMX_EffectFadeToBlack,
+ OMX_EffectUnspecifiedThroughConstantColor,
+ OMX_EffectDissolve,
+ OMX_EffectWipe,
+ OMX_EffectUnspecifiedMixOfTwoScenes,
+ OMX_EffectKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_EffectVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_EffectMax = 0x7FFFFFFF
+} OMX_TRANSITIONEFFECTTYPE;
+
+
+/**
+ * Structure used to configure current transition effect
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eEffect : Effect to enable
+ */
+typedef struct OMX_CONFIG_TRANSITIONEFFECTTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_TRANSITIONEFFECTTYPE eEffect;
+} OMX_CONFIG_TRANSITIONEFFECTTYPE;
+
+
+/**
+ * Defines possible data unit types for encoded video data. The data unit
+ * types are used both for encoded video input for playback as well as
+ * encoded video output from recording.
+ */
+typedef enum OMX_DATAUNITTYPE {
+ OMX_DataUnitCodedPicture,
+ OMX_DataUnitVideoSegment,
+ OMX_DataUnitSeveralSegments,
+ OMX_DataUnitArbitraryStreamSection,
+ OMX_DataUnitKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_DataUnitVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_DataUnitMax = 0x7FFFFFFF
+} OMX_DATAUNITTYPE;
+
+
+/**
+ * Defines possible encapsulation types for coded video data unit. The
+ * encapsulation information is used both for encoded video input for
+ * playback as well as encoded video output from recording.
+ */
+typedef enum OMX_DATAUNITENCAPSULATIONTYPE {
+ OMX_DataEncapsulationElementaryStream,
+ OMX_DataEncapsulationGenericPayload,
+ OMX_DataEncapsulationRtpPayload,
+ OMX_DataEncapsulationKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_DataEncapsulationVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_DataEncapsulationMax = 0x7FFFFFFF
+} OMX_DATAUNITENCAPSULATIONTYPE;
+
+
+/**
+ * Structure used to configure the type of being decoded/encoded
+ */
+typedef struct OMX_PARAM_DATAUNITTYPE {
+ OMX_U32 nSize; /**< Size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port that this structure applies to */
+ OMX_DATAUNITTYPE eUnitType;
+ OMX_DATAUNITENCAPSULATIONTYPE eEncapsulationType;
+} OMX_PARAM_DATAUNITTYPE;
+
+
+/**
+ * Defines dither types
+ */
+typedef enum OMX_DITHERTYPE {
+ OMX_DitherNone,
+ OMX_DitherOrdered,
+ OMX_DitherErrorDiffusion,
+ OMX_DitherOther,
+ OMX_DitherKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_DitherVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_DitherMax = 0x7FFFFFFF
+} OMX_DITHERTYPE;
+
+
+/**
+ * Structure used to configure current type of dithering
+ */
+typedef struct OMX_CONFIG_DITHERTYPE {
+ OMX_U32 nSize; /**< Size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Port that this structure applies to */
+ OMX_DITHERTYPE eDither; /**< Type of dithering to use */
+} OMX_CONFIG_DITHERTYPE;
+
+typedef struct OMX_CONFIG_CAPTUREMODETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex; /**< Port that this structure applies to */
+ OMX_BOOL bContinuous; /**< If true then ignore frame rate and emit capture
+ * data as fast as possible (otherwise obey port's frame rate). */
+ OMX_BOOL bFrameLimited; /**< If true then terminate capture after the port emits the
+ * specified number of frames (otherwise the port does not
+ * terminate the capture until instructed to do so by the client).
+ * Even if set, the client may manually terminate the capture prior
+ * to reaching the limit. */
+ OMX_U32 nFrameLimit; /**< Limit on number of frames emitted during a capture (only
+ * valid if bFrameLimited is set). */
+} OMX_CONFIG_CAPTUREMODETYPE;
+
+typedef enum OMX_METERINGTYPE {
+
+ OMX_MeteringModeAverage, /**< Center-weighted average metering. */
+ OMX_MeteringModeSpot, /**< Spot (partial) metering. */
+ OMX_MeteringModeMatrix, /**< Matrix or evaluative metering. */
+
+ OMX_MeteringKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_MeteringVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_EVModeMax = 0x7fffffff
+} OMX_METERINGTYPE;
+
+typedef struct OMX_CONFIG_EXPOSUREVALUETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_METERINGTYPE eMetering;
+ OMX_S32 xEVCompensation; /**< Fixed point value stored as Q16 */
+ OMX_U32 nApertureFNumber; /**< e.g. nApertureFNumber = 2 implies "f/2" - Q16 format */
+ OMX_BOOL bAutoAperture; /**< Whether aperture number is defined automatically */
+ OMX_U32 nShutterSpeedMsec; /**< Shutterspeed in milliseconds */
+ OMX_BOOL bAutoShutterSpeed; /**< Whether shutter speed is defined automatically */
+ OMX_U32 nSensitivity; /**< e.g. nSensitivity = 100 implies "ISO 100" */
+ OMX_BOOL bAutoSensitivity; /**< Whether sensitivity is defined automatically */
+} OMX_CONFIG_EXPOSUREVALUETYPE;
+
+/**
+ * Focus region configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * bCenter : Use center region as focus region of interest
+ * bLeft : Use left region as focus region of interest
+ * bRight : Use right region as focus region of interest
+ * bTop : Use top region as focus region of interest
+ * bBottom : Use bottom region as focus region of interest
+ * bTopLeft : Use top left region as focus region of interest
+ * bTopRight : Use top right region as focus region of interest
+ * bBottomLeft : Use bottom left region as focus region of interest
+ * bBottomRight : Use bottom right region as focus region of interest
+ */
+typedef struct OMX_CONFIG_FOCUSREGIONTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL bCenter;
+ OMX_BOOL bLeft;
+ OMX_BOOL bRight;
+ OMX_BOOL bTop;
+ OMX_BOOL bBottom;
+ OMX_BOOL bTopLeft;
+ OMX_BOOL bTopRight;
+ OMX_BOOL bBottomLeft;
+ OMX_BOOL bBottomRight;
+} OMX_CONFIG_FOCUSREGIONTYPE;
+
+/**
+ * Focus Status type
+ */
+typedef enum OMX_FOCUSSTATUSTYPE {
+ OMX_FocusStatusOff = 0,
+ OMX_FocusStatusRequest,
+ OMX_FocusStatusReached,
+ OMX_FocusStatusUnableToReach,
+ OMX_FocusStatusLost,
+ OMX_FocusStatusKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_FocusStatusVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_FocusStatusMax = 0x7FFFFFFF
+} OMX_FOCUSSTATUSTYPE;
+
+/**
+ * Focus status configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eFocusStatus : Specifies the focus status
+ * bCenterStatus : Use center region as focus region of interest
+ * bLeftStatus : Use left region as focus region of interest
+ * bRightStatus : Use right region as focus region of interest
+ * bTopStatus : Use top region as focus region of interest
+ * bBottomStatus : Use bottom region as focus region of interest
+ * bTopLeftStatus : Use top left region as focus region of interest
+ * bTopRightStatus : Use top right region as focus region of interest
+ * bBottomLeftStatus : Use bottom left region as focus region of interest
+ * bBottomRightStatus : Use bottom right region as focus region of interest
+ */
+typedef struct OMX_PARAM_FOCUSSTATUSTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_FOCUSSTATUSTYPE eFocusStatus;
+ OMX_BOOL bCenterStatus;
+ OMX_BOOL bLeftStatus;
+ OMX_BOOL bRightStatus;
+ OMX_BOOL bTopStatus;
+ OMX_BOOL bBottomStatus;
+ OMX_BOOL bTopLeftStatus;
+ OMX_BOOL bTopRightStatus;
+ OMX_BOOL bBottomLeftStatus;
+ OMX_BOOL bBottomRightStatus;
+} OMX_PARAM_FOCUSSTATUSTYPE;
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
diff --git a/include/media/stagefright/openmax/OMX_Image.h b/include/media/stagefright/openmax/OMX_Image.h
new file mode 100644
index 0000000..42e39ec
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_Image.h
@@ -0,0 +1,345 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/**
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * @file OMX_Image.h - OpenMax IL version 1.1.2
+ * The structures needed by Image components to exchange parameters and
+ * configuration data with the components.
+ */
+#ifndef OMX_Image_h
+#define OMX_Image_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/**
+ * Each OMX header must include all required header files to allow the
+ * header to compile without errors. The includes below are required
+ * for this header file to compile successfully
+ */
+
+#include <OMX_IVCommon.h>
+
+/** @defgroup imaging OpenMAX IL Imaging Domain
+ * @ingroup iv
+ * Structures for OpenMAX IL Imaging domain
+ * @{
+ */
+
+/**
+ * Enumeration used to define the possible image compression coding.
+ */
+typedef enum OMX_IMAGE_CODINGTYPE {
+ OMX_IMAGE_CodingUnused, /**< Value when format is N/A */
+ OMX_IMAGE_CodingAutoDetect, /**< Auto detection of image format */
+ OMX_IMAGE_CodingJPEG, /**< JPEG/JFIF image format */
+ OMX_IMAGE_CodingJPEG2K, /**< JPEG 2000 image format */
+ OMX_IMAGE_CodingEXIF, /**< EXIF image format */
+ OMX_IMAGE_CodingTIFF, /**< TIFF image format */
+ OMX_IMAGE_CodingGIF, /**< Graphics image format */
+ OMX_IMAGE_CodingPNG, /**< PNG image format */
+ OMX_IMAGE_CodingLZW, /**< LZW image format */
+ OMX_IMAGE_CodingBMP, /**< Windows Bitmap format */
+ OMX_IMAGE_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_IMAGE_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_IMAGE_CodingMax = 0x7FFFFFFF
+} OMX_IMAGE_CODINGTYPE;
+
+
+/**
+ * Data structure used to define an image path. The number of image paths
+ * for input and output will vary by type of the image component.
+ *
+ * Input (aka Source) : Zero Inputs, one Output,
+ * Splitter : One Input, 2 or more Outputs,
+ * Processing Element : One Input, one output,
+ * Mixer : 2 or more inputs, one output,
+ * Output (aka Sink) : One Input, zero outputs.
+ *
+ * The PortDefinition structure is used to define all of the parameters
+ * necessary for the compliant component to setup an input or an output
+ * image path. If additional vendor specific data is required, it should
+ * be transmitted to the component using the CustomCommand function.
+ * Compliant components will prepopulate this structure with optimal
+ * values during the OMX_GetParameter() command.
+ *
+ * STRUCT MEMBERS:
+ * cMIMEType : MIME type of data for the port
+ * pNativeRender : Platform specific reference for a display if a
+ * sync, otherwise this field is 0
+ * nFrameWidth : Width of frame to be used on port if
+ * uncompressed format is used. Use 0 for
+ * unknown, don't care or variable
+ * nFrameHeight : Height of frame to be used on port if
+ * uncompressed format is used. Use 0 for
+ * unknown, don't care or variable
+ * nStride : Number of bytes per span of an image (i.e.
+ * indicates the number of bytes to get from
+ * span N to span N+1, where negative stride
+ * indicates the image is bottom up
+ * nSliceHeight : Height used when encoding in slices
+ * bFlagErrorConcealment : Turns on error concealment if it is supported by
+ * the OMX component
+ * eCompressionFormat : Compression format used in this instance of
+ * the component. When OMX_IMAGE_CodingUnused is
+ * specified, eColorFormat is valid
+ * eColorFormat : Decompressed format used by this component
+ * pNativeWindow : Platform specific reference for a window object if a
+ * display sink , otherwise this field is 0x0.
+ */
+typedef struct OMX_IMAGE_PORTDEFINITIONTYPE {
+ OMX_STRING cMIMEType;
+ OMX_NATIVE_DEVICETYPE pNativeRender;
+ OMX_U32 nFrameWidth;
+ OMX_U32 nFrameHeight;
+ OMX_S32 nStride;
+ OMX_U32 nSliceHeight;
+ OMX_BOOL bFlagErrorConcealment;
+ OMX_IMAGE_CODINGTYPE eCompressionFormat;
+ OMX_COLOR_FORMATTYPE eColorFormat;
+ OMX_NATIVE_WINDOWTYPE pNativeWindow;
+} OMX_IMAGE_PORTDEFINITIONTYPE;
+
+
+/**
+ * Port format parameter. This structure is used to enumerate the various
+ * data input/output format supported by the port.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Indicates which port to set
+ * nIndex : Indicates the enumeration index for the format from
+ * 0x0 to N-1
+ * eCompressionFormat : Compression format used in this instance of the
+ * component. When OMX_IMAGE_CodingUnused is specified,
+ * eColorFormat is valid
+ * eColorFormat : Decompressed format used by this component
+ */
+typedef struct OMX_IMAGE_PARAM_PORTFORMATTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nIndex;
+ OMX_IMAGE_CODINGTYPE eCompressionFormat;
+ OMX_COLOR_FORMATTYPE eColorFormat;
+} OMX_IMAGE_PARAM_PORTFORMATTYPE;
+
+
+/**
+ * Flash control type
+ *
+ * ENUMS
+ * Torch : Flash forced constantly on
+ */
+typedef enum OMX_IMAGE_FLASHCONTROLTYPE {
+ OMX_IMAGE_FlashControlOn = 0,
+ OMX_IMAGE_FlashControlOff,
+ OMX_IMAGE_FlashControlAuto,
+ OMX_IMAGE_FlashControlRedEyeReduction,
+ OMX_IMAGE_FlashControlFillin,
+ OMX_IMAGE_FlashControlTorch,
+ OMX_IMAGE_FlashControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_IMAGE_FlashControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_IMAGE_FlashControlMax = 0x7FFFFFFF
+} OMX_IMAGE_FLASHCONTROLTYPE;
+
+
+/**
+ * Flash control configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eFlashControl : Flash control type
+ */
+typedef struct OMX_IMAGE_PARAM_FLASHCONTROLTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_IMAGE_FLASHCONTROLTYPE eFlashControl;
+} OMX_IMAGE_PARAM_FLASHCONTROLTYPE;
+
+
+/**
+ * Focus control type
+ */
+typedef enum OMX_IMAGE_FOCUSCONTROLTYPE {
+ OMX_IMAGE_FocusControlOn = 0,
+ OMX_IMAGE_FocusControlOff,
+ OMX_IMAGE_FocusControlAuto,
+ OMX_IMAGE_FocusControlAutoLock,
+ OMX_IMAGE_FocusControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_IMAGE_FocusControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_IMAGE_FocusControlMax = 0x7FFFFFFF
+} OMX_IMAGE_FOCUSCONTROLTYPE;
+
+
+/**
+ * Focus control configuration
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eFocusControl : Focus control
+ * nFocusSteps : Focus can take on values from 0 mm to infinity.
+ * Interest is only in number of steps over this range.
+ * nFocusStepIndex : Current focus step index
+ */
+typedef struct OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_IMAGE_FOCUSCONTROLTYPE eFocusControl;
+ OMX_U32 nFocusSteps;
+ OMX_U32 nFocusStepIndex;
+} OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE;
+
+
+/**
+ * Q Factor for JPEG compression, which controls the tradeoff between image
+ * quality and size. Q Factor provides a more simple means of controlling
+ * JPEG compression quality, without directly programming Quantization
+ * tables for chroma and luma
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nQFactor : JPEG Q factor value in the range of 1-100. A factor of 1
+ * produces the smallest, worst quality images, and a factor
+ * of 100 produces the largest, best quality images. A
+ * typical default is 75 for small good quality images
+ */
+typedef struct OMX_IMAGE_PARAM_QFACTORTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nQFactor;
+} OMX_IMAGE_PARAM_QFACTORTYPE;
+
+/**
+ * Quantization table type
+ */
+
+typedef enum OMX_IMAGE_QUANTIZATIONTABLETYPE {
+ OMX_IMAGE_QuantizationTableLuma = 0,
+ OMX_IMAGE_QuantizationTableChroma,
+ OMX_IMAGE_QuantizationTableChromaCb,
+ OMX_IMAGE_QuantizationTableChromaCr,
+ OMX_IMAGE_QuantizationTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_IMAGE_QuantizationTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_IMAGE_QuantizationTableMax = 0x7FFFFFFF
+} OMX_IMAGE_QUANTIZATIONTABLETYPE;
+
+/**
+ * JPEG quantization tables are used to determine DCT compression for
+ * YUV data, as an alternative to specifying Q factor, providing exact
+ * control of compression
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eQuantizationTable : Quantization table type
+ * nQuantizationMatrix[64] : JPEG quantization table of coefficients stored
+ * in increasing columns then by rows of data (i.e.
+ * row 1, ... row 8). Quantization values are in
+ * the range 0-255 and stored in linear order
+ * (i.e. the component will zig-zag the
+ * quantization table data if required internally)
+ */
+typedef struct OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_IMAGE_QUANTIZATIONTABLETYPE eQuantizationTable;
+ OMX_U8 nQuantizationMatrix[64];
+} OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE;
+
+
+/**
+ * Huffman table type, the same Huffman table is applied for chroma and
+ * luma component
+ */
+typedef enum OMX_IMAGE_HUFFMANTABLETYPE {
+ OMX_IMAGE_HuffmanTableAC = 0,
+ OMX_IMAGE_HuffmanTableDC,
+ OMX_IMAGE_HuffmanTableACLuma,
+ OMX_IMAGE_HuffmanTableACChroma,
+ OMX_IMAGE_HuffmanTableDCLuma,
+ OMX_IMAGE_HuffmanTableDCChroma,
+ OMX_IMAGE_HuffmanTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_IMAGE_HuffmanTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_IMAGE_HuffmanTableMax = 0x7FFFFFFF
+} OMX_IMAGE_HUFFMANTABLETYPE;
+
+/**
+ * JPEG Huffman table
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eHuffmanTable : Huffman table type
+ * nNumberOfHuffmanCodeOfLength[16] : 0-16, number of Huffman codes of each
+ * possible length
+ * nHuffmanTable[256] : 0-255, the size used for AC and DC
+ * HuffmanTable are 16 and 162
+ */
+typedef struct OMX_IMAGE_PARAM_HUFFMANTTABLETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_IMAGE_HUFFMANTABLETYPE eHuffmanTable;
+ OMX_U8 nNumberOfHuffmanCodeOfLength[16];
+ OMX_U8 nHuffmanTable[256];
+}OMX_IMAGE_PARAM_HUFFMANTTABLETYPE;
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
diff --git a/include/media/stagefright/openmax/OMX_Index.h b/include/media/stagefright/openmax/OMX_Index.h
new file mode 100644
index 0000000..c0b8d92
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_Index.h
@@ -0,0 +1,275 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/*
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/** @file OMX_Index.h - OpenMax IL version 1.1.2
+ * The OMX_Index header file contains the definitions for both applications
+ * and components .
+ */
+
+
+#ifndef OMX_Index_h
+#define OMX_Index_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* Each OMX header must include all required header files to allow the
+ * header to compile without errors. The includes below are required
+ * for this header file to compile successfully
+ */
+#include <OMX_Types.h>
+
+
+/** The OMX_INDEXTYPE enumeration is used to select a structure when either
+ * getting or setting parameters and/or configuration data. Each entry in
+ * this enumeration maps to an OMX specified structure. When the
+ * OMX_GetParameter, OMX_SetParameter, OMX_GetConfig or OMX_SetConfig methods
+ * are used, the second parameter will always be an entry from this enumeration
+ * and the third entry will be the structure shown in the comments for the entry.
+ * For example, if the application is initializing a cropping function, the
+ * OMX_SetConfig command would have OMX_IndexConfigCommonInputCrop as the second parameter
+ * and would send a pointer to an initialized OMX_RECTTYPE structure as the
+ * third parameter.
+ *
+ * The enumeration entries named with the OMX_Config prefix are sent using
+ * the OMX_SetConfig command and the enumeration entries named with the
+ * OMX_PARAM_ prefix are sent using the OMX_SetParameter command.
+ */
+typedef enum OMX_INDEXTYPE {
+
+ OMX_IndexComponentStartUnused = 0x01000000,
+ OMX_IndexParamPriorityMgmt, /**< reference: OMX_PRIORITYMGMTTYPE */
+ OMX_IndexParamAudioInit, /**< reference: OMX_PORT_PARAM_TYPE */
+ OMX_IndexParamImageInit, /**< reference: OMX_PORT_PARAM_TYPE */
+ OMX_IndexParamVideoInit, /**< reference: OMX_PORT_PARAM_TYPE */
+ OMX_IndexParamOtherInit, /**< reference: OMX_PORT_PARAM_TYPE */
+ OMX_IndexParamNumAvailableStreams, /**< reference: OMX_PARAM_U32TYPE */
+ OMX_IndexParamActiveStream, /**< reference: OMX_PARAM_U32TYPE */
+ OMX_IndexParamSuspensionPolicy, /**< reference: OMX_PARAM_SUSPENSIONPOLICYTYPE */
+ OMX_IndexParamComponentSuspended, /**< reference: OMX_PARAM_SUSPENSIONTYPE */
+ OMX_IndexConfigCapturing, /**< reference: OMX_CONFIG_BOOLEANTYPE */
+ OMX_IndexConfigCaptureMode, /**< reference: OMX_CONFIG_CAPTUREMODETYPE */
+ OMX_IndexAutoPauseAfterCapture, /**< reference: OMX_CONFIG_BOOLEANTYPE */
+ OMX_IndexParamContentURI, /**< reference: OMX_PARAM_CONTENTURITYPE */
+ OMX_IndexParamCustomContentPipe, /**< reference: OMX_PARAM_CONTENTPIPETYPE */
+ OMX_IndexParamDisableResourceConcealment, /**< reference: OMX_RESOURCECONCEALMENTTYPE */
+ OMX_IndexConfigMetadataItemCount, /**< reference: OMX_CONFIG_METADATAITEMCOUNTTYPE */
+ OMX_IndexConfigContainerNodeCount, /**< reference: OMX_CONFIG_CONTAINERNODECOUNTTYPE */
+ OMX_IndexConfigMetadataItem, /**< reference: OMX_CONFIG_METADATAITEMTYPE */
+ OMX_IndexConfigCounterNodeID, /**< reference: OMX_CONFIG_CONTAINERNODEIDTYPE */
+ OMX_IndexParamMetadataFilterType, /**< reference: OMX_PARAM_METADATAFILTERTYPE */
+ OMX_IndexParamMetadataKeyFilter, /**< reference: OMX_PARAM_METADATAFILTERTYPE */
+ OMX_IndexConfigPriorityMgmt, /**< reference: OMX_PRIORITYMGMTTYPE */
+ OMX_IndexParamStandardComponentRole, /**< reference: OMX_PARAM_COMPONENTROLETYPE */
+
+ OMX_IndexPortStartUnused = 0x02000000,
+ OMX_IndexParamPortDefinition, /**< reference: OMX_PARAM_PORTDEFINITIONTYPE */
+ OMX_IndexParamCompBufferSupplier, /**< reference: OMX_PARAM_BUFFERSUPPLIERTYPE */
+ OMX_IndexReservedStartUnused = 0x03000000,
+
+ /* Audio parameters and configurations */
+ OMX_IndexAudioStartUnused = 0x04000000,
+ OMX_IndexParamAudioPortFormat, /**< reference: OMX_AUDIO_PARAM_PORTFORMATTYPE */
+ OMX_IndexParamAudioPcm, /**< reference: OMX_AUDIO_PARAM_PCMMODETYPE */
+ OMX_IndexParamAudioAac, /**< reference: OMX_AUDIO_PARAM_AACPROFILETYPE */
+ OMX_IndexParamAudioRa, /**< reference: OMX_AUDIO_PARAM_RATYPE */
+ OMX_IndexParamAudioMp3, /**< reference: OMX_AUDIO_PARAM_MP3TYPE */
+ OMX_IndexParamAudioAdpcm, /**< reference: OMX_AUDIO_PARAM_ADPCMTYPE */
+ OMX_IndexParamAudioG723, /**< reference: OMX_AUDIO_PARAM_G723TYPE */
+ OMX_IndexParamAudioG729, /**< reference: OMX_AUDIO_PARAM_G729TYPE */
+ OMX_IndexParamAudioAmr, /**< reference: OMX_AUDIO_PARAM_AMRTYPE */
+ OMX_IndexParamAudioWma, /**< reference: OMX_AUDIO_PARAM_WMATYPE */
+ OMX_IndexParamAudioSbc, /**< reference: OMX_AUDIO_PARAM_SBCTYPE */
+ OMX_IndexParamAudioMidi, /**< reference: OMX_AUDIO_PARAM_MIDITYPE */
+ OMX_IndexParamAudioGsm_FR, /**< reference: OMX_AUDIO_PARAM_GSMFRTYPE */
+ OMX_IndexParamAudioMidiLoadUserSound, /**< reference: OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE */
+ OMX_IndexParamAudioG726, /**< reference: OMX_AUDIO_PARAM_G726TYPE */
+ OMX_IndexParamAudioGsm_EFR, /**< reference: OMX_AUDIO_PARAM_GSMEFRTYPE */
+ OMX_IndexParamAudioGsm_HR, /**< reference: OMX_AUDIO_PARAM_GSMHRTYPE */
+ OMX_IndexParamAudioPdc_FR, /**< reference: OMX_AUDIO_PARAM_PDCFRTYPE */
+ OMX_IndexParamAudioPdc_EFR, /**< reference: OMX_AUDIO_PARAM_PDCEFRTYPE */
+ OMX_IndexParamAudioPdc_HR, /**< reference: OMX_AUDIO_PARAM_PDCHRTYPE */
+ OMX_IndexParamAudioTdma_FR, /**< reference: OMX_AUDIO_PARAM_TDMAFRTYPE */
+ OMX_IndexParamAudioTdma_EFR, /**< reference: OMX_AUDIO_PARAM_TDMAEFRTYPE */
+ OMX_IndexParamAudioQcelp8, /**< reference: OMX_AUDIO_PARAM_QCELP8TYPE */
+ OMX_IndexParamAudioQcelp13, /**< reference: OMX_AUDIO_PARAM_QCELP13TYPE */
+ OMX_IndexParamAudioEvrc, /**< reference: OMX_AUDIO_PARAM_EVRCTYPE */
+ OMX_IndexParamAudioSmv, /**< reference: OMX_AUDIO_PARAM_SMVTYPE */
+ OMX_IndexParamAudioVorbis, /**< reference: OMX_AUDIO_PARAM_VORBISTYPE */
+
+ OMX_IndexConfigAudioMidiImmediateEvent, /**< reference: OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE */
+ OMX_IndexConfigAudioMidiControl, /**< reference: OMX_AUDIO_CONFIG_MIDICONTROLTYPE */
+ OMX_IndexConfigAudioMidiSoundBankProgram, /**< reference: OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE */
+ OMX_IndexConfigAudioMidiStatus, /**< reference: OMX_AUDIO_CONFIG_MIDISTATUSTYPE */
+ OMX_IndexConfigAudioMidiMetaEvent, /**< reference: OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE */
+ OMX_IndexConfigAudioMidiMetaEventData, /**< reference: OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE */
+ OMX_IndexConfigAudioVolume, /**< reference: OMX_AUDIO_CONFIG_VOLUMETYPE */
+ OMX_IndexConfigAudioBalance, /**< reference: OMX_AUDIO_CONFIG_BALANCETYPE */
+ OMX_IndexConfigAudioChannelMute, /**< reference: OMX_AUDIO_CONFIG_CHANNELMUTETYPE */
+ OMX_IndexConfigAudioMute, /**< reference: OMX_AUDIO_CONFIG_MUTETYPE */
+ OMX_IndexConfigAudioLoudness, /**< reference: OMX_AUDIO_CONFIG_LOUDNESSTYPE */
+ OMX_IndexConfigAudioEchoCancelation, /**< reference: OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE */
+ OMX_IndexConfigAudioNoiseReduction, /**< reference: OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE */
+ OMX_IndexConfigAudioBass, /**< reference: OMX_AUDIO_CONFIG_BASSTYPE */
+ OMX_IndexConfigAudioTreble, /**< reference: OMX_AUDIO_CONFIG_TREBLETYPE */
+ OMX_IndexConfigAudioStereoWidening, /**< reference: OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE */
+ OMX_IndexConfigAudioChorus, /**< reference: OMX_AUDIO_CONFIG_CHORUSTYPE */
+ OMX_IndexConfigAudioEqualizer, /**< reference: OMX_AUDIO_CONFIG_EQUALIZERTYPE */
+ OMX_IndexConfigAudioReverberation, /**< reference: OMX_AUDIO_CONFIG_REVERBERATIONTYPE */
+ OMX_IndexConfigAudioChannelVolume, /**< reference: OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE */
+
+ /* Image specific parameters and configurations */
+ OMX_IndexImageStartUnused = 0x05000000,
+ OMX_IndexParamImagePortFormat, /**< reference: OMX_IMAGE_PARAM_PORTFORMATTYPE */
+ OMX_IndexParamFlashControl, /**< reference: OMX_IMAGE_PARAM_FLASHCONTROLTYPE */
+ OMX_IndexConfigFocusControl, /**< reference: OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE */
+ OMX_IndexParamQFactor, /**< reference: OMX_IMAGE_PARAM_QFACTORTYPE */
+ OMX_IndexParamQuantizationTable, /**< reference: OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE */
+ OMX_IndexParamHuffmanTable, /**< reference: OMX_IMAGE_PARAM_HUFFMANTTABLETYPE */
+ OMX_IndexConfigFlashControl, /**< reference: OMX_IMAGE_PARAM_FLASHCONTROLTYPE */
+
+ /* Video specific parameters and configurations */
+ OMX_IndexVideoStartUnused = 0x06000000,
+ OMX_IndexParamVideoPortFormat, /**< reference: OMX_VIDEO_PARAM_PORTFORMATTYPE */
+ OMX_IndexParamVideoQuantization, /**< reference: OMX_VIDEO_PARAM_QUANTIZATIONTYPE */
+ OMX_IndexParamVideoFastUpdate, /**< reference: OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE */
+ OMX_IndexParamVideoBitrate, /**< reference: OMX_VIDEO_PARAM_BITRATETYPE */
+ OMX_IndexParamVideoMotionVector, /**< reference: OMX_VIDEO_PARAM_MOTIONVECTORTYPE */
+ OMX_IndexParamVideoIntraRefresh, /**< reference: OMX_VIDEO_PARAM_INTRAREFRESHTYPE */
+ OMX_IndexParamVideoErrorCorrection, /**< reference: OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE */
+ OMX_IndexParamVideoVBSMC, /**< reference: OMX_VIDEO_PARAM_VBSMCTYPE */
+ OMX_IndexParamVideoMpeg2, /**< reference: OMX_VIDEO_PARAM_MPEG2TYPE */
+ OMX_IndexParamVideoMpeg4, /**< reference: OMX_VIDEO_PARAM_MPEG4TYPE */
+ OMX_IndexParamVideoWmv, /**< reference: OMX_VIDEO_PARAM_WMVTYPE */
+ OMX_IndexParamVideoRv, /**< reference: OMX_VIDEO_PARAM_RVTYPE */
+ OMX_IndexParamVideoAvc, /**< reference: OMX_VIDEO_PARAM_AVCTYPE */
+ OMX_IndexParamVideoH263, /**< reference: OMX_VIDEO_PARAM_H263TYPE */
+ OMX_IndexParamVideoProfileLevelQuerySupported, /**< reference: OMX_VIDEO_PARAM_PROFILELEVELTYPE */
+ OMX_IndexParamVideoProfileLevelCurrent, /**< reference: OMX_VIDEO_PARAM_PROFILELEVELTYPE */
+ OMX_IndexConfigVideoBitrate, /**< reference: OMX_VIDEO_CONFIG_BITRATETYPE */
+ OMX_IndexConfigVideoFramerate, /**< reference: OMX_CONFIG_FRAMERATETYPE */
+ OMX_IndexConfigVideoIntraVOPRefresh, /**< reference: OMX_CONFIG_INTRAREFRESHVOPTYPE */
+ OMX_IndexConfigVideoIntraMBRefresh, /**< reference: OMX_CONFIG_MACROBLOCKERRORMAPTYPE */
+ OMX_IndexConfigVideoMBErrorReporting, /**< reference: OMX_CONFIG_MBERRORREPORTINGTYPE */
+ OMX_IndexParamVideoMacroblocksPerFrame, /**< reference: OMX_PARAM_MACROBLOCKSTYPE */
+ OMX_IndexConfigVideoMacroBlockErrorMap, /**< reference: OMX_CONFIG_MACROBLOCKERRORMAPTYPE */
+ OMX_IndexParamVideoSliceFMO, /**< reference: OMX_VIDEO_PARAM_AVCSLICEFMO */
+ OMX_IndexConfigVideoAVCIntraPeriod, /**< reference: OMX_VIDEO_CONFIG_AVCINTRAPERIOD */
+ OMX_IndexConfigVideoNalSize, /**< reference: OMX_VIDEO_CONFIG_NALSIZE */
+
+ /* Image & Video common Configurations */
+ OMX_IndexCommonStartUnused = 0x07000000,
+ OMX_IndexParamCommonDeblocking, /**< reference: OMX_PARAM_DEBLOCKINGTYPE */
+ OMX_IndexParamCommonSensorMode, /**< reference: OMX_PARAM_SENSORMODETYPE */
+ OMX_IndexParamCommonInterleave, /**< reference: OMX_PARAM_INTERLEAVETYPE */
+ OMX_IndexConfigCommonColorFormatConversion, /**< reference: OMX_CONFIG_COLORCONVERSIONTYPE */
+ OMX_IndexConfigCommonScale, /**< reference: OMX_CONFIG_SCALEFACTORTYPE */
+ OMX_IndexConfigCommonImageFilter, /**< reference: OMX_CONFIG_IMAGEFILTERTYPE */
+ OMX_IndexConfigCommonColorEnhancement, /**< reference: OMX_CONFIG_COLORENHANCEMENTTYPE */
+ OMX_IndexConfigCommonColorKey, /**< reference: OMX_CONFIG_COLORKEYTYPE */
+ OMX_IndexConfigCommonColorBlend, /**< reference: OMX_CONFIG_COLORBLENDTYPE */
+ OMX_IndexConfigCommonFrameStabilisation,/**< reference: OMX_CONFIG_FRAMESTABTYPE */
+ OMX_IndexConfigCommonRotate, /**< reference: OMX_CONFIG_ROTATIONTYPE */
+ OMX_IndexConfigCommonMirror, /**< reference: OMX_CONFIG_MIRRORTYPE */
+ OMX_IndexConfigCommonOutputPosition, /**< reference: OMX_CONFIG_POINTTYPE */
+ OMX_IndexConfigCommonInputCrop, /**< reference: OMX_CONFIG_RECTTYPE */
+ OMX_IndexConfigCommonOutputCrop, /**< reference: OMX_CONFIG_RECTTYPE */
+ OMX_IndexConfigCommonDigitalZoom, /**< reference: OMX_CONFIG_SCALEFACTORTYPE */
+ OMX_IndexConfigCommonOpticalZoom, /**< reference: OMX_CONFIG_SCALEFACTORTYPE*/
+ OMX_IndexConfigCommonWhiteBalance, /**< reference: OMX_CONFIG_WHITEBALCONTROLTYPE */
+ OMX_IndexConfigCommonExposure, /**< reference: OMX_CONFIG_EXPOSURECONTROLTYPE */
+ OMX_IndexConfigCommonContrast, /**< reference: OMX_CONFIG_CONTRASTTYPE */
+ OMX_IndexConfigCommonBrightness, /**< reference: OMX_CONFIG_BRIGHTNESSTYPE */
+ OMX_IndexConfigCommonBacklight, /**< reference: OMX_CONFIG_BACKLIGHTTYPE */
+ OMX_IndexConfigCommonGamma, /**< reference: OMX_CONFIG_GAMMATYPE */
+ OMX_IndexConfigCommonSaturation, /**< reference: OMX_CONFIG_SATURATIONTYPE */
+ OMX_IndexConfigCommonLightness, /**< reference: OMX_CONFIG_LIGHTNESSTYPE */
+ OMX_IndexConfigCommonExclusionRect, /**< reference: OMX_CONFIG_RECTTYPE */
+ OMX_IndexConfigCommonDithering, /**< reference: OMX_CONFIG_DITHERTYPE */
+ OMX_IndexConfigCommonPlaneBlend, /**< reference: OMX_CONFIG_PLANEBLENDTYPE */
+ OMX_IndexConfigCommonExposureValue, /**< reference: OMX_CONFIG_EXPOSUREVALUETYPE */
+ OMX_IndexConfigCommonOutputSize, /**< reference: OMX_FRAMESIZETYPE */
+ OMX_IndexParamCommonExtraQuantData, /**< reference: OMX_OTHER_EXTRADATATYPE */
+ OMX_IndexConfigCommonFocusRegion, /**< reference: OMX_CONFIG_FOCUSREGIONTYPE */
+ OMX_IndexConfigCommonFocusStatus, /**< reference: OMX_PARAM_FOCUSSTATUSTYPE */
+ OMX_IndexConfigCommonTransitionEffect, /**< reference: OMX_CONFIG_TRANSITIONEFFECTTYPE */
+
+ /* Reserved Configuration range */
+ OMX_IndexOtherStartUnused = 0x08000000,
+ OMX_IndexParamOtherPortFormat, /**< reference: OMX_OTHER_PARAM_PORTFORMATTYPE */
+ OMX_IndexConfigOtherPower, /**< reference: OMX_OTHER_CONFIG_POWERTYPE */
+ OMX_IndexConfigOtherStats, /**< reference: OMX_OTHER_CONFIG_STATSTYPE */
+
+
+ /* Reserved Time range */
+ OMX_IndexTimeStartUnused = 0x09000000,
+ OMX_IndexConfigTimeScale, /**< reference: OMX_TIME_CONFIG_SCALETYPE */
+ OMX_IndexConfigTimeClockState, /**< reference: OMX_TIME_CONFIG_CLOCKSTATETYPE */
+ OMX_IndexConfigTimeActiveRefClock, /**< reference: OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE */
+ OMX_IndexConfigTimeCurrentMediaTime, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (read only) */
+ OMX_IndexConfigTimeCurrentWallTime, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (read only) */
+ OMX_IndexConfigTimeCurrentAudioReference, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */
+ OMX_IndexConfigTimeCurrentVideoReference, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */
+ OMX_IndexConfigTimeMediaTimeRequest, /**< reference: OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE (write only) */
+ OMX_IndexConfigTimeClientStartTime, /**<reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */
+ OMX_IndexConfigTimePosition, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE */
+ OMX_IndexConfigTimeSeekMode, /**< reference: OMX_TIME_CONFIG_SEEKMODETYPE */
+
+
+ OMX_IndexKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ /* Vendor specific area */
+ OMX_IndexVendorStartUnused = 0x7F000000,
+ /* Vendor specific structures should be in the range of 0x7F000000
+ to 0x7FFFFFFE. This range is not broken out by vendor, so
+ private indexes are not guaranteed unique and therefore should
+ only be sent to the appropriate component. */
+
+ OMX_IndexMax = 0x7FFFFFFF
+
+} OMX_INDEXTYPE;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
diff --git a/include/media/stagefright/openmax/OMX_Other.h b/include/media/stagefright/openmax/OMX_Other.h
new file mode 100644
index 0000000..efbce83
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_Other.h
@@ -0,0 +1,354 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/*
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/** @file OMX_Other.h - OpenMax IL version 1.1.2
+ * The structures needed by Other components to exchange
+ * parameters and configuration data with the components.
+ */
+
+#ifndef OMX_Other_h
+#define OMX_Other_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* Each OMX header must include all required header files to allow the
+ * header to compile without errors. The includes below are required
+ * for this header file to compile successfully
+ */
+
+#include <OMX_Core.h>
+
+
+/**
+ * Enumeration of possible data types which match to multiple domains or no
+ * domain at all. For types which are vendor specific, a value above
+ * OMX_OTHER_VENDORTSTART should be used.
+ */
+typedef enum OMX_OTHER_FORMATTYPE {
+ OMX_OTHER_FormatTime = 0, /**< Transmission of various timestamps, elapsed time,
+ time deltas, etc */
+ OMX_OTHER_FormatPower, /**< Perhaps used for enabling/disabling power
+ management, setting clocks? */
+ OMX_OTHER_FormatStats, /**< Could be things such as frame rate, frames
+ dropped, etc */
+ OMX_OTHER_FormatBinary, /**< Arbitrary binary data */
+ OMX_OTHER_FormatVendorReserved = 1000, /**< Starting value for vendor specific
+ formats */
+
+ OMX_OTHER_FormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_OTHER_FormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_OTHER_FormatMax = 0x7FFFFFFF
+} OMX_OTHER_FORMATTYPE;
+
+/**
+ * Enumeration of seek modes.
+ */
+typedef enum OMX_TIME_SEEKMODETYPE {
+ OMX_TIME_SeekModeFast = 0, /**< Prefer seeking to an approximation
+ * of the requested seek position over
+ * the actual seek position if it
+ * results in a faster seek. */
+ OMX_TIME_SeekModeAccurate, /**< Prefer seeking to the actual seek
+ * position over an approximation
+ * of the requested seek position even
+ * if it results in a slower seek. */
+ OMX_TIME_SeekModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_TIME_SeekModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_TIME_SeekModeMax = 0x7FFFFFFF
+} OMX_TIME_SEEKMODETYPE;
+
+/* Structure representing the seekmode of the component */
+typedef struct OMX_TIME_CONFIG_SEEKMODETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_TIME_SEEKMODETYPE eType; /**< The seek mode */
+} OMX_TIME_CONFIG_SEEKMODETYPE;
+
+/** Structure representing a time stamp used with the following configs
+ * on the Clock Component (CC):
+ *
+ * OMX_IndexConfigTimeCurrentWallTime: query of the CCs current wall
+ * time
+ * OMX_IndexConfigTimeCurrentMediaTime: query of the CCs current media
+ * time
+ * OMX_IndexConfigTimeCurrentAudioReference and
+ * OMX_IndexConfigTimeCurrentVideoReference: audio/video reference
+ * clock sending SC its reference time
+ * OMX_IndexConfigTimeClientStartTime: a Clock Component client sends
+ * this structure to the Clock Component via a SetConfig on its
+ * client port when it receives a buffer with
+ * OMX_BUFFERFLAG_STARTTIME set. It must use the timestamp
+ * specified by that buffer for nStartTimestamp.
+ *
+ * Its also used with the following config on components in general:
+ *
+ * OMX_IndexConfigTimePosition: IL client querying component position
+ * (GetConfig) or commanding a component to seek to the given location
+ * (SetConfig)
+ */
+typedef struct OMX_TIME_CONFIG_TIMESTAMPTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version
+ * information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_TICKS nTimestamp; /**< timestamp .*/
+} OMX_TIME_CONFIG_TIMESTAMPTYPE;
+
+/** Enumeration of possible reference clocks to the media time. */
+typedef enum OMX_TIME_UPDATETYPE {
+ OMX_TIME_UpdateRequestFulfillment, /**< Update is the fulfillment of a media time request. */
+ OMX_TIME_UpdateScaleChanged, /**< Update was generated because the scale chagned. */
+ OMX_TIME_UpdateClockStateChanged, /**< Update was generated because the clock state changed. */
+ OMX_TIME_UpdateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_TIME_UpdateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_TIME_UpdateMax = 0x7FFFFFFF
+} OMX_TIME_UPDATETYPE;
+
+/** Enumeration of possible reference clocks to the media time. */
+typedef enum OMX_TIME_REFCLOCKTYPE {
+ OMX_TIME_RefClockNone, /**< Use no references. */
+ OMX_TIME_RefClockAudio, /**< Use references sent through OMX_IndexConfigTimeCurrentAudioReference */
+ OMX_TIME_RefClockVideo, /**< Use references sent through OMX_IndexConfigTimeCurrentVideoReference */
+ OMX_TIME_RefClockKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_TIME_RefClockVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_TIME_RefClockMax = 0x7FFFFFFF
+} OMX_TIME_REFCLOCKTYPE;
+
+/** Enumeration of clock states. */
+typedef enum OMX_TIME_CLOCKSTATE {
+ OMX_TIME_ClockStateRunning, /**< Clock running. */
+ OMX_TIME_ClockStateWaitingForStartTime, /**< Clock waiting until the
+ * prescribed clients emit their
+ * start time. */
+ OMX_TIME_ClockStateStopped, /**< Clock stopped. */
+ OMX_TIME_ClockStateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_TIME_ClockStateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_TIME_ClockStateMax = 0x7FFFFFFF
+} OMX_TIME_CLOCKSTATE;
+
+/** Structure representing a media time request to the clock component.
+ *
+ * A client component sends this structure to the Clock Component via a SetConfig
+ * on its client port to specify a media timestamp the Clock Component
+ * should emit. The Clock Component should fulfill the request by sending a
+ * OMX_TIME_MEDIATIMETYPE when its media clock matches the requested
+ * timestamp.
+ *
+ * The client may require a media time request be fulfilled slightly
+ * earlier than the media time specified. In this case the client specifies
+ * an offset which is equal to the difference between wall time corresponding
+ * to the requested media time and the wall time when it will be
+ * fulfilled.
+ *
+ * A client component may uses these requests and the OMX_TIME_MEDIATIMETYPE to
+ * time events according to timestamps. If a client must perform an operation O at
+ * a time T (e.g. deliver a video frame at its corresponding timestamp), it makes a
+ * media time request at T (perhaps specifying an offset to ensure the request fulfillment
+ * is a little early). When the clock component passes the resulting OMX_TIME_MEDIATIMETYPE
+ * structure back to the client component, the client may perform operation O (perhaps having
+ * to wait a slight amount more time itself as specified by the return values).
+ */
+
+typedef struct OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< port that this structure applies to */
+ OMX_PTR pClientPrivate; /**< Client private data to disabiguate this media time
+ * from others (e.g. the number of the frame to deliver).
+ * Duplicated in the media time structure that fulfills
+ * this request. A value of zero is reserved for time scale
+ * updates. */
+ OMX_TICKS nMediaTimestamp; /**< Media timestamp requested.*/
+ OMX_TICKS nOffset; /**< Amount of wall clock time by which this
+ * request should be fulfilled early */
+} OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE;
+
+/**< Structure sent from the clock component client either when fulfilling
+ * a media time request or when the time scale has changed.
+ *
+ * In the former case the Clock Component fills this structure and times its emission
+ * to a client component (via the client port) according to the corresponding media
+ * time request sent by the client. The Clock Component should time the emission to occur
+ * when the requested timestamp matches the Clock Component's media time but also the
+ * prescribed offset early.
+ *
+ * Upon scale changes the clock component clears the nClientPrivate data, sends the current
+ * media time and sets the nScale to the new scale via the client port. It emits a
+ * OMX_TIME_MEDIATIMETYPE to all clients independent of any requests. This allows clients to
+ * alter processing to accomodate scaling. For instance a video component might skip inter-frames
+ * in the case of extreme fastforward. Likewise an audio component might add or remove samples
+ * from an audio frame to scale audio data.
+ *
+ * It is expected that some clock components may not be able to fulfill requests
+ * at exactly the prescribed time. This is acceptable so long as the request is
+ * fulfilled at least as early as described and not later. This structure provides
+ * fields the client may use to wait for the remaining time.
+ *
+ * The client may use either the nOffset or nWallTimeAtMedia fields to determine the
+ * wall time until the nMediaTimestamp actually occurs. In the latter case the
+ * client can get a more accurate value for offset by getting the current wall
+ * from the cloc component and subtracting it from nWallTimeAtMedia.
+ */
+
+typedef struct OMX_TIME_MEDIATIMETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nClientPrivate; /**< Client private data to disabiguate this media time
+ * from others. Copied from the media time request.
+ * A value of zero is reserved for time scale updates. */
+ OMX_TIME_UPDATETYPE eUpdateType; /**< Reason for the update */
+ OMX_TICKS nMediaTimestamp; /**< Media time requested. If no media time was
+ * requested then this is the current media time. */
+ OMX_TICKS nOffset; /**< Amount of wall clock time by which this
+ * request was actually fulfilled early */
+
+ OMX_TICKS nWallTimeAtMediaTime; /**< Wall time corresponding to nMediaTimeStamp.
+ * A client may compare this value to current
+ * media time obtained from the Clock Component to determine
+ * the wall time until the media timestamp is really
+ * current. */
+ OMX_S32 xScale; /**< Current media time scale in Q16 format. */
+ OMX_TIME_CLOCKSTATE eState; /* Seeking Change. Added 7/12.*/
+ /**< State of the media time. */
+} OMX_TIME_MEDIATIMETYPE;
+
+/** Structure representing the current media time scale factor. Applicable only to clock
+ * component, other components see scale changes via OMX_TIME_MEDIATIMETYPE buffers sent via
+ * the clock component client ports. Upon recieving this config the clock component changes
+ * the rate by which the media time increases or decreases effectively implementing trick modes.
+ */
+typedef struct OMX_TIME_CONFIG_SCALETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_S32 xScale; /**< This is a value in Q16 format which is used for
+ * scaling the media time */
+} OMX_TIME_CONFIG_SCALETYPE;
+
+/** Bits used to identify a clock port. Used in OMX_TIME_CONFIG_CLOCKSTATETYPEs nWaitMask field */
+#define OMX_CLOCKPORT0 0x00000001
+#define OMX_CLOCKPORT1 0x00000002
+#define OMX_CLOCKPORT2 0x00000004
+#define OMX_CLOCKPORT3 0x00000008
+#define OMX_CLOCKPORT4 0x00000010
+#define OMX_CLOCKPORT5 0x00000020
+#define OMX_CLOCKPORT6 0x00000040
+#define OMX_CLOCKPORT7 0x00000080
+
+/** Structure representing the current mode of the media clock.
+ * IL Client uses this config to change or query the mode of the
+ * media clock of the clock component. Applicable only to clock
+ * component.
+ *
+ * On a SetConfig if eState is OMX_TIME_ClockStateRunning media time
+ * starts immediately at the prescribed start time. If
+ * OMX_TIME_ClockStateWaitingForStartTime the Clock Component ignores
+ * the given nStartTime and waits for all clients specified in the
+ * nWaitMask to send starttimes (via
+ * OMX_IndexConfigTimeClientStartTime). The Clock Component then starts
+ * the media clock using the earliest start time supplied. */
+typedef struct OMX_TIME_CONFIG_CLOCKSTATETYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version
+ * information */
+ OMX_TIME_CLOCKSTATE eState; /**< State of the media time. */
+ OMX_TICKS nStartTime; /**< Start time of the media time. */
+ OMX_TICKS nOffset; /**< Time to offset the media time by
+ * (e.g. preroll). Media time will be
+ * reported to be nOffset ticks earlier.
+ */
+ OMX_U32 nWaitMask; /**< Mask of OMX_CLOCKPORT values. */
+} OMX_TIME_CONFIG_CLOCKSTATETYPE;
+
+/** Structure representing the reference clock currently being used to
+ * compute media time. IL client uses this config to change or query the
+ * clock component's active reference clock */
+typedef struct OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_TIME_REFCLOCKTYPE eClock; /**< Reference clock used to compute media time */
+} OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE;
+
+/** Descriptor for setting specifics of power type.
+ * Note: this structure is listed for backwards compatibility. */
+typedef struct OMX_OTHER_CONFIG_POWERTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_BOOL bEnablePM; /**< Flag to enable Power Management */
+} OMX_OTHER_CONFIG_POWERTYPE;
+
+
+/** Descriptor for setting specifics of stats type.
+ * Note: this structure is listed for backwards compatibility. */
+typedef struct OMX_OTHER_CONFIG_STATSTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ /* what goes here */
+} OMX_OTHER_CONFIG_STATSTYPE;
+
+
+/**
+ * The PortDefinition structure is used to define all of the parameters
+ * necessary for the compliant component to setup an input or an output other
+ * path.
+ */
+typedef struct OMX_OTHER_PORTDEFINITIONTYPE {
+ OMX_OTHER_FORMATTYPE eFormat; /**< Type of data expected for this channel */
+} OMX_OTHER_PORTDEFINITIONTYPE;
+
+/** Port format parameter. This structure is used to enumerate
+ * the various data input/output format supported by the port.
+ */
+typedef struct OMX_OTHER_PARAM_PORTFORMATTYPE {
+ OMX_U32 nSize; /**< size of the structure in bytes */
+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
+ OMX_U32 nPortIndex; /**< Indicates which port to set */
+ OMX_U32 nIndex; /**< Indicates the enumeration index for the format from 0x0 to N-1 */
+ OMX_OTHER_FORMATTYPE eFormat; /**< Type of data expected for this channel */
+} OMX_OTHER_PARAM_PORTFORMATTYPE;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
diff --git a/include/media/stagefright/openmax/OMX_Types.h b/include/media/stagefright/openmax/OMX_Types.h
new file mode 100644
index 0000000..03fd4bc
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_Types.h
@@ -0,0 +1,365 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/*
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/** OMX_Types.h - OpenMax IL version 1.1.2
+ * The OMX_Types header file contains the primitive type definitions used by
+ * the core, the application and the component. This file may need to be
+ * modified to be used on systems that do not have "char" set to 8 bits,
+ * "short" set to 16 bits and "long" set to 32 bits.
+ */
+
+#ifndef OMX_Types_h
+#define OMX_Types_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/** The OMX_API and OMX_APIENTRY are platform specific definitions used
+ * to declare OMX function prototypes. They are modified to meet the
+ * requirements for a particular platform */
+#ifdef __SYMBIAN32__
+# ifdef __OMX_EXPORTS
+# define OMX_API __declspec(dllexport)
+# else
+# ifdef _WIN32
+# define OMX_API __declspec(dllexport)
+# else
+# define OMX_API __declspec(dllimport)
+# endif
+# endif
+#else
+# ifdef _WIN32
+# ifdef __OMX_EXPORTS
+# define OMX_API __declspec(dllexport)
+# else
+//# define OMX_API __declspec(dllimport)
+#define OMX_API
+# endif
+# else
+# ifdef __OMX_EXPORTS
+# define OMX_API
+# else
+# define OMX_API extern
+# endif
+# endif
+#endif
+
+#ifndef OMX_APIENTRY
+#define OMX_APIENTRY
+#endif
+
+/** OMX_IN is used to identify inputs to an OMX function. This designation
+ will also be used in the case of a pointer that points to a parameter
+ that is used as an output. */
+#ifndef OMX_IN
+#define OMX_IN
+#endif
+
+/** OMX_OUT is used to identify outputs from an OMX function. This
+ designation will also be used in the case of a pointer that points
+ to a parameter that is used as an input. */
+#ifndef OMX_OUT
+#define OMX_OUT
+#endif
+
+
+/** OMX_INOUT is used to identify parameters that may be either inputs or
+ outputs from an OMX function at the same time. This designation will
+ also be used in the case of a pointer that points to a parameter that
+ is used both as an input and an output. */
+#ifndef OMX_INOUT
+#define OMX_INOUT
+#endif
+
+/** OMX_ALL is used to as a wildcard to select all entities of the same type
+ * when specifying the index, or referring to a object by an index. (i.e.
+ * use OMX_ALL to indicate all N channels). When used as a port index
+ * for a config or parameter this OMX_ALL denotes that the config or
+ * parameter applies to the entire component not just one port. */
+#define OMX_ALL 0xFFFFFFFF
+
+/** In the following we define groups that help building doxygen documentation */
+
+/** @defgroup core OpenMAX IL core
+ * Functions and structure related to the OMX IL core
+ */
+
+ /** @defgroup comp OpenMAX IL component
+ * Functions and structure related to the OMX IL component
+ */
+
+/** @defgroup rpm Resource and Policy Management
+ * Structures for resource and policy management of components
+ */
+
+/** @defgroup buf Buffer Management
+ * Buffer handling functions and structures
+ */
+
+/** @defgroup tun Tunneling
+ * @ingroup core comp
+ * Structures and functions to manage tunnels among component ports
+ */
+
+/** @defgroup cp Content Pipes
+ * @ingroup core
+ */
+
+ /** @defgroup metadata Metadata handling
+ *
+ */
+
+/** OMX_U8 is an 8 bit unsigned quantity that is byte aligned */
+typedef unsigned char OMX_U8;
+
+/** OMX_S8 is an 8 bit signed quantity that is byte aligned */
+typedef signed char OMX_S8;
+
+/** OMX_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */
+typedef unsigned short OMX_U16;
+
+/** OMX_S16 is a 16 bit signed quantity that is 16 bit word aligned */
+typedef signed short OMX_S16;
+
+/** OMX_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */
+typedef unsigned long OMX_U32;
+
+/** OMX_S32 is a 32 bit signed quantity that is 32 bit word aligned */
+typedef signed long OMX_S32;
+
+
+/* Users with compilers that cannot accept the "long long" designation should
+ define the OMX_SKIP64BIT macro. It should be noted that this may cause
+ some components to fail to compile if the component was written to require
+ 64 bit integral types. However, these components would NOT compile anyway
+ since the compiler does not support the way the component was written.
+*/
+#ifndef OMX_SKIP64BIT
+#ifdef __SYMBIAN32__
+/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
+typedef unsigned long long OMX_U64;
+
+/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */
+typedef signed long long OMX_S64;
+
+#elif defined(WIN32)
+
+/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
+typedef unsigned __int64 OMX_U64;
+
+/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */
+typedef signed __int64 OMX_S64;
+
+#else /* WIN32 */
+
+/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
+typedef unsigned long long OMX_U64;
+
+/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */
+typedef signed long long OMX_S64;
+
+#endif /* WIN32 */
+#endif
+
+
+/** The OMX_BOOL type is intended to be used to represent a true or a false
+ value when passing parameters to and from the OMX core and components. The
+ OMX_BOOL is a 32 bit quantity and is aligned on a 32 bit word boundary.
+ */
+typedef enum OMX_BOOL {
+ OMX_FALSE = 0,
+ OMX_TRUE = !OMX_FALSE,
+ OMX_BOOL_MAX = 0x7FFFFFFF
+} OMX_BOOL;
+
+/** The OMX_PTR type is intended to be used to pass pointers between the OMX
+ applications and the OMX Core and components. This is a 32 bit pointer and
+ is aligned on a 32 bit boundary.
+ */
+typedef void* OMX_PTR;
+
+/** The OMX_STRING type is intended to be used to pass "C" type strings between
+ the application and the core and component. The OMX_STRING type is a 32
+ bit pointer to a zero terminated string. The pointer is word aligned and
+ the string is byte aligned.
+ */
+typedef char* OMX_STRING;
+
+/** The OMX_BYTE type is intended to be used to pass arrays of bytes such as
+ buffers between the application and the component and core. The OMX_BYTE
+ type is a 32 bit pointer to a zero terminated string. The pointer is word
+ aligned and the string is byte aligned.
+ */
+typedef unsigned char* OMX_BYTE;
+
+/** OMX_UUIDTYPE is a very long unique identifier to uniquely identify
+ at runtime. This identifier should be generated by a component in a way
+ that guarantees that every instance of the identifier running on the system
+ is unique. */
+typedef unsigned char OMX_UUIDTYPE[128];
+
+/** The OMX_DIRTYPE enumeration is used to indicate if a port is an input or
+ an output port. This enumeration is common across all component types.
+ */
+typedef enum OMX_DIRTYPE
+{
+ OMX_DirInput, /**< Port is an input port */
+ OMX_DirOutput, /**< Port is an output port */
+ OMX_DirMax = 0x7FFFFFFF
+} OMX_DIRTYPE;
+
+/** The OMX_ENDIANTYPE enumeration is used to indicate the bit ordering
+ for numerical data (i.e. big endian, or little endian).
+ */
+typedef enum OMX_ENDIANTYPE
+{
+ OMX_EndianBig, /**< big endian */
+ OMX_EndianLittle, /**< little endian */
+ OMX_EndianMax = 0x7FFFFFFF
+} OMX_ENDIANTYPE;
+
+
+/** The OMX_NUMERICALDATATYPE enumeration is used to indicate if data
+ is signed or unsigned
+ */
+typedef enum OMX_NUMERICALDATATYPE
+{
+ OMX_NumericalDataSigned, /**< signed data */
+ OMX_NumericalDataUnsigned, /**< unsigned data */
+ OMX_NumercialDataMax = 0x7FFFFFFF
+} OMX_NUMERICALDATATYPE;
+
+
+/** Unsigned bounded value type */
+typedef struct OMX_BU32 {
+ OMX_U32 nValue; /**< actual value */
+ OMX_U32 nMin; /**< minimum for value (i.e. nValue >= nMin) */
+ OMX_U32 nMax; /**< maximum for value (i.e. nValue <= nMax) */
+} OMX_BU32;
+
+
+/** Signed bounded value type */
+typedef struct OMX_BS32 {
+ OMX_S32 nValue; /**< actual value */
+ OMX_S32 nMin; /**< minimum for value (i.e. nValue >= nMin) */
+ OMX_S32 nMax; /**< maximum for value (i.e. nValue <= nMax) */
+} OMX_BS32;
+
+
+/** Structure representing some time or duration in microseconds. This structure
+ * must be interpreted as a signed 64 bit value. The quantity is signed to accommodate
+ * negative deltas and preroll scenarios. The quantity is represented in microseconds
+ * to accomodate high resolution timestamps (e.g. DVD presentation timestamps based
+ * on a 90kHz clock) and to allow more accurate and synchronized delivery (e.g.
+ * individual audio samples delivered at 192 kHz). The quantity is 64 bit to
+ * accommodate a large dynamic range (signed 32 bit values would allow only for plus
+ * or minus 35 minutes).
+ *
+ * Implementations with limited precision may convert the signed 64 bit value to
+ * a signed 32 bit value internally but risk loss of precision.
+ */
+#ifndef OMX_SKIP64BIT
+typedef OMX_S64 OMX_TICKS;
+#else
+typedef struct OMX_TICKS
+{
+ OMX_U32 nLowPart; /** low bits of the signed 64 bit tick value */
+ OMX_U32 nHighPart; /** high bits of the signed 64 bit tick value */
+} OMX_TICKS;
+#endif
+#define OMX_TICKS_PER_SECOND 1000000
+
+/** Define the public interface for the OMX Handle. The core will not use
+ this value internally, but the application should only use this value.
+ */
+typedef void* OMX_HANDLETYPE;
+
+typedef struct OMX_MARKTYPE
+{
+ OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will
+ generate a mark event upon
+ processing the mark. */
+ OMX_PTR pMarkData; /**< Application specific data associated with
+ the mark sent on a mark event to disambiguate
+ this mark from others. */
+} OMX_MARKTYPE;
+
+
+/** OMX_NATIVE_DEVICETYPE is used to map a OMX video port to the
+ * platform & operating specific object used to reference the display
+ * or can be used by a audio port for native audio rendering */
+typedef void* OMX_NATIVE_DEVICETYPE;
+
+/** OMX_NATIVE_WINDOWTYPE is used to map a OMX video port to the
+ * platform & operating specific object used to reference the window */
+typedef void* OMX_NATIVE_WINDOWTYPE;
+
+/** The OMX_VERSIONTYPE union is used to specify the version for
+ a structure or component. For a component, the version is entirely
+ specified by the component vendor. Components doing the same function
+ from different vendors may or may not have the same version. For
+ structures, the version shall be set by the entity that allocates the
+ structure. For structures specified in the OMX 1.1 specification, the
+ value of the version shall be set to 1.1.0.0 in all cases. Access to the
+ OMX_VERSIONTYPE can be by a single 32 bit access (e.g. by nVersion) or
+ by accessing one of the structure elements to, for example, check only
+ the Major revision.
+ */
+typedef union OMX_VERSIONTYPE
+{
+ struct
+ {
+ OMX_U8 nVersionMajor; /**< Major version accessor element */
+ OMX_U8 nVersionMinor; /**< Minor version accessor element */
+ OMX_U8 nRevision; /**< Revision version accessor element */
+ OMX_U8 nStep; /**< Step version accessor element */
+ } s;
+ OMX_U32 nVersion; /**< 32 bit value to make accessing the
+ version easily done in a single word
+ size copy/compare operation */
+} OMX_VERSIONTYPE;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
diff --git a/include/media/stagefright/openmax/OMX_Video.h b/include/media/stagefright/openmax/OMX_Video.h
new file mode 100644
index 0000000..2738bdc
--- /dev/null
+++ b/include/media/stagefright/openmax/OMX_Video.h
@@ -0,0 +1,1077 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * 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.
+ * -------------------------------------------------------------------
+ */
+/**
+ * Copyright (c) 2008 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject
+ * to the following conditions:
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/**
+ * @file OMX_Video.h - OpenMax IL version 1.1.2
+ * The structures is needed by Video components to exchange parameters
+ * and configuration data with OMX components.
+ */
+#ifndef OMX_Video_h
+#define OMX_Video_h
+
+/** @defgroup video OpenMAX IL Video Domain
+ * @ingroup iv
+ * Structures for OpenMAX IL Video domain
+ * @{
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/**
+ * Each OMX header must include all required header files to allow the
+ * header to compile without errors. The includes below are required
+ * for this header file to compile successfully
+ */
+
+#include <OMX_IVCommon.h>
+
+
+/**
+ * Enumeration used to define the possible video compression codings.
+ * NOTE: This essentially refers to file extensions. If the coding is
+ * being used to specify the ENCODE type, then additional work
+ * must be done to configure the exact flavor of the compression
+ * to be used. For decode cases where the user application can
+ * not differentiate between MPEG-4 and H.264 bit streams, it is
+ * up to the codec to handle this.
+ */
+typedef enum OMX_VIDEO_CODINGTYPE {
+ OMX_VIDEO_CodingUnused, /**< Value when coding is N/A */
+ OMX_VIDEO_CodingAutoDetect, /**< Autodetection of coding type */
+ OMX_VIDEO_CodingMPEG2, /**< AKA: H.262 */
+ OMX_VIDEO_CodingH263, /**< H.263 */
+ OMX_VIDEO_CodingMPEG4, /**< MPEG-4 */
+ OMX_VIDEO_CodingWMV, /**< all versions of Windows Media Video */
+ OMX_VIDEO_CodingRV, /**< all versions of Real Video */
+ OMX_VIDEO_CodingAVC, /**< H.264/AVC */
+ OMX_VIDEO_CodingMJPEG, /**< Motion JPEG */
+ OMX_VIDEO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_CodingMax = 0x7FFFFFFF
+} OMX_VIDEO_CODINGTYPE;
+
+
+/**
+ * Data structure used to define a video path. The number of Video paths for
+ * input and output will vary by type of the Video component.
+ *
+ * Input (aka Source) : zero Inputs, one Output,
+ * Splitter : one Input, 2 or more Outputs,
+ * Processing Element : one Input, one output,
+ * Mixer : 2 or more inputs, one output,
+ * Output (aka Sink) : one Input, zero outputs.
+ *
+ * The PortDefinition structure is used to define all of the parameters
+ * necessary for the compliant component to setup an input or an output video
+ * path. If additional vendor specific data is required, it should be
+ * transmitted to the component using the CustomCommand function. Compliant
+ * components will prepopulate this structure with optimal values during the
+ * GetDefaultInitParams command.
+ *
+ * STRUCT MEMBERS:
+ * cMIMEType : MIME type of data for the port
+ * pNativeRender : Platform specific reference for a display if a
+ * sync, otherwise this field is 0
+ * nFrameWidth : Width of frame to be used on channel if
+ * uncompressed format is used. Use 0 for unknown,
+ * don't care or variable
+ * nFrameHeight : Height of frame to be used on channel if
+ * uncompressed format is used. Use 0 for unknown,
+ * don't care or variable
+ * nStride : Number of bytes per span of an image
+ * (i.e. indicates the number of bytes to get
+ * from span N to span N+1, where negative stride
+ * indicates the image is bottom up
+ * nSliceHeight : Height used when encoding in slices
+ * nBitrate : Bit rate of frame to be used on channel if
+ * compressed format is used. Use 0 for unknown,
+ * don't care or variable
+ * xFramerate : Frame rate to be used on channel if uncompressed
+ * format is used. Use 0 for unknown, don't care or
+ * variable. Units are Q16 frames per second.
+ * bFlagErrorConcealment : Turns on error concealment if it is supported by
+ * the OMX component
+ * eCompressionFormat : Compression format used in this instance of the
+ * component. When OMX_VIDEO_CodingUnused is
+ * specified, eColorFormat is used
+ * eColorFormat : Decompressed format used by this component
+ * pNativeWindow : Platform specific reference for a window object if a
+ * display sink , otherwise this field is 0x0.
+ */
+typedef struct OMX_VIDEO_PORTDEFINITIONTYPE {
+ OMX_STRING cMIMEType;
+ OMX_NATIVE_DEVICETYPE pNativeRender;
+ OMX_U32 nFrameWidth;
+ OMX_U32 nFrameHeight;
+ OMX_S32 nStride;
+ OMX_U32 nSliceHeight;
+ OMX_U32 nBitrate;
+ OMX_U32 xFramerate;
+ OMX_BOOL bFlagErrorConcealment;
+ OMX_VIDEO_CODINGTYPE eCompressionFormat;
+ OMX_COLOR_FORMATTYPE eColorFormat;
+ OMX_NATIVE_WINDOWTYPE pNativeWindow;
+} OMX_VIDEO_PORTDEFINITIONTYPE;
+
+/**
+ * Port format parameter. This structure is used to enumerate the various
+ * data input/output format supported by the port.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Indicates which port to set
+ * nIndex : Indicates the enumeration index for the format from
+ * 0x0 to N-1
+ * eCompressionFormat : Compression format used in this instance of the
+ * component. When OMX_VIDEO_CodingUnused is specified,
+ * eColorFormat is used
+ * eColorFormat : Decompressed format used by this component
+ * xFrameRate : Indicates the video frame rate in Q16 format
+ */
+typedef struct OMX_VIDEO_PARAM_PORTFORMATTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nIndex;
+ OMX_VIDEO_CODINGTYPE eCompressionFormat;
+ OMX_COLOR_FORMATTYPE eColorFormat;
+ OMX_U32 xFramerate;
+} OMX_VIDEO_PARAM_PORTFORMATTYPE;
+
+
+/**
+ * This is a structure for configuring video compression quantization
+ * parameter values. Codecs may support different QP values for different
+ * frame types.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version info
+ * nPortIndex : Port that this structure applies to
+ * nQpI : QP value to use for index frames
+ * nQpP : QP value to use for P frames
+ * nQpB : QP values to use for bidirectional frames
+ */
+typedef struct OMX_VIDEO_PARAM_QUANTIZATIONTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nQpI;
+ OMX_U32 nQpP;
+ OMX_U32 nQpB;
+} OMX_VIDEO_PARAM_QUANTIZATIONTYPE;
+
+
+/**
+ * Structure for configuration of video fast update parameters.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version info
+ * nPortIndex : Port that this structure applies to
+ * bEnableVFU : Enable/Disable video fast update
+ * nFirstGOB : Specifies the number of the first macroblock row
+ * nFirstMB : specifies the first MB relative to the specified first GOB
+ * nNumMBs : Specifies the number of MBs to be refreshed from nFirstGOB
+ * and nFirstMB
+ */
+typedef struct OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL bEnableVFU;
+ OMX_U32 nFirstGOB;
+ OMX_U32 nFirstMB;
+ OMX_U32 nNumMBs;
+} OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE;
+
+
+/**
+ * Enumeration of possible bitrate control types
+ */
+typedef enum OMX_VIDEO_CONTROLRATETYPE {
+ OMX_Video_ControlRateDisable,
+ OMX_Video_ControlRateVariable,
+ OMX_Video_ControlRateConstant,
+ OMX_Video_ControlRateVariableSkipFrames,
+ OMX_Video_ControlRateConstantSkipFrames,
+ OMX_Video_ControlRateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_Video_ControlRateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_Video_ControlRateMax = 0x7FFFFFFF
+} OMX_VIDEO_CONTROLRATETYPE;
+
+
+/**
+ * Structure for configuring bitrate mode of a codec.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the struct in bytes
+ * nVersion : OMX spec version info
+ * nPortIndex : Port that this struct applies to
+ * eControlRate : Control rate type enum
+ * nTargetBitrate : Target bitrate to encode with
+ */
+typedef struct OMX_VIDEO_PARAM_BITRATETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_VIDEO_CONTROLRATETYPE eControlRate;
+ OMX_U32 nTargetBitrate;
+} OMX_VIDEO_PARAM_BITRATETYPE;
+
+
+/**
+ * Enumeration of possible motion vector (MV) types
+ */
+typedef enum OMX_VIDEO_MOTIONVECTORTYPE {
+ OMX_Video_MotionVectorPixel,
+ OMX_Video_MotionVectorHalfPel,
+ OMX_Video_MotionVectorQuarterPel,
+ OMX_Video_MotionVectorEighthPel,
+ OMX_Video_MotionVectorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_Video_MotionVectorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_Video_MotionVectorMax = 0x7FFFFFFF
+} OMX_VIDEO_MOTIONVECTORTYPE;
+
+
+/**
+ * Structure for configuring the number of motion vectors used as well
+ * as their accuracy.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the struct in bytes
+ * nVersion : OMX spec version info
+ * nPortIndex : port that this structure applies to
+ * eAccuracy : Enumerated MV accuracy
+ * bUnrestrictedMVs : Allow unrestricted MVs
+ * bFourMV : Allow use of 4 MVs
+ * sXSearchRange : Search range in horizontal direction for MVs
+ * sYSearchRange : Search range in vertical direction for MVs
+ */
+typedef struct OMX_VIDEO_PARAM_MOTIONVECTORTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_VIDEO_MOTIONVECTORTYPE eAccuracy;
+ OMX_BOOL bUnrestrictedMVs;
+ OMX_BOOL bFourMV;
+ OMX_S32 sXSearchRange;
+ OMX_S32 sYSearchRange;
+} OMX_VIDEO_PARAM_MOTIONVECTORTYPE;
+
+
+/**
+ * Enumeration of possible methods to use for Intra Refresh
+ */
+typedef enum OMX_VIDEO_INTRAREFRESHTYPE {
+ OMX_VIDEO_IntraRefreshCyclic,
+ OMX_VIDEO_IntraRefreshAdaptive,
+ OMX_VIDEO_IntraRefreshBoth,
+ OMX_VIDEO_IntraRefreshKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_IntraRefreshVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_IntraRefreshMax = 0x7FFFFFFF
+} OMX_VIDEO_INTRAREFRESHTYPE;
+
+
+/**
+ * Structure for configuring intra refresh mode
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eRefreshMode : Cyclic, Adaptive, or Both
+ * nAirMBs : Number of intra macroblocks to refresh in a frame when
+ * AIR is enabled
+ * nAirRef : Number of times a motion marked macroblock has to be
+ * intra coded
+ * nCirMBs : Number of consecutive macroblocks to be coded as "intra"
+ * when CIR is enabled
+ */
+typedef struct OMX_VIDEO_PARAM_INTRAREFRESHTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_VIDEO_INTRAREFRESHTYPE eRefreshMode;
+ OMX_U32 nAirMBs;
+ OMX_U32 nAirRef;
+ OMX_U32 nCirMBs;
+} OMX_VIDEO_PARAM_INTRAREFRESHTYPE;
+
+
+/**
+ * Structure for enabling various error correction methods for video
+ * compression.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * bEnableHEC : Enable/disable header extension codes (HEC)
+ * bEnableResync : Enable/disable resynchronization markers
+ * nResynchMarkerSpacing : Resynch markers interval (in bits) to be
+ * applied in the stream
+ * bEnableDataPartitioning : Enable/disable data partitioning
+ * bEnableRVLC : Enable/disable reversible variable length
+ * coding
+ */
+typedef struct OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL bEnableHEC;
+ OMX_BOOL bEnableResync;
+ OMX_U32 nResynchMarkerSpacing;
+ OMX_BOOL bEnableDataPartitioning;
+ OMX_BOOL bEnableRVLC;
+} OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE;
+
+
+/**
+ * Configuration of variable block-size motion compensation (VBSMC)
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * b16x16 : Enable inter block search 16x16
+ * b16x8 : Enable inter block search 16x8
+ * b8x16 : Enable inter block search 8x16
+ * b8x8 : Enable inter block search 8x8
+ * b8x4 : Enable inter block search 8x4
+ * b4x8 : Enable inter block search 4x8
+ * b4x4 : Enable inter block search 4x4
+ */
+typedef struct OMX_VIDEO_PARAM_VBSMCTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL b16x16;
+ OMX_BOOL b16x8;
+ OMX_BOOL b8x16;
+ OMX_BOOL b8x8;
+ OMX_BOOL b8x4;
+ OMX_BOOL b4x8;
+ OMX_BOOL b4x4;
+} OMX_VIDEO_PARAM_VBSMCTYPE;
+
+
+/**
+ * H.263 profile types, each profile indicates support for various
+ * performance bounds and different annexes.
+ *
+ * ENUMS:
+ * Baseline : Baseline Profile: H.263 (V1), no optional modes
+ * H320 Coding : H.320 Coding Efficiency Backward Compatibility
+ * Profile: H.263+ (V2), includes annexes I, J, L.4
+ * and T
+ * BackwardCompatible : Backward Compatibility Profile: H.263 (V1),
+ * includes annex F
+ * ISWV2 : Interactive Streaming Wireless Profile: H.263+
+ * (V2), includes annexes I, J, K and T
+ * ISWV3 : Interactive Streaming Wireless Profile: H.263++
+ * (V3), includes profile 3 and annexes V and W.6.3.8
+ * HighCompression : Conversational High Compression Profile: H.263++
+ * (V3), includes profiles 1 & 2 and annexes D and U
+ * Internet : Conversational Internet Profile: H.263++ (V3),
+ * includes profile 5 and annex K
+ * Interlace : Conversational Interlace Profile: H.263++ (V3),
+ * includes profile 5 and annex W.6.3.11
+ * HighLatency : High Latency Profile: H.263++ (V3), includes
+ * profile 6 and annexes O.1 and P.5
+ */
+typedef enum OMX_VIDEO_H263PROFILETYPE {
+ OMX_VIDEO_H263ProfileBaseline = 0x01,
+ OMX_VIDEO_H263ProfileH320Coding = 0x02,
+ OMX_VIDEO_H263ProfileBackwardCompatible = 0x04,
+ OMX_VIDEO_H263ProfileISWV2 = 0x08,
+ OMX_VIDEO_H263ProfileISWV3 = 0x10,
+ OMX_VIDEO_H263ProfileHighCompression = 0x20,
+ OMX_VIDEO_H263ProfileInternet = 0x40,
+ OMX_VIDEO_H263ProfileInterlace = 0x80,
+ OMX_VIDEO_H263ProfileHighLatency = 0x100,
+ OMX_VIDEO_H263ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_H263ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_H263ProfileMax = 0x7FFFFFFF
+} OMX_VIDEO_H263PROFILETYPE;
+
+
+/**
+ * H.263 level types, each level indicates support for various frame sizes,
+ * bit rates, decoder frame rates.
+ */
+typedef enum OMX_VIDEO_H263LEVELTYPE {
+ OMX_VIDEO_H263Level10 = 0x01,
+ OMX_VIDEO_H263Level20 = 0x02,
+ OMX_VIDEO_H263Level30 = 0x04,
+ OMX_VIDEO_H263Level40 = 0x08,
+ OMX_VIDEO_H263Level45 = 0x10,
+ OMX_VIDEO_H263Level50 = 0x20,
+ OMX_VIDEO_H263Level60 = 0x40,
+ OMX_VIDEO_H263Level70 = 0x80,
+ OMX_VIDEO_H263LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_H263LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_H263LevelMax = 0x7FFFFFFF
+} OMX_VIDEO_H263LEVELTYPE;
+
+
+/**
+ * Specifies the picture type. These values should be OR'd to signal all
+ * pictures types which are allowed.
+ *
+ * ENUMS:
+ * Generic Picture Types: I, P and B
+ * H.263 Specific Picture Types: SI and SP
+ * H.264 Specific Picture Types: EI and EP
+ * MPEG-4 Specific Picture Types: S
+ */
+typedef enum OMX_VIDEO_PICTURETYPE {
+ OMX_VIDEO_PictureTypeI = 0x01,
+ OMX_VIDEO_PictureTypeP = 0x02,
+ OMX_VIDEO_PictureTypeB = 0x04,
+ OMX_VIDEO_PictureTypeSI = 0x08,
+ OMX_VIDEO_PictureTypeSP = 0x10,
+ OMX_VIDEO_PictureTypeEI = 0x11,
+ OMX_VIDEO_PictureTypeEP = 0x12,
+ OMX_VIDEO_PictureTypeS = 0x14,
+ OMX_VIDEO_PictureTypeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_PictureTypeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_PictureTypeMax = 0x7FFFFFFF
+} OMX_VIDEO_PICTURETYPE;
+
+
+/**
+ * H.263 Params
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nPFrames : Number of P frames between each I frame
+ * nBFrames : Number of B frames between each I frame
+ * eProfile : H.263 profile(s) to use
+ * eLevel : H.263 level(s) to use
+ * bPLUSPTYPEAllowed : Indicating that it is allowed to use PLUSPTYPE
+ * (specified in the 1998 version of H.263) to
+ * indicate custom picture sizes or clock
+ * frequencies
+ * nAllowedPictureTypes : Specifies the picture types allowed in the
+ * bitstream
+ * bForceRoundingTypeToZero : value of the RTYPE bit (bit 6 of MPPTYPE) is
+ * not constrained. It is recommended to change
+ * the value of the RTYPE bit for each reference
+ * picture in error-free communication
+ * nPictureHeaderRepetition : Specifies the frequency of picture header
+ * repetition
+ * nGOBHeaderInterval : Specifies the interval of non-empty GOB
+ * headers in units of GOBs
+ */
+typedef struct OMX_VIDEO_PARAM_H263TYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nPFrames;
+ OMX_U32 nBFrames;
+ OMX_VIDEO_H263PROFILETYPE eProfile;
+ OMX_VIDEO_H263LEVELTYPE eLevel;
+ OMX_BOOL bPLUSPTYPEAllowed;
+ OMX_U32 nAllowedPictureTypes;
+ OMX_BOOL bForceRoundingTypeToZero;
+ OMX_U32 nPictureHeaderRepetition;
+ OMX_U32 nGOBHeaderInterval;
+} OMX_VIDEO_PARAM_H263TYPE;
+
+
+/**
+ * MPEG-2 profile types, each profile indicates support for various
+ * performance bounds and different annexes.
+ */
+typedef enum OMX_VIDEO_MPEG2PROFILETYPE {
+ OMX_VIDEO_MPEG2ProfileSimple = 0, /**< Simple Profile */
+ OMX_VIDEO_MPEG2ProfileMain, /**< Main Profile */
+ OMX_VIDEO_MPEG2Profile422, /**< 4:2:2 Profile */
+ OMX_VIDEO_MPEG2ProfileSNR, /**< SNR Profile */
+ OMX_VIDEO_MPEG2ProfileSpatial, /**< Spatial Profile */
+ OMX_VIDEO_MPEG2ProfileHigh, /**< High Profile */
+ OMX_VIDEO_MPEG2ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_MPEG2ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_MPEG2ProfileMax = 0x7FFFFFFF
+} OMX_VIDEO_MPEG2PROFILETYPE;
+
+
+/**
+ * MPEG-2 level types, each level indicates support for various frame
+ * sizes, bit rates, decoder frame rates. No need
+ */
+typedef enum OMX_VIDEO_MPEG2LEVELTYPE {
+ OMX_VIDEO_MPEG2LevelLL = 0, /**< Low Level */
+ OMX_VIDEO_MPEG2LevelML, /**< Main Level */
+ OMX_VIDEO_MPEG2LevelH14, /**< High 1440 */
+ OMX_VIDEO_MPEG2LevelHL, /**< High Level */
+ OMX_VIDEO_MPEG2LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_MPEG2LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_MPEG2LevelMax = 0x7FFFFFFF
+} OMX_VIDEO_MPEG2LEVELTYPE;
+
+
+/**
+ * MPEG-2 params
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nPFrames : Number of P frames between each I frame
+ * nBFrames : Number of B frames between each I frame
+ * eProfile : MPEG-2 profile(s) to use
+ * eLevel : MPEG-2 levels(s) to use
+ */
+typedef struct OMX_VIDEO_PARAM_MPEG2TYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nPFrames;
+ OMX_U32 nBFrames;
+ OMX_VIDEO_MPEG2PROFILETYPE eProfile;
+ OMX_VIDEO_MPEG2LEVELTYPE eLevel;
+} OMX_VIDEO_PARAM_MPEG2TYPE;
+
+
+/**
+ * MPEG-4 profile types, each profile indicates support for various
+ * performance bounds and different annexes.
+ *
+ * ENUMS:
+ * - Simple Profile, Levels 1-3
+ * - Simple Scalable Profile, Levels 1-2
+ * - Core Profile, Levels 1-2
+ * - Main Profile, Levels 2-4
+ * - N-bit Profile, Level 2
+ * - Scalable Texture Profile, Level 1
+ * - Simple Face Animation Profile, Levels 1-2
+ * - Simple Face and Body Animation (FBA) Profile, Levels 1-2
+ * - Basic Animated Texture Profile, Levels 1-2
+ * - Hybrid Profile, Levels 1-2
+ * - Advanced Real Time Simple Profiles, Levels 1-4
+ * - Core Scalable Profile, Levels 1-3
+ * - Advanced Coding Efficiency Profile, Levels 1-4
+ * - Advanced Core Profile, Levels 1-2
+ * - Advanced Scalable Texture, Levels 2-3
+ */
+typedef enum OMX_VIDEO_MPEG4PROFILETYPE {
+ OMX_VIDEO_MPEG4ProfileSimple = 0x01,
+ OMX_VIDEO_MPEG4ProfileSimpleScalable = 0x02,
+ OMX_VIDEO_MPEG4ProfileCore = 0x04,
+ OMX_VIDEO_MPEG4ProfileMain = 0x08,
+ OMX_VIDEO_MPEG4ProfileNbit = 0x10,
+ OMX_VIDEO_MPEG4ProfileScalableTexture = 0x20,
+ OMX_VIDEO_MPEG4ProfileSimpleFace = 0x40,
+ OMX_VIDEO_MPEG4ProfileSimpleFBA = 0x80,
+ OMX_VIDEO_MPEG4ProfileBasicAnimated = 0x100,
+ OMX_VIDEO_MPEG4ProfileHybrid = 0x200,
+ OMX_VIDEO_MPEG4ProfileAdvancedRealTime = 0x400,
+ OMX_VIDEO_MPEG4ProfileCoreScalable = 0x800,
+ OMX_VIDEO_MPEG4ProfileAdvancedCoding = 0x1000,
+ OMX_VIDEO_MPEG4ProfileAdvancedCore = 0x2000,
+ OMX_VIDEO_MPEG4ProfileAdvancedScalable = 0x4000,
+ OMX_VIDEO_MPEG4ProfileAdvancedSimple = 0x8000,
+ OMX_VIDEO_MPEG4ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_MPEG4ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_MPEG4ProfileMax = 0x7FFFFFFF
+} OMX_VIDEO_MPEG4PROFILETYPE;
+
+
+/**
+ * MPEG-4 level types, each level indicates support for various frame
+ * sizes, bit rates, decoder frame rates. No need
+ */
+typedef enum OMX_VIDEO_MPEG4LEVELTYPE {
+ OMX_VIDEO_MPEG4Level0 = 0x01, /**< Level 0 */
+ OMX_VIDEO_MPEG4Level0b = 0x02, /**< Level 0b */
+ OMX_VIDEO_MPEG4Level1 = 0x04, /**< Level 1 */
+ OMX_VIDEO_MPEG4Level2 = 0x08, /**< Level 2 */
+ OMX_VIDEO_MPEG4Level3 = 0x10, /**< Level 3 */
+ OMX_VIDEO_MPEG4Level4 = 0x20, /**< Level 4 */
+ OMX_VIDEO_MPEG4Level4a = 0x40, /**< Level 4a */
+ OMX_VIDEO_MPEG4Level5 = 0x80, /**< Level 5 */
+ OMX_VIDEO_MPEG4LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_MPEG4LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_MPEG4LevelMax = 0x7FFFFFFF
+} OMX_VIDEO_MPEG4LEVELTYPE;
+
+
+/**
+ * MPEG-4 configuration. This structure handles configuration options
+ * which are specific to MPEG4 algorithms
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nSliceHeaderSpacing : Number of macroblocks between slice header (H263+
+ * Annex K). Put zero if not used
+ * bSVH : Enable Short Video Header mode
+ * bGov : Flag to enable GOV
+ * nPFrames : Number of P frames between each I frame (also called
+ * GOV period)
+ * nBFrames : Number of B frames between each I frame
+ * nIDCVLCThreshold : Value of intra DC VLC threshold
+ * bACPred : Flag to use ac prediction
+ * nMaxPacketSize : Maximum size of packet in bytes.
+ * nTimeIncRes : Used to pass VOP time increment resolution for MPEG4.
+ * Interpreted as described in MPEG4 standard.
+ * eProfile : MPEG-4 profile(s) to use.
+ * eLevel : MPEG-4 level(s) to use.
+ * nAllowedPictureTypes : Specifies the picture types allowed in the bitstream
+ * nHeaderExtension : Specifies the number of consecutive video packet
+ * headers within a VOP
+ * bReversibleVLC : Specifies whether reversible variable length coding
+ * is in use
+ */
+typedef struct OMX_VIDEO_PARAM_MPEG4TYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nSliceHeaderSpacing;
+ OMX_BOOL bSVH;
+ OMX_BOOL bGov;
+ OMX_U32 nPFrames;
+ OMX_U32 nBFrames;
+ OMX_U32 nIDCVLCThreshold;
+ OMX_BOOL bACPred;
+ OMX_U32 nMaxPacketSize;
+ OMX_U32 nTimeIncRes;
+ OMX_VIDEO_MPEG4PROFILETYPE eProfile;
+ OMX_VIDEO_MPEG4LEVELTYPE eLevel;
+ OMX_U32 nAllowedPictureTypes;
+ OMX_U32 nHeaderExtension;
+ OMX_BOOL bReversibleVLC;
+} OMX_VIDEO_PARAM_MPEG4TYPE;
+
+
+/**
+ * WMV Versions
+ */
+typedef enum OMX_VIDEO_WMVFORMATTYPE {
+ OMX_VIDEO_WMVFormatUnused = 0x01, /**< Format unused or unknown */
+ OMX_VIDEO_WMVFormat7 = 0x02, /**< Windows Media Video format 7 */
+ OMX_VIDEO_WMVFormat8 = 0x04, /**< Windows Media Video format 8 */
+ OMX_VIDEO_WMVFormat9 = 0x08, /**< Windows Media Video format 9 */
+ OMX_VIDEO_WMFFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_WMFFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_WMVFormatMax = 0x7FFFFFFF
+} OMX_VIDEO_WMVFORMATTYPE;
+
+
+/**
+ * WMV Params
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eFormat : Version of WMV stream / data
+ */
+typedef struct OMX_VIDEO_PARAM_WMVTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_VIDEO_WMVFORMATTYPE eFormat;
+} OMX_VIDEO_PARAM_WMVTYPE;
+
+
+/**
+ * Real Video Version
+ */
+typedef enum OMX_VIDEO_RVFORMATTYPE {
+ OMX_VIDEO_RVFormatUnused = 0, /**< Format unused or unknown */
+ OMX_VIDEO_RVFormat8, /**< Real Video format 8 */
+ OMX_VIDEO_RVFormat9, /**< Real Video format 9 */
+ OMX_VIDEO_RVFormatG2, /**< Real Video Format G2 */
+ OMX_VIDEO_RVFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_RVFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_RVFormatMax = 0x7FFFFFFF
+} OMX_VIDEO_RVFORMATTYPE;
+
+
+/**
+ * Real Video Params
+ *
+ * STUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * eFormat : Version of RV stream / data
+ * nBitsPerPixel : Bits per pixel coded in the frame
+ * nPaddedWidth : Padded width in pixel of a video frame
+ * nPaddedHeight : Padded Height in pixels of a video frame
+ * nFrameRate : Rate of video in frames per second
+ * nBitstreamFlags : Flags which internal information about the bitstream
+ * nBitstreamVersion : Bitstream version
+ * nMaxEncodeFrameSize: Max encoded frame size
+ * bEnablePostFilter : Turn on/off post filter
+ * bEnableTemporalInterpolation : Turn on/off temporal interpolation
+ * bEnableLatencyMode : When enabled, the decoder does not display a decoded
+ * frame until it has detected that no enhancement layer
+ * frames or dependent B frames will be coming. This
+ * detection usually occurs when a subsequent non-B
+ * frame is encountered
+ */
+typedef struct OMX_VIDEO_PARAM_RVTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_VIDEO_RVFORMATTYPE eFormat;
+ OMX_U16 nBitsPerPixel;
+ OMX_U16 nPaddedWidth;
+ OMX_U16 nPaddedHeight;
+ OMX_U32 nFrameRate;
+ OMX_U32 nBitstreamFlags;
+ OMX_U32 nBitstreamVersion;
+ OMX_U32 nMaxEncodeFrameSize;
+ OMX_BOOL bEnablePostFilter;
+ OMX_BOOL bEnableTemporalInterpolation;
+ OMX_BOOL bEnableLatencyMode;
+} OMX_VIDEO_PARAM_RVTYPE;
+
+
+/**
+ * AVC profile types, each profile indicates support for various
+ * performance bounds and different annexes.
+ */
+typedef enum OMX_VIDEO_AVCPROFILETYPE {
+ OMX_VIDEO_AVCProfileBaseline = 0x01, /**< Baseline profile */
+ OMX_VIDEO_AVCProfileMain = 0x02, /**< Main profile */
+ OMX_VIDEO_AVCProfileExtended = 0x04, /**< Extended profile */
+ OMX_VIDEO_AVCProfileHigh = 0x08, /**< High profile */
+ OMX_VIDEO_AVCProfileHigh10 = 0x10, /**< High 10 profile */
+ OMX_VIDEO_AVCProfileHigh422 = 0x20, /**< High 4:2:2 profile */
+ OMX_VIDEO_AVCProfileHigh444 = 0x40, /**< High 4:4:4 profile */
+ OMX_VIDEO_AVCProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_AVCProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_AVCProfileMax = 0x7FFFFFFF
+} OMX_VIDEO_AVCPROFILETYPE;
+
+
+/**
+ * AVC level types, each level indicates support for various frame sizes,
+ * bit rates, decoder frame rates. No need
+ */
+typedef enum OMX_VIDEO_AVCLEVELTYPE {
+ OMX_VIDEO_AVCLevel1 = 0x01, /**< Level 1 */
+ OMX_VIDEO_AVCLevel1b = 0x02, /**< Level 1b */
+ OMX_VIDEO_AVCLevel11 = 0x04, /**< Level 1.1 */
+ OMX_VIDEO_AVCLevel12 = 0x08, /**< Level 1.2 */
+ OMX_VIDEO_AVCLevel13 = 0x10, /**< Level 1.3 */
+ OMX_VIDEO_AVCLevel2 = 0x20, /**< Level 2 */
+ OMX_VIDEO_AVCLevel21 = 0x40, /**< Level 2.1 */
+ OMX_VIDEO_AVCLevel22 = 0x80, /**< Level 2.2 */
+ OMX_VIDEO_AVCLevel3 = 0x100, /**< Level 3 */
+ OMX_VIDEO_AVCLevel31 = 0x200, /**< Level 3.1 */
+ OMX_VIDEO_AVCLevel32 = 0x400, /**< Level 3.2 */
+ OMX_VIDEO_AVCLevel4 = 0x800, /**< Level 4 */
+ OMX_VIDEO_AVCLevel41 = 0x1000, /**< Level 4.1 */
+ OMX_VIDEO_AVCLevel42 = 0x2000, /**< Level 4.2 */
+ OMX_VIDEO_AVCLevel5 = 0x4000, /**< Level 5 */
+ OMX_VIDEO_AVCLevel51 = 0x8000, /**< Level 5.1 */
+ OMX_VIDEO_AVCLevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_AVCLevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_AVCLevelMax = 0x7FFFFFFF
+} OMX_VIDEO_AVCLEVELTYPE;
+
+
+/**
+ * AVC loop filter modes
+ *
+ * OMX_VIDEO_AVCLoopFilterEnable : Enable
+ * OMX_VIDEO_AVCLoopFilterDisable : Disable
+ * OMX_VIDEO_AVCLoopFilterDisableSliceBoundary : Disabled on slice boundaries
+ */
+typedef enum OMX_VIDEO_AVCLOOPFILTERTYPE {
+ OMX_VIDEO_AVCLoopFilterEnable = 0,
+ OMX_VIDEO_AVCLoopFilterDisable,
+ OMX_VIDEO_AVCLoopFilterDisableSliceBoundary,
+ OMX_VIDEO_AVCLoopFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_AVCLoopFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_AVCLoopFilterMax = 0x7FFFFFFF
+} OMX_VIDEO_AVCLOOPFILTERTYPE;
+
+
+/**
+ * AVC params
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nSliceHeaderSpacing : Number of macroblocks between slice header, put
+ * zero if not used
+ * nPFrames : Number of P frames between each I frame
+ * nBFrames : Number of B frames between each I frame
+ * bUseHadamard : Enable/disable Hadamard transform
+ * nRefFrames : Max number of reference frames to use for inter
+ * motion search (1-16)
+ * nRefIdxTrailing : Pic param set ref frame index (index into ref
+ * frame buffer of trailing frames list), B frame
+ * support
+ * nRefIdxForward : Pic param set ref frame index (index into ref
+ * frame buffer of forward frames list), B frame
+ * support
+ * bEnableUEP : Enable/disable unequal error protection. This
+ * is only valid of data partitioning is enabled.
+ * bEnableFMO : Enable/disable flexible macroblock ordering
+ * bEnableASO : Enable/disable arbitrary slice ordering
+ * bEnableRS : Enable/disable sending of redundant slices
+ * eProfile : AVC profile(s) to use
+ * eLevel : AVC level(s) to use
+ * nAllowedPictureTypes : Specifies the picture types allowed in the
+ * bitstream
+ * bFrameMBsOnly : specifies that every coded picture of the
+ * coded video sequence is a coded frame
+ * containing only frame macroblocks
+ * bMBAFF : Enable/disable switching between frame and
+ * field macroblocks within a picture
+ * bEntropyCodingCABAC : Entropy decoding method to be applied for the
+ * syntax elements for which two descriptors appear
+ * in the syntax tables
+ * bWeightedPPrediction : Enable/disable weighted prediction shall not
+ * be applied to P and SP slices
+ * nWeightedBipredicitonMode : Default weighted prediction is applied to B
+ * slices
+ * bconstIpred : Enable/disable intra prediction
+ * bDirect8x8Inference : Specifies the method used in the derivation
+ * process for luma motion vectors for B_Skip,
+ * B_Direct_16x16 and B_Direct_8x8 as specified
+ * in subclause 8.4.1.2 of the AVC spec
+ * bDirectSpatialTemporal : Flag indicating spatial or temporal direct
+ * mode used in B slice coding (related to
+ * bDirect8x8Inference) . Spatial direct mode is
+ * more common and should be the default.
+ * nCabacInitIdx : Index used to init CABAC contexts
+ * eLoopFilterMode : Enable/disable loop filter
+ */
+typedef struct OMX_VIDEO_PARAM_AVCTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nSliceHeaderSpacing;
+ OMX_U32 nPFrames;
+ OMX_U32 nBFrames;
+ OMX_BOOL bUseHadamard;
+ OMX_U32 nRefFrames;
+ OMX_U32 nRefIdx10ActiveMinus1;
+ OMX_U32 nRefIdx11ActiveMinus1;
+ OMX_BOOL bEnableUEP;
+ OMX_BOOL bEnableFMO;
+ OMX_BOOL bEnableASO;
+ OMX_BOOL bEnableRS;
+ OMX_VIDEO_AVCPROFILETYPE eProfile;
+ OMX_VIDEO_AVCLEVELTYPE eLevel;
+ OMX_U32 nAllowedPictureTypes;
+ OMX_BOOL bFrameMBsOnly;
+ OMX_BOOL bMBAFF;
+ OMX_BOOL bEntropyCodingCABAC;
+ OMX_BOOL bWeightedPPrediction;
+ OMX_U32 nWeightedBipredicitonMode;
+ OMX_BOOL bconstIpred ;
+ OMX_BOOL bDirect8x8Inference;
+ OMX_BOOL bDirectSpatialTemporal;
+ OMX_U32 nCabacInitIdc;
+ OMX_VIDEO_AVCLOOPFILTERTYPE eLoopFilterMode;
+} OMX_VIDEO_PARAM_AVCTYPE;
+
+typedef struct OMX_VIDEO_PARAM_PROFILELEVELTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 eProfile; /**< type is OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE,
+ or OMX_VIDEO_MPEG4PROFILETYPE depending on context */
+ OMX_U32 eLevel; /**< type is OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE,
+ or OMX_VIDEO_MPEG4PROFILETYPE depending on context */
+ OMX_U32 nProfileIndex; /**< Used to query for individual profile support information,
+ This parameter is valid only for
+ OMX_IndexParamVideoProfileLevelQuerySupported index,
+ For all other indices this parameter is to be ignored. */
+} OMX_VIDEO_PARAM_PROFILELEVELTYPE;
+
+/**
+ * Structure for dynamically configuring bitrate mode of a codec.
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the struct in bytes
+ * nVersion : OMX spec version info
+ * nPortIndex : Port that this struct applies to
+ * nEncodeBitrate : Target average bitrate to be generated in bps
+ */
+typedef struct OMX_VIDEO_CONFIG_BITRATETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nEncodeBitrate;
+} OMX_VIDEO_CONFIG_BITRATETYPE;
+
+/**
+ * Defines Encoder Frame Rate setting
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * xEncodeFramerate : Encoding framerate represented in Q16 format
+ */
+typedef struct OMX_CONFIG_FRAMERATETYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 xEncodeFramerate; /* Q16 format */
+} OMX_CONFIG_FRAMERATETYPE;
+
+typedef struct OMX_CONFIG_INTRAREFRESHVOPTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL IntraRefreshVOP;
+} OMX_CONFIG_INTRAREFRESHVOPTYPE;
+
+typedef struct OMX_CONFIG_MACROBLOCKERRORMAPTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nErrMapSize; /* Size of the Error Map in bytes */
+ OMX_U8 ErrMap[1]; /* Error map hint */
+} OMX_CONFIG_MACROBLOCKERRORMAPTYPE;
+
+typedef struct OMX_CONFIG_MBERRORREPORTINGTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_BOOL bEnabled;
+} OMX_CONFIG_MBERRORREPORTINGTYPE;
+
+typedef struct OMX_PARAM_MACROBLOCKSTYPE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nMacroblocks;
+} OMX_PARAM_MACROBLOCKSTYPE;
+
+/**
+ * AVC Slice Mode modes
+ *
+ * OMX_VIDEO_SLICEMODE_AVCDefault : Normal frame encoding, one slice per frame
+ * OMX_VIDEO_SLICEMODE_AVCMBSlice : NAL mode, number of MBs per frame
+ * OMX_VIDEO_SLICEMODE_AVCByteSlice : NAL mode, number of bytes per frame
+ */
+typedef enum OMX_VIDEO_AVCSLICEMODETYPE {
+ OMX_VIDEO_SLICEMODE_AVCDefault = 0,
+ OMX_VIDEO_SLICEMODE_AVCMBSlice,
+ OMX_VIDEO_SLICEMODE_AVCByteSlice,
+ OMX_VIDEO_SLICEMODE_AVCKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
+ OMX_VIDEO_SLICEMODE_AVCVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
+ OMX_VIDEO_SLICEMODE_AVCLevelMax = 0x7FFFFFFF
+} OMX_VIDEO_AVCSLICEMODETYPE;
+
+/**
+ * AVC FMO Slice Mode Params
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nNumSliceGroups : Specifies the number of slice groups
+ * nSliceGroupMapType : Specifies the type of slice groups
+ * eSliceMode : Specifies the type of slice
+ */
+typedef struct OMX_VIDEO_PARAM_AVCSLICEFMO {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U8 nNumSliceGroups;
+ OMX_U8 nSliceGroupMapType;
+ OMX_VIDEO_AVCSLICEMODETYPE eSliceMode;
+} OMX_VIDEO_PARAM_AVCSLICEFMO;
+
+/**
+ * AVC IDR Period Configs
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nIDRPeriod : Specifies periodicity of IDR frames
+ * nPFrames : Specifies internal of coding Intra frames
+ */
+typedef struct OMX_VIDEO_CONFIG_AVCINTRAPERIOD {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nIDRPeriod;
+ OMX_U32 nPFrames;
+} OMX_VIDEO_CONFIG_AVCINTRAPERIOD;
+
+/**
+ * AVC NAL Size Configs
+ *
+ * STRUCT MEMBERS:
+ * nSize : Size of the structure in bytes
+ * nVersion : OMX specification version information
+ * nPortIndex : Port that this structure applies to
+ * nNaluBytes : Specifies the NAL unit size
+ */
+typedef struct OMX_VIDEO_CONFIG_NALSIZE {
+ OMX_U32 nSize;
+ OMX_VERSIONTYPE nVersion;
+ OMX_U32 nPortIndex;
+ OMX_U32 nNaluBytes;
+} OMX_VIDEO_CONFIG_NALSIZE;
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+/* File EOF */
+
diff --git a/include/surfaceflinger/ISurfaceComposer.h b/include/surfaceflinger/ISurfaceComposer.h
index de447be..da4d56f 100644
--- a/include/surfaceflinger/ISurfaceComposer.h
+++ b/include/surfaceflinger/ISurfaceComposer.h
@@ -77,6 +77,11 @@
eOrientationSwapMask = 0x01
};
+ enum {
+ eElectronBeamAnimationOn = 0x01,
+ eElectronBeamAnimationOff = 0x10
+ };
+
// flags for setOrientation
enum {
eOrientationAnimationDisable = 0x00000001
diff --git a/include/ui/InputDispatcher.h b/include/ui/InputDispatcher.h
index 3599163..4955d47 100644
--- a/include/ui/InputDispatcher.h
+++ b/include/ui/InputDispatcher.h
@@ -183,6 +183,7 @@
TYPE_INPUT_METHOD_DIALOG= FIRST_SYSTEM_WINDOW+12,
TYPE_WALLPAPER = FIRST_SYSTEM_WINDOW+13,
TYPE_STATUS_BAR_PANEL = FIRST_SYSTEM_WINDOW+14,
+ TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15,
LAST_SYSTEM_WINDOW = 2999,
};
diff --git a/include/ui/InputReader.h b/include/ui/InputReader.h
index c15e382..923cdbf 100644
--- a/include/ui/InputReader.h
+++ b/include/ui/InputReader.h
@@ -571,31 +571,36 @@
// Immutable calibration parameters in parsed form.
struct Calibration {
- // Touch Area
- enum TouchAreaCalibration {
- TOUCH_AREA_CALIBRATION_DEFAULT,
- TOUCH_AREA_CALIBRATION_NONE,
- TOUCH_AREA_CALIBRATION_GEOMETRIC,
- TOUCH_AREA_CALIBRATION_PRESSURE,
+ // Touch Size
+ enum TouchSizeCalibration {
+ TOUCH_SIZE_CALIBRATION_DEFAULT,
+ TOUCH_SIZE_CALIBRATION_NONE,
+ TOUCH_SIZE_CALIBRATION_GEOMETRIC,
+ TOUCH_SIZE_CALIBRATION_PRESSURE,
};
- TouchAreaCalibration touchAreaCalibration;
+ TouchSizeCalibration touchSizeCalibration;
- // Tool Area
- enum ToolAreaCalibration {
- TOOL_AREA_CALIBRATION_DEFAULT,
- TOOL_AREA_CALIBRATION_NONE,
- TOOL_AREA_CALIBRATION_GEOMETRIC,
- TOOL_AREA_CALIBRATION_LINEAR,
+ // Tool Size
+ enum ToolSizeCalibration {
+ TOOL_SIZE_CALIBRATION_DEFAULT,
+ TOOL_SIZE_CALIBRATION_NONE,
+ TOOL_SIZE_CALIBRATION_GEOMETRIC,
+ TOOL_SIZE_CALIBRATION_LINEAR,
+ TOOL_SIZE_CALIBRATION_AREA,
};
- ToolAreaCalibration toolAreaCalibration;
- bool haveToolAreaLinearScale;
- float toolAreaLinearScale;
- bool haveToolAreaLinearBias;
- float toolAreaLinearBias;
- bool haveToolAreaIsSummed;
- int32_t toolAreaIsSummed;
+ ToolSizeCalibration toolSizeCalibration;
+ bool haveToolSizeLinearScale;
+ float toolSizeLinearScale;
+ bool haveToolSizeLinearBias;
+ float toolSizeLinearBias;
+ bool haveToolSizeAreaScale;
+ float toolSizeAreaScale;
+ bool haveToolSizeAreaBias;
+ float toolSizeAreaBias;
+ bool haveToolSizeIsSummed;
+ int32_t toolSizeIsSummed;
// Pressure
enum PressureCalibration {
@@ -671,8 +676,10 @@
float geometricScale;
- float toolAreaLinearScale;
- float toolAreaLinearBias;
+ float toolSizeLinearScale;
+ float toolSizeLinearBias;
+ float toolSizeAreaScale;
+ float toolSizeAreaBias;
float pressureScale;
@@ -691,11 +698,11 @@
bool haveSize;
InputDeviceInfo::MotionRange size;
- bool haveTouchArea;
+ bool haveTouchSize;
InputDeviceInfo::MotionRange touchMajor;
InputDeviceInfo::MotionRange touchMinor;
- bool haveToolArea;
+ bool haveToolSize;
InputDeviceInfo::MotionRange toolMajor;
InputDeviceInfo::MotionRange toolMinor;
diff --git a/include/utils/Looper.h b/include/utils/Looper.h
index cc51490..eefff31 100644
--- a/include/utils/Looper.h
+++ b/include/utils/Looper.h
@@ -24,10 +24,10 @@
#include <android/looper.h>
-// Currently using poll() instead of epoll_wait() since it does a better job of meeting a
-// timeout deadline. epoll_wait() typically causes additional delays of up to 10ms
-// beyond the requested timeout.
-//#define LOOPER_USES_EPOLL
+// When defined, uses epoll_wait() for polling, otherwise uses poll().
+#define LOOPER_USES_EPOLL
+
+// When defined, logs performance statistics for tuning and debugging purposes.
//#define LOOPER_STATISTICS
#ifdef LOOPER_USES_EPOLL
diff --git a/include/utils/ObbFile.h b/include/utils/ObbFile.h
index 5243f50..47559cd 100644
--- a/include/utils/ObbFile.h
+++ b/include/utils/ObbFile.h
@@ -27,6 +27,7 @@
// OBB flags (bit 0)
#define OBB_OVERLAY (1 << 0)
+#define OBB_SALTED (1 << 1)
class ObbFile : public RefBase {
protected:
@@ -70,6 +71,26 @@
mFlags = flags;
}
+ const unsigned char* getSalt(size_t* length) const {
+ if ((mFlags & OBB_SALTED) == 0) {
+ *length = 0;
+ return NULL;
+ }
+
+ *length = sizeof(mSalt);
+ return mSalt;
+ }
+
+ bool setSalt(const unsigned char* salt, size_t length) {
+ if (length != sizeof(mSalt)) {
+ return false;
+ }
+
+ memcpy(mSalt, salt, sizeof(mSalt));
+ mFlags |= OBB_SALTED;
+ return true;
+ }
+
bool isOverlay() {
return (mFlags & OBB_OVERLAY) == OBB_OVERLAY;
}
@@ -103,6 +124,12 @@
/* Flags for this OBB type. */
int32_t mFlags;
+ /* Whether the file is salted. */
+ bool mSalted;
+
+ /* The encryption salt. */
+ unsigned char mSalt[8];
+
const char* mFileName;
size_t mFileSize;
diff --git a/keystore/java/android/security/SystemKeyStore.java b/keystore/java/android/security/SystemKeyStore.java
index 1093219..47718e6 100644
--- a/keystore/java/android/security/SystemKeyStore.java
+++ b/keystore/java/android/security/SystemKeyStore.java
@@ -94,6 +94,7 @@
FileOutputStream fos = new FileOutputStream(keyFile);
fos.write(retKey);
fos.flush();
+ FileUtils.sync(fos);
fos.close();
FileUtils.setPermissions(keyFile.getName(), (FileUtils.S_IRUSR | FileUtils.S_IWUSR),
-1, -1);
diff --git a/libs/ui/EventHub.cpp b/libs/ui/EventHub.cpp
index c0be3a0..944731d 100644
--- a/libs/ui/EventHub.cpp
+++ b/libs/ui/EventHub.cpp
@@ -439,11 +439,10 @@
// Since mFDs[0] is used for inotify, we process regular events starting at index 1.
mInputDeviceIndex += 1;
if (mInputDeviceIndex >= mFDCount) {
- mInputDeviceIndex = 0;
break;
}
- const struct pollfd &pfd = mFDs[mInputDeviceIndex];
+ const struct pollfd& pfd = mFDs[mInputDeviceIndex];
if (pfd.revents & POLLIN) {
int32_t readSize = read(pfd.fd, mInputBufferData,
sizeof(struct input_event) * INPUT_BUFFER_SIZE);
@@ -460,11 +459,17 @@
}
}
+#if HAVE_INOTIFY
// readNotify() will modify mFDs and mFDCount, so this must be done after
// processing all other events.
if(mFDs[0].revents & POLLIN) {
readNotify(mFDs[0].fd);
+ mFDs[0].revents = 0;
+ continue; // report added or removed devices immediately
}
+#endif
+
+ mInputDeviceIndex = 0;
// Poll for events. Mind the wake lock dance!
// We hold a wake lock at all times except during poll(). This works due to some
@@ -482,7 +487,7 @@
if (pollResult <= 0) {
if (errno != EINTR) {
- LOGW("select failed (errno=%d)\n", errno);
+ LOGW("poll failed (errno=%d)\n", errno);
usleep(100000);
}
}
diff --git a/libs/ui/InputDispatcher.cpp b/libs/ui/InputDispatcher.cpp
index 6ba19d7..92daee1 100644
--- a/libs/ui/InputDispatcher.cpp
+++ b/libs/ui/InputDispatcher.cpp
@@ -149,7 +149,8 @@
bool InputWindow::isTrustedOverlay() const {
return layoutParamsType == TYPE_INPUT_METHOD
- || layoutParamsType == TYPE_INPUT_METHOD_DIALOG;
+ || layoutParamsType == TYPE_INPUT_METHOD_DIALOG
+ || layoutParamsType == TYPE_SECURE_SYSTEM_OVERLAY;
}
@@ -1350,7 +1351,7 @@
target.flags = 0;
target.xOffset = 0;
target.yOffset = 0;
- target.windowType = InputWindow::TYPE_SYSTEM_OVERLAY;
+ target.windowType = -1;
}
}
@@ -2535,9 +2536,9 @@
#if DEBUG_FOCUS
LOGD("Touched window was removed: %s", touchedWindow.channel->getName().string());
#endif
- mTouchState.windows.removeAt(i);
synthesizeCancelationEventsForInputChannelLocked(touchedWindow.channel,
InputState::CANCEL_POINTER_EVENTS, "touched window was removed");
+ mTouchState.windows.removeAt(i);
}
}
diff --git a/libs/ui/InputReader.cpp b/libs/ui/InputReader.cpp
index 0560bb8..ce0d880 100644
--- a/libs/ui/InputReader.cpp
+++ b/libs/ui/InputReader.cpp
@@ -1246,14 +1246,14 @@
mLocked.orientedRanges.size);
}
- if (mLocked.orientedRanges.haveTouchArea) {
+ if (mLocked.orientedRanges.haveTouchSize) {
info->addMotionRange(AINPUT_MOTION_RANGE_TOUCH_MAJOR,
mLocked.orientedRanges.touchMajor);
info->addMotionRange(AINPUT_MOTION_RANGE_TOUCH_MINOR,
mLocked.orientedRanges.touchMinor);
}
- if (mLocked.orientedRanges.haveToolArea) {
+ if (mLocked.orientedRanges.haveToolSize) {
info->addMotionRange(AINPUT_MOTION_RANGE_TOOL_MAJOR,
mLocked.orientedRanges.toolMajor);
info->addMotionRange(AINPUT_MOTION_RANGE_TOOL_MINOR,
@@ -1277,8 +1277,21 @@
dumpRawAxes(dump);
dumpCalibration(dump);
dumpSurfaceLocked(dump);
- dump.appendFormat(INDENT3 "XPrecision: %0.3f\n", mLocked.xPrecision);
- dump.appendFormat(INDENT3 "YPrecision: %0.3f\n", mLocked.yPrecision);
+ dump.appendFormat(INDENT3 "Translation and Scaling Factors:");
+ dump.appendFormat(INDENT4 "XOrigin: %d\n", mLocked.xOrigin);
+ dump.appendFormat(INDENT4 "YOrigin: %d\n", mLocked.yOrigin);
+ dump.appendFormat(INDENT4 "XScale: %0.3f\n", mLocked.xScale);
+ dump.appendFormat(INDENT4 "YScale: %0.3f\n", mLocked.yScale);
+ dump.appendFormat(INDENT4 "XPrecision: %0.3f\n", mLocked.xPrecision);
+ dump.appendFormat(INDENT4 "YPrecision: %0.3f\n", mLocked.yPrecision);
+ dump.appendFormat(INDENT4 "GeometricScale: %0.3f\n", mLocked.geometricScale);
+ dump.appendFormat(INDENT4 "ToolSizeLinearScale: %0.3f\n", mLocked.toolSizeLinearScale);
+ dump.appendFormat(INDENT4 "ToolSizeLinearBias: %0.3f\n", mLocked.toolSizeLinearBias);
+ dump.appendFormat(INDENT4 "ToolSizeAreaScale: %0.3f\n", mLocked.toolSizeAreaScale);
+ dump.appendFormat(INDENT4 "ToolSizeAreaBias: %0.3f\n", mLocked.toolSizeAreaBias);
+ dump.appendFormat(INDENT4 "PressureScale: %0.3f\n", mLocked.pressureScale);
+ dump.appendFormat(INDENT4 "SizeScale: %0.3f\n", mLocked.sizeScale);
+ dump.appendFormat(INDENT4 "OrientationSCale: %0.3f\n", mLocked.orientationScale);
} // release lock
}
@@ -1298,8 +1311,8 @@
mLocked.orientedRanges.havePressure = false;
mLocked.orientedRanges.haveSize = false;
- mLocked.orientedRanges.haveTouchArea = false;
- mLocked.orientedRanges.haveToolArea = false;
+ mLocked.orientedRanges.haveTouchSize = false;
+ mLocked.orientedRanges.haveToolSize = false;
mLocked.orientedRanges.haveOrientation = false;
}
@@ -1428,8 +1441,8 @@
float diagonalSize = pythag(width, height);
// TouchMajor and TouchMinor factors.
- if (mCalibration.touchAreaCalibration != Calibration::TOUCH_AREA_CALIBRATION_NONE) {
- mLocked.orientedRanges.haveTouchArea = true;
+ if (mCalibration.touchSizeCalibration != Calibration::TOUCH_SIZE_CALIBRATION_NONE) {
+ mLocked.orientedRanges.haveTouchSize = true;
mLocked.orientedRanges.touchMajor.min = 0;
mLocked.orientedRanges.touchMajor.max = diagonalSize;
mLocked.orientedRanges.touchMajor.flat = 0;
@@ -1438,23 +1451,46 @@
}
// ToolMajor and ToolMinor factors.
- if (mCalibration.toolAreaCalibration != Calibration::TOOL_AREA_CALIBRATION_NONE) {
- mLocked.toolAreaLinearScale = 0;
- mLocked.toolAreaLinearBias = 0;
- if (mCalibration.toolAreaCalibration == Calibration::TOOL_AREA_CALIBRATION_LINEAR) {
- if (mCalibration.haveToolAreaLinearScale) {
- mLocked.toolAreaLinearScale = mCalibration.toolAreaLinearScale;
+ mLocked.toolSizeLinearScale = 0;
+ mLocked.toolSizeLinearBias = 0;
+ mLocked.toolSizeAreaScale = 0;
+ mLocked.toolSizeAreaBias = 0;
+ if (mCalibration.toolSizeCalibration != Calibration::TOOL_SIZE_CALIBRATION_NONE) {
+ if (mCalibration.toolSizeCalibration == Calibration::TOOL_SIZE_CALIBRATION_LINEAR) {
+ if (mCalibration.haveToolSizeLinearScale) {
+ mLocked.toolSizeLinearScale = mCalibration.toolSizeLinearScale;
} else if (mRawAxes.toolMajor.valid && mRawAxes.toolMajor.maxValue != 0) {
- mLocked.toolAreaLinearScale = float(min(width, height))
+ mLocked.toolSizeLinearScale = float(min(width, height))
/ mRawAxes.toolMajor.maxValue;
}
- if (mCalibration.haveToolAreaLinearBias) {
- mLocked.toolAreaLinearBias = mCalibration.toolAreaLinearBias;
+ if (mCalibration.haveToolSizeLinearBias) {
+ mLocked.toolSizeLinearBias = mCalibration.toolSizeLinearBias;
+ }
+ } else if (mCalibration.toolSizeCalibration ==
+ Calibration::TOOL_SIZE_CALIBRATION_AREA) {
+ if (mCalibration.haveToolSizeLinearScale) {
+ mLocked.toolSizeLinearScale = mCalibration.toolSizeLinearScale;
+ } else {
+ mLocked.toolSizeLinearScale = min(width, height);
+ }
+
+ if (mCalibration.haveToolSizeLinearBias) {
+ mLocked.toolSizeLinearBias = mCalibration.toolSizeLinearBias;
+ }
+
+ if (mCalibration.haveToolSizeAreaScale) {
+ mLocked.toolSizeAreaScale = mCalibration.toolSizeAreaScale;
+ } else if (mRawAxes.toolMajor.valid && mRawAxes.toolMajor.maxValue != 0) {
+ mLocked.toolSizeAreaScale = 1.0f / mRawAxes.toolMajor.maxValue;
+ }
+
+ if (mCalibration.haveToolSizeAreaBias) {
+ mLocked.toolSizeAreaBias = mCalibration.toolSizeAreaBias;
}
}
- mLocked.orientedRanges.haveToolArea = true;
+ mLocked.orientedRanges.haveToolSize = true;
mLocked.orientedRanges.toolMajor.min = 0;
mLocked.orientedRanges.toolMajor.max = diagonalSize;
mLocked.orientedRanges.toolMajor.flat = 0;
@@ -1463,6 +1499,7 @@
}
// Pressure factors.
+ mLocked.pressureScale = 0;
if (mCalibration.pressureCalibration != Calibration::PRESSURE_CALIBRATION_NONE) {
RawAbsoluteAxisInfo rawPressureAxis;
switch (mCalibration.pressureSource) {
@@ -1476,7 +1513,6 @@
rawPressureAxis.clear();
}
- mLocked.pressureScale = 0;
if (mCalibration.pressureCalibration == Calibration::PRESSURE_CALIBRATION_PHYSICAL
|| mCalibration.pressureCalibration
== Calibration::PRESSURE_CALIBRATION_AMPLITUDE) {
@@ -1495,8 +1531,8 @@
}
// Size factors.
+ mLocked.sizeScale = 0;
if (mCalibration.sizeCalibration != Calibration::SIZE_CALIBRATION_NONE) {
- mLocked.sizeScale = 0;
if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_NORMALIZED) {
if (mRawAxes.toolMajor.valid && mRawAxes.toolMajor.maxValue != 0) {
mLocked.sizeScale = 1.0f / mRawAxes.toolMajor.maxValue;
@@ -1511,8 +1547,8 @@
}
// Orientation
+ mLocked.orientationScale = 0;
if (mCalibration.orientationCalibration != Calibration::ORIENTATION_CALIBRATION_NONE) {
- mLocked.orientationScale = 0;
if (mCalibration.orientationCalibration
== Calibration::ORIENTATION_CALIBRATION_INTERPOLATED) {
if (mRawAxes.orientation.valid && mRawAxes.orientation.maxValue != 0) {
@@ -1647,49 +1683,55 @@
const InputDeviceCalibration& in = getDevice()->getCalibration();
Calibration& out = mCalibration;
- // Touch Area
- out.touchAreaCalibration = Calibration::TOUCH_AREA_CALIBRATION_DEFAULT;
- String8 touchAreaCalibrationString;
- if (in.tryGetProperty(String8("touch.touchArea.calibration"), touchAreaCalibrationString)) {
- if (touchAreaCalibrationString == "none") {
- out.touchAreaCalibration = Calibration::TOUCH_AREA_CALIBRATION_NONE;
- } else if (touchAreaCalibrationString == "geometric") {
- out.touchAreaCalibration = Calibration::TOUCH_AREA_CALIBRATION_GEOMETRIC;
- } else if (touchAreaCalibrationString == "pressure") {
- out.touchAreaCalibration = Calibration::TOUCH_AREA_CALIBRATION_PRESSURE;
- } else if (touchAreaCalibrationString != "default") {
- LOGW("Invalid value for touch.touchArea.calibration: '%s'",
- touchAreaCalibrationString.string());
+ // Touch Size
+ out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_DEFAULT;
+ String8 touchSizeCalibrationString;
+ if (in.tryGetProperty(String8("touch.touchSize.calibration"), touchSizeCalibrationString)) {
+ if (touchSizeCalibrationString == "none") {
+ out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_NONE;
+ } else if (touchSizeCalibrationString == "geometric") {
+ out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_GEOMETRIC;
+ } else if (touchSizeCalibrationString == "pressure") {
+ out.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_PRESSURE;
+ } else if (touchSizeCalibrationString != "default") {
+ LOGW("Invalid value for touch.touchSize.calibration: '%s'",
+ touchSizeCalibrationString.string());
}
}
- // Tool Area
- out.toolAreaCalibration = Calibration::TOOL_AREA_CALIBRATION_DEFAULT;
- String8 toolAreaCalibrationString;
- if (in.tryGetProperty(String8("tool.toolArea.calibration"), toolAreaCalibrationString)) {
- if (toolAreaCalibrationString == "none") {
- out.toolAreaCalibration = Calibration::TOOL_AREA_CALIBRATION_NONE;
- } else if (toolAreaCalibrationString == "geometric") {
- out.toolAreaCalibration = Calibration::TOOL_AREA_CALIBRATION_GEOMETRIC;
- } else if (toolAreaCalibrationString == "linear") {
- out.toolAreaCalibration = Calibration::TOOL_AREA_CALIBRATION_LINEAR;
- } else if (toolAreaCalibrationString != "default") {
- LOGW("Invalid value for tool.toolArea.calibration: '%s'",
- toolAreaCalibrationString.string());
+ // Tool Size
+ out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_DEFAULT;
+ String8 toolSizeCalibrationString;
+ if (in.tryGetProperty(String8("touch.toolSize.calibration"), toolSizeCalibrationString)) {
+ if (toolSizeCalibrationString == "none") {
+ out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_NONE;
+ } else if (toolSizeCalibrationString == "geometric") {
+ out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_GEOMETRIC;
+ } else if (toolSizeCalibrationString == "linear") {
+ out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_LINEAR;
+ } else if (toolSizeCalibrationString == "area") {
+ out.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_AREA;
+ } else if (toolSizeCalibrationString != "default") {
+ LOGW("Invalid value for touch.toolSize.calibration: '%s'",
+ toolSizeCalibrationString.string());
}
}
- out.haveToolAreaLinearScale = in.tryGetProperty(String8("touch.toolArea.linearScale"),
- out.toolAreaLinearScale);
- out.haveToolAreaLinearBias = in.tryGetProperty(String8("touch.toolArea.linearBias"),
- out.toolAreaLinearBias);
- out.haveToolAreaIsSummed = in.tryGetProperty(String8("touch.toolArea.isSummed"),
- out.toolAreaIsSummed);
+ out.haveToolSizeLinearScale = in.tryGetProperty(String8("touch.toolSize.linearScale"),
+ out.toolSizeLinearScale);
+ out.haveToolSizeLinearBias = in.tryGetProperty(String8("touch.toolSize.linearBias"),
+ out.toolSizeLinearBias);
+ out.haveToolSizeAreaScale = in.tryGetProperty(String8("touch.toolSize.areaScale"),
+ out.toolSizeAreaScale);
+ out.haveToolSizeAreaBias = in.tryGetProperty(String8("touch.toolSize.areaBias"),
+ out.toolSizeAreaBias);
+ out.haveToolSizeIsSummed = in.tryGetProperty(String8("touch.toolSize.isSummed"),
+ out.toolSizeIsSummed);
// Pressure
out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_DEFAULT;
String8 pressureCalibrationString;
- if (in.tryGetProperty(String8("tool.pressure.calibration"), pressureCalibrationString)) {
+ if (in.tryGetProperty(String8("touch.pressure.calibration"), pressureCalibrationString)) {
if (pressureCalibrationString == "none") {
out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_NONE;
} else if (pressureCalibrationString == "physical") {
@@ -1697,7 +1739,7 @@
} else if (pressureCalibrationString == "amplitude") {
out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_AMPLITUDE;
} else if (pressureCalibrationString != "default") {
- LOGW("Invalid value for tool.pressure.calibration: '%s'",
+ LOGW("Invalid value for touch.pressure.calibration: '%s'",
pressureCalibrationString.string());
}
}
@@ -1721,13 +1763,13 @@
// Size
out.sizeCalibration = Calibration::SIZE_CALIBRATION_DEFAULT;
String8 sizeCalibrationString;
- if (in.tryGetProperty(String8("tool.size.calibration"), sizeCalibrationString)) {
+ if (in.tryGetProperty(String8("touch.size.calibration"), sizeCalibrationString)) {
if (sizeCalibrationString == "none") {
out.sizeCalibration = Calibration::SIZE_CALIBRATION_NONE;
} else if (sizeCalibrationString == "normalized") {
out.sizeCalibration = Calibration::SIZE_CALIBRATION_NORMALIZED;
} else if (sizeCalibrationString != "default") {
- LOGW("Invalid value for tool.size.calibration: '%s'",
+ LOGW("Invalid value for touch.size.calibration: '%s'",
sizeCalibrationString.string());
}
}
@@ -1735,13 +1777,13 @@
// Orientation
out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_DEFAULT;
String8 orientationCalibrationString;
- if (in.tryGetProperty(String8("tool.orientation.calibration"), orientationCalibrationString)) {
+ if (in.tryGetProperty(String8("touch.orientation.calibration"), orientationCalibrationString)) {
if (orientationCalibrationString == "none") {
out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_NONE;
} else if (orientationCalibrationString == "interpolated") {
out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_INTERPOLATED;
} else if (orientationCalibrationString != "default") {
- LOGW("Invalid value for tool.orientation.calibration: '%s'",
+ LOGW("Invalid value for touch.orientation.calibration: '%s'",
orientationCalibrationString.string());
}
}
@@ -1789,13 +1831,13 @@
break;
}
- // Tool Area
- switch (mCalibration.toolAreaCalibration) {
- case Calibration::TOOL_AREA_CALIBRATION_DEFAULT:
+ // Tool Size
+ switch (mCalibration.toolSizeCalibration) {
+ case Calibration::TOOL_SIZE_CALIBRATION_DEFAULT:
if (mRawAxes.toolMajor.valid) {
- mCalibration.toolAreaCalibration = Calibration::TOOL_AREA_CALIBRATION_LINEAR;
+ mCalibration.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_LINEAR;
} else {
- mCalibration.toolAreaCalibration = Calibration::TOOL_AREA_CALIBRATION_NONE;
+ mCalibration.toolSizeCalibration = Calibration::TOOL_SIZE_CALIBRATION_NONE;
}
break;
@@ -1803,14 +1845,14 @@
break;
}
- // Touch Area
- switch (mCalibration.touchAreaCalibration) {
- case Calibration::TOUCH_AREA_CALIBRATION_DEFAULT:
+ // Touch Size
+ switch (mCalibration.touchSizeCalibration) {
+ case Calibration::TOUCH_SIZE_CALIBRATION_DEFAULT:
if (mCalibration.pressureCalibration != Calibration::PRESSURE_CALIBRATION_NONE
- && mCalibration.toolAreaCalibration != Calibration::TOOL_AREA_CALIBRATION_NONE) {
- mCalibration.touchAreaCalibration = Calibration::TOUCH_AREA_CALIBRATION_PRESSURE;
+ && mCalibration.toolSizeCalibration != Calibration::TOOL_SIZE_CALIBRATION_NONE) {
+ mCalibration.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_PRESSURE;
} else {
- mCalibration.touchAreaCalibration = Calibration::TOUCH_AREA_CALIBRATION_NONE;
+ mCalibration.touchSizeCalibration = Calibration::TOUCH_SIZE_CALIBRATION_NONE;
}
break;
@@ -1850,49 +1892,62 @@
void TouchInputMapper::dumpCalibration(String8& dump) {
dump.append(INDENT3 "Calibration:\n");
- // Touch Area
- switch (mCalibration.touchAreaCalibration) {
- case Calibration::TOUCH_AREA_CALIBRATION_NONE:
- dump.append(INDENT4 "touch.touchArea.calibration: none\n");
+ // Touch Size
+ switch (mCalibration.touchSizeCalibration) {
+ case Calibration::TOUCH_SIZE_CALIBRATION_NONE:
+ dump.append(INDENT4 "touch.touchSize.calibration: none\n");
break;
- case Calibration::TOUCH_AREA_CALIBRATION_GEOMETRIC:
- dump.append(INDENT4 "touch.touchArea.calibration: geometric\n");
+ case Calibration::TOUCH_SIZE_CALIBRATION_GEOMETRIC:
+ dump.append(INDENT4 "touch.touchSize.calibration: geometric\n");
break;
- case Calibration::TOUCH_AREA_CALIBRATION_PRESSURE:
- dump.append(INDENT4 "touch.touchArea.calibration: pressure\n");
+ case Calibration::TOUCH_SIZE_CALIBRATION_PRESSURE:
+ dump.append(INDENT4 "touch.touchSize.calibration: pressure\n");
break;
default:
assert(false);
}
- // Tool Area
- switch (mCalibration.toolAreaCalibration) {
- case Calibration::TOOL_AREA_CALIBRATION_NONE:
- dump.append(INDENT4 "touch.toolArea.calibration: none\n");
+ // Tool Size
+ switch (mCalibration.toolSizeCalibration) {
+ case Calibration::TOOL_SIZE_CALIBRATION_NONE:
+ dump.append(INDENT4 "touch.toolSize.calibration: none\n");
break;
- case Calibration::TOOL_AREA_CALIBRATION_GEOMETRIC:
- dump.append(INDENT4 "touch.toolArea.calibration: geometric\n");
+ case Calibration::TOOL_SIZE_CALIBRATION_GEOMETRIC:
+ dump.append(INDENT4 "touch.toolSize.calibration: geometric\n");
break;
- case Calibration::TOOL_AREA_CALIBRATION_LINEAR:
- dump.append(INDENT4 "touch.toolArea.calibration: linear\n");
+ case Calibration::TOOL_SIZE_CALIBRATION_LINEAR:
+ dump.append(INDENT4 "touch.toolSize.calibration: linear\n");
+ break;
+ case Calibration::TOOL_SIZE_CALIBRATION_AREA:
+ dump.append(INDENT4 "touch.toolSize.calibration: area\n");
break;
default:
assert(false);
}
- if (mCalibration.haveToolAreaLinearScale) {
- dump.appendFormat(INDENT4 "touch.toolArea.linearScale: %0.3f\n",
- mCalibration.toolAreaLinearScale);
+ if (mCalibration.haveToolSizeLinearScale) {
+ dump.appendFormat(INDENT4 "touch.toolSize.linearScale: %0.3f\n",
+ mCalibration.toolSizeLinearScale);
}
- if (mCalibration.haveToolAreaLinearBias) {
- dump.appendFormat(INDENT4 "touch.toolArea.linearBias: %0.3f\n",
- mCalibration.toolAreaLinearBias);
+ if (mCalibration.haveToolSizeLinearBias) {
+ dump.appendFormat(INDENT4 "touch.toolSize.linearBias: %0.3f\n",
+ mCalibration.toolSizeLinearBias);
}
- if (mCalibration.haveToolAreaIsSummed) {
- dump.appendFormat(INDENT4 "touch.toolArea.isSummed: %d\n",
- mCalibration.toolAreaIsSummed);
+ if (mCalibration.haveToolSizeAreaScale) {
+ dump.appendFormat(INDENT4 "touch.toolSize.areaScale: %0.3f\n",
+ mCalibration.toolSizeAreaScale);
+ }
+
+ if (mCalibration.haveToolSizeAreaBias) {
+ dump.appendFormat(INDENT4 "touch.toolSize.areaBias: %0.3f\n",
+ mCalibration.toolSizeAreaBias);
+ }
+
+ if (mCalibration.haveToolSizeIsSummed) {
+ dump.appendFormat(INDENT4 "touch.toolSize.isSummed: %d\n",
+ mCalibration.toolSizeIsSummed);
}
// Pressure
@@ -2207,8 +2262,8 @@
// ToolMajor and ToolMinor
float toolMajor, toolMinor;
- switch (mCalibration.toolAreaCalibration) {
- case Calibration::TOOL_AREA_CALIBRATION_GEOMETRIC:
+ switch (mCalibration.toolSizeCalibration) {
+ case Calibration::TOOL_SIZE_CALIBRATION_GEOMETRIC:
toolMajor = in.toolMajor * mLocked.geometricScale;
if (mRawAxes.toolMinor.valid) {
toolMinor = in.toolMinor * mLocked.geometricScale;
@@ -2216,26 +2271,36 @@
toolMinor = toolMajor;
}
break;
- case Calibration::TOOL_AREA_CALIBRATION_LINEAR:
+ case Calibration::TOOL_SIZE_CALIBRATION_LINEAR:
toolMajor = in.toolMajor != 0
- ? in.toolMajor * mLocked.toolAreaLinearScale + mLocked.toolAreaLinearBias
+ ? in.toolMajor * mLocked.toolSizeLinearScale + mLocked.toolSizeLinearBias
: 0;
if (mRawAxes.toolMinor.valid) {
toolMinor = in.toolMinor != 0
- ? in.toolMinor * mLocked.toolAreaLinearScale
- + mLocked.toolAreaLinearBias
+ ? in.toolMinor * mLocked.toolSizeLinearScale
+ + mLocked.toolSizeLinearBias
: 0;
} else {
toolMinor = toolMajor;
}
break;
+ case Calibration::TOOL_SIZE_CALIBRATION_AREA:
+ if (in.toolMajor != 0) {
+ float diameter = sqrtf(in.toolMajor
+ * mLocked.toolSizeAreaScale + mLocked.toolSizeAreaBias);
+ toolMajor = diameter * mLocked.toolSizeLinearScale + mLocked.toolSizeLinearBias;
+ } else {
+ toolMajor = 0;
+ }
+ toolMinor = toolMajor;
+ break;
default:
toolMajor = 0;
toolMinor = 0;
break;
}
- if (mCalibration.haveToolAreaIsSummed && mCalibration.toolAreaIsSummed) {
+ if (mCalibration.haveToolSizeIsSummed && mCalibration.toolSizeIsSummed) {
toolMajor /= pointerCount;
toolMinor /= pointerCount;
}
@@ -2266,8 +2331,8 @@
// TouchMajor and TouchMinor
float touchMajor, touchMinor;
- switch (mCalibration.touchAreaCalibration) {
- case Calibration::TOUCH_AREA_CALIBRATION_GEOMETRIC:
+ switch (mCalibration.touchSizeCalibration) {
+ case Calibration::TOUCH_SIZE_CALIBRATION_GEOMETRIC:
touchMajor = in.touchMajor * mLocked.geometricScale;
if (mRawAxes.touchMinor.valid) {
touchMinor = in.touchMinor * mLocked.geometricScale;
@@ -2275,7 +2340,7 @@
touchMinor = touchMajor;
}
break;
- case Calibration::TOUCH_AREA_CALIBRATION_PRESSURE:
+ case Calibration::TOUCH_SIZE_CALIBRATION_PRESSURE:
touchMajor = toolMajor * pressure;
touchMinor = toolMinor * pressure;
break;
diff --git a/libs/utils/ObbFile.cpp b/libs/utils/ObbFile.cpp
index e170ab8..2c3724c 100644
--- a/libs/utils/ObbFile.cpp
+++ b/libs/utils/ObbFile.cpp
@@ -29,10 +29,11 @@
#define kFooterTagSize 8 /* last two 32-bit integers */
-#define kFooterMinSize 25 /* 32-bit signature version (4 bytes)
+#define kFooterMinSize 33 /* 32-bit signature version (4 bytes)
* 32-bit package version (4 bytes)
* 32-bit flags (4 bytes)
- * 32-bit package name size (4-bytes)
+ * 64-bit salt (8 bytes)
+ * 32-bit package name size (4 bytes)
* >=1-character package name (1 byte)
* 32-bit footer size (4 bytes)
* 32-bit footer marker (4 bytes)
@@ -47,8 +48,9 @@
/* offsets in version 1 of the header */
#define kPackageVersionOffset 4
#define kFlagsOffset 8
-#define kPackageNameLenOffset 12
-#define kPackageNameOffset 16
+#define kSaltOffset 12
+#define kPackageNameLenOffset 20
+#define kPackageNameOffset 24
/*
* TEMP_FAILURE_RETRY is defined by some, but not all, versions of
@@ -79,11 +81,12 @@
namespace android {
-ObbFile::ObbFile() :
- mPackageName(""),
- mVersion(-1),
- mFlags(0)
+ObbFile::ObbFile()
+ : mPackageName("")
+ , mVersion(-1)
+ , mFlags(0)
{
+ memset(mSalt, 0, sizeof(mSalt));
}
ObbFile::~ObbFile() {
@@ -192,7 +195,7 @@
#ifdef DEBUG
for (int i = 0; i < footerSize; ++i) {
- LOGI("char: 0x%02x", scanBuf[i]);
+ LOGI("char: 0x%02x\n", scanBuf[i]);
}
#endif
@@ -206,6 +209,8 @@
mVersion = (int32_t) get4LE((unsigned char*)scanBuf + kPackageVersionOffset);
mFlags = (int32_t) get4LE((unsigned char*)scanBuf + kFlagsOffset);
+ memcpy(&mSalt, (unsigned char*)scanBuf + kSaltOffset, sizeof(mSalt));
+
uint32_t packageNameLen = get4LE((unsigned char*)scanBuf + kPackageNameLenOffset);
if (packageNameLen <= 0
|| packageNameLen > (footerSize - kPackageNameOffset)) {
@@ -255,7 +260,7 @@
my_lseek64(fd, 0, SEEK_END);
if (mPackageName.size() == 0 || mVersion == -1) {
- LOGW("tried to write uninitialized ObbFile data");
+ LOGW("tried to write uninitialized ObbFile data\n");
return false;
}
@@ -264,43 +269,48 @@
put4LE(intBuf, kSigVersion);
if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
- LOGW("couldn't write signature version: %s", strerror(errno));
+ LOGW("couldn't write signature version: %s\n", strerror(errno));
return false;
}
put4LE(intBuf, mVersion);
if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
- LOGW("couldn't write package version");
+ LOGW("couldn't write package version\n");
return false;
}
put4LE(intBuf, mFlags);
if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
- LOGW("couldn't write package version");
+ LOGW("couldn't write package version\n");
+ return false;
+ }
+
+ if (write(fd, mSalt, sizeof(mSalt)) != (ssize_t)sizeof(mSalt)) {
+ LOGW("couldn't write salt: %s\n", strerror(errno));
return false;
}
size_t packageNameLen = mPackageName.size();
put4LE(intBuf, packageNameLen);
if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
- LOGW("couldn't write package name length: %s", strerror(errno));
+ LOGW("couldn't write package name length: %s\n", strerror(errno));
return false;
}
if (write(fd, mPackageName.string(), packageNameLen) != (ssize_t)packageNameLen) {
- LOGW("couldn't write package name: %s", strerror(errno));
+ LOGW("couldn't write package name: %s\n", strerror(errno));
return false;
}
put4LE(intBuf, kPackageNameOffset + packageNameLen);
if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
- LOGW("couldn't write footer size: %s", strerror(errno));
+ LOGW("couldn't write footer size: %s\n", strerror(errno));
return false;
}
put4LE(intBuf, kSignature);
if (write(fd, &intBuf, sizeof(uint32_t)) != (ssize_t)sizeof(uint32_t)) {
- LOGW("couldn't write footer magic signature: %s", strerror(errno));
+ LOGW("couldn't write footer magic signature: %s\n", strerror(errno));
return false;
}
diff --git a/libs/utils/ZipFileRO.cpp b/libs/utils/ZipFileRO.cpp
index 9b1f82f..5ff1f8f 100644
--- a/libs/utils/ZipFileRO.cpp
+++ b/libs/utils/ZipFileRO.cpp
@@ -32,6 +32,22 @@
#include <assert.h>
#include <unistd.h>
+#if HAVE_PRINTF_ZD
+# define ZD "%zd"
+# define ZD_TYPE ssize_t
+#else
+# define ZD "%ld"
+# define ZD_TYPE long
+#endif
+
+/*
+ * We must open binary files using open(path, ... | O_BINARY) under Windows.
+ * Otherwise strange read errors will happen.
+ */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
/*
* TEMP_FAILURE_RETRY is defined by some, but not all, versions of
* <unistd.h>. (Alas, it is not as standard as we'd hoped!) So, if it's
@@ -124,7 +140,7 @@
/*
* Open and map the specified file.
*/
- fd = ::open(zipFileName, O_RDONLY);
+ fd = ::open(zipFileName, O_RDONLY | O_BINARY);
if (fd < 0) {
LOGW("Unable to open zip '%s': %s\n", zipFileName, strerror(errno));
return NAME_NOT_FOUND;
@@ -172,8 +188,8 @@
*/
bool ZipFileRO::mapCentralDirectory(void)
{
- size_t readAmount = kMaxEOCDSearch;
- if (readAmount > (size_t) mFileLength)
+ ssize_t readAmount = kMaxEOCDSearch;
+ if (readAmount > (ssize_t) mFileLength)
readAmount = mFileLength;
unsigned char* scanBuf = (unsigned char*) malloc(readAmount);
@@ -233,7 +249,8 @@
}
actual = TEMP_FAILURE_RETRY(read(mFd, scanBuf, readAmount));
if (actual != (ssize_t) readAmount) {
- LOGW("Zip: read %zd failed: %s\n", readAmount, strerror(errno));
+ LOGW("Zip: read " ZD ", expected " ZD ". Failed: %s\n",
+ (ZD_TYPE) actual, (ZD_TYPE) readAmount, strerror(errno));
free(scanBuf);
return false;
}
@@ -292,8 +309,8 @@
}
if (!mDirectoryMap->create(mFileName, mFd, dirOffset, dirSize, true)) {
- LOGW("Unable to map '%s' (%zd to %zd): %s\n", mFileName,
- dirOffset, dirOffset + dirSize, strerror(errno));
+ LOGW("Unable to map '%s' (" ZD " to " ZD "): %s\n", mFileName,
+ (ZD_TYPE) dirOffset, (ZD_TYPE) (dirOffset + dirSize), strerror(errno));
return false;
}
@@ -350,8 +367,8 @@
ptr += kCDELen + fileNameLen + extraLen + commentLen;
if ((size_t)(ptr - cdPtr) > cdLength) {
- LOGW("bad CD advance (%d vs %zd) at entry %d\n",
- (int) (ptr - cdPtr), cdLength, i);
+ LOGW("bad CD advance (%d vs " ZD ") at entry %d\n",
+ (int) (ptr - cdPtr), (ZD_TYPE) cdLength, i);
goto bail;
}
}
@@ -556,8 +573,8 @@
if (get4LE(lfhBuf) != kLFHSignature) {
off_t actualOffset = lseek(mFd, 0, SEEK_CUR);
LOGW("didn't find signature at start of lfh; wanted: offset=%ld data=0x%08x; "
- "got: offset=%zd data=0x%08lx\n",
- localHdrOffset, kLFHSignature, (size_t)actualOffset, get4LE(lfhBuf));
+ "got: offset=" ZD " data=0x%08lx\n",
+ localHdrOffset, kLFHSignature, (ZD_TYPE) actualOffset, get4LE(lfhBuf));
return false;
}
}
@@ -572,16 +589,16 @@
/* check lengths */
if ((off_t)(dataOffset + compLen) > cdOffset) {
- LOGW("bad compressed length in zip (%ld + %zd > %ld)\n",
- (long) dataOffset, compLen, (long) cdOffset);
+ LOGW("bad compressed length in zip (%ld + " ZD " > %ld)\n",
+ (long) dataOffset, (ZD_TYPE) compLen, (long) cdOffset);
return false;
}
if (method == kCompressStored &&
(off_t)(dataOffset + uncompLen) > cdOffset)
{
- LOGE("ERROR: bad uncompressed length in zip (%ld + %zd > %ld)\n",
- (long) dataOffset, uncompLen, (long) cdOffset);
+ LOGE("ERROR: bad uncompressed length in zip (%ld + " ZD " > %ld)\n",
+ (long) dataOffset, (ZD_TYPE) uncompLen, (long) cdOffset);
return false;
}
@@ -732,8 +749,8 @@
LOGE("Write failed: %s\n", strerror(errno));
goto unmap;
} else if ((size_t) actual != uncompLen) {
- LOGE("Partial write during uncompress (%zd of %zd)\n",
- (size_t)actual, (size_t)uncompLen);
+ LOGE("Partial write during uncompress (" ZD " of " ZD ")\n",
+ (ZD_TYPE) actual, (ZD_TYPE) uncompLen);
goto unmap;
} else {
LOGI("+++ successful write\n");
@@ -802,8 +819,8 @@
/* paranoia */
if (zstream.total_out != uncompLen) {
- LOGW("Size mismatch on inflated file (%ld vs %zd)\n",
- zstream.total_out, uncompLen);
+ LOGW("Size mismatch on inflated file (%ld vs " ZD ")\n",
+ zstream.total_out, (ZD_TYPE) uncompLen);
goto z_bail;
}
@@ -891,8 +908,8 @@
/* paranoia */
if (zstream.total_out != uncompLen) {
- LOGW("Size mismatch on inflated file (%ld vs %zd)\n",
- zstream.total_out, uncompLen);
+ LOGW("Size mismatch on inflated file (%ld vs " ZD ")\n",
+ zstream.total_out, (ZD_TYPE) uncompLen);
goto z_bail;
}
diff --git a/libs/utils/tests/ObbFile_test.cpp b/libs/utils/tests/ObbFile_test.cpp
index 29bb70a..46b30c2 100644
--- a/libs/utils/tests/ObbFile_test.cpp
+++ b/libs/utils/tests/ObbFile_test.cpp
@@ -23,6 +23,7 @@
#include <gtest/gtest.h>
#include <fcntl.h>
+#include <string.h>
namespace android {
@@ -63,6 +64,10 @@
mObbFile->setPackageName(String8(packageName));
mObbFile->setVersion(versionNum);
+#define SALT_SIZE 8
+ unsigned char salt[SALT_SIZE] = {0x01, 0x10, 0x55, 0xAA, 0xFF, 0x00, 0x5A, 0xA5};
+ EXPECT_TRUE(mObbFile->setSalt(salt, SALT_SIZE))
+ << "Salt should be successfully set";
EXPECT_TRUE(mObbFile->writeTo(mFileName))
<< "couldn't write to fake .obb file";
@@ -77,6 +82,19 @@
const char* currentPackageName = mObbFile->getPackageName().string();
EXPECT_STREQ(packageName, currentPackageName)
<< "package name didn't come out the same as it went in";
+
+ size_t saltLen;
+ const unsigned char* newSalt = mObbFile->getSalt(&saltLen);
+
+ EXPECT_EQ(sizeof(salt), saltLen)
+ << "salt sizes were not the same";
+
+ for (int i = 0; i < sizeof(salt); i++) {
+ EXPECT_EQ(salt[i], newSalt[i])
+ << "salt character " << i << " should be equal";
+ }
+ EXPECT_TRUE(memcmp(newSalt, salt, sizeof(salt)) == 0)
+ << "salts should be the same";
}
}
diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk
index b4d01f5..2e5cbe3 100644
--- a/media/libmedia/Android.mk
+++ b/media/libmedia/Android.mk
@@ -50,7 +50,7 @@
LOCAL_C_INCLUDES := \
$(JNI_H_INCLUDE) \
$(call include-path-for, graphics corecg) \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
external/icu4c/common \
external/expat/lib
diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk
index e1edd16..55846be 100644
--- a/media/libmediaplayerservice/Android.mk
+++ b/media/libmediaplayerservice/Android.mk
@@ -53,7 +53,7 @@
LOCAL_C_INCLUDES := \
$(JNI_H_INCLUDE) \
$(call include-path-for, graphics corecg) \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/frameworks/base/media/libstagefright/include \
$(TOP)/frameworks/base/media/libstagefright/rtsp \
$(TOP)/external/tremolo/Tremolo
diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk
index 3e17a7e..615f3e8 100644
--- a/media/libstagefright/Android.mk
+++ b/media/libstagefright/Android.mk
@@ -46,8 +46,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
- $(TOP)/external/opencore/android \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/external/tremolo \
$(TOP)/frameworks/base/media/libstagefright/rtsp
diff --git a/media/libstagefright/MPEG2TSWriter.cpp b/media/libstagefright/MPEG2TSWriter.cpp
index b3daf67..81a2b0d 100644
--- a/media/libstagefright/MPEG2TSWriter.cpp
+++ b/media/libstagefright/MPEG2TSWriter.cpp
@@ -725,6 +725,14 @@
size_t PES_packet_length = accessUnit->size() + 8;
+ if (PES_packet_length >= 65536) {
+ // This really should only happen for video.
+ CHECK_EQ(stream_id, 0xe0u);
+
+ // It's valid to set this to 0 for video according to the specs.
+ PES_packet_length = 0;
+ }
+
uint8_t *ptr = buffer->data();
*ptr++ = 0x47;
*ptr++ = 0x40 | (PID >> 8);
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index 4bbc251..f404708 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -498,7 +498,9 @@
if (chunk_type == FOURCC('s', 't', 'b', 'l')) {
LOGV("sampleTable chunk is %d bytes long.", (size_t)chunk_size);
- if (mDataSource->flags() & DataSource::kWantsPrefetching) {
+ if (mDataSource->flags()
+ & (DataSource::kWantsPrefetching
+ | DataSource::kIsCachingDataSource)) {
sp<MPEG4DataSource> cachedSource =
new MPEG4DataSource(mDataSource);
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 4648ad3..9a49a9b 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -493,12 +493,29 @@
LOGV("Attempting to allocate OMX node '%s'", componentName);
+ uint32_t quirks = getComponentQuirks(componentName, createEncoder);
+
+ if (!createEncoder
+ && (quirks & kOutputBuffersAreUnreadable)
+ && (flags & kClientNeedsFramebuffer)) {
+ if (strncmp(componentName, "OMX.SEC.", 8)) {
+ // For OMX.SEC.* decoders we can enable a special mode that
+ // gives the client access to the framebuffer contents.
+
+ LOGW("Component '%s' does not give the client access to "
+ "the framebuffer contents. Skipping.",
+ componentName);
+
+ continue;
+ }
+ }
+
status_t err = omx->allocateNode(componentName, observer, &node);
if (err == OK) {
LOGV("Successfully allocated OMX node '%s'", componentName);
sp<OMXCodec> codec = new OMXCodec(
- omx, node, getComponentQuirks(componentName, createEncoder),
+ omx, node, quirks,
createEncoder, mime, componentName,
source);
@@ -681,6 +698,33 @@
initOutputFormat(meta);
+ if ((flags & kClientNeedsFramebuffer)
+ && !strncmp(mComponentName, "OMX.SEC.", 8)) {
+ OMX_INDEXTYPE index;
+
+ status_t err =
+ mOMX->getExtensionIndex(
+ mNode,
+ "OMX.SEC.index.ThumbnailMode",
+ &index);
+
+ if (err != OK) {
+ return err;
+ }
+
+ OMX_BOOL enable = OMX_TRUE;
+ err = mOMX->setConfig(mNode, index, &enable, sizeof(enable));
+
+ if (err != OK) {
+ CODEC_LOGE("setConfig('OMX.SEC.index.ThumbnailMode') "
+ "returned error 0x%08x", err);
+
+ return err;
+ }
+
+ mQuirks &= ~kOutputBuffersAreUnreadable;
+ }
+
return OK;
}
diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp
index af9c70c..a800a93 100644
--- a/media/libstagefright/StagefrightMetadataRetriever.cpp
+++ b/media/libstagefright/StagefrightMetadataRetriever.cpp
@@ -112,7 +112,7 @@
sp<MediaSource> decoder =
OMXCodec::Create(
client->interface(), source->getFormat(), false, source,
- NULL, flags);
+ NULL, flags | OMXCodec::kClientNeedsFramebuffer);
if (decoder.get() == NULL) {
LOGV("unable to instantiate video decoder.");
diff --git a/media/libstagefright/codecs/avc/dec/Android.mk b/media/libstagefright/codecs/avc/dec/Android.mk
index 2a1c8e0..1b00347 100644
--- a/media/libstagefright/codecs/avc/dec/Android.mk
+++ b/media/libstagefright/codecs/avc/dec/Android.mk
@@ -20,7 +20,7 @@
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/../common/include \
$(TOP)/frameworks/base/media/libstagefright/include \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+ $(TOP)/frameworks/base/include/media/stagefright/openmax
LOCAL_CFLAGS := -DOSCL_IMPORT_REF= -DOSCL_UNUSED_ARG= -DOSCL_EXPORT_REF=
diff --git a/media/libstagefright/codecs/avc/enc/Android.mk b/media/libstagefright/codecs/avc/enc/Android.mk
index 100f239..eb2e320 100644
--- a/media/libstagefright/codecs/avc/enc/Android.mk
+++ b/media/libstagefright/codecs/avc/enc/Android.mk
@@ -25,7 +25,7 @@
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/src \
$(LOCAL_PATH)/../common/include \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/frameworks/base/media/libstagefright/include
LOCAL_CFLAGS := \
diff --git a/media/libstagefright/codecs/m4v_h263/dec/Android.mk b/media/libstagefright/codecs/m4v_h263/dec/Android.mk
index 403da58..2d9bcc6 100644
--- a/media/libstagefright/codecs/m4v_h263/dec/Android.mk
+++ b/media/libstagefright/codecs/m4v_h263/dec/Android.mk
@@ -43,7 +43,7 @@
$(LOCAL_PATH)/src \
$(LOCAL_PATH)/include \
$(TOP)/frameworks/base/media/libstagefright/include \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+ $(TOP)/frameworks/base/include/media/stagefright/openmax
LOCAL_CFLAGS := -DOSCL_EXPORT_REF= -DOSCL_IMPORT_REF=
diff --git a/media/libstagefright/codecs/m4v_h263/enc/Android.mk b/media/libstagefright/codecs/m4v_h263/enc/Android.mk
index f2c9320..43318e9 100644
--- a/media/libstagefright/codecs/m4v_h263/enc/Android.mk
+++ b/media/libstagefright/codecs/m4v_h263/enc/Android.mk
@@ -31,7 +31,7 @@
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/src \
$(LOCAL_PATH)/include \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/frameworks/base/media/libstagefright/include
include $(BUILD_STATIC_LIBRARY)
diff --git a/media/libstagefright/codecs/on2/dec/Android.mk b/media/libstagefright/codecs/on2/dec/Android.mk
index 03dfb75..b769f0d 100644
--- a/media/libstagefright/codecs/on2/dec/Android.mk
+++ b/media/libstagefright/codecs/on2/dec/Android.mk
@@ -8,7 +8,7 @@
LOCAL_C_INCLUDES := \
$(TOP)/frameworks/base/media/libstagefright/include \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/external/libvpx \
$(TOP)/external/libvpx/vpx_codec \
$(TOP)/external/libvpx/vpx_ports
diff --git a/media/libstagefright/colorconversion/Android.mk b/media/libstagefright/colorconversion/Android.mk
index b9ba1be..0dcbd73 100644
--- a/media/libstagefright/colorconversion/Android.mk
+++ b/media/libstagefright/colorconversion/Android.mk
@@ -6,7 +6,7 @@
SoftwareRenderer.cpp
LOCAL_C_INCLUDES := \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+ $(TOP)/frameworks/base/include/media/stagefright/openmax
LOCAL_SHARED_LIBRARIES := \
libbinder \
diff --git a/media/libstagefright/httplive/Android.mk b/media/libstagefright/httplive/Android.mk
index 3de2c80..cc7dd4f 100644
--- a/media/libstagefright/httplive/Android.mk
+++ b/media/libstagefright/httplive/Android.mk
@@ -8,7 +8,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/frameworks/base/media/libstagefright
LOCAL_MODULE:= libstagefright_httplive
diff --git a/media/libstagefright/matroska/Android.mk b/media/libstagefright/matroska/Android.mk
index 0e72198..33c9d97 100644
--- a/media/libstagefright/matroska/Android.mk
+++ b/media/libstagefright/matroska/Android.mk
@@ -7,7 +7,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
LOCAL_CFLAGS += -Wno-multichar
diff --git a/media/libstagefright/mpeg2ts/Android.mk b/media/libstagefright/mpeg2ts/Android.mk
index 4dfc0f7..4a30416 100644
--- a/media/libstagefright/mpeg2ts/Android.mk
+++ b/media/libstagefright/mpeg2ts/Android.mk
@@ -10,7 +10,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/frameworks/base/media/libstagefright
LOCAL_MODULE:= libstagefright_mpeg2ts
diff --git a/media/libstagefright/omx/Android.mk b/media/libstagefright/omx/Android.mk
index f4f5cc1..ead1675 100644
--- a/media/libstagefright/omx/Android.mk
+++ b/media/libstagefright/omx/Android.mk
@@ -1,10 +1,12 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
+ifneq ($(BUILD_WITHOUT_PV),true)
# Set up the OpenCore variables.
include external/opencore/Config.mk
LOCAL_C_INCLUDES := $(PV_INCLUDES)
LOCAL_CFLAGS := $(PV_CFLAGS_MINUS_VISIBILITY)
+endif
LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)
@@ -21,6 +23,8 @@
LOCAL_CFLAGS += -DNO_OPENCORE
endif
+LOCAL_C_INCLUDES += $(TOP)/frameworks/base/include/media/stagefright/openmax
+
LOCAL_SHARED_LIBRARIES := \
libbinder \
libmedia \
diff --git a/media/libstagefright/omx/tests/Android.mk b/media/libstagefright/omx/tests/Android.mk
index 8bf4336..bf69428 100644
--- a/media/libstagefright/omx/tests/Android.mk
+++ b/media/libstagefright/omx/tests/Android.mk
@@ -10,7 +10,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
frameworks/base/media/libstagefright \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+ $(TOP)/frameworks/base/include/media/stagefright/openmax
LOCAL_MODULE:= omx_tests
diff --git a/media/libstagefright/rtsp/Android.mk b/media/libstagefright/rtsp/Android.mk
index ed16059..081ae32 100644
--- a/media/libstagefright/rtsp/Android.mk
+++ b/media/libstagefright/rtsp/Android.mk
@@ -21,7 +21,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/frameworks/base/media/libstagefright/include \
LOCAL_MODULE:= libstagefright_rtsp
@@ -48,7 +48,7 @@
LOCAL_C_INCLUDES:= \
$(JNI_H_INCLUDE) \
frameworks/base/media/libstagefright \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include
+ $(TOP)/frameworks/base/include/media/stagefright/openmax
LOCAL_CFLAGS += -Wno-multichar
diff --git a/media/tests/MediaFrameworkTest/AndroidManifest.xml b/media/tests/MediaFrameworkTest/AndroidManifest.xml
index f70a145..5c20811 100644
--- a/media/tests/MediaFrameworkTest/AndroidManifest.xml
+++ b/media/tests/MediaFrameworkTest/AndroidManifest.xml
@@ -21,6 +21,7 @@
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<application>
<uses-library android:name="android.test.runner" />
<activity android:label="@string/app_name"
diff --git a/media/tests/omxjpegdecoder/Android.mk b/media/tests/omxjpegdecoder/Android.mk
index f97f8eb..7802efd 100644
--- a/media/tests/omxjpegdecoder/Android.mk
+++ b/media/tests/omxjpegdecoder/Android.mk
@@ -44,7 +44,7 @@
$(TOP)/external/skia/include/utils \
$(TOP)/external/skia/include/effects \
$(TOP)/frameworks/base/media/libstagefright \
- $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
+ $(TOP)/frameworks/base/include/media/stagefright/openmax \
$(TOP)/frameworks/base/include/ \
$(TOP)/frameworks/base/
diff --git a/packages/SystemUI/res/drawable-hdpi/battery_low_battery.png b/packages/SystemUI/res/drawable-hdpi/battery_low_battery.png
index e74c22f..2c7a0d4 100644
--- a/packages/SystemUI/res/drawable-hdpi/battery_low_battery.png
+++ b/packages/SystemUI/res/drawable-hdpi/battery_low_battery.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_gps_acquiring.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_gps_acquiring.png
index c43fc3b..150c9fc 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_gps_acquiring.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_gps_acquiring.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/statusbar_background.9.png b/packages/SystemUI/res/drawable-hdpi/statusbar_background.9.png
index 98e5487..a933833 100644
--- a/packages/SystemUI/res/drawable-hdpi/statusbar_background.9.png
+++ b/packages/SystemUI/res/drawable-hdpi/statusbar_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_gps_acquiring.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_gps_acquiring.png
index 31bc94e..07f0a0a 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_gps_acquiring.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_gps_acquiring.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/statusbar_background.9.png b/packages/SystemUI/res/drawable-mdpi/statusbar_background.9.png
index 4b5dbe3..6c588f7 100644
--- a/packages/SystemUI/res/drawable-mdpi/statusbar_background.9.png
+++ b/packages/SystemUI/res/drawable-mdpi/statusbar_background.9.png
Binary files differ
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 3cf4360..43936a4 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -93,6 +93,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_PHONE;
import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
import static android.view.WindowManager.LayoutParams.TYPE_SEARCH_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
@@ -153,6 +154,7 @@
static final int KEYGUARD_DIALOG_LAYER = 15;
// things in here CAN NOT take focus, but are shown on top of everything else.
static final int SYSTEM_OVERLAY_LAYER = 16;
+ static final int SECURE_SYSTEM_OVERLAY_LAYER = 17;
static final int APPLICATION_MEDIA_SUBLAYER = -2;
static final int APPLICATION_MEDIA_OVERLAY_SUBLAYER = -1;
@@ -631,7 +633,7 @@
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT);
- lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
+ lp.type = WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
lp.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE|
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
@@ -727,6 +729,7 @@
public void adjustWindowParamsLw(WindowManager.LayoutParams attrs) {
switch (attrs.type) {
case TYPE_SYSTEM_OVERLAY:
+ case TYPE_SECURE_SYSTEM_OVERLAY:
case TYPE_TOAST:
// These types of windows can't receive input events.
attrs.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
@@ -804,6 +807,8 @@
return INPUT_METHOD_DIALOG_LAYER;
case TYPE_SYSTEM_OVERLAY:
return SYSTEM_OVERLAY_LAYER;
+ case TYPE_SECURE_SYSTEM_OVERLAY:
+ return SECURE_SYSTEM_OVERLAY_LAYER;
case TYPE_PRIORITY_PHONE:
return PRIORITY_PHONE_LAYER;
case TYPE_TOAST:
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index e6c32d9..fc4e06f 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -26,6 +26,7 @@
import android.content.pm.PackageManager;
import android.os.BatteryManager;
import android.os.Binder;
+import android.os.FileUtils;
import android.os.IBinder;
import android.os.DropBoxManager;
import android.os.RemoteException;
@@ -384,7 +385,7 @@
dumpFile = new File(DUMPSYS_DATA_PATH + BATTERY_STATS_SERVICE_NAME + ".dump");
dumpStream = new FileOutputStream(dumpFile);
batteryInfoService.dump(dumpStream.getFD(), DUMPSYS_ARGS);
- dumpStream.getFD().sync();
+ FileUtils.sync(dumpStream);
// add dump file to drop box
db.addFile("BATTERY_DISCHARGE_INFO", dumpFile, DropBoxManager.IS_TEXT);
diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java
index 21273cc..1538003 100644
--- a/services/java/com/android/server/DevicePolicyManagerService.java
+++ b/services/java/com/android/server/DevicePolicyManagerService.java
@@ -17,6 +17,7 @@
package com.android.server;
import com.android.internal.content.PackageMonitor;
+import com.android.internal.os.storage.ExternalStorageFormatter;
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.JournaledFile;
import com.android.internal.util.XmlUtils;
@@ -41,6 +42,7 @@
import android.os.Binder;
import android.os.IBinder;
import android.os.IPowerManager;
+import android.os.PowerManager;
import android.os.RecoverySystem;
import android.os.RemoteCallback;
import android.os.RemoteException;
@@ -71,6 +73,7 @@
final Context mContext;
final MyPackageMonitor mMonitor;
+ final PowerManager.WakeLock mWakeLock;
IPowerManager mIPowerManager;
@@ -216,6 +219,8 @@
mContext = context;
mMonitor = new MyPackageMonitor();
mMonitor.register(context, true);
+ mWakeLock = ((PowerManager)context.getSystemService(Context.POWER_SERVICE))
+ .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DPM");
}
private IPowerManager getIPowerManager() {
@@ -862,10 +867,17 @@
}
void wipeDataLocked(int flags) {
- try {
- RecoverySystem.rebootWipeUserData(mContext);
- } catch (IOException e) {
- Slog.w(TAG, "Failed requesting data wipe", e);
+ if ((flags&DevicePolicyManager.WIPE_EXTERNAL_STORAGE) != 0) {
+ Intent intent = new Intent(ExternalStorageFormatter.FORMAT_AND_FACTORY_RESET);
+ intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME);
+ mWakeLock.acquire(10000);
+ mContext.startService(intent);
+ } else {
+ try {
+ RecoverySystem.rebootWipeUserData(mContext);
+ } catch (IOException e) {
+ Slog.w(TAG, "Failed requesting data wipe", e);
+ }
}
}
diff --git a/services/java/com/android/server/DropBoxManagerService.java b/services/java/com/android/server/DropBoxManagerService.java
index 9829f9a..0e45145 100644
--- a/services/java/com/android/server/DropBoxManagerService.java
+++ b/services/java/com/android/server/DropBoxManagerService.java
@@ -26,6 +26,7 @@
import android.net.Uri;
import android.os.Debug;
import android.os.DropBoxManager;
+import android.os.FileUtils;
import android.os.Handler;
import android.os.ParcelFileDescriptor;
import android.os.StatFs;
@@ -183,7 +184,8 @@
int bufferSize = mBlockSize;
if (bufferSize > 4096) bufferSize = 4096;
if (bufferSize < 512) bufferSize = 512;
- output = new BufferedOutputStream(new FileOutputStream(temp), bufferSize);
+ FileOutputStream foutput = new FileOutputStream(temp);
+ output = new BufferedOutputStream(foutput, bufferSize);
if (read == buffer.length && ((flags & DropBoxManager.IS_GZIPPED) == 0)) {
output = new GZIPOutputStream(output);
flags = flags | DropBoxManager.IS_GZIPPED;
@@ -200,6 +202,7 @@
read = input.read(buffer);
if (read <= 0) {
+ FileUtils.sync(foutput);
output.close(); // Get a final size measurement
output = null;
} else {
diff --git a/services/java/com/android/server/LoadAverageService.java b/services/java/com/android/server/LoadAverageService.java
index 0d86429..b6baadb 100644
--- a/services/java/com/android/server/LoadAverageService.java
+++ b/services/java/com/android/server/LoadAverageService.java
@@ -272,7 +272,7 @@
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
- WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
+ WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
diff --git a/services/java/com/android/server/MasterClearReceiver.java b/services/java/com/android/server/MasterClearReceiver.java
index 4d04cee..bdb5a24 100644
--- a/services/java/com/android/server/MasterClearReceiver.java
+++ b/services/java/com/android/server/MasterClearReceiver.java
@@ -29,7 +29,7 @@
private static final String TAG = "MasterClear";
@Override
- public void onReceive(Context context, Intent intent) {
+ public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals(Intent.ACTION_REMOTE_INTENT)) {
if (!"google.com".equals(intent.getStringExtra("from"))) {
Slog.w(TAG, "Ignoring master clear request -- not from trusted server.");
@@ -37,16 +37,23 @@
}
}
- try {
- Slog.w(TAG, "!!! FACTORY RESET !!!");
- if (intent.hasExtra("enableEFS")) {
- RecoverySystem.rebootToggleEFS(context, intent.getBooleanExtra("enableEFS", false));
- } else {
- RecoverySystem.rebootWipeUserData(context);
+ Slog.w(TAG, "!!! FACTORY RESET !!!");
+ // The reboot call is blocking, so we need to do it on another thread.
+ Thread thr = new Thread("Reboot") {
+ @Override
+ public void run() {
+ try {
+ if (intent.hasExtra("enableEFS")) {
+ RecoverySystem.rebootToggleEFS(context, intent.getBooleanExtra("enableEFS", false));
+ } else {
+ RecoverySystem.rebootWipeUserData(context);
+ }
+ Log.wtf(TAG, "Still running after master clear?!");
+ } catch (IOException e) {
+ Slog.e(TAG, "Can't perform master clear/factory reset", e);
+ }
}
- Log.wtf(TAG, "Still running after master clear?!");
- } catch (IOException e) {
- Slog.e(TAG, "Can't perform master clear/factory reset", e);
- }
+ };
+ thr.start();
}
}
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 775f5c8..8cf8f6a 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -17,7 +17,6 @@
package com.android.server;
import com.android.internal.app.IMediaContainerService;
-import com.android.internal.util.HexDump;
import com.android.server.am.ActivityManagerService;
import android.content.BroadcastReceiver;
@@ -46,13 +45,15 @@
import android.os.storage.IObbActionListener;
import android.os.storage.OnObbStateChangeListener;
import android.os.storage.StorageResultCode;
-import android.security.MessageDigest;
import android.util.Slog;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
+import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.KeySpec;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -62,6 +63,10 @@
import java.util.Map;
import java.util.Map.Entry;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+
/**
* MountService implements back-end services for platform storage
* management.
@@ -154,6 +159,18 @@
final private HashSet<String> mAsecMountSet = new HashSet<String>();
/**
+ * The size of the crypto algorithm key in bits for OBB files. Currently
+ * Twofish is used which takes 128-bit keys.
+ */
+ private static final int CRYPTO_ALGORITHM_KEY_SIZE = 128;
+
+ /**
+ * The number of times to run SHA1 in the PBKDF2 function for OBB files.
+ * 1024 is reasonably secure and not too slow.
+ */
+ private static final int PBKDF2_HASH_ROUNDS = 1024;
+
+ /**
* Mounted OBB tracking information. Used to track the current state of all
* OBBs.
*/
@@ -1901,16 +1918,23 @@
if (mKey == null) {
hashedKey = "none";
} else {
- final MessageDigest md;
try {
- md = MessageDigest.getInstance("MD5");
+ SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+
+ KeySpec ks = new PBEKeySpec(mKey.toCharArray(), obbInfo.salt,
+ PBKDF2_HASH_ROUNDS, CRYPTO_ALGORITHM_KEY_SIZE);
+ SecretKey key = factory.generateSecret(ks);
+ BigInteger bi = new BigInteger(key.getEncoded());
+ hashedKey = bi.toString(16);
} catch (NoSuchAlgorithmException e) {
- Slog.e(TAG, "Could not load MD5 algorithm", e);
- sendNewStatusOrIgnore(OnObbStateChangeListener.ERROR_PERMISSION_DENIED);
+ Slog.e(TAG, "Could not load PBKDF2 algorithm", e);
+ sendNewStatusOrIgnore(OnObbStateChangeListener.ERROR_INTERNAL);
+ return;
+ } catch (InvalidKeySpecException e) {
+ Slog.e(TAG, "Invalid key spec when loading PBKDF2 algorithm", e);
+ sendNewStatusOrIgnore(OnObbStateChangeListener.ERROR_INTERNAL);
return;
}
-
- hashedKey = HexDump.toHexString(md.digest(mKey.getBytes()));
}
int rc = StorageResultCode.OperationSucceeded;
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 9d7c58e..cc7a027 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -144,6 +144,7 @@
private static final boolean MULTIPLE_APPLICATION_UIDS = true;
private static final int RADIO_UID = Process.PHONE_UID;
private static final int LOG_UID = Process.LOG_UID;
+ private static final int NFC_UID = Process.NFC_UID;
private static final int FIRST_APPLICATION_UID =
Process.FIRST_APPLICATION_UID;
private static final int MAX_APPLICATION_UIDS = 1000;
@@ -740,6 +741,10 @@
MULTIPLE_APPLICATION_UIDS
? LOG_UID : FIRST_APPLICATION_UID,
ApplicationInfo.FLAG_SYSTEM);
+ mSettings.addSharedUserLP("android.uid.nfc",
+ MULTIPLE_APPLICATION_UIDS
+ ? NFC_UID : FIRST_APPLICATION_UID,
+ ApplicationInfo.FLAG_SYSTEM);
String separateProcesses = SystemProperties.get("debug.separate_processes");
if (separateProcesses != null && separateProcesses.length() > 0) {
@@ -5950,8 +5955,8 @@
private void extractPublicFiles(PackageParser.Package newPackage,
File publicZipFile) throws IOException {
- final ZipOutputStream publicZipOutStream =
- new ZipOutputStream(new FileOutputStream(publicZipFile));
+ final FileOutputStream fstr = new FileOutputStream(publicZipFile);
+ final ZipOutputStream publicZipOutStream = new ZipOutputStream(fstr);
final ZipFile privateZip = new ZipFile(newPackage.mPath);
// Copy manifest, resources.arsc and res directory to public zip
@@ -5976,6 +5981,9 @@
}
}
+ publicZipOutStream.finish();
+ publicZipOutStream.flush();
+ FileUtils.sync(fstr);
publicZipOutStream.close();
FileUtils.setPermissions(
publicZipFile.getAbsolutePath(),
@@ -8477,8 +8485,8 @@
mPastSignatures.clear();
try {
- BufferedOutputStream str = new BufferedOutputStream(new FileOutputStream(
- mSettingsFilename));
+ FileOutputStream fstr = new FileOutputStream(mSettingsFilename);
+ BufferedOutputStream str = new BufferedOutputStream(fstr);
//XmlSerializer serializer = XmlUtils.serializerInstance();
XmlSerializer serializer = new FastXmlSerializer();
@@ -8559,6 +8567,7 @@
serializer.endDocument();
str.flush();
+ FileUtils.sync(fstr);
str.close();
// New settings successfully written, old ones are no longer
@@ -8575,7 +8584,8 @@
File tempFile = new File(mPackageListFilename.toString() + ".tmp");
JournaledFile journal = new JournaledFile(mPackageListFilename, tempFile);
- str = new BufferedOutputStream(new FileOutputStream(journal.chooseForWrite()));
+ fstr = new FileOutputStream(journal.chooseForWrite());
+ str = new BufferedOutputStream(fstr);
try {
StringBuilder sb = new StringBuilder();
for (PackageSetting pkg : mPackages.values()) {
@@ -8611,6 +8621,7 @@
str.write(sb.toString().getBytes());
}
str.flush();
+ FileUtils.sync(fstr);
str.close();
journal.commit();
}
@@ -8825,7 +8836,7 @@
try {
str = new FileInputStream(mBackupSettingsFilename);
mReadMessages.append("Reading from backup settings file\n");
- Log.i(TAG, "Reading from backup settings file!");
+ reportSettingsProblem(Log.INFO, "Need to read from backup settings file");
if (mSettingsFilename.exists()) {
// If both the backup and settings file exist, we
// ignore the settings since it might have been
@@ -8844,7 +8855,7 @@
if (str == null) {
if (!mSettingsFilename.exists()) {
mReadMessages.append("No settings file found\n");
- Slog.i(TAG, "No current settings file!");
+ reportSettingsProblem(Log.INFO, "No settings file; creating initial state");
return false;
}
str = new FileInputStream(mSettingsFilename);
@@ -8860,7 +8871,7 @@
if (type != XmlPullParser.START_TAG) {
mReadMessages.append("No start tag found in settings file\n");
- Slog.e(TAG, "No start tag found in package manager settings");
+ reportSettingsProblem(Log.WARN, "No start tag found in package manager settings");
return false;
}
@@ -8923,10 +8934,12 @@
} catch(XmlPullParserException e) {
mReadMessages.append("Error reading: " + e.toString());
+ reportSettingsProblem(Log.ERROR, "Error reading settings: " + e);
Slog.e(TAG, "Error reading package manager settings", e);
} catch(java.io.IOException e) {
mReadMessages.append("Error reading: " + e.toString());
+ reportSettingsProblem(Log.ERROR, "Error reading settings: " + e);
Slog.e(TAG, "Error reading package manager settings", e);
}
@@ -8940,7 +8953,7 @@
(SharedUserSetting) idObj, pp.codePath, pp.resourcePath,
pp.nativeLibraryPathString, pp.versionCode, pp.pkgFlags, true, true);
if (p == null) {
- Slog.w(TAG, "Unable to create application package for "
+ reportSettingsProblem(Log.WARN, "Unable to create application package for "
+ pp.name);
continue;
}
@@ -8950,13 +8963,13 @@
+ " has shared uid " + pp.sharedId
+ " that is not a shared uid\n";
mReadMessages.append(msg);
- Slog.e(TAG, msg);
+ reportSettingsProblem(Log.ERROR, msg);
} else {
String msg = "Bad package setting: package " + pp.name
+ " has shared uid " + pp.sharedId
+ " that is not defined\n";
mReadMessages.append(msg);
- Slog.e(TAG, msg);
+ reportSettingsProblem(Log.ERROR, msg);
}
}
mPendingPackages.clear();
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index f53ce2d..638bd45 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -65,6 +65,8 @@
import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
import static android.provider.Settings.System.STAY_ON_WHILE_PLUGGED_IN;
+import static android.provider.Settings.System.WINDOW_ANIMATION_SCALE;
+import static android.provider.Settings.System.TRANSITION_ANIMATION_SCALE;
import java.io.FileDescriptor;
import java.io.IOException;
@@ -243,6 +245,11 @@
boolean mUnplugTurnsOnScreen;
private int mWarningSpewThrottleCount;
private long mWarningSpewThrottleTime;
+ private int mAnimationSetting = ANIM_SETTING_OFF;
+
+ // Must match with the ISurfaceComposer constants in C++.
+ private static final int ANIM_SETTING_ON = 0x01;
+ private static final int ANIM_SETTING_OFF = 0x10;
// Used when logging number and duration of touch-down cycles
private long mTotalTouchDownTime;
@@ -256,7 +263,7 @@
private native void nativeInit();
private native void nativeSetPowerState(boolean screenOn, boolean screenBright);
- private native void nativeStartSurfaceFlingerAnimation();
+ private native void nativeStartSurfaceFlingerAnimation(int mode);
/*
static PrintStream mLog;
@@ -426,6 +433,12 @@
return iVal != null ? iVal : defValue;
}
+ private float getFloat(String name, float defValue) {
+ ContentValues values = mSettings.getValues(name);
+ Float fVal = values != null ? values.getAsFloat(Settings.System.VALUE) : null;
+ return fVal != null ? fVal : defValue;
+ }
+
public void update(Observable o, Object arg) {
synchronized (mLocks) {
// STAY_ON_WHILE_PLUGGED_IN, default to when plugged into AC
@@ -436,7 +449,7 @@
// SCREEN_OFF_TIMEOUT, default to 15 seconds
mScreenOffTimeoutSetting = getInt(SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT);
- // DIM_SCREEN
+ // DIM_SCREEN
//mDimScreen = getInt(DIM_SCREEN) != 0;
// SCREEN_BRIGHTNESS_MODE, default to manual
@@ -445,6 +458,17 @@
// recalculate everything
setScreenOffTimeoutsLocked();
+
+ final float windowScale = getFloat(WINDOW_ANIMATION_SCALE, 1.0f);
+ final float transitionScale = getFloat(TRANSITION_ANIMATION_SCALE, 1.0f);
+ mAnimationSetting = 0;
+ if (windowScale > 0.5f) {
+ mAnimationSetting |= ANIM_SETTING_OFF;
+ }
+ if (transitionScale > 0.5f) {
+ // Uncomment this if you want the screen-on animation.
+ // mAnimationSetting |= ANIM_SETTING_ON;
+ }
}
}
}
@@ -583,9 +607,11 @@
"(" + Settings.System.NAME + "=?) or ("
+ Settings.System.NAME + "=?) or ("
+ Settings.System.NAME + "=?) or ("
+ + Settings.System.NAME + "=?) or ("
+ + Settings.System.NAME + "=?) or ("
+ Settings.System.NAME + "=?)",
new String[]{STAY_ON_WHILE_PLUGGED_IN, SCREEN_OFF_TIMEOUT, DIM_SCREEN,
- SCREEN_BRIGHTNESS_MODE},
+ SCREEN_BRIGHTNESS_MODE, WINDOW_ANIMATION_SCALE, TRANSITION_ANIMATION_SCALE},
null);
mSettings = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, mHandler);
SettingsObserver settingsObserver = new SettingsObserver();
@@ -1945,8 +1971,8 @@
/ stepsToTarget;
if (mSpew) {
String noticeMe = nominalCurrentValue == curValue ? "" : " ******************";
- Slog.i(TAG, "Setting target " + mask + ": cur=" + curValue
- + " target=" + targetValue + " delta=" + delta
+ Slog.i(TAG, "setTargetLocked mask=" + mask + " curValue=" + curValue
+ + " target=" + target + " targetValue=" + targetValue + " delta=" + delta
+ " nominalCurrentValue=" + nominalCurrentValue
+ noticeMe);
}
@@ -1984,20 +2010,20 @@
}
if (mSpew) Slog.d(TAG, "Animating curIntValue=" + curIntValue + ": " + mask);
setLightBrightness(mask, curIntValue);
- finishAnimation(more, curIntValue);
+ finishAnimationLocked(more, curIntValue);
return more;
}
- void jumpToTarget() {
- if (mSpew) Slog.d(TAG, "jumpToTarget targetValue=" + targetValue + ": " + mask);
+ void jumpToTargetLocked() {
+ if (mSpew) Slog.d(TAG, "jumpToTargetLocked targetValue=" + targetValue + ": " + mask);
setLightBrightness(mask, targetValue);
final int tv = targetValue;
curValue = tv;
targetValue = -1;
- finishAnimation(false, tv);
+ finishAnimationLocked(false, tv);
}
- private void finishAnimation(boolean more, int curIntValue) {
+ private void finishAnimationLocked(boolean more, int curIntValue) {
animating = more;
if (!more) {
if (mask == SCREEN_BRIGHT_BIT && curIntValue == Power.BRIGHTNESS_OFF) {
@@ -2016,16 +2042,18 @@
}
}
} else {
- boolean animate;
- boolean jump;
synchronized (mLocks) {
- jump = animating; // we haven't already run this animation
- animate = jump && targetValue == Power.BRIGHTNESS_OFF; // we're turning off
+ // we're turning off
+ final boolean animate = animating && targetValue == Power.BRIGHTNESS_OFF;
+ if (animate) {
+ // It's pretty scary to hold mLocks for this long, and we should
+ // redesign this, but it works for now.
+ nativeStartSurfaceFlingerAnimation(
+ mScreenOffReason == WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR
+ ? 0 : mAnimationSetting);
+ }
+ mScreenBrightness.jumpToTargetLocked();
}
- if (animate) {
- nativeStartSurfaceFlingerAnimation();
- }
- mScreenBrightness.jumpToTarget();
}
}
}
@@ -2754,8 +2782,10 @@
}
// update our animation state
- mScreenBrightness.targetValue = brightness;
- mScreenBrightness.jumpToTarget();
+ synchronized (mLocks) {
+ mScreenBrightness.targetValue = brightness;
+ mScreenBrightness.jumpToTargetLocked();
+ }
}
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index a2a5e67..df69b76 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -20,7 +20,6 @@
import com.android.internal.app.ShutdownThread;
import com.android.internal.os.BinderInternal;
import com.android.internal.os.SamplingProfilerIntegration;
-import com.trustedlogic.trustednfc.android.server.NfcService;
import dalvik.system.VMRuntime;
import dalvik.system.Zygote;
@@ -437,20 +436,6 @@
}
try {
- Slog.i(TAG, "Nfc Service");
- NfcService nfc;
- try {
- nfc = new NfcService(context);
- } catch (UnsatisfiedLinkError e) { // gross hack to detect NFC
- nfc = null;
- Slog.w(TAG, "No NFC support");
- }
- ServiceManager.addService(Context.NFC_SERVICE, nfc);
- } catch (Throwable e) {
- Slog.e(TAG, "Failure starting NFC Service", e);
- }
-
- try {
Slog.i(TAG, "DiskStats Service");
ServiceManager.addService("diskstats", new DiskStatsService(context));
} catch (Throwable e) {
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java
index c837a3a..859c85c 100644
--- a/services/java/com/android/server/WallpaperManagerService.java
+++ b/services/java/com/android/server/WallpaperManagerService.java
@@ -35,6 +35,7 @@
import android.content.res.Resources;
import android.os.Binder;
import android.os.Bundle;
+import android.os.FileUtils;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.FileObserver;
@@ -836,6 +837,7 @@
} catch (IOException ex) {}
}
if (fos != null) {
+ FileUtils.sync(fos);
try {
fos.close();
} catch (IOException ex) {}
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 9c06c33..aa2f784 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -5888,7 +5888,7 @@
View v = LayoutInflater.from(mContext).inflate(
com.android.internal.R.layout.safe_mode, null);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
- lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
+ lp.type = WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM | Gravity.LEFT;
@@ -6074,6 +6074,7 @@
Slog.w(TAG, "Failure writing last done pre-boot receivers", e);
file.delete();
} finally {
+ FileUtils.sync(fos);
if (dos != null) {
try {
dos.close();
@@ -7035,6 +7036,9 @@
if (mHeavyWeightProcess == app) {
currApp.flags |= ActivityManager.RunningAppProcessInfo.FLAG_CANT_SAVE_STATE;
}
+ if (app.persistent) {
+ currApp.flags |= ActivityManager.RunningAppProcessInfo.FLAG_PERSISTENT;
+ }
int adj = app.curAdj;
if (adj >= EMPTY_APP_ADJ) {
currApp.importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_EMPTY;
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 86c7bdf..f52d322 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -1881,7 +1881,27 @@
String resultWho, int requestCode,
int callingPid, int callingUid, boolean onlyIfNeeded,
boolean componentSpecified) {
- Slog.i(TAG, "Starting: " + intent);
+
+ int err = START_SUCCESS;
+
+ ProcessRecord callerApp = null;
+ if (caller != null) {
+ callerApp = mService.getRecordForAppLocked(caller);
+ if (callerApp != null) {
+ callingPid = callerApp.pid;
+ callingUid = callerApp.info.uid;
+ } else {
+ Slog.w(TAG, "Unable to find app for caller " + caller
+ + " (pid=" + callingPid + ") when starting: "
+ + intent.toString());
+ err = START_PERMISSION_DENIED;
+ }
+ }
+
+ if (err == START_SUCCESS) {
+ Slog.i(TAG, "Starting: " + intent + " from pid "
+ + (callerApp != null ? callerApp.pid : callingPid));
+ }
ActivityRecord sourceRecord = null;
ActivityRecord resultRecord = null;
@@ -1916,9 +1936,7 @@
}
}
- int err = START_SUCCESS;
-
- if (intent.getComponent() == null) {
+ if (err == START_SUCCESS && intent.getComponent() == null) {
// We couldn't find a class that can handle the given Intent.
// That's the end of that!
err = START_INTENT_NOT_RESOLVED;
@@ -1930,20 +1948,6 @@
err = START_CLASS_NOT_FOUND;
}
- ProcessRecord callerApp = null;
- if (err == START_SUCCESS && caller != null) {
- callerApp = mService.getRecordForAppLocked(caller);
- if (callerApp != null) {
- callingPid = callerApp.pid;
- callingUid = callerApp.info.uid;
- } else {
- Slog.w(TAG, "Unable to find app for caller " + caller
- + " (pid=" + callingPid + ") when starting: "
- + intent.toString());
- err = START_PERMISSION_DENIED;
- }
- }
-
if (err != START_SUCCESS) {
if (resultRecord != null) {
sendActivityResultLocked(-1,
diff --git a/services/java/com/android/server/am/UsageStatsService.java b/services/java/com/android/server/am/UsageStatsService.java
index 8463b5a..6e8f248 100644
--- a/services/java/com/android/server/am/UsageStatsService.java
+++ b/services/java/com/android/server/am/UsageStatsService.java
@@ -23,6 +23,8 @@
import android.os.Binder;
import android.os.IBinder;
import com.android.internal.os.PkgUsageStats;
+
+import android.os.FileUtils;
import android.os.Parcel;
import android.os.Process;
import android.os.ServiceManager;
@@ -471,6 +473,7 @@
out.recycle();
stream.flush();
} finally {
+ FileUtils.sync(stream);
stream.close();
}
}
diff --git a/services/java/com/trustedlogic/trustednfc/android/server/NfcService.java b/services/java/com/trustedlogic/trustednfc/android/server/NfcService.java
deleted file mode 100644
index bddbafc..0000000
--- a/services/java/com/trustedlogic/trustednfc/android/server/NfcService.java
+++ /dev/null
@@ -1,2157 +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.trustedlogic.trustednfc.android.server;
-
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import android.nfc.ErrorCodes;
-import android.nfc.FormatException;
-import android.nfc.ILlcpConnectionlessSocket;
-import android.nfc.ILlcpServiceSocket;
-import android.nfc.INfcAdapter;
-import android.nfc.ILlcpSocket;
-import android.nfc.INfcTag;
-import android.nfc.IP2pInitiator;
-import android.nfc.IP2pTarget;
-import android.nfc.LlcpPacket;
-import android.nfc.NdefMessage;
-import android.nfc.Tag;
-//import android.nfc.NfcException;
-//import android.nfc.NfcManager;
-import android.nfc.NfcAdapter;
-import com.trustedlogic.trustednfc.android.internal.NativeLlcpConnectionlessSocket;
-import com.trustedlogic.trustednfc.android.internal.NativeLlcpServiceSocket;
-import com.trustedlogic.trustednfc.android.internal.NativeLlcpSocket;
-import com.trustedlogic.trustednfc.android.internal.NativeNfcManager;
-import com.trustedlogic.trustednfc.android.internal.NativeNfcTag;
-import com.trustedlogic.trustednfc.android.internal.NativeP2pDevice;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.Process;
-import android.os.RemoteException;
-import android.provider.Settings;
-import android.util.Log;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-
-public class NfcService extends INfcAdapter.Stub implements Runnable {
-
- /**
- * NFC Service tag
- */
- private static final String TAG = "NfcService";
-
- /**
- * NFC features disabled state
- */
- private static final short NFC_STATE_DISABLED = 0x00;
-
- /**
- * NFC features enabled state
- */
- private static final short NFC_STATE_ENABLED = 0x01;
-
- /**
- * NFC Discovery for Reader mode
- */
- private static final int DISCOVERY_MODE_READER = 0;
-
- /**
- * NFC Discovery for Card Emulation Mode
- */
- private static final int DISCOVERY_MODE_CARD_EMULATION = 2;
-
- /**
- * LLCP Service Socket type
- */
- private static final int LLCP_SERVICE_SOCKET_TYPE = 0;
-
- /**
- * LLCP Socket type
- */
- private static final int LLCP_SOCKET_TYPE = 1;
-
- /**
- * LLCP Connectionless socket type
- */
- private static final int LLCP_CONNECTIONLESS_SOCKET_TYPE = 2;
-
- /**
- * Maximun number of sockets managed
- */
- private static final int LLCP_SOCKET_NB_MAX = 5;
-
- /**
- * Default value for the Maximum Information Unit parameter
- */
- private static final int LLCP_LTO_DEFAULT_VALUE = 150;
-
- /**
- * Default value for the Maximum Information Unit parameter
- */
- private static final int LLCP_LTO_MAX_VALUE = 255;
-
- /**
- * Maximun value for the Receive Window
- */
- private static final int LLCP_RW_MAX_VALUE = 15;
-
- /**
- * Default value for the Maximum Information Unit parameter
- */
- private static final int LLCP_MIU_DEFAULT_VALUE = 128;
-
- /**
- * Default value for the Maximum Information Unit parameter
- */
- private static final int LLCP_MIU_MAX_VALUE = 2176;
-
- /**
- * Default value for the Well Known Service List parameter
- */
- private static final int LLCP_WKS_DEFAULT_VALUE = 1;
-
- /**
- * Max value for the Well Known Service List parameter
- */
- private static final int LLCP_WKS_MAX_VALUE = 15;
-
- /**
- * Default value for the Option parameter
- */
- private static final int LLCP_OPT_DEFAULT_VALUE = 0;
-
- /**
- * Max value for the Option parameter
- */
- private static final int LLCP_OPT_MAX_VALUE = 3;
-
- /**
- * LLCP Properties
- */
- private static final int PROPERTY_LLCP_LTO = 0;
-
- private static final int PROPERTY_LLCP_MIU = 1;
-
- private static final int PROPERTY_LLCP_WKS = 2;
-
- private static final int PROPERTY_LLCP_OPT = 3;
-
- private static final String PROPERTY_LLCP_LTO_VALUE = "llcp.lto";
-
- private static final String PROPERTY_LLCP_MIU_VALUE = "llcp.miu";
-
- private static final String PROPERTY_LLCP_WKS_VALUE = "llcp.wks";
-
- private static final String PROPERTY_LLCP_OPT_VALUE = "llcp.opt";
-
- /**
- * NFC Reader Properties
- */
- private static final int PROPERTY_NFC_DISCOVERY_A = 4;
-
- private static final int PROPERTY_NFC_DISCOVERY_B = 5;
-
- private static final int PROPERTY_NFC_DISCOVERY_F = 6;
-
- private static final int PROPERTY_NFC_DISCOVERY_15693 = 7;
-
- private static final int PROPERTY_NFC_DISCOVERY_NFCIP = 8;
-
- private static final String PROPERTY_NFC_DISCOVERY_A_VALUE = "discovery.iso14443A";
-
- private static final String PROPERTY_NFC_DISCOVERY_B_VALUE = "discovery.iso14443B";
-
- private static final String PROPERTY_NFC_DISCOVERY_F_VALUE = "discovery.felica";
-
- private static final String PROPERTY_NFC_DISCOVERY_15693_VALUE = "discovery.iso15693";
-
- private static final String PROPERTY_NFC_DISCOVERY_NFCIP_VALUE = "discovery.nfcip";
-
- private final Context mContext;
-
- private final HashMap<Integer, Object> mObjectMap = new HashMap<Integer, Object>();
-
- private final HashMap<Integer, Object> mSocketMap = new HashMap<Integer, Object>();
-
- private final LinkedList<RegisteredSocket> mRegisteredSocketList = new LinkedList<RegisteredSocket>();
-
- private int mLlcpLinkState = NfcAdapter.LLCP_LINK_STATE_DEACTIVATED;
-
- private int mGeneratedSocketHandle = 0;
-
- private int mNbSocketCreated = 0;
-
- private boolean mIsNfcEnabled = false;
-
- private NfcHandler mNfcHandler;
-
- private int mSelectedSeId = 0;
-
- private int mTimeout = 0;
-
- private int mNfcState;
-
- private int mNfcSecureElementState;
-
- private boolean mOpenPending = false;
-
- private final NativeNfcManager mManager;
-
- private final ILlcpSocket mLlcpSocket = new ILlcpSocket.Stub() {
-
- private final int CONNECT_FLAG = 0x01;
- private final int CLOSE_FLAG = 0x02;
- private final int RECV_FLAG = 0x04;
- private final int SEND_FLAG = 0x08;
-
- private int concurrencyFlags;
- private Object sync;
-
- private void enterCritical(int mask, int current) {
- int result = -1;
- try {
- while (result != 0) {
- synchronized(this) {
- result = concurrencyFlags & mask;
- }
- sync.wait();
- }
- }
- catch(InterruptedException e) {
- }
- // Set flag
- concurrencyFlags |= current;
- }
-
- private void leaveCritical(int current) {
- synchronized(this) {
- // Clear flag
- concurrencyFlags &= ~current;
- }
- // Release waiting threads
- sync.notifyAll();
- }
-
- public int close(int nativeHandle) throws RemoteException {
- NativeLlcpSocket socket = null;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- if (mLlcpLinkState == NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
- isSuccess = socket.doClose();
- if (isSuccess) {
- /* Remove the socket closed from the hmap */
- RemoveSocket(nativeHandle);
- /* Update mNbSocketCreated */
- mNbSocketCreated--;
- return ErrorCodes.SUCCESS;
- } else {
- return ErrorCodes.ERROR_IO;
- }
- } else {
- /* Remove the socket closed from the hmap */
- RemoveSocket(nativeHandle);
-
- /* Remove registered socket from the list */
- RemoveRegisteredSocket(nativeHandle);
-
- /* Update mNbSocketCreated */
- mNbSocketCreated--;
-
- return ErrorCodes.SUCCESS;
- }
- } else {
- return ErrorCodes.ERROR_IO;
- }
- }
-
- public int connect(int nativeHandle, int sap) throws RemoteException {
- NativeLlcpSocket socket = null;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- isSuccess = socket.doConnect(sap, socket.getConnectTimeout());
- if (isSuccess) {
- return ErrorCodes.SUCCESS;
- } else {
- return ErrorCodes.ERROR_IO;
- }
- } else {
- return ErrorCodes.ERROR_IO;
- }
-
- }
-
- public int connectByName(int nativeHandle, String sn) throws RemoteException {
- NativeLlcpSocket socket = null;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- isSuccess = socket.doConnectBy(sn, socket.getConnectTimeout());
- if (isSuccess) {
- return ErrorCodes.SUCCESS;
- } else {
- return ErrorCodes.ERROR_IO;
- }
- } else {
- return ErrorCodes.ERROR_IO;
- }
-
- }
-
- public int getConnectTimeout(int nativeHandle) throws RemoteException {
- NativeLlcpSocket socket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- return socket.getConnectTimeout();
- } else {
- return 0;
- }
- }
-
- public int getLocalSap(int nativeHandle) throws RemoteException {
- NativeLlcpSocket socket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- return socket.getSap();
- } else {
- return 0;
- }
- }
-
- public int getLocalSocketMiu(int nativeHandle) throws RemoteException {
- NativeLlcpSocket socket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- return socket.getMiu();
- } else {
- return 0;
- }
- }
-
- public int getLocalSocketRw(int nativeHandle) throws RemoteException {
- NativeLlcpSocket socket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- return socket.getRw();
- } else {
- return 0;
- }
- }
-
- public int getRemoteSocketMiu(int nativeHandle) throws RemoteException {
- NativeLlcpSocket socket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- if (socket.doGetRemoteSocketMiu() != 0) {
- return socket.doGetRemoteSocketMiu();
- } else {
- return ErrorCodes.ERROR_SOCKET_NOT_CONNECTED;
- }
- } else {
- return ErrorCodes.ERROR_SOCKET_NOT_CONNECTED;
- }
- }
-
- public int getRemoteSocketRw(int nativeHandle) throws RemoteException {
- NativeLlcpSocket socket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- if (socket.doGetRemoteSocketRw() != 0) {
- return socket.doGetRemoteSocketRw();
- } else {
- return ErrorCodes.ERROR_SOCKET_NOT_CONNECTED;
- }
- } else {
- return ErrorCodes.ERROR_SOCKET_NOT_CONNECTED;
- }
- }
-
- public int receive(int nativeHandle, byte[] receiveBuffer) throws RemoteException {
- NativeLlcpSocket socket = null;
- int receiveLength = 0;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- receiveLength = socket.doReceive(receiveBuffer);
- if (receiveLength != 0) {
- return receiveLength;
- } else {
- return ErrorCodes.ERROR_IO;
- }
- } else {
- return ErrorCodes.ERROR_IO;
- }
- }
-
- public int send(int nativeHandle, byte[] data) throws RemoteException {
- NativeLlcpSocket socket = null;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- isSuccess = socket.doSend(data);
- if (isSuccess) {
- return ErrorCodes.SUCCESS;
- } else {
- return ErrorCodes.ERROR_IO;
- }
- } else {
- return ErrorCodes.ERROR_IO;
- }
- }
-
- public void setConnectTimeout(int nativeHandle, int timeout) throws RemoteException {
- NativeLlcpSocket socket = null;
-
- /* find the socket in the hmap */
- socket = (NativeLlcpSocket) findSocket(nativeHandle);
- if (socket != null) {
- socket.setConnectTimeout(timeout);
- }
- }
-
- };
-
- private final ILlcpServiceSocket mLlcpServerSocketService = new ILlcpServiceSocket.Stub() {
-
- public int accept(int nativeHandle) throws RemoteException {
- NativeLlcpServiceSocket socket = null;
- NativeLlcpSocket clientSocket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- if (mNbSocketCreated < LLCP_SOCKET_NB_MAX) {
- /* find the socket in the hmap */
- socket = (NativeLlcpServiceSocket) findSocket(nativeHandle);
- if (socket != null) {
- clientSocket = socket.doAccept(socket.getAcceptTimeout(), socket.getMiu(),
- socket.getRw(), socket.getLinearBufferLength());
- if (clientSocket != null) {
- /* Add the socket into the socket map */
- mSocketMap.put(clientSocket.getHandle(), clientSocket);
- mNbSocketCreated++;
- return clientSocket.getHandle();
- } else {
- return ErrorCodes.ERROR_IO;
- }
- } else {
- return ErrorCodes.ERROR_IO;
- }
- } else {
- return ErrorCodes.ERROR_INSUFFICIENT_RESOURCES;
- }
-
- }
-
- public void close(int nativeHandle) throws RemoteException {
- NativeLlcpServiceSocket socket = null;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpServiceSocket) findSocket(nativeHandle);
- if (socket != null) {
- if (mLlcpLinkState == NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
- isSuccess = socket.doClose();
- if (isSuccess) {
- /* Remove the socket closed from the hmap */
- RemoveSocket(nativeHandle);
- /* Update mNbSocketCreated */
- mNbSocketCreated--;
- }
- } else {
- /* Remove the socket closed from the hmap */
- RemoveSocket(nativeHandle);
-
- /* Remove registered socket from the list */
- RemoveRegisteredSocket(nativeHandle);
-
- /* Update mNbSocketCreated */
- mNbSocketCreated--;
- }
- }
- }
-
- public int getAcceptTimeout(int nativeHandle) throws RemoteException {
- NativeLlcpServiceSocket socket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpServiceSocket) findSocket(nativeHandle);
- if (socket != null) {
- return socket.getAcceptTimeout();
- } else {
- return 0;
- }
- }
-
- public void setAcceptTimeout(int nativeHandle, int timeout) throws RemoteException {
- NativeLlcpServiceSocket socket = null;
-
- /* find the socket in the hmap */
- socket = (NativeLlcpServiceSocket) findSocket(nativeHandle);
- if (socket != null) {
- socket.setAcceptTimeout(timeout);
- }
- }
- };
-
- private final ILlcpConnectionlessSocket mLlcpConnectionlessSocketService = new ILlcpConnectionlessSocket.Stub() {
-
- public void close(int nativeHandle) throws RemoteException {
- NativeLlcpConnectionlessSocket socket = null;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpConnectionlessSocket) findSocket(nativeHandle);
- if (socket != null) {
- if (mLlcpLinkState == NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
- isSuccess = socket.doClose();
- if (isSuccess) {
- /* Remove the socket closed from the hmap */
- RemoveSocket(nativeHandle);
- /* Update mNbSocketCreated */
- mNbSocketCreated--;
- }
- } else {
- /* Remove the socket closed from the hmap */
- RemoveSocket(nativeHandle);
-
- /* Remove registered socket from the list */
- RemoveRegisteredSocket(nativeHandle);
-
- /* Update mNbSocketCreated */
- mNbSocketCreated--;
- }
- }
- }
-
- public int getSap(int nativeHandle) throws RemoteException {
- NativeLlcpConnectionlessSocket socket = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpConnectionlessSocket) findSocket(nativeHandle);
- if (socket != null) {
- return socket.getSap();
- } else {
- return 0;
- }
- }
-
- public LlcpPacket receiveFrom(int nativeHandle) throws RemoteException {
- NativeLlcpConnectionlessSocket socket = null;
- LlcpPacket packet;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpConnectionlessSocket) findSocket(nativeHandle);
- if (socket != null) {
- packet = socket.doReceiveFrom(socket.getLinkMiu());
- if (packet != null) {
- return packet;
- }
- return null;
- } else {
- return null;
- }
- }
-
- public int sendTo(int nativeHandle, LlcpPacket packet) throws RemoteException {
- NativeLlcpConnectionlessSocket socket = null;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the socket in the hmap */
- socket = (NativeLlcpConnectionlessSocket) findSocket(nativeHandle);
- if (socket != null) {
- isSuccess = socket.doSendTo(packet.getRemoteSap(), packet.getDataBuffer());
- if (isSuccess) {
- return ErrorCodes.SUCCESS;
- } else {
- return ErrorCodes.ERROR_IO;
- }
- } else {
- return ErrorCodes.ERROR_IO;
- }
- }
- };
-
- private final INfcTag mNfcTagService = new INfcTag.Stub() {
-
- public int close(int nativeHandle) throws RemoteException {
- NativeNfcTag tag = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the tag in the hmap */
- tag = (NativeNfcTag) findObject(nativeHandle);
- if (tag != null) {
- if (tag.doDisconnect()) {
- /* Remove the device from the hmap */
- RemoveObject(nativeHandle);
- /* Restart polling loop for notification */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
- mOpenPending = false;
- return ErrorCodes.SUCCESS;
- }
-
- }
- /* Restart polling loop for notification */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
- mOpenPending = false;
- return ErrorCodes.ERROR_DISCONNECT;
- }
-
- public int connect(int nativeHandle) throws RemoteException {
- NativeNfcTag tag = null;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the tag in the hmap */
- tag = (NativeNfcTag) findObject(nativeHandle);
- if (tag != null) {
- if (tag.doConnect())
- return ErrorCodes.SUCCESS;
- }
- /* Restart polling loop for notification */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
- mOpenPending = false;
- return ErrorCodes.ERROR_CONNECT;
- }
-
- public String getType(int nativeHandle) throws RemoteException {
- NativeNfcTag tag = null;
- String type;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the tag in the hmap */
- tag = (NativeNfcTag) findObject(nativeHandle);
- if (tag != null) {
- type = tag.getType();
- return type;
- }
- return null;
- }
-
- public byte[] getUid(int nativeHandle) throws RemoteException {
- NativeNfcTag tag = null;
- byte[] uid;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the tag in the hmap */
- tag = (NativeNfcTag) findObject(nativeHandle);
- if (tag != null) {
- uid = tag.getUid();
- return uid;
- }
- return null;
- }
-
- public boolean isNdef(int nativeHandle) throws RemoteException {
- NativeNfcTag tag = null;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return isSuccess;
- }
-
- /* find the tag in the hmap */
- tag = (NativeNfcTag) findObject(nativeHandle);
- if (tag != null) {
- isSuccess = tag.checkNDEF();
- }
- return isSuccess;
- }
-
- public byte[] transceive(int nativeHandle, byte[] data) throws RemoteException {
- NativeNfcTag tag = null;
- byte[] response;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the tag in the hmap */
- tag = (NativeNfcTag) findObject(nativeHandle);
- if (tag != null) {
- response = tag.doTransceive(data);
- return response;
- }
- return null;
- }
-
- public NdefMessage read(int nativeHandle) throws RemoteException {
- NativeNfcTag tag;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the tag in the hmap */
- tag = (NativeNfcTag) findObject(nativeHandle);
- if (tag != null) {
- byte[] buf = tag.doRead();
- if (buf == null)
- return null;
-
- /* Create an NdefMessage */
- try {
- return new NdefMessage(buf);
- } catch (FormatException e) {
- return null;
- }
- }
- return null;
- }
-
- public int write(int nativeHandle, NdefMessage msg) throws RemoteException {
- NativeNfcTag tag;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the tag in the hmap */
- tag = (NativeNfcTag) findObject(nativeHandle);
- if (tag == null) {
- return ErrorCodes.ERROR_IO;
- }
-
- if (tag.doWrite(msg.toByteArray())) {
- return ErrorCodes.SUCCESS;
- }
- else {
- return ErrorCodes.ERROR_IO;
- }
-
- }
-
- public int getLastError(int nativeHandle) throws RemoteException {
- // TODO Auto-generated method stub
- return 0;
- }
-
- public int getModeHint(int nativeHandle) throws RemoteException {
- // TODO Auto-generated method stub
- return 0;
- }
-
- public int makeReadOnly(int nativeHandle) throws RemoteException {
- // TODO Auto-generated method stub
- return 0;
- }
-
-
- };
-
- private final IP2pInitiator mP2pInitiatorService = new IP2pInitiator.Stub() {
-
- public byte[] getGeneralBytes(int nativeHandle) throws RemoteException {
- NativeP2pDevice device;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- byte[] buff = device.getGeneralBytes();
- if (buff == null)
- return null;
- return buff;
- }
- return null;
- }
-
- public int getMode(int nativeHandle) throws RemoteException {
- NativeP2pDevice device;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- return device.getMode();
- }
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
-
- public byte[] receive(int nativeHandle) throws RemoteException {
- NativeP2pDevice device;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- byte[] buff = device.doReceive();
- if (buff == null)
- return null;
- return buff;
- }
- /* Restart polling loop for notification */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
- mOpenPending = false;
- return null;
- }
-
- public boolean send(int nativeHandle, byte[] data) throws RemoteException {
- NativeP2pDevice device;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return isSuccess;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- isSuccess = device.doSend(data);
- }
- return isSuccess;
- }
- };
-
- private final IP2pTarget mP2pTargetService = new IP2pTarget.Stub() {
-
- public int connect(int nativeHandle) throws RemoteException {
- NativeP2pDevice device;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- if (device.doConnect()) {
- return ErrorCodes.SUCCESS;
- }
- }
- return ErrorCodes.ERROR_CONNECT;
- }
-
- public boolean disconnect(int nativeHandle) throws RemoteException {
- NativeP2pDevice device;
- boolean isSuccess = false;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return isSuccess;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- if (isSuccess = device.doDisconnect()) {
- mOpenPending = false;
- /* remove the device from the hmap */
- RemoveObject(nativeHandle);
- /* Restart polling loop for notification */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
- }
- }
- return isSuccess;
-
- }
-
- public byte[] getGeneralBytes(int nativeHandle) throws RemoteException {
- NativeP2pDevice device;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- byte[] buff = device.getGeneralBytes();
- if (buff == null)
- return null;
- return buff;
- }
- return null;
- }
-
- public int getMode(int nativeHandle) throws RemoteException {
- NativeP2pDevice device;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- return device.getMode();
- }
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
-
- public byte[] transceive(int nativeHandle, byte[] data) throws RemoteException {
- NativeP2pDevice device;
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return null;
- }
-
- /* find the device in the hmap */
- device = (NativeP2pDevice) findObject(nativeHandle);
- if (device != null) {
- byte[] buff = device.doTransceive(data);
- if (buff == null)
- return null;
- return buff;
- }
- return null;
- }
- };
-
- private class NfcHandler extends Handler {
-
- @Override
- public void handleMessage(Message msg) {
- try {
-
- } catch (Exception e) {
- // Log, don't crash!
- Log.e(TAG, "Exception in NfcHandler.handleMessage:", e);
- }
- }
-
- };
-
- public NfcService(Context context) {
- super();
- mContext = context;
- mManager = new NativeNfcManager(mContext);
-
- mContext.registerReceiver(mNfcServiceReceiver, new IntentFilter(
- NativeNfcManager.INTERNAL_LLCP_LINK_STATE_CHANGED_ACTION));
-
- mContext.registerReceiver(mNfcServiceReceiver, new IntentFilter(
- NfcAdapter.ACTION_LLCP_LINK_STATE_CHANGED));
-
- mContext.registerReceiver(mNfcServiceReceiver, new IntentFilter(
- NativeNfcManager.INTERNAL_TARGET_DESELECTED_ACTION));
-
- Thread thread = new Thread(null, this, "NfcService");
- thread.start();
-
- mManager.initializeNativeStructure();
-
- int nfcState = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_ON, 0);
-
- if (nfcState == NFC_STATE_ENABLED) {
- if (this._enable()) {
- }
- }
-
- }
-
- public void run() {
- Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
- Looper.prepare();
- mNfcHandler = new NfcHandler();
- Looper.loop();
- }
-
- public void cancel() throws RemoteException {
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_RAW,
- "NFC_RAW permission required to cancel NFC opening");
- if (mOpenPending) {
- mOpenPending = false;
- mManager.doCancel();
- /* Restart polling loop for notification */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
- }
- }
-
- public int createLlcpConnectionlessSocket(int sap) throws RemoteException {
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_LLCP,
- "NFC_LLCP permission required for LLCP operations with NFC service");
-
- /* Check SAP is not already used */
-
- /* Check nb socket created */
- if (mNbSocketCreated < LLCP_SOCKET_NB_MAX) {
- /* Store the socket handle */
- int sockeHandle = mGeneratedSocketHandle;
-
- if (mLlcpLinkState == NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
- NativeLlcpConnectionlessSocket socket;
-
- socket = mManager.doCreateLlcpConnectionlessSocket(sap);
- if (socket != null) {
- /* Update the number of socket created */
- mNbSocketCreated++;
-
- /* Add the socket into the socket map */
- mSocketMap.put(sockeHandle, socket);
-
- return sockeHandle;
- } else {
- /*
- * socket creation error - update the socket handle
- * generation
- */
- mGeneratedSocketHandle -= 1;
-
- /* Get Error Status */
- int errorStatus = mManager.doGetLastError();
-
- switch (errorStatus) {
- case ErrorCodes.ERROR_BUFFER_TO_SMALL:
- return ErrorCodes.ERROR_BUFFER_TO_SMALL;
- case ErrorCodes.ERROR_INSUFFICIENT_RESOURCES:
- return ErrorCodes.ERROR_INSUFFICIENT_RESOURCES;
- default:
- return ErrorCodes.ERROR_SOCKET_CREATION;
- }
- }
- } else {
- /* Check SAP is not already used */
- if (!CheckSocketSap(sap)) {
- return ErrorCodes.ERROR_SAP_USED;
- }
-
- NativeLlcpConnectionlessSocket socket = new NativeLlcpConnectionlessSocket(sap);
-
- /* Add the socket into the socket map */
- mSocketMap.put(sockeHandle, socket);
-
- /* Update the number of socket created */
- mNbSocketCreated++;
-
- /* Create new registered socket */
- RegisteredSocket registeredSocket = new RegisteredSocket(
- LLCP_CONNECTIONLESS_SOCKET_TYPE, sockeHandle, sap);
-
- /* Put this socket into a list of registered socket */
- mRegisteredSocketList.add(registeredSocket);
- }
-
- /* update socket handle generation */
- mGeneratedSocketHandle++;
-
- return sockeHandle;
-
- } else {
- /* No socket available */
- return ErrorCodes.ERROR_INSUFFICIENT_RESOURCES;
- }
-
- }
-
- public int createLlcpServiceSocket(int sap, String sn, int miu, int rw, int linearBufferLength)
- throws RemoteException {
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_LLCP,
- "NFC_LLCP permission required for LLCP operations with NFC service");
-
- if (mNbSocketCreated < LLCP_SOCKET_NB_MAX) {
- int sockeHandle = mGeneratedSocketHandle;
-
- if (mLlcpLinkState == NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
- NativeLlcpServiceSocket socket;
-
- socket = mManager.doCreateLlcpServiceSocket(sap, sn, miu, rw, linearBufferLength);
- if (socket != null) {
- /* Update the number of socket created */
- mNbSocketCreated++;
- /* Add the socket into the socket map */
- mSocketMap.put(sockeHandle, socket);
- } else {
- /* socket creation error - update the socket handle counter */
- mGeneratedSocketHandle -= 1;
-
- /* Get Error Status */
- int errorStatus = mManager.doGetLastError();
-
- switch (errorStatus) {
- case ErrorCodes.ERROR_BUFFER_TO_SMALL:
- return ErrorCodes.ERROR_BUFFER_TO_SMALL;
- case ErrorCodes.ERROR_INSUFFICIENT_RESOURCES:
- return ErrorCodes.ERROR_INSUFFICIENT_RESOURCES;
- default:
- return ErrorCodes.ERROR_SOCKET_CREATION;
- }
- }
- } else {
-
- /* Check SAP is not already used */
- if (!CheckSocketSap(sap)) {
- return ErrorCodes.ERROR_SAP_USED;
- }
-
- /* Service Name */
- if (!CheckSocketServiceName(sn)) {
- return ErrorCodes.ERROR_SERVICE_NAME_USED;
- }
-
- /* Check socket options */
- if (!CheckSocketOptions(miu, rw, linearBufferLength)) {
- return ErrorCodes.ERROR_SOCKET_OPTIONS;
- }
-
- NativeLlcpServiceSocket socket = new NativeLlcpServiceSocket(sn);
-
- /* Add the socket into the socket map */
- mSocketMap.put(sockeHandle, socket);
-
- /* Update the number of socket created */
- mNbSocketCreated++;
-
- /* Create new registered socket */
- RegisteredSocket registeredSocket = new RegisteredSocket(LLCP_SERVICE_SOCKET_TYPE,
- sockeHandle, sap, sn, miu, rw, linearBufferLength);
-
- /* Put this socket into a list of registered socket */
- mRegisteredSocketList.add(registeredSocket);
- }
-
- /* update socket handle generation */
- mGeneratedSocketHandle += 1;
-
- Log.d(TAG, "Llcp Service Socket Handle =" + sockeHandle);
- return sockeHandle;
- } else {
- /* No socket available */
- return ErrorCodes.ERROR_INSUFFICIENT_RESOURCES;
- }
- }
-
- public int createLlcpSocket(int sap, int miu, int rw, int linearBufferLength)
- throws RemoteException {
-
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_LLCP,
- "NFC_LLCP permission required for LLCP operations with NFC service");
-
- if (mNbSocketCreated < LLCP_SOCKET_NB_MAX) {
-
- int sockeHandle = mGeneratedSocketHandle;
-
- if (mLlcpLinkState == NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
- NativeLlcpSocket socket;
-
- socket = mManager.doCreateLlcpSocket(sap, miu, rw, linearBufferLength);
-
- if (socket != null) {
- /* Update the number of socket created */
- mNbSocketCreated++;
- /* Add the socket into the socket map */
- mSocketMap.put(sockeHandle, socket);
- } else {
- /*
- * socket creation error - update the socket handle
- * generation
- */
- mGeneratedSocketHandle -= 1;
-
- /* Get Error Status */
- int errorStatus = mManager.doGetLastError();
-
- switch (errorStatus) {
- case ErrorCodes.ERROR_BUFFER_TO_SMALL:
- return ErrorCodes.ERROR_BUFFER_TO_SMALL;
- case ErrorCodes.ERROR_INSUFFICIENT_RESOURCES:
- return ErrorCodes.ERROR_INSUFFICIENT_RESOURCES;
- default:
- return ErrorCodes.ERROR_SOCKET_CREATION;
- }
- }
- } else {
-
- /* Check SAP is not already used */
- if (!CheckSocketSap(sap)) {
- return ErrorCodes.ERROR_SAP_USED;
- }
-
- /* Check Socket options */
- if (!CheckSocketOptions(miu, rw, linearBufferLength)) {
- return ErrorCodes.ERROR_SOCKET_OPTIONS;
- }
-
- NativeLlcpSocket socket = new NativeLlcpSocket(sap, miu, rw);
-
- /* Add the socket into the socket map */
- mSocketMap.put(sockeHandle, socket);
-
- /* Update the number of socket created */
- mNbSocketCreated++;
- /* Create new registered socket */
- RegisteredSocket registeredSocket = new RegisteredSocket(LLCP_SOCKET_TYPE,
- sockeHandle, sap, miu, rw, linearBufferLength);
-
- /* Put this socket into a list of registered socket */
- mRegisteredSocketList.add(registeredSocket);
- }
-
- /* update socket handle generation */
- mGeneratedSocketHandle++;
-
- return sockeHandle;
- } else {
- /* No socket available */
- return ErrorCodes.ERROR_INSUFFICIENT_RESOURCES;
- }
- }
-
- public int deselectSecureElement() throws RemoteException {
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- if (mSelectedSeId == 0) {
- return ErrorCodes.ERROR_NO_SE_CONNECTED;
- }
-
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_ADMIN,
- "NFC_ADMIN permission required to deselect NFC Secure Element");
-
- mManager.doDeselectSecureElement(mSelectedSeId);
- mNfcSecureElementState = 0;
- mSelectedSeId = 0;
-
- /* Store that a secure element is deselected */
- Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.NFC_SECURE_ELEMENT_ON, 0);
-
- /* Reset Secure Element ID */
- Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.NFC_SECURE_ELEMENT_ID, 0);
-
-
- return ErrorCodes.SUCCESS;
- }
-
- public boolean disable() throws RemoteException {
- boolean isSuccess = false;
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_ADMIN,
- "NFC_ADMIN permission required to disable NFC service");
- if (isEnabled()) {
- isSuccess = mManager.deinitialize();
- if (isSuccess) {
- mIsNfcEnabled = false;
- }
- }
-
- updateNfcOnSetting();
-
- return isSuccess;
- }
-
- public boolean enable() throws RemoteException {
- boolean isSuccess = false;
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_ADMIN,
- "NFC_ADMIN permission required to enable NFC service");
- if (!isEnabled()) {
- reset();
- isSuccess = _enable();
- }
- return isSuccess;
- }
-
- private boolean _enable() {
- boolean isSuccess = mManager.initialize();
- if (isSuccess) {
- /* Check persistent properties */
- checkProperties();
-
- /* Check Secure Element setting */
- mNfcSecureElementState = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_SECURE_ELEMENT_ON, 0);
-
- if (mNfcSecureElementState == 1) {
-
- int secureElementId = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_SECURE_ELEMENT_ID, 0);
- int[] Se_list = mManager.doGetSecureElementList();
- if (Se_list != null) {
- for (int i = 0; i < Se_list.length; i++) {
- if (Se_list[i] == secureElementId) {
- mManager.doSelectSecureElement(Se_list[i]);
- mSelectedSeId = Se_list[i];
- break;
- }
- }
- }
- }
-
- /* Start polling loop */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
-
- mIsNfcEnabled = true;
- } else {
- mIsNfcEnabled = false;
- }
-
- updateNfcOnSetting();
-
- return isSuccess;
- }
-
- private void updateNfcOnSetting() {
- int state;
-
- if (mIsNfcEnabled) {
- state = NFC_STATE_ENABLED;
- } else {
- state = NFC_STATE_DISABLED;
- }
-
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_ON, state);
- }
-
- private void checkProperties() {
- int value;
-
- /* LLCP LTO */
- value = Settings.System.getInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_LTO,
- LLCP_LTO_DEFAULT_VALUE);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_LTO, value);
- mManager.doSetProperties(PROPERTY_LLCP_LTO, value);
-
- /* LLCP MIU */
- value = Settings.System.getInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_MIU,
- LLCP_MIU_DEFAULT_VALUE);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_MIU, value);
- mManager.doSetProperties(PROPERTY_LLCP_MIU, value);
-
- /* LLCP WKS */
- value = Settings.System.getInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_WKS,
- LLCP_WKS_DEFAULT_VALUE);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_WKS, value);
- mManager.doSetProperties(PROPERTY_LLCP_WKS, value);
-
- /* LLCP OPT */
- value = Settings.System.getInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_OPT,
- LLCP_OPT_DEFAULT_VALUE);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_OPT, value);
- mManager.doSetProperties(PROPERTY_LLCP_OPT, value);
-
- /* NFC READER A */
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_A, 1);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_DISCOVERY_A,
- value);
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_A, value);
-
- /* NFC READER B */
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_B, 1);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_DISCOVERY_B,
- value);
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_B, value);
-
- /* NFC READER F */
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_F, 1);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_DISCOVERY_F,
- value);
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_F, value);
-
- /* NFC READER 15693 */
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_15693, 1);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_DISCOVERY_15693,
- value);
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_15693, value);
-
- /* NFC NFCIP */
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_NFCIP, 1);
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_DISCOVERY_NFCIP,
- value);
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_NFCIP, value);
- }
-
- public ILlcpConnectionlessSocket getLlcpConnectionlessInterface() throws RemoteException {
- return mLlcpConnectionlessSocketService;
- }
-
- public ILlcpSocket getLlcpInterface() throws RemoteException {
- return mLlcpSocket;
- }
-
- public ILlcpServiceSocket getLlcpServiceInterface() throws RemoteException {
- return mLlcpServerSocketService;
- }
-
- public INfcTag getNfcTagInterface() throws RemoteException {
- return mNfcTagService;
- }
-
- public int getOpenTimeout() throws RemoteException {
- return mTimeout;
- }
-
- public IP2pInitiator getP2pInitiatorInterface() throws RemoteException {
- return mP2pInitiatorService;
- }
-
- public IP2pTarget getP2pTargetInterface() throws RemoteException {
- return mP2pTargetService;
- }
-
- public String getProperties(String param) throws RemoteException {
- int value;
-
- if (param == null) {
- return "Wrong parameter";
- }
-
- if (param.equals(PROPERTY_LLCP_LTO_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_LLCP_LTO, 0);
- } else if (param.equals(PROPERTY_LLCP_MIU_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_LLCP_MIU, 0);
- } else if (param.equals(PROPERTY_LLCP_WKS_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_LLCP_WKS, 0);
- } else if (param.equals(PROPERTY_LLCP_OPT_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_LLCP_OPT, 0);
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_A_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_A, 0);
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_B_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_B, 0);
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_F_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_F, 0);
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_NFCIP_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_NFCIP, 0);
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_15693_VALUE)) {
- value = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_15693, 0);
- } else {
- return "Unknown property";
- }
-
- if (param.equals(PROPERTY_NFC_DISCOVERY_A_VALUE)
- || param.equals(PROPERTY_NFC_DISCOVERY_B_VALUE)
- || param.equals(PROPERTY_NFC_DISCOVERY_F_VALUE)
- || param.equals(PROPERTY_NFC_DISCOVERY_NFCIP_VALUE)
- || param.equals(PROPERTY_NFC_DISCOVERY_15693_VALUE)) {
- if (value == 0) {
- return "false";
- } else if (value == 1) {
- return "true";
- } else {
- return "Unknown Value";
- }
- }else{
- return "" + value;
- }
-
- }
-
- public int[] getSecureElementList() throws RemoteException {
- int[] list = null;
- if (mIsNfcEnabled == true) {
- list = mManager.doGetSecureElementList();
- }
- return list;
- }
-
- public int getSelectedSecureElement() throws RemoteException {
- return mSelectedSeId;
- }
-
- public boolean isEnabled() throws RemoteException {
- return mIsNfcEnabled;
- }
-
- public int openP2pConnection() throws RemoteException {
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_RAW,
- "NFC_RAW permission required to open NFC P2P connection");
- if (!mOpenPending) {
- NativeP2pDevice device;
- mOpenPending = true;
- device = mManager.doOpenP2pConnection(mTimeout);
- if (device != null) {
- /* add device to the Hmap */
- mObjectMap.put(device.getHandle(), device);
- return device.getHandle();
- } else {
- mOpenPending = false;
- /* Restart polling loop for notification */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
- return ErrorCodes.ERROR_IO;
- }
- } else {
- return ErrorCodes.ERROR_BUSY;
- }
-
- }
-
- public void openTagConnection(Tag tag) throws RemoteException {
- NativeNfcTag nativeTag = new NativeNfcTag(tag.getHandle(), "", tag.getId());
-
- mObjectMap.put(nativeTag.getHandle(), nativeTag);
- }
-
- public int selectSecureElement(int seId) throws RemoteException {
- // Check if NFC is enabled
- if (!mIsNfcEnabled) {
- return ErrorCodes.ERROR_NOT_INITIALIZED;
- }
-
- if (mSelectedSeId == seId) {
- return ErrorCodes.ERROR_SE_ALREADY_SELECTED;
- }
-
- if (mSelectedSeId != 0) {
- return ErrorCodes.ERROR_SE_CONNECTED;
- }
-
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_ADMIN,
- "NFC_ADMIN permission required to select NFC Secure Element");
-
- mSelectedSeId = seId;
- mManager.doSelectSecureElement(mSelectedSeId);
-
- /* Store that a secure element is selected */
- Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.NFC_SECURE_ELEMENT_ON, 1);
-
- /* Store the ID of the Secure Element Selected */
- Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.NFC_SECURE_ELEMENT_ID, mSelectedSeId);
-
- mNfcSecureElementState = 1;
-
- return ErrorCodes.SUCCESS;
-
- }
-
- public void setOpenTimeout(int timeout) throws RemoteException {
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_RAW,
- "NFC_RAW permission required to set NFC connection timeout");
- mTimeout = timeout;
- }
-
- public int setProperties(String param, String value) throws RemoteException {
- mContext.enforceCallingPermission(android.Manifest.permission.NFC_ADMIN,
- "NFC_ADMIN permission required to set NFC Properties");
-
- if (isEnabled()) {
- return ErrorCodes.ERROR_NFC_ON;
- }
-
- int val;
-
- /* Check params validity */
- if (param == null || value == null) {
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
-
- if (param.equals(PROPERTY_LLCP_LTO_VALUE)) {
- val = Integer.parseInt(value);
-
- /* Check params */
- if (val > LLCP_LTO_MAX_VALUE)
- return ErrorCodes.ERROR_INVALID_PARAM;
-
- /* Store value */
- Settings.System
- .putInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_LTO, val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_LLCP_LTO, val);
-
- } else if (param.equals(PROPERTY_LLCP_MIU_VALUE)) {
- val = Integer.parseInt(value);
-
- /* Check params */
- if ((val < LLCP_MIU_DEFAULT_VALUE) || (val > LLCP_MIU_MAX_VALUE))
- return ErrorCodes.ERROR_INVALID_PARAM;
-
- /* Store value */
- Settings.System
- .putInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_MIU, val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_LLCP_MIU, val);
-
- } else if (param.equals(PROPERTY_LLCP_WKS_VALUE)) {
- val = Integer.parseInt(value);
-
- /* Check params */
- if (val > LLCP_WKS_MAX_VALUE)
- return ErrorCodes.ERROR_INVALID_PARAM;
-
- /* Store value */
- Settings.System
- .putInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_WKS, val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_LLCP_WKS, val);
-
- } else if (param.equals(PROPERTY_LLCP_OPT_VALUE)) {
- val = Integer.parseInt(value);
-
- /* Check params */
- if (val > LLCP_OPT_MAX_VALUE)
- return ErrorCodes.ERROR_INVALID_PARAM;
-
- /* Store value */
- Settings.System
- .putInt(mContext.getContentResolver(), Settings.System.NFC_LLCP_OPT, val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_LLCP_OPT, val);
-
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_A_VALUE)) {
-
- /* Check params */
- if (value.equals("true")) {
- val = 1;
- } else if (value.equals("false")) {
- val = 0;
- } else {
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
- /* Store value */
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_DISCOVERY_A,
- val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_A, val);
-
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_B_VALUE)) {
-
- /* Check params */
- if (value.equals("true")) {
- val = 1;
- } else if (value.equals("false")) {
- val = 0;
- } else {
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
-
- /* Store value */
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_DISCOVERY_B,
- val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_B, val);
-
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_F_VALUE)) {
-
- /* Check params */
- if (value.equals("true")) {
- val = 1;
- } else if (value.equals("false")) {
- val = 0;
- } else {
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
-
- /* Store value */
- Settings.System.putInt(mContext.getContentResolver(), Settings.System.NFC_DISCOVERY_F,
- val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_F, val);
-
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_15693_VALUE)) {
-
- /* Check params */
- if (value.equals("true")) {
- val = 1;
- } else if (value.equals("false")) {
- val = 0;
- } else {
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
-
- /* Store value */
- Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_15693, val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_15693, val);
-
- } else if (param.equals(PROPERTY_NFC_DISCOVERY_NFCIP_VALUE)) {
-
- /* Check params */
- if (value.equals("true")) {
- val = 1;
- } else if (value.equals("false")) {
- val = 0;
- } else {
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
-
- /* Store value */
- Settings.System.putInt(mContext.getContentResolver(),
- Settings.System.NFC_DISCOVERY_NFCIP, val);
-
- /* Update JNI */
- mManager.doSetProperties(PROPERTY_NFC_DISCOVERY_NFCIP, val);
- } else {
- return ErrorCodes.ERROR_INVALID_PARAM;
- }
-
- return ErrorCodes.SUCCESS;
- }
-
- public NdefMessage localGet() throws RemoteException {
- // TODO Auto-generated method stub
- return null;
- }
-
- public void localSet(NdefMessage message) throws RemoteException {
- // TODO Auto-generated method stub
-
- }
-
- // Reset all internals
- private void reset() {
-
- // Clear tables
- mObjectMap.clear();
- mSocketMap.clear();
- mRegisteredSocketList.clear();
-
- // Reset variables
- mLlcpLinkState = NfcAdapter.LLCP_LINK_STATE_DEACTIVATED;
- mNbSocketCreated = 0;
- mIsNfcEnabled = false;
- mSelectedSeId = 0;
- mTimeout = 0;
- mNfcState = NFC_STATE_DISABLED;
- mOpenPending = false;
- }
-
- private Object findObject(int key) {
- Object device = null;
-
- device = mObjectMap.get(key);
- if (device == null) {
- Log.w(TAG, "Handle not found !");
- }
-
- return device;
- }
-
- private void RemoveObject(int key) {
- mObjectMap.remove(key);
- }
-
- private Object findSocket(int key) {
- Object socket = null;
-
- socket = mSocketMap.get(key);
-
- return socket;
- }
-
- private void RemoveSocket(int key) {
- mSocketMap.remove(key);
- }
-
- private boolean CheckSocketSap(int sap) {
- /* List of sockets registered */
- ListIterator<RegisteredSocket> it = mRegisteredSocketList.listIterator();
-
- while (it.hasNext()) {
- RegisteredSocket registeredSocket = it.next();
-
- if (sap == registeredSocket.mSap) {
- /* SAP already used */
- return false;
- }
- }
- return true;
- }
-
- private boolean CheckSocketOptions(int miu, int rw, int linearBufferlength) {
-
- if (rw > LLCP_RW_MAX_VALUE || miu < LLCP_MIU_DEFAULT_VALUE || linearBufferlength < miu) {
- return false;
- }
- return true;
- }
-
- private boolean CheckSocketServiceName(String sn) {
-
- /* List of sockets registered */
- ListIterator<RegisteredSocket> it = mRegisteredSocketList.listIterator();
-
- while (it.hasNext()) {
- RegisteredSocket registeredSocket = it.next();
-
- if (sn.equals(registeredSocket.mServiceName)) {
- /* Service Name already used */
- return false;
- }
- }
- return true;
- }
-
- private void RemoveRegisteredSocket(int nativeHandle) {
- /* check if sockets are registered */
- ListIterator<RegisteredSocket> it = mRegisteredSocketList.listIterator();
-
- while (it.hasNext()) {
- RegisteredSocket registeredSocket = it.next();
- if (registeredSocket.mHandle == nativeHandle) {
- /* remove the registered socket from the list */
- it.remove();
- Log.d(TAG, "socket removed");
- }
- }
- }
-
- /*
- * RegisteredSocket class to store the creation request of socket until the
- * LLCP link in not activated
- */
- private class RegisteredSocket {
- private final int mType;
-
- private final int mHandle;
-
- private final int mSap;
-
- private int mMiu;
-
- private int mRw;
-
- private String mServiceName;
-
- private int mlinearBufferLength;
-
- RegisteredSocket(int type, int handle, int sap, String sn, int miu, int rw,
- int linearBufferLength) {
- mType = type;
- mHandle = handle;
- mSap = sap;
- mServiceName = sn;
- mRw = rw;
- mMiu = miu;
- mlinearBufferLength = linearBufferLength;
- }
-
- RegisteredSocket(int type, int handle, int sap, int miu, int rw, int linearBufferLength) {
- mType = type;
- mHandle = handle;
- mSap = sap;
- mRw = rw;
- mMiu = miu;
- mlinearBufferLength = linearBufferLength;
- }
-
- RegisteredSocket(int type, int handle, int sap) {
- mType = type;
- mHandle = handle;
- mSap = sap;
- }
- }
-
- private final BroadcastReceiver mNfcServiceReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d(TAG, "Internal NFC Intent received");
-
- /* LLCP Link deactivation */
- if (intent.getAction().equals(NfcAdapter.ACTION_LLCP_LINK_STATE_CHANGED)) {
- mLlcpLinkState = intent.getIntExtra(NfcAdapter.EXTRA_LLCP_LINK_STATE_CHANGED,
- NfcAdapter.LLCP_LINK_STATE_DEACTIVATED);
-
- if (mLlcpLinkState == NfcAdapter.LLCP_LINK_STATE_DEACTIVATED) {
- /* restart polling loop */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
- }
-
- }
- /* LLCP Link activation */
- else if (intent.getAction().equals(
- NativeNfcManager.INTERNAL_LLCP_LINK_STATE_CHANGED_ACTION)) {
-
- mLlcpLinkState = intent.getIntExtra(
- NativeNfcManager.INTERNAL_LLCP_LINK_STATE_CHANGED_EXTRA,
- NfcAdapter.LLCP_LINK_STATE_DEACTIVATED);
-
- if (mLlcpLinkState == NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
- /* check if sockets are registered */
- ListIterator<RegisteredSocket> it = mRegisteredSocketList.listIterator();
-
- Log.d(TAG, "Nb socket resgistered = " + mRegisteredSocketList.size());
-
- while (it.hasNext()) {
- RegisteredSocket registeredSocket = it.next();
-
- switch (registeredSocket.mType) {
- case LLCP_SERVICE_SOCKET_TYPE:
- Log.d(TAG, "Registered Llcp Service Socket");
- NativeLlcpServiceSocket serviceSocket;
-
- serviceSocket = mManager.doCreateLlcpServiceSocket(
- registeredSocket.mSap, registeredSocket.mServiceName,
- registeredSocket.mMiu, registeredSocket.mRw,
- registeredSocket.mlinearBufferLength);
-
- if (serviceSocket != null) {
- /* Add the socket into the socket map */
- mSocketMap.put(registeredSocket.mHandle, serviceSocket);
- } else {
- /*
- * socket creation error - update the socket
- * handle counter
- */
- mGeneratedSocketHandle -= 1;
- }
- break;
-
- case LLCP_SOCKET_TYPE:
- Log.d(TAG, "Registered Llcp Socket");
- NativeLlcpSocket clientSocket;
- clientSocket = mManager.doCreateLlcpSocket(registeredSocket.mSap,
- registeredSocket.mMiu, registeredSocket.mRw,
- registeredSocket.mlinearBufferLength);
- if (clientSocket != null) {
- /* Add the socket into the socket map */
- mSocketMap.put(registeredSocket.mHandle, clientSocket);
- } else {
- /*
- * socket creation error - update the socket
- * handle counter
- */
- mGeneratedSocketHandle -= 1;
- }
- break;
-
- case LLCP_CONNECTIONLESS_SOCKET_TYPE:
- Log.d(TAG, "Registered Llcp Connectionless Socket");
- NativeLlcpConnectionlessSocket connectionlessSocket;
- connectionlessSocket = mManager
- .doCreateLlcpConnectionlessSocket(registeredSocket.mSap);
- if (connectionlessSocket != null) {
- /* Add the socket into the socket map */
- mSocketMap.put(registeredSocket.mHandle, connectionlessSocket);
- } else {
- /*
- * socket creation error - update the socket
- * handle counter
- */
- mGeneratedSocketHandle -= 1;
- }
- break;
-
- }
- }
-
- /* Remove all registered socket from the list */
- mRegisteredSocketList.clear();
-
- /* Broadcast Intent Link LLCP activated */
- Intent LlcpLinkIntent = new Intent();
- LlcpLinkIntent.setAction(NfcAdapter.ACTION_LLCP_LINK_STATE_CHANGED);
-
- LlcpLinkIntent.putExtra(NfcAdapter.EXTRA_LLCP_LINK_STATE_CHANGED,
- NfcAdapter.LLCP_LINK_STATE_ACTIVATED);
-
- Log.d(TAG, "Broadcasting LLCP activation");
- mContext.sendOrderedBroadcast(LlcpLinkIntent,
- android.Manifest.permission.NFC_LLCP);
- }
- }
- /* Target Deactivated */
- else if (intent.getAction().equals(
- NativeNfcManager.INTERNAL_TARGET_DESELECTED_ACTION)) {
- if(mOpenPending != false){
- mOpenPending = false;
- }
- /* Restart polling loop for notification */
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
-
- }
- }
- };
-}
\ No newline at end of file
diff --git a/services/jni/com_android_server_PowerManagerService.cpp b/services/jni/com_android_server_PowerManagerService.cpp
index 2ec20bd..705be60 100644
--- a/services/jni/com_android_server_PowerManagerService.cpp
+++ b/services/jni/com_android_server_PowerManagerService.cpp
@@ -125,9 +125,9 @@
}
static void android_server_PowerManagerService_nativeStartSurfaceFlingerAnimation(JNIEnv* env,
- jobject obj) {
+ jobject obj, jint mode) {
sp<ISurfaceComposer> s(ComposerService::getComposerService());
- s->turnElectronBeamOff(0);
+ s->turnElectronBeamOff(mode);
}
// ----------------------------------------------------------------------------
@@ -138,7 +138,7 @@
(void*) android_server_PowerManagerService_nativeInit },
{ "nativeSetPowerState", "(ZZ)V",
(void*) android_server_PowerManagerService_nativeSetPowerState },
- { "nativeStartSurfaceFlingerAnimation", "()V",
+ { "nativeStartSurfaceFlingerAnimation", "(I)V",
(void*) android_server_PowerManagerService_nativeStartSurfaceFlingerAnimation },
};
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 3734969..a9b3965 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -80,7 +80,7 @@
mVisibleRegionsDirty(false),
mDeferReleaseConsole(false),
mFreezeDisplay(false),
- mElectronBeamAnimation(false),
+ mElectronBeamAnimationMode(0),
mFreezeCount(0),
mFreezeDisplayTime(0),
mDebugRegion(0),
@@ -424,8 +424,7 @@
hw.acquireScreen();
// this is a temporary work-around, eventually this should be called
// by the power-manager
- if (mElectronBeamAnimation)
- SurfaceFlinger::turnElectronBeamOn(0);
+ SurfaceFlinger::turnElectronBeamOn(mElectronBeamAnimationMode);
}
if (mDeferReleaseConsole && hw.isScreenAcquired()) {
@@ -1576,6 +1575,7 @@
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
hw_w, hw_h, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
if (glGetError() != GL_NO_ERROR) {
+ while ( glGetError() != GL_NO_ERROR ) ;
GLint tw = (2 << (31 - clz(hw_w)));
GLint th = (2 << (31 - clz(hw_h)));
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
@@ -1839,8 +1839,8 @@
}
};
- // the full animation is 24 frames
- const int nbFrames = 12;
+ // the full animation is 12 frames
+ int nbFrames = 8;
s_curve_interpolator itr(nbFrames, 7.5f);
s_curve_interpolator itg(nbFrames, 8.0f);
s_curve_interpolator itb(nbFrames, 8.5f);
@@ -1858,6 +1858,7 @@
hw.flip(screenBounds);
}
+ nbFrames = 4;
v_stretch vverts(hw_w, hw_h);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
@@ -1900,43 +1901,49 @@
// ---------------------------------------------------------------------------
-status_t SurfaceFlinger::turnElectronBeamOffImplLocked()
+status_t SurfaceFlinger::turnElectronBeamOffImplLocked(int32_t mode)
{
DisplayHardware& hw(graphicPlane(0).editDisplayHardware());
if (!hw.canDraw()) {
// we're already off
return NO_ERROR;
}
- status_t result = electronBeamOffAnimationImplLocked();
- if (result == NO_ERROR) {
- hw.setCanDraw(false);
+ if (mode & ISurfaceComposer::eElectronBeamAnimationOff) {
+ electronBeamOffAnimationImplLocked();
}
- return result;
+
+ // always clear the whole screen at the end of the animation
+ glClearColor(0,0,0,1);
+ glDisable(GL_SCISSOR_TEST);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glEnable(GL_SCISSOR_TEST);
+ hw.flip( Region(hw.bounds()) );
+
+ hw.setCanDraw(false);
+ return NO_ERROR;
}
status_t SurfaceFlinger::turnElectronBeamOff(int32_t mode)
{
- if (!GLExtensions::getInstance().haveFramebufferObject())
- return INVALID_OPERATION;
-
class MessageTurnElectronBeamOff : public MessageBase {
SurfaceFlinger* flinger;
+ int32_t mode;
status_t result;
public:
- MessageTurnElectronBeamOff(SurfaceFlinger* flinger)
- : flinger(flinger), result(PERMISSION_DENIED) {
+ MessageTurnElectronBeamOff(SurfaceFlinger* flinger, int32_t mode)
+ : flinger(flinger), mode(mode), result(PERMISSION_DENIED) {
}
status_t getResult() const {
return result;
}
virtual bool handler() {
Mutex::Autolock _l(flinger->mStateLock);
- result = flinger->turnElectronBeamOffImplLocked();
+ result = flinger->turnElectronBeamOffImplLocked(mode);
return true;
}
};
- sp<MessageBase> msg = new MessageTurnElectronBeamOff(this);
+ sp<MessageBase> msg = new MessageTurnElectronBeamOff(this, mode);
status_t res = postMessageSync(msg);
if (res == NO_ERROR) {
res = static_cast<MessageTurnElectronBeamOff*>( msg.get() )->getResult();
@@ -1944,50 +1951,53 @@
// work-around: when the power-manager calls us we activate the
// animation. eventually, the "on" animation will be called
// by the power-manager itself
- mElectronBeamAnimation = true;
+ mElectronBeamAnimationMode = mode;
}
return res;
}
// ---------------------------------------------------------------------------
-status_t SurfaceFlinger::turnElectronBeamOnImplLocked()
+status_t SurfaceFlinger::turnElectronBeamOnImplLocked(int32_t mode)
{
DisplayHardware& hw(graphicPlane(0).editDisplayHardware());
if (hw.canDraw()) {
// we're already on
return NO_ERROR;
}
- status_t result = electronBeamOnAnimationImplLocked();
- if (result == NO_ERROR) {
- hw.setCanDraw(true);
+ if (mode & ISurfaceComposer::eElectronBeamAnimationOn) {
+ electronBeamOnAnimationImplLocked();
}
- return result;
+ hw.setCanDraw(true);
+
+ // make sure to redraw the whole screen when the animation is done
+ mDirtyRegion.set(hw.bounds());
+ signalEvent();
+
+ return NO_ERROR;
}
status_t SurfaceFlinger::turnElectronBeamOn(int32_t mode)
{
- if (!GLExtensions::getInstance().haveFramebufferObject())
- return INVALID_OPERATION;
-
class MessageTurnElectronBeamOn : public MessageBase {
SurfaceFlinger* flinger;
+ int32_t mode;
status_t result;
public:
- MessageTurnElectronBeamOn(SurfaceFlinger* flinger)
- : flinger(flinger), result(PERMISSION_DENIED) {
+ MessageTurnElectronBeamOn(SurfaceFlinger* flinger, int32_t mode)
+ : flinger(flinger), mode(mode), result(PERMISSION_DENIED) {
}
status_t getResult() const {
return result;
}
virtual bool handler() {
Mutex::Autolock _l(flinger->mStateLock);
- result = flinger->turnElectronBeamOnImplLocked();
+ result = flinger->turnElectronBeamOnImplLocked(mode);
return true;
}
};
- postMessageAsync( new MessageTurnElectronBeamOn(this) );
+ postMessageAsync( new MessageTurnElectronBeamOn(this, mode) );
return NO_ERROR;
}
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index d07a3ad..4262175 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -328,8 +328,8 @@
uint32_t* width, uint32_t* height, PixelFormat* format,
uint32_t reqWidth = 0, uint32_t reqHeight = 0);
- status_t turnElectronBeamOffImplLocked();
- status_t turnElectronBeamOnImplLocked();
+ status_t turnElectronBeamOffImplLocked(int32_t mode);
+ status_t turnElectronBeamOnImplLocked(int32_t mode);
status_t electronBeamOffAnimationImplLocked();
status_t electronBeamOnAnimationImplLocked();
status_t renderScreenToTextureLocked(DisplayID dpy,
@@ -395,7 +395,7 @@
bool mVisibleRegionsDirty;
bool mDeferReleaseConsole;
bool mFreezeDisplay;
- bool mElectronBeamAnimation;
+ int32_t mElectronBeamAnimationMode;
int32_t mFreezeCount;
nsecs_t mFreezeDisplayTime;
Vector< sp<LayerBase> > mVisibleLayersSortedByZ;
diff --git a/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java b/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
index 3419567..46ef118 100644
--- a/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
+++ b/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
@@ -24,6 +24,7 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.os.SystemProperties;
import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.PhoneLookup;
@@ -36,8 +37,7 @@
*/
public class CallerInfoAsyncQuery {
-
- private static final boolean DBG = true; // STOPSHIP: disable debugging before ship
+ private static final boolean DBG = (SystemProperties.getInt("ro.debuggable", 0) == 1);
private static final String LOG_TAG = "CallerInfoAsyncQuery";
private static final int EVENT_NEW_QUERY = 1;
diff --git a/tools/obbtool/Android.mk b/tools/obbtool/Android.mk
index b02c1cb..d118bd7 100644
--- a/tools/obbtool/Android.mk
+++ b/tools/obbtool/Android.mk
@@ -13,6 +13,8 @@
LOCAL_SRC_FILES := \
Main.cpp
+LOCAL_CFLAGS := -Wall -Werror
+
#LOCAL_C_INCLUDES +=
LOCAL_STATIC_LIBRARIES := \
@@ -27,4 +29,18 @@
include $(BUILD_HOST_EXECUTABLE)
+#####################################################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := pbkdf2gen
+LOCAL_MODULE_TAGS := optional
+LOCAL_CFLAGS := -Wall -Werror
+LOCAL_SRC_FILES := pbkdf2gen.cpp
+LOCAL_LDLIBS += -ldl
+LOCAL_C_INCLUDES := external/openssl/include $(LOCAL_C_INCLUDES)
+LOCAL_STATIC_LIBRARIES := libcrypto_static
+
+include $(BUILD_HOST_EXECUTABLE)
+
+#######################################################
endif # TARGET_BUILD_APPS
diff --git a/tools/obbtool/Main.cpp b/tools/obbtool/Main.cpp
index 49e077f..932dbec 100644
--- a/tools/obbtool/Main.cpp
+++ b/tools/obbtool/Main.cpp
@@ -20,6 +20,7 @@
#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
using namespace android;
@@ -29,7 +30,9 @@
static int wantUsage = 0;
static int wantVersion = 0;
-#define ADD_OPTS "n:v:o"
+#define SALT_LEN 8
+
+#define ADD_OPTS "n:v:os:"
static const struct option longopts[] = {
{"help", no_argument, &wantUsage, 1},
{"version", no_argument, &wantVersion, 1},
@@ -38,14 +41,27 @@
{"name", required_argument, NULL, 'n'},
{"version", required_argument, NULL, 'v'},
{"overlay", optional_argument, NULL, 'o'},
+ {"salt", required_argument, NULL, 's'},
{NULL, 0, NULL, '\0'}
};
-struct package_info_t {
+class PackageInfo {
+public:
+ PackageInfo()
+ : packageName(NULL)
+ , packageVersion(-1)
+ , overlay(false)
+ , salted(false)
+ {
+ memset(&salt, 0, sizeof(salt));
+ }
+
char* packageName;
int packageVersion;
bool overlay;
+ bool salted;
+ unsigned char salt[SALT_LEN];
};
/*
@@ -59,6 +75,13 @@
" %s a[dd] [ OPTIONS ] FILENAME\n"
" Adds an OBB signature to the file.\n\n", gProgName);
fprintf(stderr,
+ " Options:\n"
+ " -n <package name> sets the OBB package name (required)\n"
+ " -v <OBB version> sets the OBB version (required)\n"
+ " -o sets the OBB overlay flag\n"
+ " -s <8 byte hex salt> sets the crypto key salt (if encrypted)\n"
+ "\n");
+ fprintf(stderr,
" %s r[emove] FILENAME\n"
" Removes the OBB signature from the file.\n\n", gProgName);
fprintf(stderr,
@@ -66,7 +89,7 @@
" Prints the OBB signature information of a file.\n\n", gProgName);
}
-void doAdd(const char* filename, struct package_info_t* info) {
+void doAdd(const char* filename, struct PackageInfo* info) {
ObbFile *obb = new ObbFile();
if (obb->readFrom(filename)) {
fprintf(stderr, "ERROR: %s: OBB signature already present\n", filename);
@@ -76,6 +99,9 @@
obb->setPackageName(String8(info->packageName));
obb->setVersion(info->packageVersion);
obb->setOverlay(info->overlay);
+ if (info->salted) {
+ obb->setSalt(info->salt, SALT_LEN);
+ }
if (!obb->writeTo(filename)) {
fprintf(stderr, "ERROR: %s: couldn't write OBB signature: %s\n",
@@ -113,6 +139,40 @@
printf(" Version: %d\n", obb->getVersion());
printf(" Flags: 0x%08x\n", obb->getFlags());
printf(" Overlay: %s\n", obb->isOverlay() ? "true" : "false");
+ printf(" Salt: ");
+
+ size_t saltLen;
+ const unsigned char* salt = obb->getSalt(&saltLen);
+ if (salt != NULL) {
+ for (int i = 0; i < SALT_LEN; i++) {
+ printf("%02x", salt[i]);
+ }
+ printf("\n");
+ } else {
+ printf("<empty>\n");
+ }
+}
+
+bool fromHex(char h, unsigned char *b) {
+ if (h >= '0' && h <= '9') {
+ *b = h - '0';
+ return true;
+ } else if (h >= 'a' && h <= 'f') {
+ *b = h - 'a' + 10;
+ return true;
+ } else if (h >= 'A' && h <= 'F') {
+ *b = h - 'A' + 10;
+ return true;
+ }
+ return false;
+}
+
+bool hexToByte(char h1, char h2, unsigned char* b) {
+ unsigned char first, second;
+ if (!fromHex(h1, &first)) return false;
+ if (!fromHex(h2, &second)) return false;
+ *b = (first << 4) | second;
+ return true;
}
/*
@@ -120,11 +180,9 @@
*/
int main(int argc, char* const argv[])
{
- const char *prog = argv[0];
- struct options *options;
int opt;
int option_index = 0;
- struct package_info_t package_info;
+ struct PackageInfo package_info;
int result = 1; // pessimistically assume an error.
@@ -145,7 +203,7 @@
package_info.packageName = optarg;
break;
case 'v': {
- char *end;
+ char* end;
package_info.packageVersion = strtol(optarg, &end, 10);
if (*optarg == '\0' || *end != '\0') {
fprintf(stderr, "ERROR: invalid version; should be integer!\n\n");
@@ -157,6 +215,25 @@
case 'o':
package_info.overlay = true;
break;
+ case 's':
+ if (strlen(optarg) != SALT_LEN * 2) {
+ fprintf(stderr, "ERROR: salt must be 8 bytes in hex (e.g., ABCD65031337D00D)\n\n");
+ wantUsage = 1;
+ goto bail;
+ }
+
+ package_info.salted = true;
+
+ unsigned char b;
+ for (int i = 0, j = 0; i < SALT_LEN; i++, j+=2) {
+ if (!hexToByte(optarg[j], optarg[j+1], &b)) {
+ fprintf(stderr, "ERROR: salt must be in hex (e.g., ABCD65031337D00D)\n");
+ wantUsage = 1;
+ goto bail;
+ }
+ package_info.salt[i] = b;
+ }
+ break;
case '?':
wantUsage = 1;
goto bail;
diff --git a/tools/obbtool/mkobb.sh b/tools/obbtool/mkobb.sh
index ba5256f..725250d 100755
--- a/tools/obbtool/mkobb.sh
+++ b/tools/obbtool/mkobb.sh
@@ -35,6 +35,7 @@
UMOUNTBIN=`which umount`
DDBIN=`which dd`
RSYNCBIN=`which rsync`
+ PBKDF2GEN=`which pbkdf2gen`
}
check_prereqs() {
@@ -76,6 +77,11 @@
echo "ERROR: ${LOSETUPBIN} is not executable!"
exit 1
fi
+
+ if [ "${PBKDF2GEN}x" = "x" ]; then \
+ echo "ERROR: Could not find pbkdf2gen in your path!"
+ exit 1
+ fi
}
cleanup() {
@@ -142,7 +148,6 @@
usage() {
echo "mkobb.sh -- Create OBB files for use on Android"
echo ""
- echo " -c Use an encrypted OBB; must specify key"
echo " -d <directory> Use <directory> as input for OBB files"
echo " -k <key> Use <key> to encrypt OBB file"
echo " -K Prompt for key to encrypt OBB file"
@@ -156,7 +161,7 @@
use_crypto=0
-args=`getopt -o cd:hk:Ko:v -- "$@"`
+args=`getopt -o d:hk:Ko:v -- "$@"`
eval set -- "$args"
while true; do \
@@ -223,9 +228,9 @@
${LOSETUPBIN} ${loop_dev} ${tempfile} || ( echo "ERROR: couldn't create loopback device"; exit 1 )
if [ ${use_crypto} -eq 1 ]; then \
- hashed_key=`echo -n "${key}" | md5sum | awk '{ print $1 }'`
+ eval `${PBKDF2GEN} ${key}`
unique_dm_name=`basename ${tempfile}`
- echo "0 `blockdev --getsize ${loop_dev}` crypt ${CRYPTO} ${hashed_key} 0 ${loop_dev} 0" | dmsetup create ${unique_dm_name}
+ echo "0 `blockdev --getsize ${loop_dev}` crypt ${CRYPTO} ${key} 0 ${loop_dev} 0" | dmsetup create ${unique_dm_name}
old_loop_dev=${loop_dev}
loop_dev=/dev/mapper/${unique_dm_name}
fi
@@ -253,6 +258,11 @@
echo "Successfully created \`${filename}'"
+if [ ${use_crypto} -eq 1 ]; then \
+ echo "salt for use with obbtool is:"
+ echo "${salt}"
+fi
+
#
# Undo all the temporaries
#
diff --git a/tools/obbtool/pbkdf2gen.cpp b/tools/obbtool/pbkdf2gen.cpp
new file mode 100644
index 0000000..98d67c0
--- /dev/null
+++ b/tools/obbtool/pbkdf2gen.cpp
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ */
+
+#include <openssl/evp.h>
+
+#include <sys/types.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+/**
+ * Simple program to generate a key based on PBKDF2 with preset inputs.
+ *
+ * Will print out the salt and key in hex.
+ */
+
+#define SALT_LEN 8
+#define ROUNDS 1024
+#define KEY_BITS 128
+
+int main(int argc, char* argv[])
+{
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <password>\n", argv[0]);
+ exit(1);
+ }
+
+ int fd = open("/dev/urandom", O_RDONLY);
+ if (fd < 0) {
+ fprintf(stderr, "Could not open /dev/urandom: %s\n", strerror(errno));
+ close(fd);
+ exit(1);
+ }
+
+ unsigned char salt[SALT_LEN];
+
+ if (read(fd, &salt, SALT_LEN) != SALT_LEN) {
+ fprintf(stderr, "Could not read salt from /dev/urandom: %s\n", strerror(errno));
+ close(fd);
+ exit(1);
+ }
+ close(fd);
+
+ unsigned char rawKey[KEY_BITS];
+
+ if (PKCS5_PBKDF2_HMAC_SHA1(argv[1], strlen(argv[1]), salt, SALT_LEN,
+ ROUNDS, KEY_BITS, rawKey) != 1) {
+ fprintf(stderr, "Could not generate PBKDF2 output: %s\n", strerror(errno));
+ exit(1);
+ }
+
+ printf("salt=");
+ for (int i = 0; i < SALT_LEN; i++) {
+ printf("%02x", salt[i]);
+ }
+ printf("\n");
+
+ printf("key=");
+ for (int i = 0; i < (KEY_BITS / 8); i++) {
+ printf("%02x", rawKey[i]);
+ }
+ printf("\n");
+}
diff --git a/voip/java/android/net/sip/SipManager.java b/voip/java/android/net/sip/SipManager.java
index ee0e3cd..2f03e34 100644
--- a/voip/java/android/net/sip/SipManager.java
+++ b/voip/java/android/net/sip/SipManager.java
@@ -126,22 +126,16 @@
* Returns true if the SIP API is supported by the system.
*/
public static boolean isApiSupported(Context context) {
- return true;
- /* TODO: uncomment this before ship
return context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_SIP);
- */
}
/**
* Returns true if the system supports SIP-based VoIP.
*/
public static boolean isVoipSupported(Context context) {
- return true;
- /* TODO: uncomment this before ship
return context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_SIP_VOIP) && isApiSupported(context);
- */
}
/**
diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java
index 42b4e7c..1df08c0 100644
--- a/voip/java/com/android/server/sip/SipService.java
+++ b/voip/java/com/android/server/sip/SipService.java
@@ -39,6 +39,7 @@
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
+import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -65,8 +66,8 @@
* @hide
*/
public final class SipService extends ISipService.Stub {
- private static final String TAG = "SipService";
- private static final boolean DEBUGV = false;
+ static final String TAG = "SipService";
+ static final boolean DEBUGV = false;
private static final boolean DEBUG = true;
private static final boolean DEBUG_TIMER = DEBUG && false;
private static final int EXPIRY_TIME = 3600;
@@ -92,7 +93,8 @@
new HashMap<String, ISipSession>();
private ConnectivityReceiver mConnectivityReceiver;
- private boolean mScreenOn;
+ private boolean mWifiEnabled;
+ private SipWakeLock mMyWakeLock;
/**
* Starts the SIP service. Do nothing if the SIP API is not supported on the
@@ -112,23 +114,34 @@
mConnectivityReceiver = new ConnectivityReceiver();
context.registerReceiver(mConnectivityReceiver,
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
- context.registerReceiver(mScreenOnOffReceiver,
- new IntentFilter(Intent.ACTION_SCREEN_ON));
- context.registerReceiver(mScreenOnOffReceiver,
- new IntentFilter(Intent.ACTION_SCREEN_OFF));
+ context.registerReceiver(mWifiStateReceiver,
+ new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
+ mMyWakeLock = new SipWakeLock((PowerManager)
+ context.getSystemService(Context.POWER_SERVICE));
mTimer = new WakeupTimer(context);
mWifiOnly = SipManager.isSipWifiOnly(context);
}
- BroadcastReceiver mScreenOnOffReceiver = new BroadcastReceiver() {
+ BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
- if (Intent.ACTION_SCREEN_OFF.equals(action)) {
- mScreenOn = false;
- } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
- mScreenOn = true;
+ if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
+ int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
+ WifiManager.WIFI_STATE_UNKNOWN);
+ synchronized (SipService.this) {
+ switch (state) {
+ case WifiManager.WIFI_STATE_ENABLED:
+ mWifiEnabled = true;
+ if (anyOpened()) grabWifiLock();
+ break;
+ case WifiManager.WIFI_STATE_DISABLED:
+ mWifiEnabled = false;
+ releaseWifiLock();
+ break;
+ }
+ }
}
}
};
@@ -182,7 +195,7 @@
incomingCallPendingIntent, listener);
if (localProfile.getAutoRegistration()) {
group.openToReceiveCalls();
- if (isWifiActive()) grabWifiLock();
+ if (mWifiEnabled) grabWifiLock();
}
} catch (SipException e) {
Log.e(TAG, "openToReceiveCalls()", e);
@@ -216,7 +229,11 @@
group = mSipGroups.remove(localProfileUri);
notifyProfileRemoved(group.getLocalProfile());
group.close();
- if (isWifiActive() && !anyOpened()) releaseWifiLock();
+
+ if (!anyOpened()) {
+ releaseWifiLock();
+ mMyWakeLock.reset(); // in case there's leak
+ }
}
public synchronized boolean isOpened(String localProfileUri) {
@@ -349,7 +366,7 @@
private void grabWifiLock() {
if (mWifiLock == null) {
- if (DEBUG) Log.d(TAG, "acquire wifi lock");
+ if (DEBUG) Log.d(TAG, "~~~~~~~~~~~~~~~~~~~~~ acquire wifi lock");
mWifiLock = ((WifiManager)
mContext.getSystemService(Context.WIFI_SERVICE))
.createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
@@ -359,16 +376,12 @@
private void releaseWifiLock() {
if (mWifiLock != null) {
- if (DEBUG) Log.d(TAG, "release wifi lock");
+ if (DEBUG) Log.d(TAG, "~~~~~~~~~~~~~~~~~~~~~ release wifi lock");
mWifiLock.release();
mWifiLock = null;
}
}
- private boolean isWifiActive() {
- return "WIFI".equalsIgnoreCase(mNetworkType);
- }
-
private synchronized void onConnectivityChanged(
String type, boolean connected) {
if (DEBUG) Log.d(TAG, "onConnectivityChanged(): "
@@ -382,14 +395,6 @@
boolean isWifi = "WIFI".equalsIgnoreCase(type);
boolean wifiOff = (isWifi && !connected) || (wasWifi && !sameType);
boolean wifiOn = isWifi && connected;
- if (wifiOff) {
- if (mScreenOn) releaseWifiLock();
- // If the screen is off, we still keep the wifi lock in order
- // to be able to reassociate with any available AP. Otherwise,
- // the wifi driver could be stopped after 15 mins of idle time.
- } else if (wifiOn) {
- if (anyOpened()) grabWifiLock();
- }
try {
boolean wasConnected = mConnected;
@@ -408,8 +413,9 @@
for (SipSessionGroupExt group : mSipGroups.values()) {
group.onConnectivityChanged(true);
}
+ } else {
+ mMyWakeLock.reset(); // in case there's a leak
}
-
} catch (SipException e) {
Log.e(TAG, "onConnectivityChanged()", e);
}
@@ -452,7 +458,8 @@
private SipSessionGroup createSipSessionGroup(String localIp,
SipProfile localProfile, String password) throws SipException {
try {
- return new SipSessionGroup(localIp, localProfile, password);
+ return new SipSessionGroup(localIp, localProfile, password,
+ mMyWakeLock);
} catch (IOException e) {
// network disconnected
Log.w(TAG, "createSipSessionGroup(): network disconnected?");
@@ -539,6 +546,7 @@
@Override
public void onRinging(ISipSession s, SipProfile caller,
String sessionDescription) {
+ if (DEBUGV) Log.d(TAG, "<<<<< onRinging()");
SipSessionGroup.SipSessionImpl session =
(SipSessionGroup.SipSessionImpl) s;
synchronized (SipService.this) {
@@ -585,7 +593,7 @@
}
// KeepAliveProcess is controlled by AutoRegistrationProcess.
- // All methods will be invoked in sync with SipService.this except realRun()
+ // All methods will be invoked in sync with SipService.this.
private class KeepAliveProcess implements Runnable {
private static final String TAG = "\\KEEPALIVE/";
private static final int INTERVAL = 10;
@@ -604,43 +612,33 @@
// timeout handler
public void run() {
- if (!mRunning) return;
- final SipSessionGroup.SipSessionImpl session = mSession;
-
- // delegate to mExecutor
- getExecutor().addTask(new Runnable() {
- public void run() {
- realRun(session);
- }
- });
- }
-
- // real timeout handler
- private void realRun(SipSessionGroup.SipSessionImpl session) {
synchronized (SipService.this) {
- if (notCurrentSession(session)) return;
+ if (!mRunning) return;
- session = session.duplicate();
- if (DEBUGV) Log.v(TAG, "~~~ keepalive");
- mTimer.cancel(this);
- session.sendKeepAlive();
- if (session.isReRegisterRequired()) {
- mSession.register(EXPIRY_TIME);
- } else {
- mTimer.set(INTERVAL * 1000, this);
+ if (DEBUGV) Log.v(TAG, "~~~ keepalive: "
+ + mSession.getLocalProfile().getUriString());
+ SipSessionGroup.SipSessionImpl session = mSession.duplicate();
+ try {
+ session.sendKeepAlive();
+ if (session.isReRegisterRequired()) {
+ // Acquire wake lock for the registration process. The
+ // lock will be released when registration is complete.
+ mMyWakeLock.acquire(mSession);
+ mSession.register(EXPIRY_TIME);
+ }
+ } catch (Throwable t) {
+ Log.w(TAG, "keepalive error: " + t);
}
}
}
public void stop() {
+ if (DEBUGV && (mSession != null)) Log.v(TAG, "stop keepalive:"
+ + mSession.getLocalProfile().getUriString());
mRunning = false;
mSession = null;
mTimer.cancel(this);
}
-
- private boolean notCurrentSession(ISipSession session) {
- return (session != mSession) || !mRunning;
- }
}
private class AutoRegistrationProcess extends SipSessionAdapter
@@ -671,6 +669,7 @@
// start unregistration to clear up old registration at server
// TODO: when rfc5626 is deployed, use reg-id and sip.instance
// in registration to avoid adding duplicate entries to server
+ mMyWakeLock.acquire(mSession);
mSession.unregister();
if (DEBUG) Log.d(TAG, "start AutoRegistrationProcess for "
+ mSession.getLocalProfile().getUriString());
@@ -680,8 +679,11 @@
public void stop() {
if (!mRunning) return;
mRunning = false;
- mSession.setListener(null);
- if (mConnected && mRegistered) mSession.unregister();
+ mMyWakeLock.release(mSession);
+ if (mSession != null) {
+ mSession.setListener(null);
+ if (mConnected && mRegistered) mSession.unregister();
+ }
mTimer.cancel(this);
if (mKeepAliveProcess != null) {
@@ -738,29 +740,18 @@
return mRegistered;
}
- // timeout handler
+ // timeout handler: re-register
public void run() {
synchronized (SipService.this) {
if (!mRunning) return;
- final SipSessionGroup.SipSessionImpl session = mSession;
- // delegate to mExecutor
- getExecutor().addTask(new Runnable() {
- public void run() {
- realRun(session);
- }
- });
- }
- }
-
- // real timeout handler
- private void realRun(SipSessionGroup.SipSessionImpl session) {
- synchronized (SipService.this) {
- if (notCurrentSession(session)) return;
mErrorCode = SipErrorCode.NO_ERROR;
mErrorMessage = null;
if (DEBUG) Log.d(TAG, "~~~ registering");
- if (mConnected) session.register(EXPIRY_TIME);
+ if (mConnected) {
+ mMyWakeLock.acquire(mSession);
+ mSession.register(EXPIRY_TIME);
+ }
}
}
@@ -810,6 +801,7 @@
private boolean notCurrentSession(ISipSession session) {
if (session != mSession) {
((SipSessionGroup.SipSessionImpl) session).setListener(null);
+ mMyWakeLock.release(session);
return true;
}
return !mRunning;
@@ -846,6 +838,7 @@
mKeepAliveProcess.start();
}
}
+ mMyWakeLock.release(session);
} else {
mRegistered = false;
mExpiryTime = -1L;
@@ -876,6 +869,7 @@
mErrorCode = errorCode;
mErrorMessage = message;
mProxy.onRegistrationFailed(session, errorCode, message);
+ mMyWakeLock.release(session);
}
}
@@ -888,6 +882,7 @@
mErrorCode = SipErrorCode.TIME_OUT;
mProxy.onRegistrationTimeout(session);
restartLater();
+ mMyWakeLock.release(session);
}
}
@@ -906,7 +901,16 @@
private MyTimerTask mTask;
@Override
- public void onReceive(Context context, Intent intent) {
+ public void onReceive(final Context context, final Intent intent) {
+ // Run the handler in MyExecutor to be protected by wake lock
+ getExecutor().execute(new Runnable() {
+ public void run() {
+ onReceiveInternal(context, intent);
+ }
+ });
+ }
+
+ private void onReceiveInternal(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
Bundle b = intent.getExtras();
@@ -974,11 +978,13 @@
if (mTask != null) mTask.cancel();
mTask = new MyTimerTask(type, connected);
mTimer.schedule(mTask, 2 * 1000L);
- // TODO: hold wakup lock so that we can finish change before
- // the device goes to sleep
+ // hold wakup lock so that we can finish changes before the
+ // device goes to sleep
+ mMyWakeLock.acquire(mTask);
} else {
if ((mTask != null) && mTask.mNetworkType.equals(type)) {
mTask.cancel();
+ mMyWakeLock.release(mTask);
}
onConnectivityChanged(type, false);
}
@@ -998,7 +1004,7 @@
@Override
public void run() {
// delegate to mExecutor
- getExecutor().addTask(new Runnable() {
+ getExecutor().execute(new Runnable() {
public void run() {
realRun();
}
@@ -1016,6 +1022,7 @@
if (DEBUG) Log.d(TAG, " deliver change for " + mNetworkType
+ (mConnected ? " CONNECTED" : "DISCONNECTED"));
onConnectivityChanged(mNetworkType, mConnected);
+ mMyWakeLock.release(this);
}
}
}
@@ -1023,7 +1030,6 @@
// TODO: clean up pending SipSession(s) periodically
-
/**
* Timer that can schedule events to occur even when the device is in sleep.
* Only used internally in this package.
@@ -1213,7 +1219,8 @@
}
@Override
- public synchronized void onReceive(Context context, Intent intent) {
+ public void onReceive(Context context, Intent intent) {
+ // This callback is already protected by AlarmManager's wake lock.
String action = intent.getAction();
if (getAction().equals(action)
&& intent.getExtras().containsKey(TRIGGER_TIME)) {
@@ -1240,7 +1247,7 @@
}
}
- private void execute(long triggerTime) {
+ private synchronized void execute(long triggerTime) {
if (DEBUG_TIMER) Log.d(TAG, "time's up, triggerTime = "
+ showTime(triggerTime) + ": " + mEventQueue.size());
if (stopped() || mEventQueue.isEmpty()) return;
@@ -1252,9 +1259,8 @@
event.mLastTriggerTime = event.mTriggerTime;
event.mTriggerTime += event.mPeriod;
- // run the callback in a new thread to prevent deadlock
- new Thread(event.mCallback, "SipServiceTimerCallbackThread")
- .start();
+ // run the callback in the handler thread to prevent deadlock
+ getExecutor().execute(event.mCallback);
}
if (DEBUG_TIMER) {
Log.d(TAG, "after timeout execution");
@@ -1318,29 +1324,41 @@
}
}
- // Single-threaded executor
- private static class MyExecutor extends Handler {
+ private static Looper createLooper() {
+ HandlerThread thread = new HandlerThread("SipService.Executor");
+ thread.start();
+ return thread.getLooper();
+ }
+
+ // Executes immediate tasks in a single thread.
+ // Hold/release wake lock for running tasks
+ private class MyExecutor extends Handler {
MyExecutor() {
super(createLooper());
}
- private static Looper createLooper() {
- HandlerThread thread = new HandlerThread("SipService");
- thread.start();
- return thread.getLooper();
- }
-
- void addTask(Runnable task) {
+ void execute(Runnable task) {
+ mMyWakeLock.acquire(task);
Message.obtain(this, 0/* don't care */, task).sendToTarget();
}
@Override
public void handleMessage(Message msg) {
if (msg.obj instanceof Runnable) {
- ((Runnable) msg.obj).run();
+ executeInternal((Runnable) msg.obj);
} else {
Log.w(TAG, "can't handle msg: " + msg);
}
}
+
+ private void executeInternal(Runnable task) {
+ try {
+ task.run();
+ } catch (Throwable t) {
+ Log.e(TAG, "run task: " + task, t);
+ } finally {
+ mMyWakeLock.release(task);
+ }
+ }
}
}
diff --git a/voip/java/com/android/server/sip/SipSessionGroup.java b/voip/java/com/android/server/sip/SipSessionGroup.java
index b5f8d39..578bd9b 100644
--- a/voip/java/com/android/server/sip/SipSessionGroup.java
+++ b/voip/java/com/android/server/sip/SipSessionGroup.java
@@ -82,8 +82,14 @@
private static final boolean DEBUG = true;
private static final boolean DEBUG_PING = DEBUG && false;
private static final String ANONYMOUS = "anonymous";
+ // Limit the size of thread pool to 1 for the order issue when the phone is
+ // waken up from sleep and there are many packets to be processed in the SIP
+ // stack. Note: The default thread pool size in NIST SIP stack is -1 which is
+ // unlimited.
+ private static final String THREAD_POOL_SIZE = "1";
private static final int EXPIRY_TIME = 3600; // in seconds
private static final int CANCEL_CALL_TIMER = 3; // in seconds
+ private static final long WAKE_LOCK_HOLDING_TIME = 500; // in milliseconds
private static final EventObject DEREGISTER = new EventObject("Deregister");
private static final EventObject END_CALL = new EventObject("End call");
@@ -101,6 +107,8 @@
private SipSessionImpl mCallReceiverSession;
private String mLocalIp;
+ private SipWakeLock mWakeLock;
+
// call-id-to-SipSession map
private Map<String, SipSessionImpl> mSessionMap =
new HashMap<String, SipSessionImpl>();
@@ -110,10 +118,11 @@
* @param password the password of the profile
* @throws IOException if cannot assign requested address
*/
- public SipSessionGroup(String localIp, SipProfile myself, String password)
- throws SipException, IOException {
+ public SipSessionGroup(String localIp, SipProfile myself, String password,
+ SipWakeLock wakeLock) throws SipException, IOException {
mLocalProfile = myself;
mPassword = password;
+ mWakeLock = wakeLock;
reset(localIp);
}
@@ -125,6 +134,7 @@
SipFactory sipFactory = SipFactory.getInstance();
Properties properties = new Properties();
properties.setProperty("javax.sip.STACK_NAME", getStackName());
+ properties.setProperty("javax.sip.THREAD_POOL_SIZE", THREAD_POOL_SIZE);
String outboundProxy = myself.getProxyAddress();
if (!TextUtils.isEmpty(outboundProxy)) {
Log.v(TAG, "outboundProxy is " + outboundProxy);
@@ -271,7 +281,14 @@
}
}
- public void processRequest(RequestEvent event) {
+ public void processRequest(final RequestEvent event) {
+ if (isRequestEvent(Request.INVITE, event)) {
+ if (DEBUG) Log.d(TAG, "<<<<< got INVITE, thread:"
+ + Thread.currentThread());
+ // Acquire a wake lock and keep it for WAKE_LOCK_HOLDING_TIME;
+ // should be large enough to bring up the app.
+ mWakeLock.acquire(WAKE_LOCK_HOLDING_TIME);
+ }
process(event);
}
@@ -547,8 +564,14 @@
mState = SipSession.State.PINGING;
try {
processCommand(new OptionsCommand());
- while (SipSession.State.PINGING == mState) {
- Thread.sleep(1000);
+ for (int i = 0; i < 15; i++) {
+ if (SipSession.State.PINGING != mState) break;
+ Thread.sleep(200);
+ }
+ if (SipSession.State.PINGING == mState) {
+ // FIXME: what to do if server doesn't respond
+ reset();
+ if (DEBUG) Log.w(TAG, "no response from ping");
}
} catch (SipException e) {
Log.e(TAG, "sendKeepAlive failed", e);
diff --git a/voip/java/com/android/server/sip/SipWakeLock.java b/voip/java/com/android/server/sip/SipWakeLock.java
new file mode 100644
index 0000000..52bc094
--- /dev/null
+++ b/voip/java/com/android/server/sip/SipWakeLock.java
@@ -0,0 +1,71 @@
+/*
+ * 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.server.sip;
+
+import android.os.PowerManager;
+import android.util.Log;
+
+import java.util.HashSet;
+
+class SipWakeLock {
+ private static final boolean DEBUGV = SipService.DEBUGV;
+ private static final String TAG = SipService.TAG;
+ private PowerManager mPowerManager;
+ private PowerManager.WakeLock mWakeLock;
+ private PowerManager.WakeLock mTimerWakeLock;
+ private HashSet<Object> mHolders = new HashSet<Object>();
+
+ SipWakeLock(PowerManager powerManager) {
+ mPowerManager = powerManager;
+ }
+
+ synchronized void reset() {
+ mHolders.clear();
+ release(null);
+ if (DEBUGV) Log.v(TAG, "~~~ hard reset wakelock");
+ }
+
+ synchronized void acquire(long timeout) {
+ if (mTimerWakeLock == null) {
+ mTimerWakeLock = mPowerManager.newWakeLock(
+ PowerManager.PARTIAL_WAKE_LOCK, "SipWakeLock.timer");
+ mTimerWakeLock.setReferenceCounted(true);
+ }
+ mTimerWakeLock.acquire(timeout);
+ }
+
+ synchronized void acquire(Object holder) {
+ mHolders.add(holder);
+ if (mWakeLock == null) {
+ mWakeLock = mPowerManager.newWakeLock(
+ PowerManager.PARTIAL_WAKE_LOCK, "SipWakeLock");
+ }
+ if (!mWakeLock.isHeld()) mWakeLock.acquire();
+ if (DEBUGV) Log.v(TAG, "acquire wakelock: holder count="
+ + mHolders.size());
+ }
+
+ synchronized void release(Object holder) {
+ mHolders.remove(holder);
+ if ((mWakeLock != null) && mHolders.isEmpty()
+ && mWakeLock.isHeld()) {
+ mWakeLock.release();
+ }
+ if (DEBUGV) Log.v(TAG, "release wakelock: holder count="
+ + mHolders.size());
+ }
+}
diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java
index 06f6696..8028fe7 100644
--- a/wifi/java/android/net/wifi/WifiStateTracker.java
+++ b/wifi/java/android/net/wifi/WifiStateTracker.java
@@ -840,9 +840,15 @@
switch (msg.what) {
case EVENT_SUPPLICANT_CONNECTION:
mRunState = RUN_STATE_RUNNING;
+ String macaddr;
synchronized (this) {
updateBatteryWorkSourceLocked(null);
+ macaddr = WifiNative.getMacAddressCommand();
}
+ if (macaddr != null) {
+ mWifiInfo.setMacAddress(macaddr);
+ }
+
checkUseStaticIp();
/* Reset notification state on new connection */
resetNotificationTimer();
@@ -1281,7 +1287,7 @@
*/
setNumAllowedChannels();
synchronized (this) {
- String macaddr = WifiNative.getMacAddressCommand();
+ macaddr = WifiNative.getMacAddressCommand();
if (macaddr != null) {
mWifiInfo.setMacAddress(macaddr);
}