Merge "Visual changes to recent apps" into ics-mr0
diff --git a/Android.mk b/Android.mk
index a38723a..f41130b 100644
--- a/Android.mk
+++ b/Android.mk
@@ -402,8 +402,8 @@
resources/samples/AccelerometerPlay "Accelerometer Play" \
-samplecode $(sample_dir)/ActionBarCompat \
resources/samples/ActionBarCompat "Action Bar Compatibility" \
- -samplecode $(sample_dir)/AndroidBeam \
- resources/samples/AndroidBeam "Android Beam" \
+ -samplecode $(sample_dir)/AndroidBeamDemo \
+ resources/samples/AndroidBeamDemo "Android Beam Demo" \
-samplecode $(sample_dir)/ApiDemos \
resources/samples/ApiDemos "API Demos" \
-samplecode $(sample_dir)/Support4Demos \
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 1e238f0..64a2755 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -32,11 +32,9 @@
* when {@link AccessibilityEvent}s are fired. Such events denote some state transition
* in the user interface, for example, the focus has changed, a button has been clicked,
* etc. Such a service can optionally request the capability for querying the content
- * of the active window. Development of an accessibility service requires extends this
- * class and implements its abstract methods.
- * <p>
- * <strong>Lifecycle</strong>
- * </p>
+ * of the active window. Development of an accessibility service requires extending this
+ * class and implementing its abstract methods.
+ * <h3>Lifecycle</h3>
* <p>
* The lifecycle of an accessibility service is managed exclusively by the system and
* follows the established service life cycle. Additionally, starting or stopping an
@@ -45,30 +43,20 @@
* calls {@link AccessibilityService#onServiceConnected()}. This method can be
* overriden by clients that want to perform post binding setup.
* </p>
- * <p>
- * <strong>Declaration</strong>
- * </p>
+ * <h3>Declaration</h3>
* <p>
* An accessibility is declared as any other service in an AndroidManifest.xml but it
* must also specify that it handles the "android.accessibilityservice.AccessibilityService"
* {@link android.content.Intent}. Failure to declare this intent will cause the system to
* ignore the accessibility service. Following is an example declaration:
* </p>
- * <p>
- * <code>
- * <pre>
- * <service android:name=".MyAccessibilityService">
+ * <pre> <service android:name=".MyAccessibilityService">
* <intent-filter>
- * <action android:name="android.accessibilityservice.AccessibilityService" />
+ * <action android:name="android.accessibilityservice.AccessibilityService" />
* </intent-filter>
* . . .
- * </service>
- * </pre>
- * </code>
- * </p>
- * <p>
- * <strong>Configuration</strong>
- * </p>
+ * </service></pre>
+ * <h3>Configuration</h3>
* <p>
* An accessibility service can be configured to receive specific types of accessibility events,
* listen only to specific packages, get events from each type only once in a given time frame,
@@ -81,30 +69,24 @@
* <li>
* Providing a {@link #SERVICE_META_DATA meta-data} entry in the manifest when declaring
* the service. A service declaration with a meta-data tag is presented below:
- * <p>
- * <code>
- * <pre>
- * <service android:name=".MyAccessibilityService">
+ * <pre> <service android:name=".MyAccessibilityService">
* <intent-filter>
- * <action android:name="android.accessibilityservice.AccessibilityService" />
+ * <action android:name="android.accessibilityservice.AccessibilityService" />
* </intent-filter>
* <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" />
- * </service>
- * </pre>
- * </code>
- * </p>
- * <p>
- * <strong>Note:</strong>This approach enables setting all properties.
+ * </service></pre>
+ * <p class="note">
+ * <strong>Note:</strong> This approach enables setting all properties.
* </p>
* <p>
* For more details refer to {@link #SERVICE_META_DATA} and
- * <code><{@link android.R.styleable#AccessibilityService accessibility-service}></code>..
+ * <code><{@link android.R.styleable#AccessibilityService accessibility-service}></code>.
* </p>
* </li>
* <li>
* Calling {@link AccessibilityService#setServiceInfo(AccessibilityServiceInfo)}. Note
* that this method can be called any time to dynamically change the service configuration.
- * <p>
+ * <p class="note">
* <strong>Note:</strong> This approach enables setting only dynamically configurable properties:
* {@link AccessibilityServiceInfo#eventTypes},
* {@link AccessibilityServiceInfo#feedbackType},
@@ -117,9 +99,7 @@
* </p>
* </li>
* </ul>
- * <p>
- * <strong>Retrieving window content</strong>
- * </p>
+ * <h3>Retrieving window content</h3>
* <p>
* An service can specify in its declaration that it can retrieve the active window
* content which is represented as a tree of {@link AccessibilityNodeInfo}. Note that
@@ -144,8 +124,8 @@
* this method will return an {@link AccessibilityNodeInfo} that can be used to traverse the
* window content which represented as a tree of such objects.
* </p>
- * <p>
- * <strong>Note</strong>An accessibility service may have requested to be notified for
+ * <p class="note">
+ * <strong>Note</strong> An accessibility service may have requested to be notified for
* a subset of the event types, thus be unaware that the active window has changed. Therefore
* accessibility service that would like to retrieve window content should:
* <ul>
@@ -158,15 +138,13 @@
* <li>
* Prepare that a retrieval method on {@link AccessibilityNodeInfo} may fail since the
* active window has changed and the service did not get the accessibility event yet. Note
- * that it is possible to have a retrieval method failing event adopting the strategy
+ * that it is possible to have a retrieval method failing even adopting the strategy
* specified in the previous bullet because the accessibility event dispatch is asynchronous
* and crosses process boundaries.
* </li>
* </ul>
* </p>
- * <p>
- * <b>Notification strategy</b>
- * </p>
+ * <h3>Notification strategy</h3>
* <p>
* For each feedback type only one accessibility service is notified. Services are notified
* in the order of registration. Hence, if two services are registered for the same
@@ -178,40 +156,39 @@
* well with most applications to coexist with "polished" ones that are targeted for
* specific applications.
* </p>
- * <p>
- * <b>Event types</b>
- * </p>
- * {@link AccessibilityEvent#TYPE_VIEW_CLICKED}
- * {@link AccessibilityEvent#TYPE_VIEW_LONG_CLICKED}
- * {@link AccessibilityEvent#TYPE_VIEW_FOCUSED}
- * {@link AccessibilityEvent#TYPE_VIEW_SELECTED}
- * {@link AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED}
- * {@link AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED}
- * {@link AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED}
- * {@link AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_START}
- * {@link AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_END}
- * {@link AccessibilityEvent#TYPE_VIEW_HOVER_ENTER}
- * {@link AccessibilityEvent#TYPE_VIEW_HOVER_EXIT}
- * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED}
- * {@link AccessibilityEvent#TYPE_VIEW_TEXT_SELECTION_CHANGED}
- * {@link AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED}
- * <p>
- * <b>Feedback types</b>
- * <p>
- * {@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE}
- * {@link AccessibilityServiceInfo#FEEDBACK_HAPTIC}
- * {@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE}
- * {@link AccessibilityServiceInfo#FEEDBACK_VISUAL}
- * {@link AccessibilityServiceInfo#FEEDBACK_GENERIC}
- *
- * @see AccessibilityEvent
- * @see AccessibilityServiceInfo
- * @see android.view.accessibility.AccessibilityManager
- *
+ * <p class="note">
* <strong>Note:</strong> The event notification timeout is useful to avoid propagating
* events to the client too frequently since this is accomplished via an expensive
* interprocess call. One can think of the timeout as a criteria to determine when
- * event generation has settled down.
+ * event generation has settled down.</p>
+ * <h3>Event types</h3>
+ * <ul>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_CLICKED}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_LONG_CLICKED}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_FOCUSED}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_SELECTED}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED}
+ * <li>{@link AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED}
+ * <li>{@link AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED}
+ * <li>{@link AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_START}
+ * <li>{@link AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_END}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_HOVER_ENTER}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_HOVER_EXIT}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_SCROLLED}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_TEXT_SELECTION_CHANGED}
+ * <li>{@link AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED}
+ * </ul>
+ * <h3>Feedback types</h3>
+ * <ul>
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE}
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_HAPTIC}
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE}
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_VISUAL}
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_GENERIC}
+ * </ul>
+ * @see AccessibilityEvent
+ * @see AccessibilityServiceInfo
+ * @see android.view.accessibility.AccessibilityManager
*/
public abstract class AccessibilityService extends Service {
/**
@@ -225,10 +202,7 @@
* about itself. This meta-data must reference an XML resource containing an
* <code><{@link android.R.styleable#AccessibilityService accessibility-service}></code>
* tag. This is a a sample XML file configuring an accessibility service:
- * <p>
- * <code>
- * <pre>
- * <accessibility-service
+ * <pre> <accessibility-service
* android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
* android:packageNames="foo.bar, foo.baz"
* android:accessibilityFeedbackType="feedbackSpoken"
@@ -237,10 +211,7 @@
* android:settingsActivity="foo.bar.TestBackActivity"
* android:canRetrieveWindowContent="true"
* . . .
- * />
- * </pre>
- * </code>
- * </p>
+ * /></pre>
*/
public static final String SERVICE_META_DATA = "android.accessibilityservice";
diff --git a/core/java/android/app/AlertDialog.java b/core/java/android/app/AlertDialog.java
index c09e87f..e37b3fa 100644
--- a/core/java/android/app/AlertDialog.java
+++ b/core/java/android/app/AlertDialog.java
@@ -54,6 +54,12 @@
* without text editors, so that it will be placed on top of the current
* input method UI. You can modify this behavior by forcing the flag to your
* desired mode after calling {@link #onCreate}.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating dialogs, read the
+ * <a href="{@docRoot}guide/topics/ui/dialogs.html">Dialogs</a> developer guide.</p>
+ * </div>
*/
public class AlertDialog extends Dialog implements DialogInterface {
private AlertController mAlert;
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java
index 82186dd..7a69419 100644
--- a/core/java/android/app/Dialog.java
+++ b/core/java/android/app/Dialog.java
@@ -66,9 +66,14 @@
* your Dialog takes input focus, as it the default) with the following code:
*
* <pre>
- * getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
- * WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
- * </pre>
+ * getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
+ * WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);</pre>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating dialogs, read the
+ * <a href="{@docRoot}guide/topics/ui/dialogs.html">Dialogs</a> developer guide.</p>
+ * </div>
*/
public class Dialog implements DialogInterface, Window.Callback,
KeyEvent.Callback, OnCreateContextMenuListener {
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 9490b96..f5add25 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -38,9 +38,12 @@
* <p>The {@link Notification.Builder Notification.Builder} has been added to make it
* easier to construct Notifications.</p>
*
- * <p>For a guide to creating notifications, see the
- * <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Creating Status
- * Bar Notifications</a> document in the Dev Guide.</p>
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For a guide to creating notifications, read the
+ * <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>
+ * developer guide.</p>
+ * </div>
*/
public class Notification implements Parcelable
{
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 4913e78..bf83f5e 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -55,6 +55,13 @@
* You do not instantiate this class directly; instead, retrieve it through
* {@link android.content.Context#getSystemService}.
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For a guide to creating notifications, read the
+ * <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>
+ * developer guide.</p>
+ * </div>
+ *
* @see android.app.Notification
* @see android.content.Context#getSystemService
*/
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java
index c5ee48d..7863102 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-
+
package android.app;
import android.content.Context;
@@ -71,7 +71,9 @@
*/
public void disable(int what) {
try {
- mService.disable(what, mToken, mContext.getPackageName());
+ if (mService != null) {
+ mService.disable(what, mToken, mContext.getPackageName());
+ }
} catch (RemoteException ex) {
// system process is dead anyway.
throw new RuntimeException(ex);
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index e452f1f..092a0c8 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -45,9 +45,6 @@
* multiple applications you can use a database directly via
* {@link android.database.sqlite.SQLiteDatabase}.
*
- * <p>For more information, read <a href="{@docRoot}guide/topics/providers/content-providers.html">Content
- * Providers</a>.</p>
- *
* <p>When a request is made via
* a {@link ContentResolver} the system inspects the authority of the given URI and passes the
* request to the content provider registered with the authority. The content provider can interpret
@@ -73,6 +70,12 @@
* <p>Requests to {@link ContentResolver} are automatically forwarded to the appropriate
* ContentProvider instance, so subclasses don't have to worry about the details of
* cross-process calls.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using content providers, read the
+ * <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>
+ * developer guide.</p>
*/
public abstract class ContentProvider implements ComponentCallbacks2 {
private static final String TAG = "ContentProvider";
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 0d25926..e923349 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -54,6 +54,12 @@
/**
* This class provides applications access to the content model.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about using a ContentResolver with content providers, read the
+ * <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>
+ * developer guide.</p>
*/
public abstract class ContentResolver {
/**
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index 62bb965..54a89ad 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -197,7 +197,10 @@
String apnName = intent.getStringExtra(Phone.DATA_APN_KEY);
mNetworkInfo.setRoaming(intent.getBooleanExtra(Phone.DATA_NETWORK_ROAMING_KEY,
false));
-
+ if (VDBG) {
+ log(mApnType + " setting isAvailable to " +
+ intent.getBooleanExtra(Phone.NETWORK_UNAVAILABLE_KEY,false));
+ }
mNetworkInfo.setIsAvailable(!intent.getBooleanExtra(Phone.NETWORK_UNAVAILABLE_KEY,
false));
diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java
index 1735592..7df0193 100644
--- a/core/java/android/net/NetworkStateTracker.java
+++ b/core/java/android/net/NetworkStateTracker.java
@@ -132,6 +132,9 @@
* Returns an indication of whether this network is available for
* connections. A value of {@code false} means that some quasi-permanent
* condition prevents connectivity to this network.
+ *
+ * NOTE that this is broken on multi-connection devices. Should be fixed in J release
+ * TODO - fix on multi-pdp devices
*/
public boolean isAvailable();
diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java
index da878d4..5fe58e9 100644
--- a/core/java/android/nfc/NfcActivityManager.java
+++ b/core/java/android/nfc/NfcActivityManager.java
@@ -162,6 +162,7 @@
synchronized void maybeRemoveState(Activity activity, NfcActivityState state) {
if (state.ndefMessage == null && state.ndefMessageCallback == null &&
state.onNdefPushCompleteCallback == null) {
+ NfcFragment.remove(activity);
mNfcState.remove(activity);
}
}
diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java
index d1dc6e5..0640d7e 100644
--- a/core/java/android/os/storage/IMountService.java
+++ b/core/java/android/os/storage/IMountService.java
@@ -658,6 +658,24 @@
return _result;
}
+ @Override
+ public int verifyEncryptionPassword(String password) throws RemoteException {
+ Parcel _data = Parcel.obtain();
+ Parcel _reply = Parcel.obtain();
+ int _result;
+ try {
+ _data.writeInterfaceToken(DESCRIPTOR);
+ _data.writeString(password);
+ mRemote.transact(Stub.TRANSACTION_verifyEncryptionPassword, _data, _reply, 0);
+ _reply.readException();
+ _result = _reply.readInt();
+ } finally {
+ _reply.recycle();
+ _data.recycle();
+ }
+ return _result;
+ }
+
public Parcelable[] getVolumeList() throws RemoteException {
Parcel _data = Parcel.obtain();
Parcel _reply = Parcel.obtain();
@@ -761,6 +779,8 @@
static final int TRANSACTION_getEncryptionState = IBinder.FIRST_CALL_TRANSACTION + 31;
+ static final int TRANSACTION_verifyEncryptionPassword = IBinder.FIRST_CALL_TRANSACTION + 32;
+
/**
* Cast an IBinder object into an IMountService interface, generating a
* proxy if needed.
@@ -1286,6 +1306,12 @@
public int changeEncryptionPassword(String password) throws RemoteException;
/**
+ * Verify the encryption password against the stored volume. This method
+ * may only be called by the system process.
+ */
+ public int verifyEncryptionPassword(String password) throws RemoteException;
+
+ /**
* Returns list of all mountable volumes.
*/
public Parcelable[] getVolumeList() throws RemoteException;
diff --git a/core/java/android/service/textservice/SpellCheckerService.java b/core/java/android/service/textservice/SpellCheckerService.java
index b96099e..2ecf307 100644
--- a/core/java/android/service/textservice/SpellCheckerService.java
+++ b/core/java/android/service/textservice/SpellCheckerService.java
@@ -35,6 +35,28 @@
* SpellCheckerService provides an abstract base class for a spell checker.
* This class combines a service to the system with the spell checker service interface that
* spell checker must implement.
+ *
+ * <p>In addition to the normal Service lifecycle methods, this class
+ * introduces a new specific callback that subclasses should override
+ * {@link #createSession()} to provide a spell checker session that is corresponding
+ * to requested language and so on. The spell checker session returned by this method
+ * should extend {@link SpellCheckerService.Session}.
+ * </p>
+ *
+ * <h3>Returning spell check results</h3>
+ *
+ * <p>{@link SpellCheckerService.Session#onGetSuggestions(TextInfo, int)}
+ * should return spell check results.
+ * It receives {@link android.view.textservice.TextInfo} and returns
+ * {@link android.view.textservice.SuggestionsInfo} for the input.
+ * You may want to override
+ * {@link SpellCheckerService.Session#onGetSuggestionsMultiple(TextInfo[], int, boolean)} for
+ * better performance and quality.
+ * </p>
+ *
+ * <p>Please note that {@link SpellCheckerService.Session#getLocale()} does not return a valid
+ * locale before {@link SpellCheckerService.Session#onCreate()} </p>
+ *
*/
public abstract class SpellCheckerService extends Service {
private static final String TAG = SpellCheckerService.class.getSimpleName();
@@ -89,7 +111,7 @@
* but will be called in series on another thread.
* @param textInfo the text metadata
* @param suggestionsLimit the number of limit of suggestions returned
- * @return SuggestionInfo which contains suggestions for textInfo
+ * @return SuggestionsInfo which contains suggestions for textInfo
*/
public abstract SuggestionsInfo onGetSuggestions(TextInfo textInfo, int suggestionsLimit);
@@ -101,7 +123,7 @@
* @param textInfos an array of the text metadata
* @param suggestionsLimit the number of limit of suggestions returned
* @param sequentialWords true if textInfos can be treated as sequential words.
- * @return an array of SuggestionInfo of onGetSuggestions
+ * @return an array of SuggestionsInfo of onGetSuggestions
*/
public SuggestionsInfo[] onGetSuggestionsMultiple(TextInfo[] textInfos,
int suggestionsLimit, boolean sequentialWords) {
diff --git a/core/java/android/speech/tts/TtsEngines.java b/core/java/android/speech/tts/TtsEngines.java
index bb72bea..2706bc7 100644
--- a/core/java/android/speech/tts/TtsEngines.java
+++ b/core/java/android/speech/tts/TtsEngines.java
@@ -344,7 +344,10 @@
String v1Locale = lang;
if (!TextUtils.isEmpty(country)) {
v1Locale += LOCALE_DELIMITER + country;
+ } else {
+ return v1Locale;
}
+
if (!TextUtils.isEmpty(variant)) {
v1Locale += LOCALE_DELIMITER + variant;
}
@@ -355,8 +358,28 @@
private String getDefaultLocale() {
final Locale locale = Locale.getDefault();
- return locale.getISO3Language() + LOCALE_DELIMITER + locale.getISO3Country() +
- LOCALE_DELIMITER + locale.getVariant();
+ // Note that the default locale might have an empty variant
+ // or language, and we take care that the construction is
+ // the same as {@link #getV1Locale} i.e no trailing delimiters
+ // or spaces.
+ String defaultLocale = locale.getISO3Language();
+ if (TextUtils.isEmpty(defaultLocale)) {
+ Log.w(TAG, "Default locale is empty.");
+ return "";
+ }
+
+ if (!TextUtils.isEmpty(locale.getISO3Country())) {
+ defaultLocale += LOCALE_DELIMITER + locale.getISO3Country();
+ } else {
+ // Do not allow locales of the form lang--variant with
+ // an empty country.
+ return defaultLocale;
+ }
+ if (!TextUtils.isEmpty(locale.getVariant())) {
+ defaultLocale += LOCALE_DELIMITER + locale.getVariant();
+ }
+
+ return defaultLocale;
}
/**
diff --git a/core/java/android/view/ContextMenu.java b/core/java/android/view/ContextMenu.java
index dd1d7db..decabcb 100644
--- a/core/java/android/view/ContextMenu.java
+++ b/core/java/android/view/ContextMenu.java
@@ -29,6 +29,12 @@
* To show a context menu on long click, most clients will want to call
* {@link Activity#registerForContextMenu} and override
* {@link Activity#onCreateContextMenu}.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about creating menus, read the
+ * <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> developer guide.</p>
+ * </div>
*/
public interface ContextMenu extends Menu {
/**
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index 8f491ef..f559e21 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -114,6 +114,12 @@
* {@link android.view.DragEvent#writeToParcel(Parcel,int)}, and
* {@link android.view.DragEvent#toString()} methods always return valid data.
* </p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For a guide to implementing drag and drop features, read the
+ * <a href="{@docRoot}guide/topics/ui/drag-drop.html">Drag and Drop</a> developer guide.</p>
+ * </div>
*/
public class DragEvent implements Parcelable {
private static final boolean TRACK_RECYCLED_LOCATION = false;
diff --git a/core/java/android/view/Menu.java b/core/java/android/view/Menu.java
index 97825e6..7157bc5 100644
--- a/core/java/android/view/Menu.java
+++ b/core/java/android/view/Menu.java
@@ -41,6 +41,12 @@
* item check marks are discouraged.
* <li><b>Sub menus</b>: Do not support item icons, or nested sub menus.
* </ol>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating menus, read the
+ * <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> developer guide.</p>
+ * </div>
*/
public interface Menu {
diff --git a/core/java/android/view/MenuItem.java b/core/java/android/view/MenuItem.java
index ccd8353..2dfbcb5 100644
--- a/core/java/android/view/MenuItem.java
+++ b/core/java/android/view/MenuItem.java
@@ -29,6 +29,12 @@
* methods.
* <p>
* For a feature set of specific menu types, see {@link Menu}.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about creating menus, read the
+ * <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> developer guide.</p>
+ * </div>
*/
public interface MenuItem {
/*
diff --git a/core/java/android/view/SubMenu.java b/core/java/android/view/SubMenu.java
index e981486..196a183 100644
--- a/core/java/android/view/SubMenu.java
+++ b/core/java/android/view/SubMenu.java
@@ -22,6 +22,12 @@
* Subclass of {@link Menu} for sub menus.
* <p>
* Sub menus do not support item icons, or nested sub menus.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about creating menus, read the
+ * <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> developer guide.</p>
+ * </div>
*/
public interface SubMenu extends Menu {
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 73e5026..61b13d5 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -418,7 +418,7 @@
* <h3>Drawing</h3>
* <p>
* Drawing is handled by walking the tree and rendering each view that
- * intersects the the invalid region. Because the tree is traversed in-order,
+ * intersects the invalid region. Because the tree is traversed in-order,
* this means that parents will draw before (i.e., behind) their children, with
* siblings drawn in the order they appear in the tree.
* If you set a background drawable for a View, then the View will draw it for you
@@ -3830,7 +3830,10 @@
* responsible for handling this call.
* </p>
*
- * @param eventType The type of the event to send.
+ * @param eventType The type of the event to send, as defined by several types from
+ * {@link android.view.accessibility.AccessibilityEvent}, such as
+ * {@link android.view.accessibility.AccessibilityEvent#TYPE_VIEW_CLICKED} or
+ * {@link android.view.accessibility.AccessibilityEvent#TYPE_VIEW_HOVER_ENTER}.
*
* @see #onInitializeAccessibilityEvent(AccessibilityEvent)
* @see #dispatchPopulateAccessibilityEvent(AccessibilityEvent)
@@ -3943,27 +3946,28 @@
/**
* Called from {@link #dispatchPopulateAccessibilityEvent(AccessibilityEvent)}
* giving a chance to this View to populate the accessibility event with its
- * text content. While the implementation is free to modify other event
- * attributes this should be performed in
+ * text content. While this method is free to modify event
+ * attributes other than text content, doing so should normally be performed in
* {@link #onInitializeAccessibilityEvent(AccessibilityEvent)}.
* <p>
* Example: Adding formatted date string to an accessibility event in addition
- * to the text added by the super implementation.
- * </p><p><pre><code>
- * public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
+ * to the text added by the super implementation:
+ * <pre> public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
* super.onPopulateAccessibilityEvent(event);
* final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY;
* String selectedDateUtterance = DateUtils.formatDateTime(mContext,
* mCurrentDate.getTimeInMillis(), flags);
* event.getText().add(selectedDateUtterance);
- * }
- * </code></pre></p>
+ * }</pre>
* <p>
* If an {@link AccessibilityDelegate} has been specified via calling
* {@link #setAccessibilityDelegate(AccessibilityDelegate)} its
* {@link AccessibilityDelegate#onPopulateAccessibilityEvent(View, AccessibilityEvent)}
* is responsible for handling this call.
* </p>
+ * <p class="note"><strong>Note:</strong> Always call the super implementation before adding
+ * information to the event, in case the default implementation has basic information to add.
+ * </p>
*
* @param event The accessibility event which to populate.
*
@@ -3994,20 +3998,20 @@
* the event.
* <p>
* Example: Setting the password property of an event in addition
- * to properties set by the super implementation.
- * </p><p><pre><code>
- * public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
- * super.onInitializeAccessibilityEvent(event);
- * event.setPassword(true);
- * }
- * </code></pre></p>
+ * to properties set by the super implementation:
+ * <pre> public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ * super.onInitializeAccessibilityEvent(event);
+ * event.setPassword(true);
+ * }</pre>
* <p>
* If an {@link AccessibilityDelegate} has been specified via calling
* {@link #setAccessibilityDelegate(AccessibilityDelegate)} its
* {@link AccessibilityDelegate#onInitializeAccessibilityEvent(View, AccessibilityEvent)}
* is responsible for handling this call.
* </p>
- *
+ * <p class="note"><strong>Note:</strong> Always call the super implementation before adding
+ * information to the event, in case the default implementation has basic information to add.
+ * </p>
* @param event The event to initialize.
*
* @see #sendAccessibilityEvent(int)
@@ -6179,8 +6183,7 @@
* are delivered to the view under the pointer. All other generic motion events are
* delivered to the focused view.
* </p>
- * <code>
- * public boolean onGenericMotionEvent(MotionEvent event) {
+ * <pre> public boolean onGenericMotionEvent(MotionEvent event) {
* if ((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
* if (event.getAction() == MotionEvent.ACTION_MOVE) {
* // process the joystick movement...
@@ -6198,8 +6201,7 @@
* }
* }
* return super.onGenericMotionEvent(event);
- * }
- * </code>
+ * }</pre>
*
* @param event The generic motion event being processed.
* @return True if the event was handled, false otherwise.
@@ -8364,7 +8366,7 @@
!((ViewGroup) mParent).isViewTransitioning(this));
}
/**
- * Mark the the area defined by dirty as needing to be drawn. If the view is
+ * Mark the area defined by dirty as needing to be drawn. If the view is
* visible, {@link #onDraw(android.graphics.Canvas)} will be called at some point
* in the future. This must be called from a UI thread. To call from a non-UI
* thread, call {@link #postInvalidate()}.
@@ -8409,7 +8411,7 @@
}
/**
- * Mark the the area defined by the rect (l,t,r,b) as needing to be drawn.
+ * Mark the area defined by the rect (l,t,r,b) as needing to be drawn.
* The coordinates of the dirty rect are relative to the view.
* If the view is visible, {@link #onDraw(android.graphics.Canvas)}
* will be called at some point in the future. This must be called from
@@ -13095,6 +13097,12 @@
* {@link android.graphics.Canvas} object, then it calls {@link #onDrawShadow(Canvas) onDrawShadow()}
* so that your application can draw the shadow image in the Canvas.
* </p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For a guide to implementing drag and drop features, read the
+ * <a href="{@docRoot}guide/topics/ui/drag-drop.html">Drag and Drop</a> developer guide.</p>
+ * </div>
*/
public static class DragShadowBuilder {
private final WeakReference<View> mView;
@@ -14086,6 +14094,12 @@
* to this view. The callback will be invoked before the hosting view's own
* onDrag(event) method. If the listener wants to fall back to the hosting view's
* onDrag(event) behavior, it should return 'false' from this callback.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For a guide to implementing drag and drop features, read the
+ * <a href="{@docRoot}guide/topics/ui/drag-drop.html">Drag and Drop</a> developer guide.</p>
+ * </div>
*/
public interface OnDragListener {
/**
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 9266ae2..62b20b3 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -60,6 +60,12 @@
* Also see {@link LayoutParams} for layout attributes.
* </p>
*
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating user interface layouts, read the
+ * <a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> developer
+ * guide.</p></div>
+ *
* @attr ref android.R.styleable#ViewGroup_clipChildren
* @attr ref android.R.styleable#ViewGroup_clipToPadding
* @attr ref android.R.styleable#ViewGroup_layoutAnimation
@@ -5158,7 +5164,13 @@
* </ul>
* There are subclasses of LayoutParams for different subclasses of
* ViewGroup. For example, AbsoluteLayout has its own subclass of
- * LayoutParams which adds an X and Y value.
+ * LayoutParams which adds an X and Y value.</p>
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about creating user interface layouts, read the
+ * <a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> developer
+ * guide.</p></div>
*
* @attr ref android.R.styleable#ViewGroup_Layout_layout_height
* @attr ref android.R.styleable#ViewGroup_Layout_layout_width
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java
index 122865e..83df8a5 100644
--- a/core/java/android/view/VolumePanel.java
+++ b/core/java/android/view/VolumePanel.java
@@ -97,6 +97,7 @@
protected AudioService mAudioService;
private boolean mRingIsSilent;
private boolean mShowCombinedVolumes;
+ private boolean mVoiceCapable;
/** Dialog containing all the sliders */
private final Dialog mDialog;
@@ -117,40 +118,62 @@
/** All the slider controls mapped by stream type */
private HashMap<Integer,StreamControl> mStreamControls;
+ private enum StreamResources {
+ BluetoothSCOStream(AudioManager.STREAM_BLUETOOTH_SCO,
+ R.string.volume_icon_description_bluetooth,
+ R.drawable.ic_audio_bt,
+ R.drawable.ic_audio_bt,
+ false),
+ RingerStream(AudioManager.STREAM_RING,
+ R.string.volume_icon_description_ringer,
+ R.drawable.ic_audio_ring_notif,
+ R.drawable.ic_audio_ring_notif_mute,
+ false),
+ VoiceStream(AudioManager.STREAM_VOICE_CALL,
+ R.string.volume_icon_description_incall,
+ R.drawable.ic_audio_phone,
+ R.drawable.ic_audio_phone,
+ false),
+ AlarmStream(AudioManager.STREAM_ALARM,
+ R.string.volume_alarm,
+ R.drawable.ic_audio_alarm,
+ R.drawable.ic_audio_alarm_mute,
+ false),
+ MediaStream(AudioManager.STREAM_MUSIC,
+ R.string.volume_icon_description_media,
+ R.drawable.ic_audio_vol,
+ R.drawable.ic_audio_vol_mute,
+ true),
+ NotificationStream(AudioManager.STREAM_NOTIFICATION,
+ R.string.volume_icon_description_notification,
+ R.drawable.ic_audio_notification,
+ R.drawable.ic_audio_notification_mute,
+ true);
+
+ int streamType;
+ int descRes;
+ int iconRes;
+ int iconMuteRes;
+ // RING, VOICE_CALL & BLUETOOTH_SCO are hidden unless explicitly requested
+ boolean show;
+
+ StreamResources(int streamType, int descRes, int iconRes, int iconMuteRes, boolean show) {
+ this.streamType = streamType;
+ this.descRes = descRes;
+ this.iconRes = iconRes;
+ this.iconMuteRes = iconMuteRes;
+ this.show = show;
+ }
+ };
+
// List of stream types and their order
- // RING, VOICE_CALL & BLUETOOTH_SCO are hidden unless explicitly requested
- private static final int [] STREAM_TYPES = {
- AudioManager.STREAM_BLUETOOTH_SCO,
- AudioManager.STREAM_RING,
- AudioManager.STREAM_VOICE_CALL,
- AudioManager.STREAM_MUSIC,
- AudioManager.STREAM_NOTIFICATION
- };
-
- private static final int [] CONTENT_DESCRIPTIONS = {
- R.string.volume_icon_description_bluetooth,
- R.string.volume_icon_description_ringer,
- R.string.volume_icon_description_incall,
- R.string.volume_icon_description_media,
- R.string.volume_icon_description_notification
- };
-
- // These icons need to correspond to the ones above.
- private static final int [] STREAM_ICONS_NORMAL = {
- R.drawable.ic_audio_bt,
- R.drawable.ic_audio_ring_notif,
- R.drawable.ic_audio_phone,
- R.drawable.ic_audio_vol,
- R.drawable.ic_audio_notification,
- };
-
- // These icons need to correspond to the ones above.
- private static final int [] STREAM_ICONS_MUTED = {
- R.drawable.ic_audio_bt,
- R.drawable.ic_audio_ring_notif_mute,
- R.drawable.ic_audio_phone,
- R.drawable.ic_audio_vol_mute,
- R.drawable.ic_audio_notification_mute,
+ private static final StreamResources[] STREAMS = {
+ StreamResources.BluetoothSCOStream,
+ StreamResources.RingerStream,
+ StreamResources.VoiceStream,
+ StreamResources.MediaStream,
+ StreamResources.NotificationStream,
+ StreamResources.AlarmStream
};
/** Object that contains data for each slider */
@@ -221,7 +244,8 @@
mToneGenerators = new ToneGenerator[AudioSystem.getNumStreamTypes()];
mVibrator = new Vibrator();
- mShowCombinedVolumes = !context.getResources().getBoolean(R.bool.config_voice_capable);
+ mVoiceCapable = context.getResources().getBoolean(R.bool.config_voice_capable);
+ mShowCombinedVolumes = !mVoiceCapable;
// If we don't want to show multiple volumes, hide the settings button and divider
if (!mShowCombinedVolumes) {
mMoreButton.setVisibility(View.GONE);
@@ -260,10 +284,14 @@
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mStreamControls = new HashMap<Integer,StreamControl>(STREAM_TYPES.length);
+ mStreamControls = new HashMap<Integer, StreamControl>(STREAMS.length);
Resources res = mContext.getResources();
- for (int i = 0; i < STREAM_TYPES.length; i++) {
- final int streamType = STREAM_TYPES[i];
+ for (int i = 0; i < STREAMS.length; i++) {
+ StreamResources streamRes = STREAMS[i];
+ int streamType = streamRes.streamType;
+ if (mVoiceCapable && streamRes == StreamResources.NotificationStream) {
+ streamRes = StreamResources.RingerStream;
+ }
StreamControl sc = new StreamControl();
sc.streamType = streamType;
sc.group = (ViewGroup) inflater.inflate(R.layout.volume_adjust_item, null);
@@ -273,9 +301,9 @@
sc.icon.setOnClickListener(this);
}
sc.icon.setTag(sc);
- sc.icon.setContentDescription(res.getString(CONTENT_DESCRIPTIONS[i]));
- sc.iconRes = STREAM_ICONS_NORMAL[i];
- sc.iconMuteRes = STREAM_ICONS_MUTED[i];
+ sc.icon.setContentDescription(res.getString(streamRes.descRes));
+ sc.iconRes = streamRes.iconRes;
+ sc.iconMuteRes = streamRes.iconMuteRes;
sc.icon.setImageResource(sc.iconRes);
sc.seekbarView = (SeekBar) sc.group.findViewById(R.id.seekbar);
int plusOne = (streamType == AudioSystem.STREAM_BLUETOOTH_SCO ||
@@ -307,13 +335,10 @@
private void addOtherVolumes() {
if (!mShowCombinedVolumes) return;
- for (int i = 0; i < STREAM_TYPES.length; i++) {
+ for (int i = 0; i < STREAMS.length; i++) {
// Skip the phone specific ones and the active one
- final int streamType = STREAM_TYPES[i];
- if (streamType == AudioManager.STREAM_RING
- || streamType == AudioManager.STREAM_VOICE_CALL
- || streamType == AudioManager.STREAM_BLUETOOTH_SCO
- || streamType == mActiveStreamType) {
+ final int streamType = STREAMS[i].streamType;
+ if (!STREAMS[i].show || streamType == mActiveStreamType) {
continue;
}
StreamControl sc = mStreamControls.get(streamType);
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index a80c2a7..e37de6f 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -49,10 +49,8 @@
* </p>
* <p>
* <code>
- * <pre>
- * AccessibilityManager accessibilityManager =
- * (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
- * </pre>
+ * <pre>AccessibilityManager accessibilityManager =
+ * (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);</pre>
* </code>
* </p>
*
@@ -91,7 +89,10 @@
new CopyOnWriteArrayList<AccessibilityStateChangeListener>();
/**
- * Listener for the accessibility state.
+ * Listener for the system accessibility state. To listen for changes to the accessibility
+ * state on the device, implement this interface and register it with the system by
+ * calling {@link AccessibilityManager#addAccessibilityStateChangeListener
+ * addAccessibilityStateChangeListener()}.
*/
public interface AccessibilityStateChangeListener {
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java
index 34c9c29..93caabe 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -35,6 +35,13 @@
* Subtype can describe locale (e.g. en_US, fr_FR...) and mode (e.g. voice, keyboard...), and is
* used for IME switch and settings. The input method subtype allows the system to bring up the
* specified subtype of the designated input method directly.
+ *
+ * <p>It should be defined in an XML resource file of the input method
+ * with the <code><subtype></code> element.
+ * For more information, see the guide to
+ * <a href="{@docRoot}resources/articles/creating-input-method.html">
+ * Creating an Input Method</a>.</p>
+ *
*/
public final class InputMethodSubtype implements Parcelable {
private static final String TAG = InputMethodSubtype.class.getSimpleName();
diff --git a/core/java/android/view/textservice/SpellCheckerSession.java b/core/java/android/view/textservice/SpellCheckerSession.java
index b940b80..793f514 100644
--- a/core/java/android/view/textservice/SpellCheckerSession.java
+++ b/core/java/android/view/textservice/SpellCheckerSession.java
@@ -34,6 +34,51 @@
/**
* The SpellCheckerSession interface provides the per client functionality of SpellCheckerService.
+ *
+ *
+ * <a name="Applications"></a>
+ * <h3>Applications</h3>
+ *
+ * <p>In most cases, applications that are using the standard
+ * {@link android.widget.TextView} or its subclasses will have little they need
+ * to do to work well with spell checker services. The main things you need to
+ * be aware of are:</p>
+ *
+ * <ul>
+ * <li> Properly set the {@link android.R.attr#inputType} in your editable
+ * text views, so that the spell checker will have enough context to help the
+ * user in editing text in them.
+ * </ul>
+ *
+ * <p>For the rare people amongst us writing client applications that use the spell checker service
+ * directly, you will need to use {@link #getSuggestions(TextInfo, int)} or
+ * {@link #getSuggestions(TextInfo[], int, boolean)} for obtaining results from the spell checker
+ * service by yourself.</p>
+ *
+ * <h3>Security</h3>
+ *
+ * <p>There are a lot of security issues associated with spell checkers,
+ * since they could monitor all the text being sent to them
+ * through, for instance, {@link android.widget.TextView}.
+ * The Android spell checker framework also allows
+ * arbitrary third party spell checkers, so care must be taken to restrict their
+ * selection and interactions.</p>
+ *
+ * <p>Here are some key points about the security architecture behind the
+ * spell checker framework:</p>
+ *
+ * <ul>
+ * <li>Only the system is allowed to directly access a spell checker framework's
+ * {@link android.service.textservice.SpellCheckerService} interface, via the
+ * {@link android.Manifest.permission#BIND_TEXT_SERVICE} permission. This is
+ * enforced in the system by not binding to a spell checker service that does
+ * not require this permission.
+ *
+ * <li>The user must explicitly enable a new spell checker in settings before
+ * they can be enabled, to confirm with the system that they know about it
+ * and want to make it available for use.
+ * </ul>
+ *
*/
public class SpellCheckerSession {
private static final String TAG = SpellCheckerSession.class.getSimpleName();
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index b06c112..69f88a5 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -35,6 +35,31 @@
*
* The user can change the current text services in Settings. And also applications can specify
* the target text services.
+ *
+ * <h3>Architecture Overview</h3>
+ *
+ * <p>There are three primary parties involved in the text services
+ * framework (TSF) architecture:</p>
+ *
+ * <ul>
+ * <li> The <strong>text services manager</strong> as expressed by this class
+ * is the central point of the system that manages interaction between all
+ * other parts. It is expressed as the client-side API here which exists
+ * in each application context and communicates with a global system service
+ * that manages the interaction across all processes.
+ * <li> A <strong>text service</strong> implements a particular
+ * interaction model allowing the client application to retrieve information of text.
+ * The system binds to the current text service that is in use, causing it to be created and run.
+ * <li> Multiple <strong>client applications</strong> arbitrate with the text service
+ * manager for connections to text services.
+ * </ul>
+ *
+ * <h3>Text services sessions</h3>
+ * <ul>
+ * <li>The <strong>spell checker session</strong> is one of the text services.
+ * {@link android.view.textservice.SpellCheckerSession}</li>
+ * </ul>
+ *
*/
public final class TextServicesManager {
private static final String TAG = TextServicesManager.class.getSimpleName();
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java
index 9fc48a1..97d61ba 100644
--- a/core/java/android/webkit/HTML5Audio.java
+++ b/core/java/android/webkit/HTML5Audio.java
@@ -238,24 +238,27 @@
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
// resume playback
- if (mMediaPlayer == null) resetMediaPlayer();
- else if (!mMediaPlayer.isPlaying()) mMediaPlayer.start();
- mState = STARTED;
+ if (mMediaPlayer == null) {
+ resetMediaPlayer();
+ } else if (mState != ERROR && !mMediaPlayer.isPlaying()) {
+ mMediaPlayer.start();
+ mState = STARTED;
+ }
break;
case AudioManager.AUDIOFOCUS_LOSS:
- // Lost focus for an unbounded amount of time: stop playback and release media player
- if (mMediaPlayer.isPlaying()) mMediaPlayer.stop();
- mMediaPlayer.release();
- mMediaPlayer = null;
+ // Lost focus for an unbounded amount of time: stop playback.
+ if (mState != ERROR && mMediaPlayer.isPlaying()) {
+ mMediaPlayer.stop();
+ mState = STOPPED;
+ }
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// Lost focus for a short time, but we have to stop
- // playback. We don't release the media player because playback
- // is likely to resume
- if (mMediaPlayer.isPlaying()) mMediaPlayer.pause();
+ // playback.
+ if (mState != ERROR && mMediaPlayer.isPlaying()) pause();
break;
}
}
@@ -273,10 +276,7 @@
int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
- if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
- // could not get audio focus.
- teardown();
- } else {
+ if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mMediaPlayer.start();
mState = STARTED;
}
@@ -299,8 +299,13 @@
}
}
+ /**
+ * Called only over JNI when WebKit is happy to
+ * destroy the media player.
+ */
private void teardown() {
mMediaPlayer.release();
+ mMediaPlayer = null;
mState = ERROR;
mNativePointer = 0;
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 1c22a0b..6e81530 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1917,6 +1917,7 @@
mLoadedPicture = ViewStateSerializer.deserializeViewState(stream, this);
mBlockWebkitViewMessages = true;
setNewPicture(mLoadedPicture, true);
+ mLoadedPicture.mViewState = null;
return true;
} catch (IOException e) {
Log.w(LOGTAG, "Failed to loadViewState", e);
@@ -4355,7 +4356,9 @@
selectionDone();
}
mOrientation = newConfig.orientation;
- mWebViewCore.sendMessage(EventHub.CLEAR_CONTENT);
+ if (mWebViewCore != null && !mBlockWebkitViewMessages) {
+ mWebViewCore.sendMessage(EventHub.CLEAR_CONTENT);
+ }
}
/**
@@ -4514,7 +4517,7 @@
boolean UIAnimationsRunning = false;
// Currently for each draw we compute the animation values;
// We may in the future decide to do that independently.
- if (mNativeClass != 0 && nativeEvaluateLayersAnimations()) {
+ if (mNativeClass != 0 && nativeEvaluateLayersAnimations(mNativeClass)) {
UIAnimationsRunning = true;
// If we have unfinished (or unstarted) animations,
// we ask for a repaint. We only need to do this in software
@@ -4530,9 +4533,9 @@
extras = DRAW_EXTRAS_FIND;
} else if (mSelectingText && !USE_JAVA_TEXT_SELECTION) {
extras = DRAW_EXTRAS_SELECTION;
- nativeSetSelectionPointer(mDrawSelectionPointer,
- mZoomManager.getInvScale(),
- mSelectX, mSelectY - getTitleHeight());
+ nativeSetSelectionPointer(mNativeClass,
+ mDrawSelectionPointer,
+ mZoomManager.getInvScale(), mSelectX, mSelectY - getTitleHeight());
} else if (drawCursorRing) {
extras = DRAW_EXTRAS_CURSOR_RING;
}
@@ -4546,8 +4549,8 @@
}
if (canvas.isHardwareAccelerated()) {
- int functor = nativeGetDrawGLFunction(mGLViewportEmpty ? null : mGLRectViewport,
- mGLViewportEmpty ? null : mViewRectViewport, getScale(), extras);
+ int functor = nativeGetDrawGLFunction(mNativeClass,
+ mGLViewportEmpty ? null : mGLRectViewport, mGLViewportEmpty ? null : mViewRectViewport, getScale(), extras);
((HardwareCanvas) canvas).callDrawGLFunction(functor);
if (mHardwareAccelSkia != getSettings().getHardwareAccelSkiaEnabled()) {
@@ -9416,9 +9419,9 @@
// We never want to change button state if we are hardware accelerated,
// but we DO want to invalidate as necessary so that the GL ring
// can be drawn
- nativeRecordButtons(false, false, inval);
+ nativeRecordButtons(mNativeClass, false, false, inval);
} else {
- nativeRecordButtons(focus, pressed, inval);
+ nativeRecordButtons(mNativeClass, focus, pressed, inval);
}
}
@@ -9453,9 +9456,9 @@
private native int nativeDraw(Canvas canvas, int color, int extra,
boolean splitIfNeeded);
private native void nativeDumpDisplayTree(String urlOrNull);
- private native boolean nativeEvaluateLayersAnimations();
- private native int nativeGetDrawGLFunction(Rect rect, Rect viewRect,
- float scale, int extras);
+ private native boolean nativeEvaluateLayersAnimations(int nativeInstance);
+ private native int nativeGetDrawGLFunction(int nativeInstance, Rect rect,
+ Rect viewRect, float scale, int extras);
private native void nativeUpdateDrawGLFunction(Rect rect, Rect viewRect);
private native void nativeExtendSelection(int x, int y);
private native int nativeFindAll(String findLower, String findUpper,
@@ -9518,8 +9521,8 @@
private native boolean nativePointInNavCache(int x, int y, int slop);
// Like many other of our native methods, you must make sure that
// mNativeClass is not null before calling this method.
- private native void nativeRecordButtons(boolean focused,
- boolean pressed, boolean invalidate);
+ private native void nativeRecordButtons(int nativeInstance,
+ boolean focused, boolean pressed, boolean invalidate);
private native void nativeResetSelection();
private native Point nativeSelectableText();
private native void nativeSelectAll();
@@ -9540,8 +9543,8 @@
private native void nativeReplaceBaseContent(int content);
private native void nativeCopyBaseContentToPicture(Picture pict);
private native boolean nativeHasContent();
- private native void nativeSetSelectionPointer(boolean set,
- float scale, int x, int y);
+ private native void nativeSetSelectionPointer(int nativeInstance,
+ boolean set, float scale, int x, int y);
private native boolean nativeStartSelection(int x, int y);
private native void nativeStopGL();
private native Rect nativeSubtractLayers(Rect content);
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 206142a..9151fdd 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -314,7 +314,10 @@
* Returns the zoom scale used for reading text on a double-tap.
*/
public final float getReadingLevelScale() {
- return mDisplayDensity * mWebView.getSettings().getDoubleTapZoom() / 100.0f;
+ WebSettings settings = mWebView.getSettings();
+ final float doubleTapZoomFactor = settings != null
+ ? settings.getDoubleTapZoom() / 100.f : 1.0f;
+ return mDisplayDensity * doubleTapZoomFactor;
}
public final float getInvDefaultScale() {
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index a5d6c9a..b24dd69 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -147,6 +147,11 @@
setColorFilter(tint);
}
+ int alpha = a.getInt(com.android.internal.R.styleable.ImageView_drawableAlpha, 255);
+ if (alpha != 255) {
+ setAlpha(alpha);
+ }
+
mCropToPadding = a.getBoolean(
com.android.internal.R.styleable.ImageView_cropToPadding, false);
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 041e8a4..a21a087 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -7683,8 +7683,9 @@
}
}
- if (what instanceof UpdateAppearance ||
- what instanceof ParagraphStyle) {
+ if (what instanceof UpdateAppearance || what instanceof ParagraphStyle
+ || (what instanceof SuggestionSpan && (((SuggestionSpan)what).getFlags()
+ & SuggestionSpan.FLAG_AUTO_CORRECTION) != 0)) {
if (ims == null || ims.mBatchEditNesting == 0) {
invalidate();
mHighlightPathBogus = true;
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index bb23173..88d7e05 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -48,6 +48,13 @@
* <p>
* The easiest way to use this class is to call one of the static methods that constructs
* everything you need and returns a new Toast object.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For information about creating Toast notifications, read the
+ * <a href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Toast Notifications</a> developer
+ * guide.</p>
+ * </div>
*/
public class Toast {
static final String TAG = "Toast";
diff --git a/core/java/com/android/internal/policy/IFaceLockCallback.aidl b/core/java/com/android/internal/policy/IFaceLockCallback.aidl
index add3f1c..25adbb6 100644
--- a/core/java/com/android/internal/policy/IFaceLockCallback.aidl
+++ b/core/java/com/android/internal/policy/IFaceLockCallback.aidl
@@ -21,5 +21,6 @@
oneway interface IFaceLockCallback {
void unlock();
void cancel();
+ void reportFailedAttempt();
void pokeWakelock();
}
diff --git a/core/java/com/android/internal/policy/IFaceLockInterface.aidl b/core/java/com/android/internal/policy/IFaceLockInterface.aidl
index 921b8c7..3958cda 100644
--- a/core/java/com/android/internal/policy/IFaceLockInterface.aidl
+++ b/core/java/com/android/internal/policy/IFaceLockInterface.aidl
@@ -23,4 +23,5 @@
void startUi(IBinder containingWindowToken, int x, int y, int width, int height);
void stopUi();
void registerCallback(IFaceLockCallback cb);
+ void unregisterCallback(IFaceLockCallback cb);
}
diff --git a/core/java/com/android/internal/widget/LockScreenWidgetCallback.java b/core/java/com/android/internal/widget/LockScreenWidgetCallback.java
index d6403e9f..d7ad6c0 100644
--- a/core/java/com/android/internal/widget/LockScreenWidgetCallback.java
+++ b/core/java/com/android/internal/widget/LockScreenWidgetCallback.java
@@ -29,6 +29,9 @@
// Sends a message to lock screen requesting the view to be hidden.
public void requestHide(View self);
+ // Whether or not this view is currently visible on LockScreen
+ public boolean isVisible(View self);
+
// Sends a message to lock screen that user has interacted with widget. This should be used
// exclusively in response to user activity, i.e. user hits a button in the view.
public void userActivity(View self);
diff --git a/core/java/com/android/internal/widget/TransportControlView.java b/core/java/com/android/internal/widget/TransportControlView.java
index 73d9f10..63a3aa5 100644
--- a/core/java/com/android/internal/widget/TransportControlView.java
+++ b/core/java/com/android/internal/widget/TransportControlView.java
@@ -34,6 +34,8 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.os.RemoteException;
import android.os.SystemClock;
import android.text.Spannable;
@@ -61,7 +63,7 @@
private static final int MSG_SET_GENERATION_ID = 104;
private static final int MAXDIM = 512;
private static final int DISPLAY_TIMEOUT_MS = 5000; // 5s
- protected static final boolean DEBUG = true;
+ protected static final boolean DEBUG = false;
protected static final String TAG = "TransportControlView";
private ImageView mAlbumArt;
@@ -74,7 +76,7 @@
private boolean mAttached;
private PendingIntent mClientIntent;
private int mTransportControlFlags;
- private int mPlayState;
+ private int mCurrentPlayState;
private AudioManager mAudioManager;
private LockScreenWidgetCallback mWidgetCallbacks;
private IRemoteControlDisplayWeak mIRCD;
@@ -84,6 +86,11 @@
*/
private Bundle mPopulateMetadataWhenAttached = null;
+ /**
+ * Whether to clear the interface next time it is shown (i.e. the generation id changed)
+ */
+ private boolean mClearOnNextShow;
+
// This handler is required to ensure messages from IRCD are handled in sequence and on
// the UI thread.
private Handler mHandler = new Handler() {
@@ -113,15 +120,10 @@
break;
case MSG_SET_GENERATION_ID:
- if (mWidgetCallbacks != null) {
- boolean clearing = msg.arg2 != 0;
- if (DEBUG) Log.v(TAG, "New genId = " + msg.arg1 + ", clearing = " + clearing);
- if (!clearing) {
- mWidgetCallbacks.requestShow(TransportControlView.this);
- } else {
- mWidgetCallbacks.requestHide(TransportControlView.this);
- }
+ if (msg.arg2 != 0) {
+ mClearOnNextShow = true; // TODO: handle this
}
+ if (DEBUG) Log.v(TAG, "New genId = " + msg.arg1 + ", clearing = " + msg.arg2);
mClientGeneration = msg.arg1;
mClientIntent = (PendingIntent) msg.obj;
break;
@@ -195,6 +197,7 @@
super(context, attrs);
Log.v(TAG, "Create TCV " + this);
mAudioManager = new AudioManager(mContext);
+ mCurrentPlayState = RemoteControlClient.PLAYSTATE_NONE; // until we get a callback
mIRCD = new IRemoteControlDisplayWeak(mHandler);
}
@@ -319,7 +322,7 @@
| RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE
| RemoteControlClient.FLAG_KEY_MEDIA_STOP);
- updatePlayPauseState(mPlayState);
+ updatePlayPauseState(mCurrentPlayState);
}
private static void setVisibilityBasedOnFlag(View view, int flags, int flag) {
@@ -332,32 +335,99 @@
private void updatePlayPauseState(int state) {
if (DEBUG) Log.v(TAG,
- "updatePlayPauseState(), old=" + mPlayState + ", state=" + state);
- if (state == mPlayState) {
+ "updatePlayPauseState(), old=" + mCurrentPlayState + ", state=" + state);
+ if (state == mCurrentPlayState) {
return;
}
final int imageResId;
final int imageDescId;
+ boolean showIfHidden = false;
switch (state) {
+ case RemoteControlClient.PLAYSTATE_ERROR:
+ imageResId = com.android.internal.R.drawable.stat_sys_warning;
+ // TODO use more specific image description string for warning, but here the "play"
+ // message is still valid because this button triggers a play command.
+ imageDescId = com.android.internal.R.string.lockscreen_transport_play_description;
+ break;
+
case RemoteControlClient.PLAYSTATE_PLAYING:
imageResId = com.android.internal.R.drawable.ic_media_pause;
imageDescId = com.android.internal.R.string.lockscreen_transport_pause_description;
+ showIfHidden = true;
break;
case RemoteControlClient.PLAYSTATE_BUFFERING:
imageResId = com.android.internal.R.drawable.ic_media_stop;
imageDescId = com.android.internal.R.string.lockscreen_transport_stop_description;
+ showIfHidden = true;
break;
case RemoteControlClient.PLAYSTATE_PAUSED:
default:
imageResId = com.android.internal.R.drawable.ic_media_play;
imageDescId = com.android.internal.R.string.lockscreen_transport_play_description;
+ showIfHidden = false;
break;
}
mBtnPlay.setImageResource(imageResId);
mBtnPlay.setContentDescription(getResources().getString(imageDescId));
- mPlayState = state;
+ if (showIfHidden && mWidgetCallbacks != null && !mWidgetCallbacks.isVisible(this)) {
+ mWidgetCallbacks.requestShow(this);
+ }
+ mCurrentPlayState = state;
+ }
+
+ static class SavedState extends BaseSavedState {
+ boolean wasShowing;
+
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ private SavedState(Parcel in) {
+ super(in);
+ this.wasShowing = in.readInt() != 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(this.wasShowing ? 1 : 0);
+ }
+
+ public static final Parcelable.Creator<SavedState> CREATOR
+ = new Parcelable.Creator<SavedState>() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ if (DEBUG) Log.v(TAG, "onSaveInstanceState()");
+ Parcelable superState = super.onSaveInstanceState();
+ SavedState ss = new SavedState(superState);
+ ss.wasShowing = mWidgetCallbacks.isVisible(this);
+ return ss;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ if (DEBUG) Log.v(TAG, "onRestoreInstanceState()");
+ if (!(state instanceof SavedState)) {
+ super.onRestoreInstanceState(state);
+ return;
+ }
+ SavedState ss = (SavedState) state;
+ super.onRestoreInstanceState(ss.getSuperState());
+ if (ss.wasShowing) {
+ mWidgetCallbacks.requestShow(this);
+ }
}
public void onClick(View v) {
diff --git a/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.png
index 52a9800..bf2cf8d 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.png
index 49a2aeb..00427a1 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.png
index e6ebb43..0ee10ac 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.png
index 7069fc5..e07be7c 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.png
index ec2a7e3..fcea3b4 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.png
index 486334f..4006bd4 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_holo.png b/core/res/res/drawable-hdpi/btn_check_on_holo.png
index 1f11a78..7c1bab0 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_holo.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_holo_dark.png
index a17100c..c69bcf8 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_holo_light.png
index 130ab4f..a8cedd1 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
index 96abcda..bc57f7a 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
index 0a22f02..34209c0 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_default_holo.png b/core/res/res/drawable-hdpi/btn_code_lock_default_holo.png
index 28b2578..e77921c 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_default_holo.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
index 8906c4d..61f9e6b 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
index 2bcb98e..62ac7f9 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
index 2e36821..e10d5d1 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
index 6a50bd8..685f8b5 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
index 8595dd0..d7ef1a6 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
index 1dda090..fcf4623 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
index 942722e..9a6fc4d 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
index e46f035..3875ac3 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
index 5cfe146..a929e09 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
index 20d0eb3..013ca85 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
index 3b478d6..57cfa4d 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
index 52a9f44..1a37993 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
index 9810029..5694cf7 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
index 445af7b..6406c06 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
index d3884f6..c50efaf 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
index eea174a..1a899c9e 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
index 58b2b09..37547d2 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
index a39a620..7b0e089 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
index 1ffe7fe..692d705 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_bullet_key_permission.png b/core/res/res/drawable-hdpi/ic_bullet_key_permission.png
index a7eaec5..4cf50ad 100644
--- a/core/res/res/drawable-hdpi/ic_bullet_key_permission.png
+++ b/core/res/res/drawable-hdpi/ic_bullet_key_permission.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png
index 683a575..d201bfb 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_answer_active.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png
index bdece9f..efb29f1 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_answer_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png
index 6a8ab24..176d448 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png
index f2fceaa..f37b16a 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png
index e005ffc..d88087b 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_decline_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png
index f41ad95..1780ec0 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_handle_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.png b/core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.png
index 98ab6e9..58a5f16 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png
index 651b837..f9a8c7c 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png
index babab1d..b47cd08 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png
index d000866..6e16e40 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png
index 82133d0..0dd81c0 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png b/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png
index 26df6b2..5f1b881 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png
index 9e36918..374a62a 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.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 c74703e..f5ba824 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_previous.png b/core/res/res/drawable-hdpi/ic_media_previous.png
index 15dc390..40ecb00 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_text_dot.png b/core/res/res/drawable-hdpi/ic_text_dot.png
index a7eaec5..fa69c69 100644
--- a/core/res/res/drawable-hdpi/ic_text_dot.png
+++ b/core/res/res/drawable-hdpi/ic_text_dot.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
index 28b2578..449d427 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
index 545cc09..14f4ff8 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
index 9176b33..5cf9086 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png
index f8092ea..05b1419 100644
--- a/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png
+++ b/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.png
index fb34a6d..9584649 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.png
index 87b2ad67..5c37873 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.png
index 1655fea..b5faf6f 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.png
index 61cfe7a..041412b 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.png
index 43e2e89..9ff4cce 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.png
index 7d80ff6..a556e00 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.png
index cc21a1c..9353511 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.png
index cc21a1c..9353511 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.png
index 3c9c192..2ca591f 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.png
index 6511cd2..1275a2f 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.png
index 7b135ea..9c23a18 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.png
index 7b135ea..9c23a18 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.png
index b6a85a2..159913c 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.png
index 50d979e..cfee4b7 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.png
index 608dd52..e5f0430 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.png
index 96ff781..7e4ec4a 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.png
index a48bf2e..df374c4 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.png
index b69589b..d6b9c67 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.png
index 5adfb04..69474e3 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.png
index 5adfb04..69474e3 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.png
index ff34463..a2fc32a 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.png
index 0bcfd67..c4b58b7 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.png
index 00092cc..358a13f 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.png
index 00092cc..358a13f 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/presence_away.png b/core/res/res/drawable-hdpi/presence_away.png
index fe5b880..455fec1 100644
--- a/core/res/res/drawable-hdpi/presence_away.png
+++ b/core/res/res/drawable-hdpi/presence_away.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.png
index e3131b1..67890f0 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_half_holo_light.png b/core/res/res/drawable-hdpi/rate_star_big_half_holo_light.png
index cdc94a1..e9ffa5b 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_half_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.png
index d83522a..cc08f88 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_off_holo_light.png b/core/res/res/drawable-hdpi/rate_star_big_off_holo_light.png
index 2af7814..ebdb47b 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_off_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.png
index e4b766d..d594c46 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_on_holo_light.png b/core/res/res/drawable-hdpi/rate_star_big_on_holo_light.png
index edd264a..b4fd29b 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_half_holo_light.png b/core/res/res/drawable-hdpi/rate_star_med_half_holo_light.png
index 3ff3bbd..d1756c7 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_half_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_off_holo_light.png b/core/res/res/drawable-hdpi/rate_star_med_off_holo_light.png
index ce9fc25..4605a42 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_off_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_on_holo_light.png b/core/res/res/drawable-hdpi/rate_star_med_on_holo_light.png
index a6fdcff..41f33a8 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.png
index 4fb14f9..6cd59ea 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_half_holo_light.png b/core/res/res/drawable-hdpi/rate_star_small_half_holo_light.png
index 667b8e2..e03711e 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_half_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.png
index e19cf7a..a5ee171 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_off_holo_light.png b/core/res/res/drawable-hdpi/rate_star_small_off_holo_light.png
index 8886006..c7fb673 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_off_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.png
index bc5d3db..134a38b 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_on_holo_light.png b/core/res/res/drawable-hdpi/rate_star_small_on_holo_light.png
index 1041008..0e7c8a9 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
index 0166938..383543a 100644
--- a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
index ffad720..49841ea 100644
--- a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
index f2523f4..69f0070 100644
--- a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
index f8e3fef..c8358e9 100644
--- a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
index 04c5fb5..f62f74b 100644
--- a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
index a28a6d1..c29ab07 100644
--- a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
index 3d5aa46..287afc6 100644
--- a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_notify_call_mute.png b/core/res/res/drawable-hdpi/stat_notify_call_mute.png
index 1446fa7..7f87ee7 100644
--- a/core/res/res/drawable-hdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-hdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_download_anim1.png b/core/res/res/drawable-hdpi/stat_sys_download_anim1.png
index 3e27c52..0b1aa34 100644
--- a/core/res/res/drawable-hdpi/stat_sys_download_anim1.png
+++ b/core/res/res/drawable-hdpi/stat_sys_download_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_speakerphone.png b/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
index c63ca94..765be61 100644
--- a/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-hdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png b/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png
index 0b8dbf5..7d4df50 100644
--- a/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png
+++ b/core/res/res/drawable-hdpi/stat_sys_tether_wifi.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png
index 2754428..39d2c95f 100644
--- a/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png
+++ b/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png
index 3590062..937720f 100644
--- a/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png
+++ b/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/sym_def_app_icon.png b/core/res/res/drawable-hdpi/sym_def_app_icon.png
index c8a38ed..96a442e 100644
--- a/core/res/res/drawable-hdpi/sym_def_app_icon.png
+++ b/core/res/res/drawable-hdpi/sym_def_app_icon.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_cursor_holo_dark.9.png b/core/res/res/drawable-hdpi/text_cursor_holo_dark.9.png
deleted file mode 100644
index ae77fa0..0000000
--- a/core/res/res/drawable-hdpi/text_cursor_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_cursor_holo_light.9.png b/core/res/res/drawable-hdpi/text_cursor_holo_light.9.png
deleted file mode 100644
index c6bdfcc..0000000
--- a/core/res/res/drawable-hdpi/text_cursor_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_left.png b/core/res/res/drawable-hdpi/text_select_handle_left.png
index 5adc2e1..d2ed06d 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_left.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_left.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_middle.png b/core/res/res/drawable-hdpi/text_select_handle_middle.png
index b7a472a..be2dc68 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_middle.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_middle.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_right.png b/core/res/res/drawable-hdpi/text_select_handle_right.png
index cf94179..e419249 100644
--- a/core/res/res/drawable-hdpi/text_select_handle_right.png
+++ b/core/res/res/drawable-hdpi/text_select_handle_right.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/stat_sys_adb.png b/core/res/res/drawable-ldpi/stat_sys_adb.png
index aec8d90..86b945b 100644
--- a/core/res/res/drawable-ldpi/stat_sys_adb.png
+++ b/core/res/res/drawable-ldpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_share_pack_holo_light.9.png b/core/res/res/drawable-mdpi/ab_share_pack_holo_light.9.png
index 1983c68..8f10bd5 100644
--- a/core/res/res/drawable-mdpi/ab_share_pack_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/ab_share_pack_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
index b70db89..06f0518 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_touched.png b/core/res/res/drawable-mdpi/btn_code_lock_touched.png
index 98a3b6d..2dfe0f6 100644
--- a/core/res/res/drawable-mdpi/btn_code_lock_touched.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
index 816e146..26841bd 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
index 4f4eff2..4fe7483 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
index afaa8ca..ec3b84d 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
index b7d9079..537f4f0 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
index 994eb0c..0409d4b 100644
--- a/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_bullet_key_permission.png b/core/res/res/drawable-mdpi/ic_bullet_key_permission.png
index 47913f6..7fee560 100644
--- a/core/res/res/drawable-mdpi/ic_bullet_key_permission.png
+++ b/core/res/res/drawable-mdpi/ic_bullet_key_permission.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
index a6feed0..acef506 100644
--- 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_previous.png b/core/res/res/drawable-mdpi/ic_media_previous.png
index 0163d09..940d6a4 100644
--- 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_text_dot.png b/core/res/res/drawable-mdpi/ic_text_dot.png
index 47913f6..2225bd5 100644
--- a/core/res/res/drawable-mdpi/ic_text_dot.png
+++ b/core/res/res/drawable-mdpi/ic_text_dot.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
index 8434741..52c9e3a 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png
index dbe3953..8ad0b32 100644
--- a/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png
+++ b/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.png
index 1f29da2..7d9637a 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.png
index a27f5aa..f7409e4 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.png
index 34268af..9c2b833 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.png
index 304f800..dcf2fb7 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.png
index 583542b..b63c510d 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.png
index d15bd16..55312a1 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.png
index 9a5d79f..48e300c 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.png
index 9a5d79f..48e300c 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.png
index 8051d64..1558d3d 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.png
index bcd34e9..6b6e7e1 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.png
index cf4bdb6..081ea4e 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.png
index cf4bdb6..081ea4e 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.png
index 0535ff7..739a8d7 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.png
index 360284d..bd440f2 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.png
index 1e0e92c..cf856a1 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.png
index 14bcce9..6665953 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.png
index 6ed2cf0..d63d797 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.png
index 015a8cf..22b6dbd 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.png
index 8bb44f2..4bcce98 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.png
index 8bb44f2..4bcce98 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.png
index 6ab5f23..12ba823 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.png
index 65ec302..d841f5a 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.png
index 34d3228..0318c5f 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.png
index 34d3228..0318c5f 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_call_mute.png b/core/res/res/drawable-mdpi/stat_notify_call_mute.png
index 8797a09..58e0cbc 100644
--- a/core/res/res/drawable-mdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-mdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_speakerphone.png b/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
index ec7ef0c..d82704e 100644
--- a/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-mdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/sym_def_app_icon.png b/core/res/res/drawable-mdpi/sym_def_app_icon.png
index b3e10f6..359047d 100644
--- a/core/res/res/drawable-mdpi/sym_def_app_icon.png
+++ b/core/res/res/drawable-mdpi/sym_def_app_icon.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_cursor_holo_dark.9.png b/core/res/res/drawable-mdpi/text_cursor_holo_dark.9.png
deleted file mode 100644
index ae77fa0..0000000
--- a/core/res/res/drawable-mdpi/text_cursor_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_cursor_holo_light.9.png b/core/res/res/drawable-mdpi/text_cursor_holo_light.9.png
deleted file mode 100644
index c6bdfcc..0000000
--- a/core/res/res/drawable-mdpi/text_cursor_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_red_up.png b/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_red_up.png
new file mode 100644
index 0000000..cc46f19
--- /dev/null
+++ b/core/res/res/drawable-nodpi/indicator_code_lock_drag_direction_red_up.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/text_cursor_holo_dark.9.png b/core/res/res/drawable-nodpi/text_cursor_holo_dark.9.png
new file mode 100644
index 0000000..450c486
--- /dev/null
+++ b/core/res/res/drawable-nodpi/text_cursor_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/text_cursor_holo_light.9.png b/core/res/res/drawable-nodpi/text_cursor_holo_light.9.png
new file mode 100644
index 0000000..22633eb0
--- /dev/null
+++ b/core/res/res/drawable-nodpi/text_cursor_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-hdpi/stat_notify_call_mute.png b/core/res/res/drawable-sw600dp-hdpi/stat_notify_call_mute.png
new file mode 100644
index 0000000..b753764
--- /dev/null
+++ b/core/res/res/drawable-sw600dp-hdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-hdpi/stat_sys_speakerphone.png b/core/res/res/drawable-sw600dp-hdpi/stat_sys_speakerphone.png
new file mode 100644
index 0000000..b47a9f6
--- /dev/null
+++ b/core/res/res/drawable-sw600dp-hdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-mdpi/stat_notify_call_mute.png b/core/res/res/drawable-sw600dp-mdpi/stat_notify_call_mute.png
new file mode 100644
index 0000000..951197c
--- /dev/null
+++ b/core/res/res/drawable-sw600dp-mdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-mdpi/stat_sys_speakerphone.png b/core/res/res/drawable-sw600dp-mdpi/stat_sys_speakerphone.png
new file mode 100644
index 0000000..5893db9
--- /dev/null
+++ b/core/res/res/drawable-sw600dp-mdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-mdpi/unlock_halo.png b/core/res/res/drawable-sw600dp-mdpi/unlock_halo.png
index c9ed4c7..96891ce 100644
--- a/core/res/res/drawable-sw600dp-mdpi/unlock_halo.png
+++ b/core/res/res/drawable-sw600dp-mdpi/unlock_halo.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-xhdpi/stat_notify_call_mute.png b/core/res/res/drawable-sw600dp-xhdpi/stat_notify_call_mute.png
new file mode 100644
index 0000000..1d72243
--- /dev/null
+++ b/core/res/res/drawable-sw600dp-xhdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-xhdpi/stat_sys_speakerphone.png b/core/res/res/drawable-sw600dp-xhdpi/stat_sys_speakerphone.png
new file mode 100644
index 0000000..76dee9e
--- /dev/null
+++ b/core/res/res/drawable-sw600dp-xhdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_bullet_key_permission.png b/core/res/res/drawable-xhdpi/ic_bullet_key_permission.png
index b2db65c..6a0bdfc 100644
--- a/core/res/res/drawable-xhdpi/ic_bullet_key_permission.png
+++ b/core/res/res/drawable-xhdpi/ic_bullet_key_permission.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_next.png b/core/res/res/drawable-xhdpi/ic_media_next.png
index 9835c63..726fee7 100644
--- a/core/res/res/drawable-xhdpi/ic_media_next.png
+++ b/core/res/res/drawable-xhdpi/ic_media_next.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_previous.png b/core/res/res/drawable-xhdpi/ic_media_previous.png
index 5df5987..59f994d 100644
--- a/core/res/res/drawable-xhdpi/ic_media_previous.png
+++ b/core/res/res/drawable-xhdpi/ic_media_previous.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_text_dot.png b/core/res/res/drawable-xhdpi/ic_text_dot.png
index d316f9a..869dd95 100644
--- a/core/res/res/drawable-xhdpi/ic_text_dot.png
+++ b/core/res/res/drawable-xhdpi/ic_text_dot.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png
index 980bbd7..f039081 100644
--- a/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png
+++ b/core/res/res/drawable-xhdpi/list_selector_background_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.png
index 62b267e..ec92ea5 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.png
index 5f38c35..03c020d 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_dark.png
index 1c2f33e..111f57e 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.png
index 4e688bc..d0ef05b 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.png
index dc422f2..ff21941 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.png
index afc02db..3e9bdda 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.png
index 3604013..0462fca 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.png
index a16cd38..a488e8e 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.png
index b975b63..f61b076 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.png
index b975b63..f61b076 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png
index b1d3e7b..8637414 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.png
index 39cdb93..211944e 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.png
index 2a14ac5..12bc11a 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png
index e61c469..bb56365 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.png
index 4827377..635184c 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.png
index 4827377..635184c 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_selected.9.png b/core/res/res/drawable-xhdpi/numberpicker_down_selected.9.png
index ed0c016..4a076f6 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_selected.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.png b/core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.png
index 279087c..d176022 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_input_normal.9.png b/core/res/res/drawable-xhdpi/numberpicker_input_normal.9.png
index 1b3467a..dcacfcf 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_input_normal.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_input_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.png b/core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.png
index 930415e..f8cb9e5 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_input_selected.9.png b/core/res/res/drawable-xhdpi/numberpicker_input_selected.9.png
index 5240d08..38c429f 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_input_selected.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_input_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.png
index 4b79112..a1d8ae1 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.png
index 6c2f397..0256f32 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_dark.png
index 97ea0b5..470e569 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.png
index e59e2a7..16df74d 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.png
index 3b8fa7f..edd4c04 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.png
index 77a1dd4..d8f459a 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.png
index 24c2d84..08bf241 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.png
index b2566dc3..b2c40f1 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.png
index 7075af7..f4f7331 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.png
index 7075af7..f4f7331 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png
index 699a9f5..f6746a6 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.png
index 11b60a9..83650b1 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.png
index 074fae5..78085d3 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png
index 5504fee..1071c73 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.png
index 2310f83..b8f6849 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.png
index 2310f83..b8f6849 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.png b/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.png
index 585cf30..f446d48 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
index 9afd52f..55e2329 100644
--- a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_call_mute.png b/core/res/res/drawable-xhdpi/stat_notify_call_mute.png
index 4135fea..adbd7b1 100644
--- a/core/res/res/drawable-xhdpi/stat_notify_call_mute.png
+++ b/core/res/res/drawable-xhdpi/stat_notify_call_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png b/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png
index 6938ab4..51e648c 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_speakerphone.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/sym_def_app_icon.png b/core/res/res/drawable-xhdpi/sym_def_app_icon.png
index f381f86..71c6d76 100644
--- a/core/res/res/drawable-xhdpi/sym_def_app_icon.png
+++ b/core/res/res/drawable-xhdpi/sym_def_app_icon.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_cursor_holo_dark.9.png b/core/res/res/drawable-xhdpi/text_cursor_holo_dark.9.png
deleted file mode 100644
index e7bb0d4..0000000
--- a/core/res/res/drawable-xhdpi/text_cursor_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_cursor_holo_light.9.png b/core/res/res/drawable-xhdpi/text_cursor_holo_light.9.png
deleted file mode 100644
index f429785..0000000
--- a/core/res/res/drawable-xhdpi/text_cursor_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/layout/grant_credentials_permission.xml b/core/res/res/layout/grant_credentials_permission.xml
index 3313590..dd85b33 100644
--- a/core/res/res/layout/grant_credentials_permission.xml
+++ b/core/res/res/layout/grant_credentials_permission.xml
@@ -77,7 +77,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/perms_dangerous_perm_color"
android:textStyle="bold"
- android:paddingLeft="6dip"
+ android:paddingLeft="16dip"
android:layout_toRightOf="@id/permission_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
@@ -88,7 +88,7 @@
android:textColor="@color/perms_dangerous_perm_color"
android:layout_marginTop="-4dip"
android:paddingBottom="8dip"
- android:paddingLeft="6dip"
+ android:paddingLeft="16dip"
android:layout_below="@id/account_type"
android:layout_toRightOf="@id/permission_icon"
android:layout_width="wrap_content"
@@ -101,7 +101,7 @@
android:textStyle="bold"
android:layout_marginTop="-4dip"
android:paddingBottom="8dip"
- android:paddingLeft="6dip"
+ android:paddingLeft="16dip"
android:layout_below="@id/account_name"
android:layout_toRightOf="@id/permission_icon"
android:layout_width="wrap_content"
diff --git a/core/res/res/layout/keyguard_transport_control.xml b/core/res/res/layout/keyguard_transport_control.xml
index 6e24ce2..c951c45 100644
--- a/core/res/res/layout/keyguard_transport_control.xml
+++ b/core/res/res/layout/keyguard_transport_control.xml
@@ -63,7 +63,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:src="@drawable/ic_media_rew"
+ android:src="@drawable/ic_media_previous"
android:clickable="true"
android:background="?android:attr/selectableItemBackground"
android:padding="10dip"
@@ -94,7 +94,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clickable="true"
- android:src="@drawable/ic_media_ff"
+ android:src="@drawable/ic_media_next"
android:background="?android:attr/selectableItemBackground"
android:padding="10dip"
android:contentDescription="@string/lockscreen_transport_next_description"/>
diff --git a/core/res/res/layout/status_bar_latest_event_content_large_icon.xml b/core/res/res/layout/status_bar_latest_event_content_large_icon.xml
index f3f1957..6e8c921 100644
--- a/core/res/res/layout/status_bar_latest_event_content_large_icon.xml
+++ b/core/res/res/layout/status_bar_latest_event_content_large_icon.xml
@@ -25,14 +25,12 @@
android:fadingEdge="horizontal"
android:ellipsize="marquee"
android:visibility="gone"
- android:alpha="0.7"
/>
<LinearLayout
android:id="@+id/line3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:alpha="0.7"
>
<TextView android:id="@+id/text"
android:textAppearance="@style/TextAppearance.StatusBar.EventContent"
@@ -62,6 +60,7 @@
android:scaleType="center"
android:paddingLeft="8dp"
android:visibility="gone"
+ android:drawableAlpha="180"
/>
</LinearLayout>
<ProgressBar
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index d927379..3ad01a5 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sit asseblief \'n SIM-kaart in."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Die SIM-kaart is weg of onleesbaar. Steek asseblief \'n SIM-kaart in."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Jou SIM-kaart is permanent gedeaktiveer."\n" Kontak asseblief jou draadlosediens-verskaffer om \'n ander SIM-kaart te kry."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Vorigesnit-knoppie"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Volgendesnit-knoppie"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Laatwag-knoppie"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Speel-knoppie"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Stop-knoppie"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Net noodoproepe"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netwerk gesluit"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kaart is PUK-geslote."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Ontsluit"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Klank aan"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Klank af"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Patroon begin"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Patroon uitgevee"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Sel bygevoeg"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Patroon klaar"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Sny"</string>
<string name="copy" msgid="2681946229533511987">"Kopieer"</string>
<string name="paste" msgid="5629880836805036433">"Plak"</string>
- <string name="replace" msgid="5781686059063148930">"Vervang???"</string>
+ <string name="replace" msgid="5781686059063148930">"Vervang..."</string>
<string name="delete" msgid="6098684844021697789">"Vee uit"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopieer URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Kies teks..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Klank aan"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Sleutel. Kopstuk nodig om sleutels te hoor, tydens tik van \'n wagwoord."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Koppel \'n kopstuk om te hoor hoe wagwoordsleutels hardop gesê word."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigeer tuis"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigeer op"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Meer opsies"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 8100bba..f23e9e7 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"እባክዎ SIM ካርድ ያስገቡ"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM ካርዱ ጠፍቷል ወይም መነበብ አይችልም።እባክዎ SIM ካርድ ያስገቡ።"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM ካርድዎ በቋሚነት ቦዝኗል።"\n" እባክዎ ሌላ SIM ካርድ ለማግኘት የገመድ አልባ አገልግሎት አቅራቢዎን ያግኙ።"</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"የቀድሞ ዝርዝር አዝራር"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"ቀጣይ ዝርዝር አዝራር"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"ለአፍታ አቁም አዝራር"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"ማጫወቻ አዝራር።"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"አቁም አዝራር"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"የአደጋ ጊዜ ጥሪ ብቻ"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"አውታረመረብ ተሸንጉሯል"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM ካርድበPUK ተዘግቷል።"</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"ክፈት"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"ድምፅ አብራ"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"ድምፅ አጥፋ"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"ንድፍ ተጀምሯል"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"ንድፍ ጸድቷል"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"ሕዋስ ታክሏል"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"ንድፍ ተጠናቋል"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"ቁረጥ"</string>
<string name="copy" msgid="2681946229533511987">"ግላባጭ"</string>
<string name="paste" msgid="5629880836805036433">"ለጥፍ"</string>
- <string name="replace" msgid="5781686059063148930">"ተካ???"</string>
+ <string name="replace" msgid="5781686059063148930">"ተካ..."</string>
<string name="delete" msgid="6098684844021697789">"ሰርዝ"</string>
<string name="copyUrl" msgid="2538211579596067402">"የURL ቅጂ"</string>
<string name="selectTextMode" msgid="6738556348861347240">"ፅሁፍ ምረጥ"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"ካሜራ"</string>
<string name="description_target_silent" msgid="893551287746522182">"ፀጥታ"</string>
<string name="description_target_soundon" msgid="30052466675500172">"ድምፅ አብራ"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"አዝራር፡፡ ይለፍቃል እየተየብክ አዝራሮችን ለመስማት ማዳመጫ መሳሪያ ያስፈልጋል፡፡"</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"የይለፍቃል ቁልፎች ጮክ በለው ሲነገሩ ለመስማት የጆሮ ማዳመጫ ሰካ::"</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"ነጥብ."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"መነሻ ዳስስ"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"አስስ"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"ተጨማሪ አማራጮች"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 931e22f..1d65c4f 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"الرجاء إدخال بطاقة SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"بطاقة SIM مفقودة أو غير قابلة للقراءة. الرجاء إدراج بطاقة SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"بطاقة SIM معطلة دومًا."\n" يرجى الاتصال بمقدم الخدمة اللاسلكية للحصول على بطاقة SIM أخرى."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"زر المقطع الصوتي السابق"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"زر المقطع الصوتي التالي"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"زر الإيقاف المؤقت"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"زر التشغيل"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"زر الإيقاف"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"مكالمات الطوارئ فقط"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"الشبكة مؤمّنة"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"بطاقة SIM مؤمّنة بكود PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"إلغاء تأمين"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"تشغيل الصوت"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"الصوت متوقف"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"بدأ النمط"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"تم محو النمط"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"تمت إضافة الخلية"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"اكتمل النمط"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ب ت ث"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"قص"</string>
<string name="copy" msgid="2681946229533511987">"نسخ"</string>
<string name="paste" msgid="5629880836805036433">"لصق"</string>
- <string name="replace" msgid="5781686059063148930">"استبدال???"</string>
+ <string name="replace" msgid="5781686059063148930">"استبدال..."</string>
<string name="delete" msgid="6098684844021697789">"حذف"</string>
<string name="copyUrl" msgid="2538211579596067402">"نسخ عنوان URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"تحديد نص..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"الكاميرا"</string>
<string name="description_target_silent" msgid="893551287746522182">"صامت"</string>
<string name="description_target_soundon" msgid="30052466675500172">"تشغيل الصوت"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"سماعة رأس مطلوبة لسماع المفاتيح أثناء كتابة كلمة مرور."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"يمكنك توصيل سماعة رأس لسماع مفاتيح كلمة المرور منطوقة بصوت عالٍ."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"نقطة"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"التنقل إلى الشاشة الرئيسية"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"التنقل إلى أعلى"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"المزيد من الخيارات"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 5b9dd0b..45834a0 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -665,6 +665,16 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Моля, поставете SIM карта."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM картата липсва или е нечетима. Моля, поставете SIM карта."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM картата ви е деактивирана за постоянно."\n" Моля, свържете се с оператора на безжичната си връзка, за да получите друга."</string>
+ <!-- no translation found for lockscreen_transport_prev_description (201594905152746886) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_next_description (6089297650481292363) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_pause_description (7659088786780128001) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_play_description (5888422938351019426) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_stop_description (4562318378766987601) -->
+ <skip />
<string name="emergency_calls_only" msgid="6733978304386365407">"Само спешни обаждания"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Мрежата е заключена"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM картата е заключена с PUK."</string>
@@ -694,6 +704,14 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Отключване"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Включване на звука"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Изключване на звука"</string>
+ <!-- no translation found for lockscreen_access_pattern_start (3941045502933142847) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cleared (5583479721001639579) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cell_added (6756031208359292487) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_detected (4988730895554057058) -->
+ <skip />
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"АБВ"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +877,7 @@
<string name="cut" msgid="3092569408438626261">"Изрязване"</string>
<string name="copy" msgid="2681946229533511987">"Копиране"</string>
<string name="paste" msgid="5629880836805036433">"Поставяне"</string>
- <string name="replace" msgid="5781686059063148930">"Замяна???"</string>
+ <string name="replace" msgid="5781686059063148930">"Замяна..."</string>
<string name="delete" msgid="6098684844021697789">"Изтриване"</string>
<string name="copyUrl" msgid="2538211579596067402">"Копиране на URL адреса"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Избиране на текст..."</string>
@@ -1160,9 +1178,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Тих режим"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Включване на звука"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Клавиш. Необходими са слушалки, за да чуете клавишите при въвеждането на парола."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Включете слушалки, за да чуете клавишите за паролата на висок глас."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Точка."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Придвижване към „Начало“"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Придвижване нагоре"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Още опции"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index dd3eae6..ec454a7 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -158,16 +158,16 @@
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="permgrouplab_costMoney" msgid="5429808217861460401">"Serveis de pagament"</string>
<string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Permet a les aplicacions dur a terme activitats de pagament."</string>
- <string name="permgrouplab_messages" msgid="7521249148445456662">"Els vostres missatges"</string>
+ <string name="permgrouplab_messages" msgid="7521249148445456662">"Missatges"</string>
<string name="permgroupdesc_messages" msgid="7045736972019211994">"Llegeix i escriu SMS, correu electrònic i altres missatges."</string>
- <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"La vostra informació personal"</string>
+ <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Informació personal"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Accés directe als contactes i al calendari emmagatzemat a la tauleta."</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Accés directe als contactes i al calendari emmagatzemats al telèfon."</string>
- <string name="permgrouplab_location" msgid="635149742436692049">"La vostra ubicació"</string>
+ <string name="permgrouplab_location" msgid="635149742436692049">"Ubicació"</string>
<string name="permgroupdesc_location" msgid="2430258821648348660">"Supervisa la ubicació física"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Comunicació de xarxa"</string>
<string name="permgroupdesc_network" msgid="5035763698958415998">"Permet a les aplicacions accedir a diverses funcions de xarxa."</string>
- <string name="permgrouplab_accounts" msgid="3359646291125325519">"Els vostres comptes"</string>
+ <string name="permgrouplab_accounts" msgid="3359646291125325519">"Comptes"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accedeix als comptes disponibles."</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Controls de maquinari"</string>
<string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Accés directe al maquinari del telèfon."</string>
@@ -252,7 +252,7 @@
<string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Permet que l\'aplicació iniciï la IU de confirmació de còpia de seguretat completa. No pot utilitzar-ho qualsevol aplicació."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"visualitzar finestres no autoritzades"</string>
<string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Permet la creació de finestres que utilitzarà la interfície d\'usuari del sistema interna. No indicat per a les aplicacions normals."</string>
- <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"visualitzar les alertes del sistema"</string>
+ <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"mostrar les alertes del sistema"</string>
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Permet que una aplicació mostri finestres d\'alertes del sistema. Les aplicacions malicioses poden ocupar tota la pantalla."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"modificar la velocitat d\'animacions global"</string>
<string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Permet a una aplicació canviar la velocitat global d\'animació (animacions més ràpides o lentes) en qualsevol moment."</string>
@@ -293,12 +293,12 @@
<string name="permdesc_getPackageSize" msgid="5557253039670753437">"Permet a una aplicació recuperar les mides del codi, de les dades i de la memòria cau"</string>
<string name="permlab_installPackages" msgid="335800214119051089">"instal·lar aplicacions directament"</string>
<string name="permdesc_installPackages" msgid="526669220850066132">"Permet a una aplicació instal·lar paquets d\'Android nous o actualitzats. Les aplicacions malicioses poden utilitzar-ho per afegir aplicacions noves amb permisos arbitràriament potents."</string>
- <string name="permlab_clearAppCache" msgid="4747698311163766540">"suprimir totes les dades de memòria cau d\'aplicacions"</string>
+ <string name="permlab_clearAppCache" msgid="4747698311163766540">"eliminar totes les dades de memòria cau d\'aplicacions"</string>
<string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Permet que una aplicació alliberi emmagatzematge de la tauleta suprimint fitxers al directori de la memòria cau de l\'aplicació. Habitualment, l\'accés és molt restringit a processos del sistema."</string>
<string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Permet a una aplicació alliberar emmagatzematge al telèfon suprimint fitxers del directori de la memòria cau d\'aplicacions. Normalment l\'accés es restringeix als processos del sistema."</string>
<string name="permlab_movePackage" msgid="728454979946503926">"Desplaça els recursos de les aplicacions"</string>
<string name="permdesc_movePackage" msgid="6323049291923925277">"Permet a una aplicació desplaçar els recursos d\'aplicació de suports interns a externs i viceversa."</string>
- <string name="permlab_readLogs" msgid="6615778543198967614">"llegeix les dades sensibles del registre"</string>
+ <string name="permlab_readLogs" msgid="6615778543198967614">"llegir dades de registre personals"</string>
<string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"Permet que una aplicació llegeixi els diversos fitxers de registre del sistema. Això li permet descobrir informació general sobre què estàs fent amb la tauleta, i pot incloure informació personal o privada."</string>
<string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"Permet que una aplicació llegeixi els diversos fitxers de registre del sistema. Això li permet descobrir informació general sobre què estàs fent amb el telèfon i, potencialment, pot incloure informació personal o privada."</string>
<string name="permlab_diagnostic" msgid="8076743953908000342">"llegir/escriure recursos propietat de diag"</string>
@@ -307,7 +307,7 @@
<string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"Permet que una aplicació canviï si un component d\'una altra aplicació està activat o no. Les aplicacions malicioses poden utilitzar aquesta funció per desactivar funcions importants de la tauleta. Cal anar amb compte amb aquest permís, ja que és possible que els components d\'una aplicació esdevinguin inutilitzables, incoherents o inestables."</string>
<string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"Permet que una aplicació canviï si un component d\'una altra aplicació està activat o no. Les aplicacions malicioses poden utilitzar aquesta funció per desactivar funcions importants del telèfon. Cal anar amb compte amb aquest permís, ja que és possible que els components d\'una aplicació esdevinguin inutilitzables, incoherents o inestables."</string>
<string name="permlab_setPreferredApplications" msgid="3393305202145172005">"definir les aplicacions preferides"</string>
- <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Permet a una aplicació modificar les aplicacions preferides. Això pot permetre a les aplicacions malicioses canviar silenciosament les aplicacions que s\'executen, falsejar les aplicacions existents o recollir dades privades vostres."</string>
+ <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Permet a una aplicació modificar les aplicacions preferides. Això pot permetre a les aplicacions malicioses canviar silenciosament les aplicacions que s\'executen, falsejar les aplicacions existents o recollir dades privades de l\'usuari."</string>
<string name="permlab_writeSettings" msgid="1365523497395143704">"modificar la configuració global del sistema"</string>
<string name="permdesc_writeSettings" msgid="838789419871034696">"Permet a una aplicació modificar les dades de configuració del sistema. Les aplicacions malicioses poden malmetre la configuració del sistema."</string>
<string name="permlab_writeSecureSettings" msgid="204676251876718288">"modificar la configuració de seguretat del sistema"</string>
@@ -320,9 +320,9 @@
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"enviar difusió permanent"</string>
<string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"Permet que una aplicació enviï transmissions \"enganxoses\" que es queden al sistema un cop finalitzada la transmissió. Les aplicacions malicioses poden alentir la tauleta o fer-la inestable en provocar que utilitzi massa memòria."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"Permet a una aplicació enviar difusions permanents, que es conserven després de finalitzar la difusió. Les aplicacions malicioses poden alentir o desestabilitzar el telèfon en fer-li utilitzar massa memòria."</string>
- <string name="permlab_readContacts" msgid="6219652189510218240">"llegir les dades de contacte"</string>
+ <string name="permlab_readContacts" msgid="6219652189510218240">"llegir dades de contacte"</string>
<string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"Permet que una aplicació llegeixi totes les dades dels contactes (adreces) de la tauleta. Les aplicacions malicioses poden utilitzar aquesta funció per enviar dades a altres persones."</string>
- <string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Permet a una aplicació llegir totes les dades de contacte (adreces) emmagatzemades al telèfon. Les aplicacions malicioses poden utilitzar-ho per enviar les vostres dades a altres persones."</string>
+ <string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Permet a una aplicació llegir totes les dades de contacte (adreces) emmagatzemades al telèfon. Les aplicacions malicioses poden utilitzar-ho per enviar les teves dades a altres persones."</string>
<string name="permlab_writeContacts" msgid="644616215860933284">"escriure dades de contacte"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Permet que una aplicació modifiqui les dades de contactes (adreces) emmagatzemades a la tauleta. Les aplicacions malicioses poden utilitzar aquesta funció per esborrar o per modificar les teves dades de contactes."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Permet a una aplicació modificar les dades de contacte (adreça) emmagatzemades al telèfon. Les aplicacions malicioses poden utilitzar-ho per esborrar o modificar les dades de contacte."</string>
@@ -369,7 +369,7 @@
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"forçar el reinici del telèfon"</string>
<string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"Permet que l\'aplicació faci que es reiniciï la tauleta."</string>
<string name="permdesc_reboot" product="default" msgid="7914933292815491782">"Permet a l\'aplicació forçar el reinici del telèfon."</string>
- <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"muntar i desmuntar sistemes de fitxers"</string>
+ <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"activar i desactivar sistemes de fitxers"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Permet a l\'aplicació muntar i desmuntar sistemes de fitxers per a l\'emmagatzematge extraïble."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formatar l\'emmagatzematge extern"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Permet a l\'aplicació formatar l\'emmagatzematge extraïble."</string>
@@ -421,7 +421,7 @@
<string name="permlab_factoryTest" msgid="3715225492696416187">"executar en mode de proves de fàbrica"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Executa com a prova de perfil baix del fabricant que permet accés complet al maquinari de la tauleta. Només està disponible quan la tauleta s\'executa en mode de prova del fabricant."</string>
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"S\'executa com a prova del fabricant de baix nivell, cosa que permet l\'accés total al maquinari del telèfon. Només està disponible quan un telèfon s\'executa en mode de proves del fabricant."</string>
- <string name="permlab_setWallpaper" msgid="6627192333373465143">"definir l\'empaperat"</string>
+ <string name="permlab_setWallpaper" msgid="6627192333373465143">"definir fons de pantalla"</string>
<string name="permdesc_setWallpaper" msgid="6417041752170585837">"Permet l\'aplicació definir l\'empaperat del sistema."</string>
<string name="permlab_setWallpaperHints" msgid="3600721069353106851">"definir els suggeriments de mida de l\'empaperat"</string>
<string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Permet a l\'aplicació definir els suggeriments de mida del l\'empaperat del sistema."</string>
@@ -435,7 +435,7 @@
<string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"Permet a una aplicació canviar el fus horari del telèfon."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"actuar com a AccountManagerService"</string>
<string name="permdesc_accountManagerService" msgid="6056903274106394752">"Permet a una aplicació fer trucades a autenticadors de comptes"</string>
- <string name="permlab_getAccounts" msgid="4549918644233460103">"descobrir comptes coneguts"</string>
+ <string name="permlab_getAccounts" msgid="4549918644233460103">"detectar comptes coneguts"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"Permet que una aplicació obtingui la llista de comptes coneguts per la tauleta."</string>
<string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"Permet a una aplicació obtenir la llista de comptes que coneix el telèfon."</string>
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"fer d\'autenticador de comptes"</string>
@@ -454,8 +454,8 @@
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Permet a una aplicació canviar l\'estat de la connectivitat de xarxa."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Canvia la connectivitat ancorada a la xarxa"</string>
<string name="permdesc_changeTetherState" msgid="8905815579146349568">"Permet a una aplicació canviar l\'estat de la connectivitat de xarxa d\'ancoratge."</string>
- <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"canviar la configuració d\'ús de dades en segon terme"</string>
- <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Permet a una aplicació canviar la configuració d\'ús de les dades en segon terme."</string>
+ <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"canviar la configuració d\'ús de dades de referència"</string>
+ <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Permet a una aplicació canviar la configuració d\'ús de les dades de referència."</string>
<string name="permlab_accessWifiState" msgid="8100926650211034400">"visualitzar l\'estat de la Wi-fi"</string>
<string name="permdesc_accessWifiState" msgid="485796529139236346">"Permet a una aplicació visualitzar la informació de l\'estat de la Wi-fi."</string>
<string name="permlab_changeWifiState" msgid="7280632711057112137">"canviar l\'estat de la Wi-fi"</string>
@@ -486,15 +486,15 @@
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Permet a una aplicació llegir les paraules, els noms i les frases privats que l\'usuari pot haver emmagatzemat al diccionari de l\'usuari."</string>
<string name="permlab_writeDictionary" msgid="6703109511836343341">"escriure al diccionari definit per l\'usuari"</string>
<string name="permdesc_writeDictionary" msgid="2241256206524082880">"Permet a una aplicació escriure paraules noves al diccionari de l\'usuari."</string>
- <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modifica/suprimeix el contingut de l\'emmagatzematge USB"</string>
- <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/suprimir el contingut de les targetes SD"</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificar/esborrar contingut USB"</string>
+ <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/esborrar contingut de la targeta SD"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"Permet que una aplicació gravii a l\'emmagatzematge USB."</string>
<string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"Permet a una aplicació escriure a la targeta SD."</string>
<string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"Canvia/esborra emmagatz. intern"</string>
<string name="permdesc_mediaStorageWrite" product="default" msgid="8232008512478316233">"Permet que una aplicació modifiqui el contingut de l\'emmagatzematge multimèdia intern."</string>
<string name="permlab_cache_filesystem" msgid="5656487264819669824">"accedir al sistema de fitxers de la memòria cau"</string>
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Permet a una aplicació llegir el sistema de fitxers de la memòria cau i escriure-hi."</string>
- <string name="permlab_use_sip" msgid="5986952362795870502">"fes/rep trucades per Internet"</string>
+ <string name="permlab_use_sip" msgid="5986952362795870502">"fer/rebre trucades per Internet"</string>
<string name="permdesc_use_sip" msgid="6320376185606661843">"Permet que una aplicació utilitzi el servei SIP per fer i rebre trucades per Internet."</string>
<string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"lectura de l\'ús històric de la xarxa"</string>
<string name="permdesc_readNetworkUsageHistory" msgid="6040738474779135653">"Permet que una aplicació llegeixi l\'ús històric de la xarxa per a xarxes i aplicacions específiques."</string>
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Inseriu una targeta SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Falta la targeta SIM o no es pot llegir. Insereix-ne una."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"La targeta SIM està desactivada permanentment. "\n" Contacta amb el teu proveïdor de serveis sense fil per obtenir-ne una altra."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botó de pista anterior"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botó de pista següent"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Botó de pausa"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Botó de reproducció"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Botó de parada"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Només trucades d\'emergència"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Xarxa bloquejada"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La targeta SIM està bloquejada pel PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Desbloqueja"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"So activat"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"So desactivat"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Patró iniciat"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Patró esborrat"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"S\'ha afegit una cel·la"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Patró completat"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Retalla"</string>
<string name="copy" msgid="2681946229533511987">"Copia"</string>
<string name="paste" msgid="5629880836805036433">"Enganxa"</string>
- <string name="replace" msgid="5781686059063148930">"Vols substituir?"</string>
+ <string name="replace" msgid="5781686059063148930">"Vols substituir..."</string>
<string name="delete" msgid="6098684844021697789">"Suprimeix"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copia l\'URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecciona el text..."</string>
@@ -971,7 +980,7 @@
<string name="date_time_set" msgid="5777075614321087758">"Defineix"</string>
<string name="default_permission_group" msgid="2690160991405646128">"Predeterminat"</string>
<string name="no_permissions" msgid="7283357728219338112">"No cal cap permís"</string>
- <string name="perms_hide" msgid="7283915391320676226"><b>"Oamaga"</b></string>
+ <string name="perms_hide" msgid="7283915391320676226"><b>"Amaga"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Mostra\'ls tots"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Emmagatzematge massiu USB"</string>
<string name="usb_storage_title" msgid="5901459041398751495">"USB connectat"</string>
@@ -1059,7 +1068,7 @@
<string name="input_method_binding_label" msgid="1283557179944992649">"Mètode d\'entrada"</string>
<string name="sync_binding_label" msgid="3687969138375092423">"Sincronització"</string>
<string name="accessibility_binding_label" msgid="4148120742096474641">"Accessibilitat"</string>
- <string name="wallpaper_binding_label" msgid="1240087844304687662">"Empaperat"</string>
+ <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fons de pantalla"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"Canvi de l\'empaperat"</string>
<string name="vpn_title" msgid="8219003246858087489">"VPN activada."</string>
<string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> ha activat VPN"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Càmera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenci"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Activa el so"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tecles. Es necessiten auriculars per escoltar les tecles en escriure una contrasenya."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Connecta un auricular per escoltar les claus de la contrasenya en veu alta."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Torna a la pàgina d\'inici"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Mou cap a dalt"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Més opcions"</string>
@@ -1182,7 +1190,7 @@
<string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"S\'ha superat el límit de dades mòbils"</string>
<string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"S\'ha superat el límit de dades Wi-Fi"</string>
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> per sobre del límit especificat"</string>
- <string name="data_usage_restricted_title" msgid="5965157361036321914">"S\'han restringit dades de fons"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"Dades de referència restringides"</string>
<string name="data_usage_restricted_body" msgid="5087354814839059798">"Toca per eliminar la restricció"</string>
<string name="ssl_certificate" msgid="6510040486049237639">"Certificat de seguretat"</string>
<string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Aquest certificat és vàlid."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index c3a72d8..f3aa280 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Prosím vložte kartu SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Karta SIM chybí nebo je nečitelná. Vložte prosím kartu SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Vaše karta SIM byla natrvalo zablokována."\n" Další kartu SIM obdržíte u svého poskytovatele bezdrátových služeb."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Tlačítko Předchozí stopa"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Tlačítko Další stopa"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Tlačítko Pozastavit"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Tlačítko Přehrát"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Tlačítko Zastavit"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Pouze tísňová volání"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Síť je blokována"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Karta SIM je zablokována pomocí kódu PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Odemknout"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Zapnout zvuk"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Vypnout zvuk"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Bezpečnostní gesto zahájeno"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Bzpečnostní gesto vymazáno"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Buňka přidána"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Bezpečnostní gesto dokončeno"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Vyjmout"</string>
<string name="copy" msgid="2681946229533511987">"Kopírovat"</string>
<string name="paste" msgid="5629880836805036433">"Vložit"</string>
- <string name="replace" msgid="5781686059063148930">"Nahradit???"</string>
+ <string name="replace" msgid="5781686059063148930">"Nahradit•"</string>
<string name="delete" msgid="6098684844021697789">"Smazat"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopírovat adresu URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Vybrat text..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tichý"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zapnout zvuk"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Klávesa. Při zadávání hesla je potřeba použít náhlavní soupravu."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Chcete-li slyšet, které klávesy jste při zadávání hesla stiskli, připojte sluchátka."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Tečka."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Přejít na plochu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Přejít nahoru"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Další možnosti"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index a087c77..4e98da8 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Indsæt et SIM-kort."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM-kortet mangler eller kan ikke læses. Indsæt et SIM-kort."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Dit SIM-kort er permanent deaktiveret."\n"Kontakt dit mobilselskab for at få et nyt SIM-kort."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knap til forrige nummer"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knap til næste nummer"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pause-knap"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Afspil-knappen"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Stop-knap"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Kun nødopkald"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netværket er låst"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortet er låst med PUK-koden."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Lås op"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Lyd slået til"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Lyd slået fra"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Mønster er begyndt"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Mønster er ryddet"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Celle er tilføjet"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Mønster er afsluttet"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Lydløs"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Lyd slået til"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tast. Du skal bruge et headset for at høre tastelyde, når du indtaster en adgangskode."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tilslut et headset for at få læst taster højt, når du indtaster en adgangskode."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punktum."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Naviger hjem"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Naviger op"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere valgmuligheder"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 20d84b2..4a83ae8 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -160,14 +160,14 @@
<string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Ermöglicht Anwendungen die Ausführung eventuell kostenpflichtiger Aktionen"</string>
<string name="permgrouplab_messages" msgid="7521249148445456662">"Ihre Nachrichten"</string>
<string name="permgroupdesc_messages" msgid="7045736972019211994">"Lesen und schreiben Sie Ihre SMS, E-Mails und anderen Nachrichten."</string>
- <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ihre persönlichen Informationen"</string>
+ <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Meine persönlichen Informationen"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkter Zugriff auf die Kontakte und den Kalender Ihres Tablets"</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkter Zugriff auf die Kontakte und den Kalender Ihres Telefons"</string>
<string name="permgrouplab_location" msgid="635149742436692049">"Meinen Standort"</string>
<string name="permgroupdesc_location" msgid="2430258821648348660">"Ihren physischen Standort überwachen"</string>
<string name="permgrouplab_network" msgid="5808983377727109831">"Netzwerkkommunikation"</string>
<string name="permgroupdesc_network" msgid="5035763698958415998">"Ermöglicht Anwendungen den Zugriff auf verschiedene Netzwerkfunktionen"</string>
- <string name="permgrouplab_accounts" msgid="3359646291125325519">"Ihre Konten"</string>
+ <string name="permgrouplab_accounts" msgid="3359646291125325519">"Meine Konten"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Zugriff auf verfügbare Konten"</string>
<string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardware-Steuerelemente"</string>
<string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Direkter Zugriff auf Hardware über Headset"</string>
@@ -345,7 +345,7 @@
<string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Zugriff auf zusätzliche Dienstanbieterbefehle für Standort. Schädliche Anwendungen könnten so die Funktionsweise von GPS oder anderen Standortquellen beeinträchtigen."</string>
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"Berechtigung zur Installation eines Standortanbieters"</string>
<string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Erstellt falsche Standortquellen für Testzwecke. Schädliche Anwendungen können so den von den echten Standortquellen wie GPS oder Netzwerkanbieter zurückgegebenen Standort und/oder Status überschreiben oder Ihren Standort überwachen und an eine externe Quelle weitergeben."</string>
- <string name="permlab_accessFineLocation" msgid="8116127007541369477">"genauer (GPS-) Standort"</string>
+ <string name="permlab_accessFineLocation" msgid="8116127007541369477">"Genauer (GPS-) Standort"</string>
<string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Zugriff auf genaue Standortquellen wie GPS auf dem Tablet (falls verfügbar). Schädliche Anwendungen können damit bestimmen, wo Sie sich befinden und so Ihren Akku zusätzlich belasten."</string>
<string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Zugriff auf genaue Standortquellen wie GPS auf dem Telefon (falls verfügbar). Schädliche Anwendungen können damit bestimmen, so Sie sich befinden und so Ihren Akku zusätzlich belasten."</string>
<string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"ungefährer (netzwerkbasierter) Standort"</string>
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Bitte legen Sie eine SIM-Karte ein."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM-Karte fehlt oder ist nicht lesbar. Bitte legen Sie eine SIM-Karte ein."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Ihre SIM-Karte wurde dauerhaft deaktiviert."\n" Bitte wenden Sie sich an Ihren Mobilfunkanbieter, um eine andere SIM-Karte zu erhalten."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Schaltfläche für vorherigen Track"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Schaltfläche für nächsten Track"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Schaltfläche für Pause"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Schaltfläche für Wiedergabe"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Schaltfläche für Stopp"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Nur Notrufe"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netzwerk gesperrt"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"PUK-Sperre auf SIM"</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Entsperren"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Ton ein"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Ton aus"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Muster gestartet"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Muster gelöscht"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Zelle hinzugefügt"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Muster abgeschlossen"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -709,7 +718,7 @@
<string name="save_password_label" msgid="6860261758665825069">"Bestätigen"</string>
<string name="double_tap_toast" msgid="1068216937244567247">"Tipp: Zum Heranzoomen und Vergrößern zweimal tippen"</string>
<string name="autofill_this_form" msgid="1272247532604569872">"AutoFill"</string>
- <string name="setup_autofill" msgid="8154593408885654044">"AutoFill-Setup"</string>
+ <string name="setup_autofill" msgid="8154593408885654044">"AutoFill-Einrichtung"</string>
<string name="autofill_address_name_separator" msgid="2504700673286691795">" "</string>
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
@@ -877,7 +886,7 @@
<string name="no" msgid="5141531044935541497">"Abbrechen"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"Achtung"</string>
<string name="loading" msgid="1760724998928255250">"Wird geladen..."</string>
- <string name="capital_on" msgid="1544682755514494298">"EIN"</string>
+ <string name="capital_on" msgid="1544682755514494298">"AN"</string>
<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>
@@ -1100,7 +1109,7 @@
<string name="media_shared" product="nosdcard" msgid="5830814349250834225">"Der USB-Speicher wird zurzeit von einem Computer verwendet."</string>
<string name="media_shared" product="default" msgid="5706130568133540435">"Die SD-Karte wird zurzeit von einem Computer verwendet."</string>
<string name="media_unknown_state" msgid="729192782197290385">"Unbekannter Status des externen Speichermediums"</string>
- <string name="share" msgid="1778686618230011964">"Weitergeben"</string>
+ <string name="share" msgid="1778686618230011964">"Teilen"</string>
<string name="find" msgid="4808270900322985960">"Suchen"</string>
<string name="websearch" msgid="4337157977400211589">"Websuche"</string>
<string name="gpsNotifTicker" msgid="5622683912616496172">"Standortabfrage von <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -1137,7 +1146,7 @@
<string name="checkbox_not_checked" msgid="5174639551134444056">"Nicht aktiviert"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"Ausgewählt"</string>
<string name="radiobutton_not_selected" msgid="2908760184307722393">"Nicht ausgewählt"</string>
- <string name="switch_on" msgid="551417728476977311">"Ein"</string>
+ <string name="switch_on" msgid="551417728476977311">"An"</string>
<string name="switch_off" msgid="7249798614327155088">"Aus"</string>
<string name="togglebutton_pressed" msgid="4180411746647422233">"Gedrückt"</string>
<string name="togglebutton_not_pressed" msgid="4495147725636134425">"Nicht gedrückt"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Lautlos"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ton ein"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Zum Hören der Tasten bei der Eingabe eines Passworts ist ein Headset erforderlich."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Schließen Sie ein Headset an, um das Passwort gesprochen zu hören."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Zur Startseite navigieren"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Nach oben navigieren"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Weitere Optionen"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index f638d2b..ac48934 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Τοποθετήστε μια κάρτα SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Η κάρτα SIM δεν υπάρχει ή δεν είναι δυνατή η ανάγνωσή της. Τοποθετήστε μια κάρτα SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Η κάρτα SIM απενεργοποιήθηκε οριστικά."\n" Επικοινωνήστε με τον παροχέα υπηρεσιών ασύρματου δικτύου για να λάβετε νέα κάρτα SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Κουμπί προηγούμενου κομματιού"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Κουμπί επόμενου κομματιού"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Κουμπί παύσης"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Κουμπί αναπαραγωγής"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Κουμπί διακοπής"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Μόνο κλήσεις έκτακτης ανάγκης"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Το δίκτυο κλειδώθηκε"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Η κάρτα SIM είναι κλειδωμένη με κωδικό PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Ξεκλείδωμα"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Ενεργοποίηση ήχου"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Απενεργοποίηση ήχου"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Ξεκίνησε η δημιουργία μοτίβου"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Το μοτίβο απαλείφθηκε"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Προστέθηκε κελί"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Το μοτίβο ολοκληρώθηκε"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ΑΒΓ"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Αποκοπή"</string>
<string name="copy" msgid="2681946229533511987">"Αντιγραφή"</string>
<string name="paste" msgid="5629880836805036433">"Επικόλληση"</string>
- <string name="replace" msgid="5781686059063148930">"Αντικατάσταση???"</string>
+ <string name="replace" msgid="5781686059063148930">"Αντικατάσταση..."</string>
<string name="delete" msgid="6098684844021697789">"Διαγραφή"</string>
<string name="copyUrl" msgid="2538211579596067402">"Αντιγραφή διεύθυνσης URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Επιλογή κειμένου..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Φωτογραφική μηχανή"</string>
<string name="description_target_silent" msgid="893551287746522182">"Αθόρυβο"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ενεργοποίηση ήχου"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Πλήκτρο. Για να ακούσετε τον ήχο του πατήματος των πλήκτρων απαιτούνται ακουστικά."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Συνδέστε ένα σετ ακουστικών για να ακούσετε τα πλήκτρα του κωδικού πρόσβασης να εκφωνούνται δυνατά."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Τελεία."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Πλοήγηση στην αρχική σελίδα"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Πλοήγηση προς τα επάνω"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Περισσότερες επιλογές"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 49fb6ea..43deb8b 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Please insert a SIM card."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"The SIM card is missing or not readable. Please insert a SIM card."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Your SIM card is permanently disabled."\n" Please contact your wireless service provider to obtain another SIM card."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Previous track button"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Next-track button"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pause button"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Play button"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Stop button"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Emergency calls only"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Network locked"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM card is PUK-locked."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Unlock"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sound on"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sound off"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Pattern started"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Pattern cleared"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Cell added"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Pattern completed"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Cut"</string>
<string name="copy" msgid="2681946229533511987">"Copy"</string>
<string name="paste" msgid="5629880836805036433">"Paste"</string>
- <string name="replace" msgid="5781686059063148930">"Replace???"</string>
+ <string name="replace" msgid="5781686059063148930">"Replace..."</string>
<string name="delete" msgid="6098684844021697789">"Delete"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copy URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Select text..."</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index cbf0556..2df9779 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Inserta una tarjeta SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Falta la tarjeta SIM o no es legible. Introduce una tarjeta SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Tu tarjeta SIM ha sido permanentemente desactivada."\n" Comunícate con tu proveedor de servicios inalámbricos para obtener una nueva tarjeta SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botón para pista anterior"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botón para pista siguiente"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Botón Pausa"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Botón Reproducir."</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Botón Detener"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Sólo llamadas de emergencia"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Red bloqueada"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La tarjeta SIM está bloqueada con PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Desbloquear"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sonido encendido"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sonido apagado"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Se inició el patrón"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Se borró el patrón"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Se agregó un celular"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Se completó el patrón"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Pegar"</string>
- <string name="replace" msgid="5781686059063148930">"¿Reemplazar?"</string>
+ <string name="replace" msgid="5781686059063148930">"Reemplazar..."</string>
<string name="delete" msgid="6098684844021697789">"Eliminar"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tecla. Se requieren auriculares para escuchar el sonido de las teclas al ingresar una contraseña."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Conecta un auricular para escuchar las contraseñas en voz alta."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Desplazarse hasta la página principal"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index d268827..eced66b 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Inserta una tarjeta SIM"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Falta la tarjeta SIM o no es legible. Introduce una tarjeta SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Tu tarjeta SIM se ha inhabilitado de forma permanente."\n" Ponte en contacto con tu proveedor de servicios inalámbricos para obtener otra tarjeta SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botón de canción anterior"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botón de siguiente canción"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Botón de pausa"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Botón de reproducción"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Botón para detener la reproducción"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Solo llamadas de emergencia"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Bloqueada para la red"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La tarjeta SIM está bloqueada con el código PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Desbloquear"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Activar sonido"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Desactivar sonido"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Patrón iniciado"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Patrón borrado"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Se ha añadido una celda."</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Patrón completado"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Cortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Pegar"</string>
- <string name="replace" msgid="5781686059063148930">"Sustituir???"</string>
+ <string name="replace" msgid="5781686059063148930">"Sustituir..."</string>
<string name="delete" msgid="6098684844021697789">"Eliminar"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleccionar texto..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencio"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Se necesitan auriculares para escuchar las teclas mientras se escribe una contraseña."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Conecta un auricular para escuchar las contraseñas en voz alta."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Ir al escritorio"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Desplazarse hacia arriba"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Más opciones"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 2410ccd..869b540 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"لطفاً سیم کارت را وارد کنید."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"سیم کارت موجود نیست یا قابل خواندن نیست. یک سیم کارت وارد کنید."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"سیم کارت شما به صورت دائمی غیرفعال شده است."\n" برای دریافت یک سیم کارت دیگر با ارائه دهنده خدمات بی سیم خود تماس بگیرید."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"دکمه تراک قبلی"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"دکمه تراک بعدی"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"دکمه مکث"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"دکمه پخش"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"دکمه توقف"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"فقط تماس های اضطراری"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"شبکه قفل شد"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"سیم کارت با PUK قفل شده است."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"بازگشایی قفل"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"صدا روشن"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"صدا خاموش"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"الگو شروع شد"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"الگو پاک شد"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"سلول اضافه شد"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"الگو تکمیل شد"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"برش"</string>
<string name="copy" msgid="2681946229533511987">"کپی"</string>
<string name="paste" msgid="5629880836805036433">"جای گذاری"</string>
- <string name="replace" msgid="5781686059063148930">"جایگزین شود؟؟؟"</string>
+ <string name="replace" msgid="5781686059063148930">"جایگزین شود..."</string>
<string name="delete" msgid="6098684844021697789">"حذف"</string>
<string name="copyUrl" msgid="2538211579596067402">"کپی URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"انتخاب متن..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"دوربین"</string>
<string name="description_target_silent" msgid="893551287746522182">"ساکت"</string>
<string name="description_target_soundon" msgid="30052466675500172">"صدا روشن"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"کلید. برای شنیدن کلیدها هنگام تایپ یک گذرواژه به گوشی نیاز است."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"برای شنیدن کلیدهای گذرواژه که با صدای بلند خوانده میشوند، از هدست استفاده کنید."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"نقطه."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"رفتن به صفحه اصلی"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"حرکت به بالا"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"سایر گزینه ها"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 841ffb7..d16d29b 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Aseta SIM-kortti."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM-korttia ei löydy tai ei voi lukea. Kytke SIM-kortti."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM-kortti on poistettu pysyvästi käytöstä."\n" Ota yhteyttä operaattoriisi ja hanki uusi SIM-kortti."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Edellinen kappale -painike"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Seuraava kappale -painike"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Tauko-painike"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Toista-painike"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Keskeytä-painike"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Vain hätäpuhelut"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Verkko lukittu"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortti on PUK-lukittu."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Poista lukitus"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Ääni käytössä"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Poista äänet käytöstä"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Kuvio aloitettu"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Kuvio tyhjennetty"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Solu lisätty"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Kuvio valmis"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Äänetön"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ääni käytössä"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Näppäin. Tarvitset kuulokkeet kuullaksesi näppäimenpainallukset kirjoittaessasi salasanaa."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Liitä kuulokkeet kuullaksesi, mitä näppäimiä painat kirjoittaessasi salasanaa."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Piste."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Siirry etusivulle"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Siirry ylös"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Lisää asetuksia"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 08b6d0d..2839734 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Insérez une carte SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Aucune carte SIM ou carte SIM illisible. Veuillez insérer une carte SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Votre carte SIM est définitivement désactivée."\n" Veuillez contacter votre opérateur pour obtenir une autre carte SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Bouton du titre précédent"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Bouton du titre suivant"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Bouton de pause"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Bouton de lecture"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Bouton d\'arrêt"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Appels d\'urgence uniquement"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Réseau verrouillé"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La carte SIM est verrouillée par clé PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Déverrouiller"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Son activé"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Son désactivé"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Schéma commencé."</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Schéma effacé."</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Cellule ajoutée."</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Schéma terminé."</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -905,7 +914,7 @@
<string name="smv_application" msgid="295583804361236288">"L\'application <xliff:g id="APPLICATION">%1$s</xliff:g> (processus <xliff:g id="PROCESS">%2$s</xliff:g>) a enfreint ses propres règles du mode strict."</string>
<string name="smv_process" msgid="5120397012047462446">"Le processus <xliff:g id="PROCESS">%1$s</xliff:g> a enfreint ses propres règles du mode strict."</string>
<string name="android_upgrading_title" msgid="378740715658358071">"Mise à jour d\'Android..."</string>
- <string name="android_upgrading_apk" msgid="274409861603566003">"Optimisation de l\'application <xliff:g id="NUMBER_0">%1$d</xliff:g> sur <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"Optimisation de l\'application (<xliff:g id="NUMBER_0">%1$d</xliff:g> sur <xliff:g id="NUMBER_1">%2$d</xliff:g>)..."</string>
<string name="android_upgrading_starting_apps" msgid="7959542881906488763">"Lancement des applications"</string>
<string name="android_upgrading_complete" msgid="1405954754112999229">"Finalisation de la mise à jour."</string>
<string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> en cours d\'exécution"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Appareil photo"</string>
<string name="description_target_silent" msgid="893551287746522182">"Mode silencieux"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Son activé"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Touche : casque nécessaire pour entendre le son des touches lorsque vous saisissez un mot de passe."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Branchez des écouteurs pour entendre l\'énoncé à haute voix des touches du mot de passe."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Point."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Retour à l\'accueil"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Parcourir vers le haut"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Plus d\'options"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
new file mode 100644
index 0000000..968ade8
--- /dev/null
+++ b/core/res/res/values-hi/strings.xml
@@ -0,0 +1,1214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="byteShort" msgid="8340973892742019101">"B"</string>
+ <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+ <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+ <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+ <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+ <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+ <string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+ <string name="untitled" msgid="6071602020171759109">"<शीर्षक-रहित>"</string>
+ <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
+ <string name="emptyPhoneNumber" msgid="7694063042079676517">"(कोई फ़ोन नंबर नहीं)"</string>
+ <string name="unknownName" msgid="2277556546742746522">"(अज्ञात)"</string>
+ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"ध्वनिमेल"</string>
+ <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+ <string name="mmiError" msgid="5154499457739052907">"कनेक्शन समस्या या अमान्य MMI कोड."</string>
+ <string name="mmiFdnError" msgid="5224398216385316471">"कार्रवाई केवल फ़िक्स्ड डायलिंग नंबर के लिए प्रतिबंधित है."</string>
+ <string name="serviceEnabled" msgid="8147278346414714315">"सेवा अक्षम थी."</string>
+ <string name="serviceEnabledFor" msgid="6856228140453471041">"सेवा इसके लिए सक्षम की गई थी:"</string>
+ <string name="serviceDisabled" msgid="1937553226592516411">"सेवा अक्षम कर दी गई है."</string>
+ <string name="serviceRegistered" msgid="6275019082598102493">"पंजीकरण सफल था."</string>
+ <string name="serviceErased" msgid="1288584695297200972">"मिटाना सफल था."</string>
+ <string name="passwordIncorrect" msgid="7612208839450128715">"गलत पासवर्ड"</string>
+ <string name="mmiComplete" msgid="8232527495411698359">"MMI पूर्ण."</string>
+ <string name="badPin" msgid="5085454289896032547">"आपके द्वारा लिखी गई पुरानी पिन सही नहीं है."</string>
+ <string name="badPuk" msgid="5702522162746042460">"आपके द्वारा लिखा गया PUK सही नहीं है."</string>
+ <string name="mismatchPin" msgid="3695902225843339274">"आपके द्वारा दर्ज की गई पिन मेल नहीं खाती हैं."</string>
+ <string name="invalidPin" msgid="3850018445187475377">"कोई ऐसा पिन लिखें, जिसमें 4 से 8 अंक हों."</string>
+ <string name="invalidPuk" msgid="8761456210898036513">"ऐसा PUK लिखें जो 8 अंकों या अधिक का हो."</string>
+ <string name="needPuk" msgid="919668385956251611">"आपका सिम कार्ड PUK लॉक किया गया है. इसे अनलॉक करने के लिए PUK कोड लिखें."</string>
+ <string name="needPuk2" msgid="4526033371987193070">"सिम कार्ड अनब्लॉक करने के लिए PUK2 लिखें."</string>
+ <string name="ClipMmi" msgid="6952821216480289285">"इनकमिंग कॉलर ID"</string>
+ <string name="ClirMmi" msgid="7784673673446833091">"आउटगोइंग कॉलर ID"</string>
+ <string name="CfMmi" msgid="5123218989141573515">"कॉल अग्रेषण"</string>
+ <string name="CwMmi" msgid="9129678056795016867">"कॉल प्रतीक्षा"</string>
+ <string name="BaMmi" msgid="455193067926770581">"कॉल बाधित करना"</string>
+ <string name="PwdMmi" msgid="7043715687905254199">"पासवर्ड बदलें"</string>
+ <string name="PinMmi" msgid="3113117780361190304">"पिन परिवर्तन"</string>
+ <string name="CnipMmi" msgid="3110534680557857162">"कॉलिंग नंबर उपस्थित"</string>
+ <string name="CnirMmi" msgid="3062102121430548731">"कॉलिंग नंबर प्रतिबंधित"</string>
+ <string name="ThreeWCMmi" msgid="9051047170321190368">"त्रिमार्गी कॉलिंग"</string>
+ <string name="RuacMmi" msgid="7827887459138308886">"अवांछित कष्टप्रद कॉल की अस्वीकृति"</string>
+ <string name="CndMmi" msgid="3116446237081575808">"कॉलिंग नंबर वितरण"</string>
+ <string name="DndMmi" msgid="1265478932418334331">"परेशान न करें"</string>
+ <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"कॉलर आईडी प्रतिबंधित पर डिफ़ॉल्ट है. अगली कॉल: प्रतिबंधित"</string>
+ <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"कॉलर ID प्रतिबंधित पर डिफ़ॉल्ट है. अगला कॉल: प्रतिबंधित नहीं"</string>
+ <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"कॉलर ID प्रतिबंधित नहीं पर डिफ़ॉल्ट है. अगला कॉल: प्रतिबंधित"</string>
+ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"कॉलर ID प्रतिबंधित नहीं पर डिफ़ॉल्ट है. अगली कॉल: प्रतिबंधित नहीं"</string>
+ <string name="serviceNotProvisioned" msgid="8614830180508686666">"सेवा प्रावधान की हुई नहीं है."</string>
+ <string name="CLIRPermanent" msgid="5460892159398802465">"कॉलर ID सेटिंग परिवर्तित नहीं की जा सकती है."</string>
+ <string name="RestrictedChangedTitle" msgid="5592189398956187498">"प्रतिबंधित पहुंच बदली गई"</string>
+ <string name="RestrictedOnData" msgid="8653794784690065540">"डेटा सेवा अवरोधित है."</string>
+ <string name="RestrictedOnEmergency" msgid="6581163779072833665">"आपातकालीन सेवा अवरोधित है."</string>
+ <string name="RestrictedOnNormal" msgid="4953867011389750673">"ध्वनि सेवा अवरोधित है."</string>
+ <string name="RestrictedOnAllVoice" msgid="1459318899842232234">"सभी ध्वनि सेवाएं अवरोधित हैं."</string>
+ <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS सेवा अवरोधित है."</string>
+ <string name="RestrictedOnVoiceData" msgid="8244438624660371717">"ध्वनि/डेटा सेवाएं अवरोधित हैं."</string>
+ <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"ध्वनि/SMS सेवाएं अवरोधित हैं."</string>
+ <string name="RestrictedOnAll" msgid="2714924667937117304">"सभी ध्वनि/डेटा/SMS सेवाएं अवरोधित हैं."</string>
+ <string name="serviceClassVoice" msgid="1258393812335258019">"ध्वनि"</string>
+ <string name="serviceClassData" msgid="872456782077937893">"डेटा"</string>
+ <string name="serviceClassFAX" msgid="5566624998840486475">"फ़ैक्स"</string>
+ <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+ <string name="serviceClassDataAsync" msgid="4523454783498551468">"Async"</string>
+ <string name="serviceClassDataSync" msgid="7530000519646054776">"सिंक"</string>
+ <string name="serviceClassPacket" msgid="6991006557993423453">"पैकेट"</string>
+ <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+ <string name="roamingText0" msgid="7170335472198694945">"रोमिंग संकेतक चालू"</string>
+ <string name="roamingText1" msgid="5314861519752538922">"रोमिंग संकेतक बंद"</string>
+ <string name="roamingText2" msgid="8969929049081268115">"रोमिंग संकेतक चमक रहा है"</string>
+ <string name="roamingText3" msgid="5148255027043943317">"मोहल्ले से बाहर"</string>
+ <string name="roamingText4" msgid="8808456682550796530">"भवन से बाहर"</string>
+ <string name="roamingText5" msgid="7604063252850354350">"रोमिंग - पसंदीदा सिस्टम"</string>
+ <string name="roamingText6" msgid="2059440825782871513">"रोमिंग - उपलब्ध सिस्टम"</string>
+ <string name="roamingText7" msgid="7112078724097233605">"रोमिंग - गठबंधन सहयोगी"</string>
+ <string name="roamingText8" msgid="5989569778604089291">"रोमिंग - प्रीमियम सहयोगी"</string>
+ <string name="roamingText9" msgid="7969296811355152491">"रोमिंग - पूर्ण सेवा कार्यक्षमता"</string>
+ <string name="roamingText10" msgid="3992906999815316417">"रोमिंग - आंशिक सेवा कार्यक्षमता"</string>
+ <string name="roamingText11" msgid="4154476854426920970">"रोमिंग बैनर चालू"</string>
+ <string name="roamingText12" msgid="1189071119992726320">"रोमिंग बैनर बंद"</string>
+ <string name="roamingTextSearching" msgid="8360141885972279963">"सेवा खोज रहा है"</string>
+ <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अग्रेषित नहीं किया गया"</string>
+ <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+ <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> <xliff:g id="TIME_DELAY">{2}</xliff:g> सेकंड के बाद"</string>
+ <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अग्रेषित नहीं किया गया"</string>
+ <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अग्रेषित नहीं किया गया"</string>
+ <string name="fcComplete" msgid="3118848230966886575">"सुविधा कोड पूर्ण."</string>
+ <string name="fcError" msgid="3327560126588500777">"कनेक्शन समस्या या अमान्य सुविधा कोड."</string>
+ <string name="httpErrorOk" msgid="1191919378083472204">"ठीक"</string>
+ <string name="httpError" msgid="6603022914760066338">"कोई नेटवर्क त्रुटि आई."</string>
+ <string name="httpErrorLookup" msgid="4517085806977851374">"URL ढूंढ़ा नहीं जा सका."</string>
+ <string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"साइट प्रमाणीकरण योजना समर्थित नहीं है."</string>
+ <string name="httpErrorAuth" msgid="7293960746955020542">"प्रमाणीकरण विफल था."</string>
+ <string name="httpErrorProxyAuth" msgid="1788207010559081331">"प्रॉक्सी सर्वर द्वारा प्रमाणीकरण असफल था."</string>
+ <string name="httpErrorConnect" msgid="7623096283505770433">"सर्वर से कनेक्शन असफल था."</string>
+ <string name="httpErrorIO" msgid="4270874999047767599">"सर्वर संचार नहीं कर सकता. बाद में पुन: प्रयास करें."</string>
+ <string name="httpErrorTimeout" msgid="4743403703762883954">"सर्वर से कनेक्शन का समय समाप्त हुआ."</string>
+ <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"पृष्ठ में कई सर्वर रीडायरेक्ट हैं."</string>
+ <string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"यह प्रोटोकॉल समर्थित नहीं हैं."</string>
+ <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"एक सुरक्षित कनेक्शन स्थापित नहीं किया जा सका."</string>
+ <string name="httpErrorBadUrl" msgid="6088183159988619736">"पृष्ठ खोला नहीं जा सका क्योंकि URL अमान्य है."</string>
+ <string name="httpErrorFile" msgid="8250549644091165175">"फ़ाइल तक पहुंचा नहीं जा सका."</string>
+ <string name="httpErrorFileNotFound" msgid="5588380756326017105">"अनुरोधित फ़ाइल नहीं मिली थी."</string>
+ <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"बहुत सारे अनुरोधों का संसाधन हो रहा है. बाद में पुन: प्रयास करें."</string>
+ <string name="notification_title" msgid="1259940370369187045">"<xliff:g id="ACCOUNT">%1$s</xliff:g> के लिए साइन-इन त्रुटि"</string>
+ <string name="contentServiceSync" msgid="8353523060269335667">"सिंक"</string>
+ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"सिंक"</string>
+ <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"बहुत से <xliff:g id="CONTENT_TYPE">%s</xliff:g> हटाए जाते हैं."</string>
+ <string name="low_memory" product="tablet" msgid="2292820184396262278">"टेबलेट संग्रहण भर गया है! स्थान रिक्त करने के लिए कुछ फ़ाइलें हटाएं."</string>
+ <string name="low_memory" product="default" msgid="6632412458436461203">"फ़ोन संग्रहण भर गया है! स्थान रिक्त करने के लिए कुछ फ़ाइलें हटाएं."</string>
+ <string name="me" msgid="6545696007631404292">"मैं"</string>
+ <string name="power_dialog" product="tablet" msgid="8545351420865202853">"टेबलेट विकल्प"</string>
+ <string name="power_dialog" product="default" msgid="1319919075463988638">"फ़ोन विकल्प"</string>
+ <string name="silent_mode" msgid="7167703389802618663">"मौन मोड"</string>
+ <string name="turn_on_radio" msgid="3912793092339962371">"वायरलेस चालू करें"</string>
+ <string name="turn_off_radio" msgid="8198784949987062346">"वायरलेस बंद करें"</string>
+ <string name="screen_lock" msgid="799094655496098153">"स्क्रीन लॉक"</string>
+ <string name="power_off" msgid="4266614107412865048">"पावर बंद"</string>
+ <string name="shutdown_progress" msgid="2281079257329981203">"शट डाउन हो रहा है..."</string>
+ <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"आपकी टेबलेट शट डाउन हो जाएगी."</string>
+ <string name="shutdown_confirm" product="default" msgid="649792175242821353">"आपका फ़ोन शट डाउन हो जाएगा."</string>
+ <string name="shutdown_confirm_question" msgid="6656441286856415014">"क्या आप शट डाउन करना चाहेंगे?"</string>
+ <string name="recent_tasks_title" msgid="3691764623638127888">"हाल के"</string>
+ <string name="no_recent_tasks" msgid="279702952298056674">"हाल की कोई एप्लिकेशन नहीं."</string>
+ <string name="global_actions" product="tablet" msgid="408477140088053665">"टेबलेट विकल्प"</string>
+ <string name="global_actions" product="default" msgid="2406416831541615258">"फ़ोन विकल्प"</string>
+ <string name="global_action_lock" msgid="2844945191792119712">"स्क्रीन लॉक"</string>
+ <string name="global_action_power_off" msgid="4471879440839879722">"पावर बंद"</string>
+ <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"मौन मोड"</string>
+ <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ध्वनि बंद है"</string>
+ <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ध्वनि चालू है"</string>
+ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"हवाई जहाज मोड"</string>
+ <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"हवाई जहाज मोड चालू है"</string>
+ <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"हवाई जहाज मोड बंद है"</string>
+ <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+ <string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string>
+ <string name="android_system_label" msgid="6577375335728551336">"Android सिस्टम"</string>
+ <string name="permgrouplab_costMoney" msgid="5429808217861460401">"वे सेवाएं जिन पर आप खर्चा करते हैं"</string>
+ <string name="permgroupdesc_costMoney" msgid="8193824940620517189">"एप्लिकेशन को ऐसी चीज़ें करने की अनुमति देता है जिससे आपका धन खर्च हो सकता है."</string>
+ <string name="permgrouplab_messages" msgid="7521249148445456662">"आपके संदेश"</string>
+ <string name="permgroupdesc_messages" msgid="7045736972019211994">"अपने SMS, ई-मेल और अन्य संदेश पढ़ें और लिखें."</string>
+ <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"आपकी निजी जानकारी"</string>
+ <string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"टेबलेट पर संग्रहीत आपके संपर्कों और कैलेंडर में सीधे पहुंचें."</string>
+ <string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"फ़ोन पर संग्रहीत आपके संपर्कों और कैलेंडर में सीधे पहुंचें."</string>
+ <string name="permgrouplab_location" msgid="635149742436692049">"आपका स्थान"</string>
+ <string name="permgroupdesc_location" msgid="2430258821648348660">"अपने भौतिक स्थान की निगरानी करें"</string>
+ <string name="permgrouplab_network" msgid="5808983377727109831">"नेटवर्क संचार"</string>
+ <string name="permgroupdesc_network" msgid="5035763698958415998">"एप्लिकेशन को विभिन्न नेटवर्क सुविधाओं में पहुंच की अनुमति दें."</string>
+ <string name="permgrouplab_accounts" msgid="3359646291125325519">"आपके खाते"</string>
+ <string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्ध खातों में पहुंचें."</string>
+ <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"हार्डवेयर नियंत्रण"</string>
+ <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"हैंडसेट पर हार्डवेयर में सीधे पहुंचाता है."</string>
+ <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"फ़ोन कॉल"</string>
+ <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"फ़ोन कॉल पर नज़र रखें, रिकॉर्ड करें और संसाधित करें."</string>
+ <string name="permgrouplab_systemTools" msgid="4652191644082714048">"सिस्टम टूल"</string>
+ <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"सिस्टम का निम्न-स्तर पहुंच और नियंत्रण."</string>
+ <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"डेवलपमेंट टूल"</string>
+ <string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"सुविधाएं केवल एप्लिकेशन डेवलपर के लिए आवश्यक है."</string>
+ <string name="permgrouplab_storage" msgid="1971118770546336966">"संग्रहण"</string>
+ <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB संग्रहण में पहुंचें."</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>
+ <string name="permlab_statusBarService" msgid="7247281911387931485">"स्थिति बार"</string>
+ <string name="permdesc_statusBarService" msgid="4097605867643520920">"एप्लिकेशन को स्थिति बार होने की अनुमति देता है."</string>
+ <string name="permlab_expandStatusBar" msgid="1148198785937489264">"स्थिति बार विस्तृत/संक्षिप्त करें"</string>
+ <string name="permdesc_expandStatusBar" msgid="7088604400110768665">"स्थिति बार विस्तृत या संक्षिप्त करने की अनुमति एप्लिकेशन को देता है."</string>
+ <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"आउटगोइंग कॉल बीच में रोकें"</string>
+ <string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"एप्िलकेशन को आउटगोइंग कॉल संसाधित करने और डायल किए गए नंबर को बदलने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आउटगोइंग कॉल पर नज़र रख सकती हैं, रीडायरेक्ट कर सकती या रोक सकती हैं."</string>
+ <string name="permlab_receiveSms" msgid="2697628268086208535">"SMS प्राप्त करें"</string>
+ <string name="permdesc_receiveSms" msgid="6298292335965966117">"एप्लिकेशन को SMS संदेशों को प्राप्त करने और संसाधित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके संदेशों पर नज़र रख सकती हैं या आपको बिना दिखाए उन्हें हटा सकती हैं."</string>
+ <string name="permlab_receiveMms" msgid="8894700916188083287">"MMS प्राप्त करें"</string>
+ <string name="permdesc_receiveMms" msgid="4563346832000174373">"एप्लिकेशन को SMS संदेशों को प्राप्त करने और संसाधित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके संदेशों पर नज़र रख सकते हैं या आपको बिना दिखाए उन्हें हटा सकते हैं."</string>
+ <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"आपातकालीन प्रसारण प्राप्त करें"</string>
+ <string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"एप्लिकेशन को आपातकालीन प्रसारण संदेशों को प्राप्त करने और संसाधित करने की अनुमति देता है. यह अनुमति केवल सिस्टम एप्लिकेशन के लिए उपलब्ध है."</string>
+ <string name="permlab_sendSms" msgid="5600830612147671529">"SMS संदेश भेजें"</string>
+ <string name="permdesc_sendSms" msgid="1946540351763502120">"एप्लिकेशन को SMS संदेश भेजने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन बिना आपकी पुष्टि के संदेश भेजकर आपका धन खर्च कर सकती हैं."</string>
+ <string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"बिना किसी पुष्टि के SMS संदेश भेजें"</string>
+ <string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"एप्लिकेशन को SMS संदेश भेजने देता है. दुर्भावनापूर्ण एप्लिकेशन आपकी पुष्टि के बिना संदेश भेजकर आपका पैसा खर्च कर सकते हैं."</string>
+ <string name="permlab_readSms" msgid="4085333708122372256">"SMS या MMS पढ़ें"</string>
+ <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"आपके टेबलेट या सिम कार्ड पर संग्रहीत SMS संदेशों को पढ़ने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके क्रेडेंशियल संदेशों को पढ़ सकती हैं."</string>
+ <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"आपके फ़ोन या सिम कार्ड पर संग्रहीत SMS संदेशों को पढ़ने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके क्रेडेंशियल संदेशों को पढ़ सकते हैं."</string>
+ <string name="permlab_writeSms" msgid="6881122575154940744">"SMS या MMS संपादित करें"</string>
+ <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"आपके टेबलेट या सिम कार्ड पर संग्रहीत SMS संदेशों पर लिखने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके संदेश हटा सकती हैं."</string>
+ <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"आपके फ़ोन या सिम कार्ड पर संग्रहीत SMS संदेशों पर लिखने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके संदेशों को हटा सकती हैं."</string>
+ <string name="permlab_receiveWapPush" msgid="8258226427716551388">"WAP प्राप्त करें"</string>
+ <string name="permdesc_receiveWapPush" msgid="5979623826128082171">"एप्लिकेशन को WAP संदेशों को प्राप्त करने और संसाधित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके संदेशों पर नज़र रख सकती है या आपको बिना दिखाए उन्हें हटा सकती हैं."</string>
+ <string name="permlab_getTasks" msgid="5005277531132573353">"चल रही एप्लिकेशन पुन: प्राप्त करें"</string>
+ <string name="permdesc_getTasks" msgid="7048711358713443341">"एप्लिकेशन को वर्तमान में और हाल में चल रहे कार्यों के बारे में जानकारी पुनर्प्राप्त करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन को अन्य एप्लिकेशन के बारे में निजी जानकारी खोजने की अनुमति दे सकता है."</string>
+ <string name="permlab_reorderTasks" msgid="5669588525059921549">"चल रही एप्लिकेशन पुन: क्रमित करें"</string>
+ <string name="permdesc_reorderTasks" msgid="126252774270522835">"किसी एप्लिकेशन को कार्य अग्रभूमि और पृष्ठभूमि में लाने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन बिना आपके नियंत्रण के उन्हें सामने लाने पर बाध्य कर सकती हैं."</string>
+ <string name="permlab_removeTasks" msgid="4802740047161700683">"एप्लिकेशन चलाना रोकें"</string>
+ <string name="permdesc_removeTasks" msgid="2000332928514575461">"किसी एप्लिकेशन को कार्यों को निकालने और उनके एप्लिकेशन नष्ट करने की सुविधा देता है. दुर्भावनापूर्ण एप्लिकेशन अन्य एप्लिकेशन के व्यवहार को बाधित कर सकते हैं."</string>
+ <string name="permlab_setDebugApp" msgid="4339730312925176742">"एप्लिकेशन डीबग करना सक्षम करें"</string>
+ <string name="permdesc_setDebugApp" msgid="5584310661711990702">"किसी एप्लिकेशन को दूसरी एप्लिकेशन के लिए डीबग करना चालू करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग दूसरी एप्लिकेशन को समाप्त करने के लिए कर सकती हैं."</string>
+ <string name="permlab_changeConfiguration" msgid="8214475779521218295">"अपनी UI सेटिंग बदलें"</string>
+ <string name="permdesc_changeConfiguration" msgid="3465121501528064399">"किसी एप्लिकेशन को वर्तमान कॉन्फ़िगरेशन बदलने की अनुमति देता है जैसे स्थान या संपूर्ण फ़ॉन्ट आकार."</string>
+ <string name="permlab_enableCarMode" msgid="5684504058192921098">"कार मोड सक्षम करें"</string>
+ <string name="permdesc_enableCarMode" msgid="5673461159384850628">"किसी एप्लिकेशन को कार मोड सक्षम करने की अनुमति देता है."</string>
+ <string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"पृष्ठभूमि प्रक्रियाएं रोकें"</string>
+ <string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"किसी एप्लिकेशन को दूसरी एप्लिकेशन की पृष्ठभूमि प्रक्रियाओं को बंद करने की अनुमति देता है, बल्कि स्मृति कम ना होने पर भी."</string>
+ <string name="permlab_forceStopPackages" msgid="1447830113260156236">"अन्य एप्लिकेशन को बंद करने के लिए बाध्य करें"</string>
+ <string name="permdesc_forceStopPackages" msgid="7263036616161367402">"किसी एप्लिकेशन को अन्य एप्लिकेशन बलपूर्वक बंद करने की अनुमति देता है."</string>
+ <string name="permlab_forceBack" msgid="1804196839880393631">"एप्लिकेशन को बंद करने के लिए बाध्य करें"</string>
+ <string name="permdesc_forceBack" msgid="6534109744159919013">"किसी एप्लिकेशन को अग्रभूमि में चलने वाली गतिविधि को बंद करने और वापस जाने को बाध्य करने की अनुमति देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_dump" msgid="1681799862438954752">"सिस्टम की आंतरिक स्थिति पुनर्प्राप्त करें"</string>
+ <string name="permdesc_dump" msgid="2198776174276275220">"एप्िलकेशन को सिस्टम की आंतरिक स्थिति पुन: प्राप्त करने की अनुमति देता है. दुर्भावनापूर्ण एप्िलकेशन कई प्रकार की विस्तृत विविधतापूर्ण व्यक्तिगत और निजी जानकारी को पुन: प्राप्त कर सकते हैं जिसकी सामान्यतया उन्हें कोई आवश्यकता नहीं होनी चाहिए."</string>
+ <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"स्क्रीन सामग्री पुनर्प्राप्त करें"</string>
+ <string name="permdesc_retrieve_window_content" msgid="3390962289797156152">"एप्लिकेशन को सक्रिय विंडो की सामग्री पुनर्प्राप्त करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन संपूर्ण विंडो की सामग्री को पुनर्प्राप्त कर सकते हैं और पासवर्ड के अलावा इसके सभी पाठ का परीक्षण कर सकते हैं."</string>
+ <string name="permlab_shutdown" msgid="7185747824038909016">"आंशिक शटडाउन"</string>
+ <string name="permdesc_shutdown" msgid="7046500838746291775">"गतिविधि प्रबंधक को शटडाउन स्थिति में रखता है. पूर्ण शटडाउन निष्पादित नहीं करता है."</string>
+ <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"एप्लिकेशन स्विच करने से रोकता है"</string>
+ <string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"उपयोगकर्ता को दूसरी एप्लिकेशन पर स्विच करने से रोकता है."</string>
+ <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"सभी एप्लिकेशन को लॉन्च करने पर नज़र रखें और नियंत्रित करें"</string>
+ <string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"किसी एप्लिकेशन को सिस्टम द्वारा गतिविधियों को लॉन्च करने के तरीकों पर नज़र रखने और उन्हें नियंत्रित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन सिस्टम को पूरी तरह जोखिम में डाल सकती हैं. इस अनुमति की आवश्यकता केवल डेवलपमेंट के लिए है, सामान्य उपयोग के लिए कभी नहीं."</string>
+ <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"पैकेज निकाले गए प्रसारण भेजें"</string>
+ <string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"किसी एप्लिकेशन को सूचना प्रसारित करने की अनुमति देता है कि एक एप्लिकेशन पैकेज निकाल दिया गया है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग किसी दूसरी चल रही एप्लिकेशन को रोकने में कर सकती हैं."</string>
+ <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS-प्राप्त प्रसार भेजें"</string>
+ <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"किसी एप्लिकेशन को सूचना प्रसारित करने की अनुमति देता है कि एक SMS संदेश प्राप्त हुआ है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग इनकमिंग SMS संदेश विकसित करने में कर सकती हैं."</string>
+ <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-प्राप्त प्रसारण भेजें"</string>
+ <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"किसी एप्लिकेशन को एक सूचना प्रसारित करने की अनुमति देता है कि एक WAP PUSH संदेश प्राप्त हो गया है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग MMS संदेश रसीद विकसित करने या दुर्भावनापूर्ण भिन्न रूपों के साथ किसी वेब पृष्ठ की सामग्री मौन रूप से बदलने में कर सकती हैं."</string>
+ <string name="permlab_setProcessLimit" msgid="2451873664363662666">"चल रही प्रक्रियाओं की संख्या सीमित करें"</string>
+ <string name="permdesc_setProcessLimit" msgid="7824786028557379539">"किसी एप्लिकेशन को ऐसी प्रक्रियाओं की अधिकतम संख्या को नियंत्रित करने की अनुमति देता है जो चलाई जाएंगी. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं."</string>
+ <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"सभी पृष्ठभूमि एप्लिकेशन को बंद करें"</string>
+ <string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"किसी एप्लिकेशन को यह नियंत्रित करने की अनुमति देता है कि गतिविधियों के पृष्ठभूमि पर जाते ही क्या वे हमेशा समाप्त हो जाती है या नहीं. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं."</string>
+ <string name="permlab_batteryStats" msgid="7863923071360031652">"बैटरी आंकड़े संशोधित करें"</string>
+ <string name="permdesc_batteryStats" msgid="5847319823772230560">"संकलित बैटरी आंकड़ों के संशोधन की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_backup" msgid="470013022865453920">"सिस्टम बैकअप नियंत्रित और पुनर्स्थापित करें"</string>
+ <string name="permdesc_backup" msgid="4837493065154256525">"एप्लिकेशन को सिस्टम का बैकअप नियंत्रित करने और मैकेनिज़्म पुनर्स्थापित करने की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"पूर्ण बैकअप या पुनर्स्थापना कार्यवाही की पुष्टि करें"</string>
+ <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"एप्लिकेशन को पूर्ण बैकअप पुष्टिकरण UI लॉन्च करने की अनुमति देता है. किसी भी एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं."</string>
+ <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"अनधिकृत विंडो दिखाएं"</string>
+ <string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"ऐसी विंडो के निर्माण की अनुमति देता है जिसका प्रयोजन आंतरिक सिस्टम उपयोगकर्ता इंटरफ़ेस द्वारा उपयोग के लिए हो. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"सिस्टम-स्तर अलर्ट प्रदर्शित करें"</string>
+ <string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"किसी एप्लिकेशन को सिस्टम अलर्ट विंडो दिखाने की अनुमति देता है. दुर्भावनापूर्ण एप्िलकेशन संपूर्ण स्क्रीन का अधिग्रहण कर लेते हैं."</string>
+ <string name="permlab_setAnimationScale" msgid="2805103241153907174">"वैश्विक एनिमेशन गति संशोधित करें"</string>
+ <string name="permdesc_setAnimationScale" msgid="7181522138912391988">"किसी एप्लिकेशन को किसी भी समय वैश्विक एनिमेशन गति (तेज़ या धीमे एनिमेशन) बदलने की अनुमति देता है."</string>
+ <string name="permlab_manageAppTokens" msgid="17124341698093865">"एप्लिकेशन टोकन प्रबंधित करें"</string>
+ <string name="permdesc_manageAppTokens" msgid="977127907524195988">"एप्लिकेशन को उनके स्वयं के टोकन बनाने और प्रबंधित करने, उनके सामान्य Z-क्रम को दरकिनार करते हुए, की अनुमति देता है. सामान्य एप्लिकश्ोन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_injectEvents" msgid="1378746584023586600">"कुंजियों और नियंत्रण बटन को दबाएं"</string>
+ <string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"किसी एप्लिकेशन को उनके स्वयं के इनपुट ईवेंट (कुंजी दबाव इत्यादि) को किसी दूसरी एप्लिकेशन को वितरित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग टेबलेट अधिग्रहीत करने में कर सकती हैं."</string>
+ <string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"किसी एप्लिकेशन को उनके स्वयं के इनपुट ईवेंट (कुंजी दबाव इत्यादि) किसी दूसरी एप्लिकेशन को वितरित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग फ़ोन अधिग्रहीत करने में कर सकती हैं."</string>
+ <string name="permlab_readInputState" msgid="469428900041249234">"आप जो भी लिखते हैं और जो कार्यवाहियां करते हैं उन्हें रिकॉर्ड करें"</string>
+ <string name="permdesc_readInputState" msgid="5132879321450325445">"एप्लिकेशन को आपके द्वारा दबाई जाने वाली कुंजियों को देखने की अनुमति देता है, तब भी जबकि आप किसी दूसरी एप्लिकेशन के साथ सहभागिता (जैसे पासवर्ड दर्ज करना) कर रहे हों. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होनी चाहिए."</string>
+ <string name="permlab_bindInputMethod" msgid="3360064620230515776">"किसी इनपुट विधि से आबद्ध करें"</string>
+ <string name="permdesc_bindInputMethod" msgid="3734838321027317228">"धारक को किसी इनपुट विधि के शीर्ष-स्तर इंटरफ़ेस को आबद्ध करने की अनुमति देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होनी चाहिए."</string>
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"किसी पाठ सेवा पर बने रहें"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"धारक को किसी पाठ सेवा के शीर्ष-स्तरीय इंटरफ़ेस पर बनाए रखता है(उदा. SpellCheckerService). सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं है."</string>
+ <string name="permlab_bindVpnService" msgid="4708596021161473255">"किसी VPN सेवा से आबद्ध करें"</string>
+ <string name="permdesc_bindVpnService" msgid="6011554199384584151">"धारक को किसी VPN सेवा के शीर्ष-स्तर इंटरफ़ेस से आबद्ध करने देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_bindWallpaper" msgid="8716400279937856462">"वॉलपेपर से आबद्ध करें"</string>
+ <string name="permdesc_bindWallpaper" msgid="5287754520361915347">"धारक को किसी वॉलपेपर के शीर्ष-स्तर इंटरफ़ेस को आबद्ध करने की अनुमति देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"किसी विजेट सेवा से आबद्ध करें"</string>
+ <string name="permdesc_bindRemoteViews" msgid="2930855984822926963">"धारक को किसी विजेट सेवा के शीर्ष-स्तर इंटरफ़ेस से आबद्ध होने देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"किसी उपकरण व्यवस्थापक के साथ सहभागिता करें"</string>
+ <string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"धारक को किसी उपकरण व्यवस्थापक को उद्देश्य भेजने की अनुमति देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_setOrientation" msgid="3365947717163866844">"स्क्रीन अभिविन्यास बदलें"</string>
+ <string name="permdesc_setOrientation" msgid="6335814461615851863">"किसी एप्लिकेशन को किसी भी समय स्क्रीन का घूर्णन बदलने की अनुमति देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"सूचक गति बदलें"</string>
+ <string name="permdesc_setPointerSpeed" msgid="137436038503379864">"किसी एप्लिकेशन को किसी भी समय माउस या ट्रैकपैड सूचक गति परिवर्तित करने की अनुमति देता है. सामान्य एप्लिकेशन के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+ <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"एप्लिकेशन को Linux सिग्नल भेजें"</string>
+ <string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"किसी एप्लिकेशन को अनुरोध करने की अनुमति देता है कि सभी आपूर्ति संकेत सभी लगातार प्रक्रियाओं को भेजे जाएं."</string>
+ <string name="permlab_persistentActivity" msgid="8659652042401085862">"एप्लिकेशन हमेशा चलाएं"</string>
+ <string name="permdesc_persistentActivity" msgid="5037199778265006008">"किसी एप्लिकेशन को लगातार स्वयं के भाग बनाने की अनुमति देता है, ताकि सिस्टम इसका उपयोग अन्य एप्लिकेशन के लिए नहीं कर सके."</string>
+ <string name="permlab_deletePackages" msgid="3343439331576348805">"एप्लिकेशन हटाएं"</string>
+ <string name="permdesc_deletePackages" msgid="3634943677518723314">"किसी एप्लिकेशन को Android पैकेज हटाने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग महत्वपूर्ण एप्लिकेशन हटाने में कर सकती हैं."</string>
+ <string name="permlab_clearAppUserData" msgid="2192134353540277878">"अन्य एप्लिकेशन का डेटा हटाएं"</string>
+ <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"किसी एप्लिकेशन को उपयोगकर्ता डेटा साफ़ करने की अनुमति देता है."</string>
+ <string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"अन्य एप्लिकेशन के कैश हटाएं"</string>
+ <string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"किसी एप्लिकेशन को कैश फ़ाइलें हटाने की अनुमति देता है."</string>
+ <string name="permlab_getPackageSize" msgid="4799785352306641460">"एप्लिकेशन संग्रहण स्थान मापें"</string>
+ <string name="permdesc_getPackageSize" msgid="5557253039670753437">"किसी एप्लिकेशन को उसका कोड, डेटा और कैश आकार पुनर्प्राप्त करने की अनुमति देता है"</string>
+ <string name="permlab_installPackages" msgid="335800214119051089">"एप्लिकेशन सीधे इंस्टॉल करें"</string>
+ <string name="permdesc_installPackages" msgid="526669220850066132">"किसी एप्लिकेशन को नए और अपडेट किए गए Android पैकेज इंस्टॉल करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग निरंकुश सशक्त अनुमतियों वाली नई एप्लिकेशन जोड़ने में कर सकती हैं."</string>
+ <string name="permlab_clearAppCache" msgid="4747698311163766540">"सभी एप्लिकेशन कैश डेटा हटाएं"</string>
+ <string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"एप्लिकेशन कैश निर्देशिका में फ़ाइलों को हटाकर किसी एप्लिकेशन को टेबलेट संग्रहण रिक्त करने की अनुमति देता है. सिस्टम प्रक्रिया के लिए आम तौर पर पहुंच अत्यंत प्रतिबंधित है."</string>
+ <string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"एप्लिकेशन कैश निर्देशिका में फ़ाइलों को हटाकर किसी एप्लिकेशन को फ़ोन संग्रहण रिक्त करने की अनुमति देता है. सिस्टम प्रक्रिया के लिए आम तौर पर पहुंच अत्यंत प्रतिबंधित है."</string>
+ <string name="permlab_movePackage" msgid="728454979946503926">"एप्लिकेशन संसाधनों को ले जाएं"</string>
+ <string name="permdesc_movePackage" msgid="6323049291923925277">"एप्लिकेशन संसाधनों को आंतरिक मीडिया से बाह्य मीडिया में और इसके ठीक विपरीत ले जाने की अनुमति किसी एप्लिकेशन को देता है."</string>
+ <string name="permlab_readLogs" msgid="6615778543198967614">"संवेदनशील लॉग डेटा पढ़ें"</string>
+ <string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"किसी एप्लिकेशन को सिस्टम की विभिन्न लॉग फ़ाइलों से पढ़ने की अनुमति देता है. आप टेबलेट के साथ क्या कर रहे हैं इस बारे में यह इसे सामान्य जानकारी खोजने की अनुमति देता है, संभवत: व्यक्तिगत या निजी जानकारी शामिल करते हुए."</string>
+ <string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"किसी एप्लिकेशन को सिस्टम की विभिन्न लॉग फ़ाइलों से पढ़ने की अनुमति देता है. आप फ़ोन के साथ क्या कर रहे हैं इस बारे में यह इसे सामान्य जानकारी खोजने की अनुमति देता है, संभवत: व्यक्तिगत या निजी जानकारी शामिल करते हुए."</string>
+ <string name="permlab_diagnostic" msgid="8076743953908000342">"निदान के स्वामित्व वाले संसाधनों को पढ़ें/लिखें"</string>
+ <string name="permdesc_diagnostic" msgid="3121238373951637049">"एप्लिकेशन को निदान समूह के स्वामित्व वाले किसी स्रोत को पढ़ने और लिखने की अनुमति देता है; उदाहरण के लिए, /dev में फ़ाइलें. यह सिस्टम की स्थिरता और सुरक्षा को संभावित रूप से प्रभावित कर सकता है. इसका उपयोग निर्माता या ऑपरेटर द्वारा केवल हार्डवेयर-विशेष निदान के लिए किया जाना चाहिए."</string>
+ <string name="permlab_changeComponentState" msgid="79425198834329406">"एप्लिकेशन घटकों के सक्षम या अक्षम करें"</string>
+ <string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"किसी दूसरी एप्लिकेशन का घटक सक्षम किया गया है या नहीं, यह बदलने की अनुमति किसी एप्लिकेशन को देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग महत्वपूर्ण टेबलेट क्षमताओं को अक्षम करने में कर सकती हैं. इस अनुमति के साथ ही देखभाल होना अत्यावश्यक है, क्योंकि एप्लिकेशन घटकों को व्यर्थ, असंगत या अस्थिर अवस्था में ले जाना संभव है."</string>
+ <string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"किसी दूसरी एप्लिकेशन का घटक सक्षम किया गया है या नहीं, यह बदलने की अनुमति किसी एप्लिकेशन को देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग महत्वपूर्ण फ़ोन क्षमताओं को अक्षम करने में कर सकती हैं. इस अनुमति के साथ ही देखभाल होना अत्यावश्यक है, क्योंकि एप्लिकेशन घटकों को व्यर्थ, असंगत या अस्थिर अवस्था में ले जाना संभव है."</string>
+ <string name="permlab_setPreferredApplications" msgid="3393305202145172005">"पसंदीदा एप्लिकेशन सेट करें"</string>
+ <string name="permdesc_setPreferredApplications" msgid="760008293501937546">"किसी एप्लिकेशन को आपकी पसंदीदा एप्लिकेशन संशोधित करने की अनुमति देता है. यह दुर्भावनापूर्ण एप्लिकेशन को आपसे निजी डेटा एकत्र करने के लिए आपकी मौजूदा एप्लिकेशन को चकमा देते हुए ऐसी एप्लिकेशन को मौन रूप से बदलने की अनुमति देता है जो चल रही हों."</string>
+ <string name="permlab_writeSettings" msgid="1365523497395143704">"वैश्विक सिस्टम सेटिंग संशोधित करें"</string>
+ <string name="permdesc_writeSettings" msgid="838789419871034696">"किसी एप्लिकेशन को सिस्टम के सेटिंग डेटा को संशोधित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके सिस्टम का कॉन्फ़िगरेश दूषित कर सकती हैं."</string>
+ <string name="permlab_writeSecureSettings" msgid="204676251876718288">"सुरक्षित सिस्टम सेटिंग संशोधित करें"</string>
+ <string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"किसी एप्लिकेशन को सिस्टम का सुरक्षित सेटिंग डेटा संशोधित करने की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_writeGservices" msgid="2149426664226152185">"Google सेवाएं मैप संशोधित करें"</string>
+ <string name="permdesc_writeGservices" msgid="6602362746516676175">"किसी एप्लिकेशन को Google सेवा मैप संशोधित करने की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"बूट पर स्वचालित रूप से प्रारंभ करें"</string>
+ <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"किसी एप्लिकेशन को सिस्टम द्वारा बूट करना समाप्त करने के तुरंत बाद स्वयं प्रारंभ होने की अनुमति देता है. इसके कारण टेबलेट को प्रारंभ होने में अधिक समय लग सकता है और हमेशा चलते रहने के द्वारा यह पूरे टेबलेट को धीमा करने की अनुमति एप्लिकेशन को दे सकता है."</string>
+ <string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"किसी एप्लिकेशन को सिस्टम द्वारा बूट करना समाप्त करने के तुरंत बाद स्वयं प्रारंभ होने की अनुमति देता है. इसके कारण फ़ोन को प्रारंभ होने में अधिक समय लग सकता है और हमेशा चलते रहने के द्वारा यह पूरे फ़ोन को धीमा करने की अनुमति एप्लिकेशन को दे सकता है."</string>
+ <string name="permlab_broadcastSticky" msgid="7919126372606881614">"स्टिकी प्रसारण भेजें"</string>
+ <string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"किसी एप्लिकेशन को ऐसे रोचक प्रसारणों को भेजने की अनुमति देता है, जो प्रसारण समाप्त होने के बाद रहते हैं. दुर्भावनापूर्ण एप्लिकेशन बहुत सी स्मृति का उपयोग करके टेबलेट को धीमा या अस्थिर बना सकती हैं."</string>
+ <string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"किसी एप्लिकेशन को ऐसे रोचक प्रसारणों को भेजने की अनुमति देता है, जो प्रसारण समाप्त होने के बाद रहते हैं. दुर्भावनापूर्ण एप्लिकेशन बहुत सी स्मृति का उपयोग करके फ़ोन को धीमा या अस्थिर बना सकती हैं."</string>
+ <string name="permlab_readContacts" msgid="6219652189510218240">"संपर्क डेटा पढ़ें"</string>
+ <string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"किसी एप्लिकेशन को आपके टेबलेट पर संग्रहीत सभी संपर्क (पता) डेटा पढ़ने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग दूसरे लोगों को आपका डेटा भेजने में कर सकती हैं."</string>
+ <string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"किसी एप्लिकेशन को आपके फ़ोन पर संग्रहीत सभी संपर्क (पता) डेटा पढ़ने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग दूसरे लोगों को आपका डेटा भेजने में कर सकती हैं."</string>
+ <string name="permlab_writeContacts" msgid="644616215860933284">"संपर्क डेटा लिखें"</string>
+ <string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"किसी एप्लिकेशन को आपके टेबलेट पर संग्रहीत संपर्क (पता) डेटा संशोधित करने की अनुमति देता है. दुर्भावनापूर्ण एप्िलकेशन इसका उपयोग आपके संपर्क डेटा को मिटाने या संशोधित करने में कर सकती हैं."</string>
+ <string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"किसी एप्लिकेशन को आपके फ़ोन पर संग्रहीत संपर्क (पता) डेटा संशोधित करने की अनुमति देता है. दुर्भावनापूर्ण एप्िलकेशन इसका उपयोग आपके संपर्क डेटा को मिटाने या संशोधित करने में कर सकती हैं."</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"अपना प्रोफ़ाइल डेटा पढ़ें"</string>
+ <string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"एप्लिकेशन को आपके उपकरण पर संग्रहीत निजी प्रोफाइल जानकारी पढ़ने देता है, जैसे आपका नाम और संपर्क जानकारी. इसका अर्थ है कि एप्लिकेशन आपको पहचान सकता है और आपकी प्रोफ़ाइल जानकारी दूसरों को भेज सकता है."</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"अपने प्रोफ़ाइल डेटा में लिखें"</string>
+ <string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"एप्लिकेशन को आपके उपकरण पर संग्रहीत निजी प्रोफ़ाइल जानकारी बदलने या जोड़ने देता है, जैसे आपका नाम और संपर्क जानकारी. इसका अर्थ है कि अन्य एप्लिकेशन आपको पहचान सकते हैं और आपकी प्रोफ़ाइल जानकारी दूसरों को भेज सकते हैं."</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"अपनी सामाजिक स्ट्रीम पढ़ें"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"एप्लिकेशन को आपके और आपके मित्रों के सामाजिक अपडेट पर पहुंचने और समन्वयित करने देता है. दुर्भावनापूर्ण एप्लिकेशन सामाजिक नेटवर्क पर आपके और आपके मित्रों के बीच निजी संचार पढ़ने के लिए इसका उपयोग कर सकते हैं."</string>
+ <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"सामाजिक स्ट्रीम में लिखें"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"एप्लिकेशन को आपके मित्रों के सामाजिक अपडेट प्रदर्शित करने देता है. दुर्भावनापूर्ण एप्लिकेशन मित्र होने का दिखावा करने और आपसे पासवर्ड या अन्य गोपनीय जानकारी प्रकट करने के लिए इसका उपयोग कर सकते हैं."</string>
+ <string name="permlab_readCalendar" msgid="5972727560257612398">"केलैंडर ईवेंट के साथ-साथ गोपनीय जानकारी पढ़ें"</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"किसी एप्लिकेशन को आपके टैबलेट पर संग्रहीत सभी कैलेंडर ईवेंट पढ़ने देता है, उनके सहित जो मित्रों और सहकर्मियों के हैं. किसी दुर्भावनापूर्ण एप्लिकेशन के पास यह अनुमति हो तो वह इन कैलेंडर से स्वामी की जानकारी के बिना व्यक्तिगत जानकारी निकाल सकता है."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"किसी एप्लिकेशन को आपके फ़ोन पर संग्रहीत सभी कैलेंडर ईवेंट पढ़ने देता है, उनके सहित जो मित्रों और सहकर्मियों के हैं. किसी दुर्भावनापूर्ण एप्लिकेशन के पास यह अनुमति हो तो वह इन कैलेंडर से स्वामी की जानकारी के बिना व्यक्तिगत जानकारी निकाल सकता है."</string>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"स्वामी की जानकारी के बिना कैलेंडर ईवेंट जोड़ें या संशोधित करें और अतिथियों को ईमेल भेजें"</string>
+ <string name="permdesc_writeCalendar" msgid="5368129321997977226">"किसी एप्लिकेशन को कैलेंडर स्वामी के रूप में ईवेंट आमंत्रण भेजने देता है और उन ईवेंट को जोड़ने, निकालने, बदलने देता है जिन्हें आप अपने उपकरण पर संशोधित कर सकते हैं, उनके सहित जो आपके मित्रों और सहकर्मियों के हैं. किसी दुर्भावनापूर्ण एप्लिकेशन के पास यह अनुमति हो तो वह ऐसे स्पैम ईमेल भेज सकता है जो कैलेंडर स्वामी की ओर से आते प्रतीत होते हैं, स्वामी की जानकारी के बिना ईवेंट संशोधित कर सकता है, या नकली ईवेंट जोड़ सकता है."</string>
+ <string name="permlab_accessMockLocation" msgid="8688334974036823330">"परीक्षण के लिए नकली स्थान स्रोत"</string>
+ <string name="permdesc_accessMockLocation" msgid="7648286063459727252">"परीक्षण के लिए नकली स्थान स्रोत बनाएं. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग वास्तविक स्थान स्रोतों जैसे GPS या नेटवर्क प्रदाताओं से वापस लौटे स्थान/या स्थिति ओवरराइड करने में कर सकती हैं."</string>
+ <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"अतिरिक्त स्थान प्रदाता आदेशों में पहुंचे"</string>
+ <string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"अतिरिक्त स्थान प्रदाता आदेशों में पहुंचे. दुर्भावनापूर्ण एप्िलकेशन इसका उपयोग GPS या अन्य स्थान स्रोतों के संचालन में व्यवधान के लिए कर सकती हैं."</string>
+ <string name="permlab_installLocationProvider" msgid="6578101199825193873">"किसी स्थान प्रदाता को इंस्टॉल करने की अनुमति"</string>
+ <string name="permdesc_installLocationProvider" msgid="5449175116732002106">"परीक्षण के लिए नकली स्थान स्रोत बनाएं. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग वास्तविक स्थान स्रोतों जैसे GPS या नेटवर्क प्रदाताओं से वापस लौटे स्थान/या स्थिति ओवरराइड करने में या आपके स्थान की निगरानी करने और बाह्य स्रोत को रिपोर्ट करने में कर सकती हैं."</string>
+ <string name="permlab_accessFineLocation" msgid="8116127007541369477">"सही (GPS) स्थान"</string>
+ <string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"सही स्थान स्रोतों में पहुंचें, जैसे टेबलेट पर वैश्विक स्थिति निर्धारण प्रणाली, जहां उपलब्ध हो. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग आपकी स्थिति का निर्धारण करने में कर सकती हैं और अतिरिक्त बैटरी पावर का उपभोग कर सकती हैं."</string>
+ <string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"सही स्थान स्रोतों में पहुंचें, जैसे फ़ोन पर वैश्विक स्थिति निर्धारण प्रणाली, जहां उपलब्ध हो. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग आपकी स्थिति का निर्धारण करने में कर सकती हैं और अतिरिक्त बैटरी पावर का उपभोग कर सकती हैं."</string>
+ <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"ख़राब (नेटवर्क-आधारित) स्थान"</string>
+ <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"सन्निकट टेबलेट स्थान निर्धारित करने के लिए ख़राब स्थान स्रोतों जैसे कि सेल्यूलर नेटवर्क डेटाबेस में पहुंचें, जहां उपलब्ध हो. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग यह निर्धारित करने में कर सकते हैं कि आप तकरीबन हैं कहां."</string>
+ <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"सन्निकट फ़ोन स्थान निर्धारित करने के लिए ख़राब स्थान स्रोतों जैसे कि सेल्यूलर नेटवर्क डेटाबेस में पहुंचें, जहां उपलब्ध हो. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग यह निर्धारित करने में कर सकती हैं कि आप तकरीबन हैं कहां."</string>
+ <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger में पहुंचें"</string>
+ <string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"एप्लिकेशन को SurfaceFlinger निम्न-स्तर सुविधाओं का उपयोग करने की अनुमति देता है."</string>
+ <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"फ़्रेम बफ़र पढ़ें"</string>
+ <string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"एप्लिकेशन को फ़्रेम बफ़र की सामग्री पढ़ने की अनुमति देता है."</string>
+ <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"अपनी ऑडियो सेटिंग बदलें"</string>
+ <string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"एप्लिकेशन को वैश्विक ऑडियो सेटिंग जैसे कि वॉल्यूम और रूटिंग, संशोधित करने की अनुमति देता है."</string>
+ <string name="permlab_recordAudio" msgid="3876049771427466323">"ऑडियो रिकॉर्ड करें"</string>
+ <string name="permdesc_recordAudio" msgid="6493228261176552356">"एप्लिकेशन को ऑडियो रिकॉर्ड पथ में पहुंच की अनुमति देता है."</string>
+ <string name="permlab_camera" msgid="3616391919559751192">"चित्र और वीडियो लें"</string>
+ <string name="permdesc_camera" msgid="6004878235852154239">"एप्लिकेशन को कैमरे से चित्र और वीडियो लेने की अनुमति देता है. यह एप्लिकेशन को किसी भी समय कैमरे द्वारा देखी जा रही छवियों को एकत्र करने की अनुमति देता है."</string>
+ <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"स्थायी रूप से टेबलेट अक्षम करें"</string>
+ <string name="permlab_brick" product="default" msgid="8337817093326370537">"फ़ोन को स्थायी रूप से अक्षम करें"</string>
+ <string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"संपूर्ण टेबलेट को स्थायी रूप से अक्षम करने की अनुमति एप्लिकेशन को देता है. यह बहुत खतरनाक है."</string>
+ <string name="permdesc_brick" product="default" msgid="5569526552607599221">"संपूर्ण फ़ोन को स्थायी रूप से अक्षम करने की अनुमति एप्लिकेशन को देता है. यह बहुत खतरनाक है."</string>
+ <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"टेबलेट रीबूट के लिए बाध्य करें"</string>
+ <string name="permlab_reboot" product="default" msgid="2898560872462638242">"फ़ोन रीबूट के लिए बाध्य करें"</string>
+ <string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"एप्लिकेशन को टेबलेट रीबूट करने के लिए बाध्य करने की अनुमति देता है."</string>
+ <string name="permdesc_reboot" product="default" msgid="7914933292815491782">"फ़ोन को रीबूट करने के लिए बाध्य करने की अनुमति एप्लिकेशन को देता है."</string>
+ <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"फ़ाइलसिस्टम माउंट और अनमाउंट करें"</string>
+ <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="3411338632002193846">"आंतरिक संग्रहण पर जानकारी प्राप्त करें"</string>
+ <string name="permdesc_asec_access" msgid="8820326551687285439">"एप्लिकेशन को आंतरिक संग्रहण पर जानकारी प्राप्त करने की अनुमति देता है."</string>
+ <string name="permlab_asec_create" msgid="6414757234789336327">"आंतरिक संग्रहण बनाएं"</string>
+ <string name="permdesc_asec_create" msgid="2621346764995731250">"एप्लिकेशन को आंतरिक संग्रहण बनाने की अनुमति देता है."</string>
+ <string name="permlab_asec_destroy" msgid="526928328301618022">"आंतरिक संग्रहण नष्ट करें"</string>
+ <string name="permdesc_asec_destroy" msgid="2746706889208066256">"एप्लिकेशन को आंतरिक संग्रहण को नष्ट करने की अनुमति देता है."</string>
+ <string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"आंतरिक संग्रहण माउंट / अनमाउंट करें"</string>
+ <string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"एप्लिकेशन को आंतरिक संग्रहण माउंट / अनमाउंट करने की अनुमति देता है."</string>
+ <string name="permlab_asec_rename" msgid="7496633954080472417">"आंतरिक संग्रहण का नाम बदलें"</string>
+ <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>
+ <string name="permdesc_flashlight" msgid="6433045942283802309">"एप्लिकेशन को फ़्लैशलाइट नियंत्रित करने की अनुमति देता है."</string>
+ <string name="permlab_manageUsb" msgid="1113453430645402723">"USB उपकरणों की प्राथमिकताएं और अनुमतियां प्रबंधित करें"</string>
+ <string name="permdesc_manageUsb" msgid="6148489202092166164">"एप्लिकेशन को USB उपकरणों की प्राथमिकताओं और अनुमतियों को प्रबंधित करने की सुविधा देता है."</string>
+ <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP प्रोटोकॉल लागू करें"</string>
+ <string name="permdesc_accessMtp" msgid="6532961200486791570">"MTP USB प्रोटोकॉल लागू करने के लिए कर्नेल MTP ड्राइवर में पहुंच की अनुमति देता है."</string>
+ <string name="permlab_hardware_test" msgid="4148290860400659146">"परीक्षण हार्डवेयर"</string>
+ <string name="permdesc_hardware_test" msgid="3668894686500081699">"किसी एप्लिकेशन को हार्डवेयर परीक्षण के लिए विविध पेरिफ़ेरल नियंत्रित करने की अनुमति देता है."</string>
+ <string name="permlab_callPhone" msgid="3925836347681847954">"फ़ोन नंबर पर सीधे कॉल करें"</string>
+ <string name="permdesc_callPhone" msgid="3369867353692722456">"एप्लिकेशन को बिना आपके हस्तक्षेप के फ़ोन नंबर पर कॉल करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके फ़ोन बिल में अप्रत्याशित कॉल का कारण हो सकती हैं. ध्यान रखें कि यह एप्लिकेशन को आपातकालीन नंबर पर कॉल करने की अनुमति नहीं देता है."</string>
+ <string name="permlab_callPrivileged" msgid="4198349211108497879">"किसी भी फ़ोन नंबर पर सीधे कॉल करें"</string>
+ <string name="permdesc_callPrivileged" msgid="244405067160028452">"एप्लिकेशन को बिना आपके हस्तक्षेप के आपातकालीन नंबरों समेत किसी भी फ़ोन नंबर पर कॉल करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपातकालीन सेवाओं पर अनावश्यक और अवैध कॉल कर सकती हैं."</string>
+ <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"सीधे CDMA टेबलेट सेटअप प्रारंभ करें"</string>
+ <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"सीधे CDMA फ़ोन सेटअप प्रारंभ करें"</string>
+ <string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"एप्लिकेशन को CDMA प्रावधानीकरण प्रारंभ करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन अनावश्यक रूप से CDMA प्रावधानीकरण प्रारंभ कर सकते हैं."</string>
+ <string name="permlab_locationUpdates" msgid="7785408253364335740">"स्थान अपडेट सूचनाएं नियंत्रित करें"</string>
+ <string name="permdesc_locationUpdates" msgid="2300018303720930256">"रेडियो से स्थान अपडेट सूचनाओं को सक्षम/अक्षम करने की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_checkinProperties" msgid="7855259461268734914">"चेकइन गुणों में पहुंचें"</string>
+ <string name="permdesc_checkinProperties" msgid="7150307006141883832">"चेकइन सेवा द्वारा अपलोड किए गए गुणों में पहुंच पढ़ने/लिखने की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_bindGadget" msgid="776905339015863471">"विजेट चुनें"</string>
+ <string name="permdesc_bindGadget" msgid="2098697834497452046">"किस एप्लिकेशन के साथ कौन से विजेट का उपयोग किया जा सकता है सिस्टम को यह बताने की अनुमति एप्लिकेशन को देता है. इस अनुमति के साथ, एप्लिकेशन दूसरी एप्लिकेशन को निजी डेटा में पहुंच प्रदान कर सकती है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"फ़ोन स्थिति संशोधित करें"</string>
+ <string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"एप्लिकेशन को उपकरण की फ़ोन सुविधाओं को नियंत्रित करने की अनुमति देता है. अनुमति प्राप्त एप्लिकेशन कभी भी आपको सूचित किए बिना नेटवर्क स्विच कर सकती है, फ़ोन रेडियो चालू और बंद एवं ऐसे ही अन्य कार्य कर सकती है."</string>
+ <string name="permlab_readPhoneState" msgid="2326172951448691631">"फ़ोन की स्थिति और पहचान पढें"</string>
+ <string name="permdesc_readPhoneState" msgid="188877305147626781">"एप्लिकेशन को उपकरण की फ़ोन सुविधाओं में पहुंच की अनुमति देता है. इस अनुमति के साथ वाला कोई एप्लिकेशन, कॉल सक्रिय हो या नहीं फिर भी इस फ़ोन का फ़ोन नंबर और क्रमांक, वह नंबर जिससे कॉल कनेक्ट की गई है और ऐसे ही अन्य नंबर निर्धारित कर सकती है."</string>
+ <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"टेबलेट को निष्क्रिय होने से रोकें"</string>
+ <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"फ़ोन को निष्क्रिय होने से रोकें"</string>
+ <string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"टेबलेट को निष्क्रिय होने से रोकने की अनुमति किसी एप्लिकेशन को देता है."</string>
+ <string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"फ़ोन को निष्क्रिय होने से रोकने की अनुमति किसी एप्लिकेशन को देता है."</string>
+ <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"टेबलेट चालू या बंद करें"</string>
+ <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"फ़ोन चालू या बंद करें"</string>
+ <string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"एप्लिकेशन को टेबलेट चालू या बंद करने की अनुमति देता है."</string>
+ <string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"एप्लिकेशन को फ़ोन चालू या बंद करने की अनुमति देता है."</string>
+ <string name="permlab_factoryTest" msgid="3715225492696416187">"फ़ैक्ट्री परीक्षण मोड में चलाएं"</string>
+ <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"टेबलेट हार्डवेयर में पूर्ण पहुंच की अनुमति देते हुए निम्न-स्तर निर्माता परीक्षण के रूप में चलाएं. केवल तभी उपलब्ध जब कोई टेबलेट निर्माता परीक्षण मोड में चल रहा हो."</string>
+ <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"फ़ोन हार्डवेयर में पूर्ण पहुंच की अनुमति देते हुए निम्न-स्तर निर्माता परीक्षण के रूप में चलाएं. केवल तभी उपलब्ध जब कोई फ़ोन निर्माता परीक्षण मोड में चल रहा हो."</string>
+ <string name="permlab_setWallpaper" msgid="6627192333373465143">"वॉलपेपर सेट करें"</string>
+ <string name="permdesc_setWallpaper" msgid="6417041752170585837">"एप्लिकेशन को सिस्टम वॉलपेपर सेट करने की अनुमति देता है."</string>
+ <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"वॉलपेपर आकार सुझाव सेट करें"</string>
+ <string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"एप्लिकेशन को सिस्टम वॉलपेपर आकार सुझाव सेट करने की अनुमति देता है."</string>
+ <string name="permlab_masterClear" msgid="2315750423139697397">"फ़ैक्ट्री डिफ़ॉल्ट पर सिस्टम रीसेट करें"</string>
+ <string name="permdesc_masterClear" msgid="5033465107545174514">"किसी एप्लिकेशन को सभी डेटा, कॉन्फ़िगरेशन और इंस्टॉल की हुई एप्लिकेशन मिटाते हुए सिस्टम को पूरी तरह से उसकी फ़ैक्ट्री सेटिंग पर रीसेट करने की अनुमति देता है."</string>
+ <string name="permlab_setTime" msgid="2021614829591775646">"समय सेट करें"</string>
+ <string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"किसी एप्लिकेशन को टेबलेट की घड़ी का समय बदलने की अनुमति देता है."</string>
+ <string name="permdesc_setTime" product="default" msgid="667294309287080045">"किसी एप्लिकेशन को फ़ोन की घड़ी का समय बदलने की अनुमति देता है."</string>
+ <string name="permlab_setTimeZone" msgid="2945079801013077340">"समय क्षेत्र सेट करें"</string>
+ <string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"किसी एप्लिकेशन को टेबलेट के समय क्षेत्र की बदलने की अनुमति देता है."</string>
+ <string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"किसी एप्लिकेशन को फ़ोन का समय क्षेत्र बदलने की अनुमति देता है."</string>
+ <string name="permlab_accountManagerService" msgid="4829262349691386986">"खाता प्रबंधक सेवा के रूप में कार्य करें"</string>
+ <string name="permdesc_accountManagerService" msgid="6056903274106394752">"किसी एप्लिकेशन को खाता प्रमाणकर्त्ताओं को कॉल करने की अनुमति देता है"</string>
+ <string name="permlab_getAccounts" msgid="4549918644233460103">"ज्ञात खातों का पता लगाएं"</string>
+ <string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"किसी एप्लिकेशन को टेबलेट द्वारा ज्ञात खातों की सूची प्राप्त करने की अनुमति देता है."</string>
+ <string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"किसी एप्िलकेशन को फ़ोन द्वारा ज्ञात खातों की सूची प्राप्त करने की अनुमति देता है."</string>
+ <string name="permlab_authenticateAccounts" msgid="3940505577982882450">"खाता प्रमाणकर्त्ता के रूप में कार्य करें"</string>
+ <string name="permdesc_authenticateAccounts" msgid="4006839406474208874">"एप्िलकेशन को खाता बनाने और उनके पासवर्ड प्राप्त करने और सेट करने समेत, खाता प्रबंधक की खाता प्रमाणीकरण क्षमताओं का उपयोग करने की अनुमति देता है."</string>
+ <string name="permlab_manageAccounts" msgid="4440380488312204365">"खाता सूची प्रबंधित करें"</string>
+ <string name="permdesc_manageAccounts" msgid="8804114016661104517">"किसी एप्लिकेशन को खातों को जोड़ना और निकालना एवं उनके पासवर्ड हटाना जैसी कार्रवाईयों को करने की अनुमति देता है."</string>
+ <string name="permlab_useCredentials" msgid="6401886092818819856">"किसी खाते के प्रमाणीकरण क्रेडेंशियल का उपयोग करें"</string>
+ <string name="permdesc_useCredentials" msgid="7416570544619546974">"किसी एप्लिकेशन को प्रमाणीकरण टोकन अनुरोध करने की अनुमति देता है."</string>
+ <string name="permlab_accessNetworkState" msgid="6865575199464405769">"नेटवर्क स्थिति देखें"</string>
+ <string name="permdesc_accessNetworkState" msgid="558721128707712766">"किसी एप्लिकेशन को सभी नेटवर्क की स्थिति देखने की अनुमति देता है."</string>
+ <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"पूर्ण इंटरनेट पहुंच"</string>
+ <string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"किसी एप्लिकेशन को नेटवर्क सॉकेट बनाने की अनुमति देता है."</string>
+ <string name="permlab_writeApnSettings" msgid="505660159675751896">"नेटवर्क सेटिंग और ट्रैफ़िक बदलें/रोकें"</string>
+ <string name="permdesc_writeApnSettings" msgid="2369786339323021771">"एप्लिकेशन को नेटवर्क सेटिंग बदलने और सभी नेटवर्क ट्रैफिक को रोकने और उनका निरीक्षण करने देता है, उदाहरण के लिए किसी APN की प्रॉक्सी और पोर्ट बदलना. दुर्भावनापूर्ण एप्लिकेशन आपकी जानकारी के बिना नेटवर्क पैकेट की निगरानी कर सकते हैं, रीडायरेक्ट, या संशोधित कर सकते हैं."</string>
+ <string name="permlab_changeNetworkState" msgid="958884291454327309">"नेटवर्क कनेक्टिविटी बदलें"</string>
+ <string name="permdesc_changeNetworkState" msgid="4199958910396387075">"किसी एप्लिकेशन को नेटवर्क कनेक्टिविटी की स्िथति बदलने की अनुमति देता है."</string>
+ <string name="permlab_changeTetherState" msgid="2702121155761140799">"टेदर की गई कनेक्टिविटी बदलें"</string>
+ <string name="permdesc_changeTetherState" msgid="8905815579146349568">"किसी एप्लिकेशन को टेदर किए गए नेटवर्क कनेक्टिविटी की स्िथति बदलने की अनुमति देता है."</string>
+ <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"पृष्ठभूमि डेटा उपयोग सेटिंग बदलें"</string>
+ <string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"किसी एप्लिकेशन को पृष्ठभूमि डेटा उपयोग सेटिंग बदलने की अनुमति देता है."</string>
+ <string name="permlab_accessWifiState" msgid="8100926650211034400">"Wi-Fi स्थिति देखें"</string>
+ <string name="permdesc_accessWifiState" msgid="485796529139236346">"किसी एप्लिकेशन को Wi-Fi की स्थिति के बारे में जानकारी देखने की अनुमति देता है."</string>
+ <string name="permlab_changeWifiState" msgid="7280632711057112137">"Wi-Fi स्थिति बदलें"</string>
+ <string name="permdesc_changeWifiState" msgid="2950383153656873267">"किसी एप्लिकेशन को Wi-Fi पहुंच बिंदु से कनेक्ट और डिस्कनेक्ट करने और कॉन्फ़िगर किए हुए Wi-Fi नेटवर्क में परिवर्तन करने की अनुमति देता है."</string>
+ <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"Wi-Fi मल्टीकास्ट प्राप्ति को अनुमति दें"</string>
+ <string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"किसी एप्लिकेशन को ऐसे पैकेट प्राप्त करने की अनुमति देता है जो सीधे आपके उपकरण के लिए संबोधित ना हो. आस-पास प्रस्तावित सेवाओं का पता चलने पर यह उपयोगी हो सकता है. यह ग़ैर-मल्टीकास्ट मोड से अधिक पावर का उपयोग करता है."</string>
+ <string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"ब्लूटूथ व्यवस्थापन"</string>
+ <string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"किसी एप्लिकेशन को स्थानीय Bluetooth टेबलेट कॉन्फ़िगर करने की अनुमति देता है, और रिमोट उपकरणों के साथ खोजने और युग्मित करने की अनुमति देता है."</string>
+ <string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"किसी एप्लिकेशन को स्थानीय Bluetooth फ़ोन कॉन्फ़िगर करने की अनुमति देता है, और रिमोट उपकरणों के साथ खोजने और युग्मित करने की अनुमति देता है."</string>
+ <string name="permlab_bluetooth" msgid="8361038707857018732">"Bluetooth कनेक्शन बनाएं"</string>
+ <string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"किसी एप्लिकेशन को स्थानीय Bluetooth टेबलेट का कॉन्फ़िगरेशन देखने की, और युग्मित उपकरणों के साथ कनेक्शन बनाने एवं स्वीकृत करने की अनुमति देता है."</string>
+ <string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"किसी एप्लिकेशन को स्थानीय Bluetooth फ़ोन का कॉन्फ़िगरेशन देखने की, और युग्मित उपकरणों के साथ कनेक्शन बनाने एवं स्वीकृति देने की अनुमति देता है."</string>
+ <string name="permlab_nfc" msgid="4423351274757876953">"नियर फ़ील्ड कम्यूनिकेशन नियंत्रित करें"</string>
+ <string name="permdesc_nfc" msgid="9171401851954407226">"किसी एप्लिकेशन को नियर फ़ील्ड कम्यूनिकेशन (NFC) टैग, कार्ड और रीडर के साथ संचार करने की अनुमति देता है."</string>
+ <string name="permlab_disableKeyguard" msgid="4977406164311535092">"कीलॉक अक्षम करें"</string>
+ <string name="permdesc_disableKeyguard" msgid="3189763479326302017">"किसी एप्लिकेशन को कीलॉक और संबद्ध पासवर्ड सुरक्षा को अक्षम करने की अनुमति देता है. एक विधिक उदाहरण यह है कि फ़ोन कीलॉक तब अक्षम करता है जब इनकमिंग फ़ोन कॉल प्राप्त हो रहा हो, फ़िर कॉल समाप्त हो जाने के बाद कीलॉक पुन: सक्षम करता है."</string>
+ <string name="permlab_readSyncSettings" msgid="6201810008230503052">"सिंक सेटिंग पढ़ें"</string>
+ <string name="permdesc_readSyncSettings" msgid="5315925706353341823">"किसी एप्लिकेशन को सिंक सेटिंग पढ़ने की अनुमति देता है, जैसे संपर्कों के लिए सिंक सक्षम किया गया है या नहीं."</string>
+ <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"सिंक सेटिंग लिखें"</string>
+ <string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"किसी एप्लिकेशन को सिंक सेटिंग संशोधित करने की अनुमति देता है, जैसे संपर्कों के लिए सिंक सक्षम किया गया है या नहीं."</string>
+ <string name="permlab_readSyncStats" msgid="7396577451360202448">"सिंक आंकड़े पढ़ें"</string>
+ <string name="permdesc_readSyncStats" msgid="7511448343374465000">"किसी एप्लिकेशन को सिंक आंकड़े पढ़ने की अनुमति देता है; जैसे, घटित हो चुके सिंक का इतिहास."</string>
+ <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ग्राहकी-प्राप्त फ़ीड पढ़ें"</string>
+ <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"किसी एप्लिकेशन को वर्तमान में सिंक किए गए फ़ीड के बारे में विवरण प्राप्त करने की अनुमति देता है."</string>
+ <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"ग्राहकी-प्राप्त फ़ीड लिखें"</string>
+ <string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"किसी एप्लिकेशन को आपके वर्तमान में सिंक किए गए फ़ीड संशोधित करने की अनुमति देता है. यह किसी दुर्भावनापूर्ण एप्लिकेशन को आपके सिंक किए गए फ़ीड को बदलने की अनुमति दे सकता है."</string>
+ <string name="permlab_readDictionary" msgid="432535716804748781">"उपयोगकर्ता परिभाषित शब्दकोष पढ़ें"</string>
+ <string name="permdesc_readDictionary" msgid="1082972603576360690">"किसी एप्लिकेशन को ऐसे निजी शब्दों, नामों या पदबंधों को पढ़ने की अनुमति देता है जो संभवत: उपयोगकर्ता द्वारा उपयोगकर्ता निर्देशिका में संग्रहीत किए गए हों."</string>
+ <string name="permlab_writeDictionary" msgid="6703109511836343341">"उपयोगकर्ता निर्धारित शब्दकोष में लिखें"</string>
+ <string name="permdesc_writeDictionary" msgid="2241256206524082880">"किसी एप्लिकेशन को उपयोगकर्ता शब्दकोष में नए शब्द लिखने की अनुमति देता है."</string>
+ <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"USB संग्रहण सामग्रियों को संशोधित करें/हटाएं"</string>
+ <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SD कार्ड सामग्रियां संशोधित करें/हटाएं"</string>
+ <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6594393334785738252">"किसी एप्लिकेशन को USB संग्रहण पर लिखने की अनुमति देता है."</string>
+ <string name="permdesc_sdcardWrite" product="default" msgid="6643963204976471878">"किसी एप्लिकेशन को SD कार्ड पर लिखने की अनुमति देता है."</string>
+ <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"आंतरिक मीडिया संग्रहण सामग्रियों को संशोधित करें/हटाएं"</string>
+ <string name="permdesc_mediaStorageWrite" product="default" msgid="8232008512478316233">"किसी एप्लिकेशन को आंतरिक मीडिया संग्रहण संशोधित करने की अनुमति देता है."</string>
+ <string name="permlab_cache_filesystem" msgid="5656487264819669824">"कैश फ़ाइल सिस्टम में पहंचे"</string>
+ <string name="permdesc_cache_filesystem" msgid="1624734528435659906">"किसी एप्लिकेशन को कैश फ़ाइल सिस्टम पढ़ने और लिखने की अनुमति देता है."</string>
+ <string name="permlab_use_sip" msgid="5986952362795870502">"इंटरनेट कॉल करें/प्राप्त करें"</string>
+ <string name="permdesc_use_sip" msgid="6320376185606661843">"किसी एप्लिकेशन को इंटरनेट कॉल करने/प्राप्त करने के लिए SIP सेवा का उपयोग करने की अनुमति देता है."</string>
+ <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"ऐतिहासिक नेटवर्क उपयोग पढें"</string>
+ <string name="permdesc_readNetworkUsageHistory" msgid="6040738474779135653">"किसी एप्लिकेशन को विशिष्ट नेटवर्कों और एप्लिकेशन के लिए ऐतिहासिक नेटवर्क उपयोग पढ़ने की अनुमति देता है."</string>
+ <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"नेटवर्क नीति प्रबंधित करें"</string>
+ <string name="permdesc_manageNetworkPolicy" msgid="3723795285132803958">"किसी एप्लिकेशन को नेटवर्क नीतियां प्रबंधित करने और एप्लिकेशन-विशिष्ट नियमों को परिभाषित करने की सुविधा देता है."</string>
+ <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"नेटवर्क उपयोग हिसाब संशोधित करें"</string>
+ <string name="permdesc_modifyNetworkAccounting" msgid="8702285686629184404">"एप्लिकेशन के लिए नेटवर्क उपयोग का हिसाब रखने का तरीका संशोधित करने देता है. सामान्य एप्लिकेशन द्वारा उपयोग के लिए नहीं है."</string>
+ <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" product="tablet" msgid="933601759466308092">"स्क्रीन अनलॉक करने के दौरान गलत पासवर्ड लिखे जाने की संख्या पर नज़र रखता है, और यदि कई बार पासवर्ड गलत लिखा गया हो तो टेबलेट लॉक करता है या टेबलेट के सभी डेटा को मिटा देता है"</string>
+ <string name="policydesc_watchLogin" product="default" 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>
+ <string name="policydesc_wipeData" product="tablet" msgid="314455232799486222">"फ़ैक्ट्री डेटा रीसेट निष्पादित करके बिना चेतावनी के टेबलेट का डेटा मिटाएं"</string>
+ <string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"फ़ैक्ट्री डेटा रीसेट करके, बिना चेतावनी के फ़ोन का डेटा मिटाएं"</string>
+ <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"उपकरण वैश्विक प्रॉक्सी सेट करें"</string>
+ <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"नीति सक्षम होने के दौरान उपकरण वैश्विक प्रॉक्सी सेट करें. केवल पहला उपकरण व्यवस्थापक, प्रभावी वैश्विक प्रॉक्सी सेट करता है."</string>
+ <string name="policylab_expirePassword" msgid="885279151847254056">"स्क्रीन लॉक करें पासवर्ड समाप्ति सेट करें"</string>
+ <string name="policydesc_expirePassword" msgid="4844430354224822074">"नियंत्रित करें कि कितने समय में स्क्रीन लॉक करें पासवर्ड बदला जाना चाहिए"</string>
+ <string name="policylab_encryptedStorage" msgid="8901326199909132915">"संग्रहण एन्क्रिप्शन सेट करें"</string>
+ <string name="policydesc_encryptedStorage" msgid="2504984732631479399">"संग्रहीत एप्लिकेशन डेटा को एन्क्रिप्ट किए जाने की आवश्यकता होती है"</string>
+ <string name="policylab_disableCamera" msgid="6395301023152297826">"कैमरों को अक्षम करें"</string>
+ <string name="policydesc_disableCamera" msgid="5680054212889413366">"सभी उपकरण कैमरों का उपयोग रोकें"</string>
+ <string-array name="phoneTypes">
+ <item msgid="8901098336658710359">"घर"</item>
+ <item msgid="869923650527136615">"मोबाइल"</item>
+ <item msgid="7897544654242874543">"कार्यालय"</item>
+ <item msgid="1103601433382158155">"कार्यालय का फ़ैक्स"</item>
+ <item msgid="1735177144948329370">"घर का फ़ैक्स"</item>
+ <item msgid="603878674477207394">"पेजर"</item>
+ <item msgid="1650824275177931637">"अन्य"</item>
+ <item msgid="9192514806975898961">"कस्टम"</item>
+ </string-array>
+ <string-array name="emailAddressTypes">
+ <item msgid="8073994352956129127">"घर"</item>
+ <item msgid="7084237356602625604">"कार्यालय"</item>
+ <item msgid="1112044410659011023">"अन्य"</item>
+ <item msgid="2374913952870110618">"कस्टम"</item>
+ </string-array>
+ <string-array name="postalAddressTypes">
+ <item msgid="6880257626740047286">"घर"</item>
+ <item msgid="5629153956045109251">"कार्यालय"</item>
+ <item msgid="4966604264500343469">"अन्य"</item>
+ <item msgid="4932682847595299369">"कस्टम"</item>
+ </string-array>
+ <string-array name="imAddressTypes">
+ <item msgid="1738585194601476694">"घर"</item>
+ <item msgid="1359644565647383708">"कार्यालय"</item>
+ <item msgid="7868549401053615677">"अन्य"</item>
+ <item msgid="3145118944639869809">"कस्टम"</item>
+ </string-array>
+ <string-array name="organizationTypes">
+ <item msgid="7546335612189115615">"कार्यालय"</item>
+ <item msgid="4378074129049520373">"अन्य"</item>
+ <item msgid="3455047468583965104">"कस्टम"</item>
+ </string-array>
+ <string-array name="imProtocols">
+ <item msgid="8595261363518459565">"AIM"</item>
+ <item msgid="7390473628275490700">"Windows Live"</item>
+ <item msgid="7882877134931458217">"Yahoo"</item>
+ <item msgid="5035376313200585242">"Skype"</item>
+ <item msgid="7532363178459444943">"QQ"</item>
+ <item msgid="3713441034299660749">"Google टॉक"</item>
+ <item msgid="2506857312718630823">"ICQ"</item>
+ <item msgid="1648797903785279353">"Jabber"</item>
+ </string-array>
+ <string name="phoneTypeCustom" msgid="1644738059053355820">"कस्टम"</string>
+ <string name="phoneTypeHome" msgid="2570923463033985887">"घर"</string>
+ <string name="phoneTypeMobile" msgid="6501463557754751037">"मोबाइल"</string>
+ <string name="phoneTypeWork" msgid="8863939667059911633">"कार्यालय"</string>
+ <string name="phoneTypeFaxWork" msgid="3517792160008890912">"कार्यालय का फ़ैक्स"</string>
+ <string name="phoneTypeFaxHome" msgid="2067265972322971467">"घर का फ़ैक्स"</string>
+ <string name="phoneTypePager" msgid="7582359955394921732">"पेजर"</string>
+ <string name="phoneTypeOther" msgid="1544425847868765990">"अन्य"</string>
+ <string name="phoneTypeCallback" msgid="2712175203065678206">"पुन: कॉल करें"</string>
+ <string name="phoneTypeCar" msgid="8738360689616716982">"कार"</string>
+ <string name="phoneTypeCompanyMain" msgid="540434356461478916">"कंपनी का मुख्य"</string>
+ <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+ <string name="phoneTypeMain" msgid="6766137010628326916">"मुख्य"</string>
+ <string name="phoneTypeOtherFax" msgid="8587657145072446565">"अन्य फ़ैक्स"</string>
+ <string name="phoneTypeRadio" msgid="4093738079908667513">"रेडियो"</string>
+ <string name="phoneTypeTelex" msgid="3367879952476250512">"टेलेक्स"</string>
+ <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+ <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"कार्यालय का मोबाइल"</string>
+ <string name="phoneTypeWorkPager" msgid="649938731231157056">"कार्यालय का पेजर"</string>
+ <string name="phoneTypeAssistant" msgid="5596772636128562884">"सहायक"</string>
+ <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+ <string name="eventTypeCustom" msgid="7837586198458073404">"कस्टम"</string>
+ <string name="eventTypeBirthday" msgid="2813379844211390740">"जन्मदिन"</string>
+ <string name="eventTypeAnniversary" msgid="3876779744518284000">"वर्षगांठ"</string>
+ <string name="eventTypeOther" msgid="7388178939010143077">"अन्य"</string>
+ <string name="emailTypeCustom" msgid="8525960257804213846">"कस्टम"</string>
+ <string name="emailTypeHome" msgid="449227236140433919">"घर"</string>
+ <string name="emailTypeWork" msgid="3548058059601149973">"कार्यालय"</string>
+ <string name="emailTypeOther" msgid="2923008695272639549">"अन्य"</string>
+ <string name="emailTypeMobile" msgid="119919005321166205">"मोबाइल"</string>
+ <string name="postalTypeCustom" msgid="8903206903060479902">"कस्टम"</string>
+ <string name="postalTypeHome" msgid="8165756977184483097">"घर"</string>
+ <string name="postalTypeWork" msgid="5268172772387694495">"कार्यालय"</string>
+ <string name="postalTypeOther" msgid="2726111966623584341">"अन्य"</string>
+ <string name="imTypeCustom" msgid="2074028755527826046">"कस्टम"</string>
+ <string name="imTypeHome" msgid="6241181032954263892">"घर"</string>
+ <string name="imTypeWork" msgid="1371489290242433090">"कार्यालय"</string>
+ <string name="imTypeOther" msgid="5377007495735915478">"अन्य"</string>
+ <string name="imProtocolCustom" msgid="6919453836618749992">"कस्टम"</string>
+ <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+ <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+ <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+ <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+ <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+ <string name="imProtocolGoogleTalk" msgid="3808393979157698766">"Google टॉक"</string>
+ <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">"कार्यालय"</string>
+ <string name="orgTypeOther" msgid="3951781131570124082">"अन्य"</string>
+ <string name="orgTypeCustom" msgid="225523415372088322">"कस्टम"</string>
+ <string name="relationTypeCustom" msgid="3542403679827297300">"कस्टम"</string>
+ <string name="relationTypeAssistant" msgid="6274334825195379076">"सहायक"</string>
+ <string name="relationTypeBrother" msgid="8757913506784067713">"भाई"</string>
+ <string name="relationTypeChild" msgid="1890746277276881626">"बच्चा"</string>
+ <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"घरेलू सहयोगी"</string>
+ <string name="relationTypeFather" msgid="5228034687082050725">"पिता"</string>
+ <string name="relationTypeFriend" msgid="7313106762483391262">"मित्र"</string>
+ <string name="relationTypeManager" msgid="6365677861610137895">"प्रबंधक"</string>
+ <string name="relationTypeMother" msgid="4578571352962758304">"मां"</string>
+ <string name="relationTypeParent" msgid="4755635567562925226">"अभिभावक"</string>
+ <string name="relationTypePartner" msgid="7266490285120262781">"सहयोगी"</string>
+ <string name="relationTypeReferredBy" msgid="101573059844135524">"इसके द्वारा संदर्भित"</string>
+ <string name="relationTypeRelative" msgid="1799819930085610271">"संबंधी"</string>
+ <string name="relationTypeSister" msgid="1735983554479076481">"बहन"</string>
+ <string name="relationTypeSpouse" msgid="394136939428698117">"पति/पत्नी"</string>
+ <string name="sipAddressTypeCustom" msgid="2473580593111590945">"कस्टम"</string>
+ <string name="sipAddressTypeHome" msgid="6093598181069359295">"घर"</string>
+ <string name="sipAddressTypeWork" msgid="6920725730797099047">"कार्यालय"</string>
+ <string name="sipAddressTypeOther" msgid="4408436162950119849">"अन्य"</string>
+ <string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"पिन कोड दर्ज करें"</string>
+ <string name="keyguard_password_enter_puk_code" msgid="5965173481572346878">"PUK और नया पिन कोड लिखें"</string>
+ <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK कोड"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="2987350144349051286">"नया पिन कोड"</string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"पासवर्ड दर्ज करने के लिए स्पर्श करें"</font></string>
+ <string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"अनलॉक करने के लिए पासवर्ड दर्ज करें"</string>
+ <string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"अनलॉक करने के लिए पिन दर्ज करें"</string>
+ <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"गलत PIN कोड!"</string>
+ <string name="keyguard_label_text" msgid="861796461028298424">"अनलॉक करने के लिए, मेनू दबाएं और फिर 0 दबाएं."</string>
+ <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"आपातकालीन नंबर"</string>
+ <string name="lockscreen_carrier_default" msgid="8963839242565653192">"कोई सेवा नहीं."</string>
+ <string name="lockscreen_screen_locked" msgid="7288443074806832904">"स्क्रीन लॉक की गई है."</string>
+ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"अनलॉक करने के लिए मेनू दबाएं या आपातलकालीन कॉल करें."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"अनलॉक करने के लिए मेनू दबाएं."</string>
+ <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"अनलॉक करने के लिए प्रतिमान आरेखित करें"</string>
+ <string name="lockscreen_emergency_call" msgid="5347633784401285225">"आपातकालीन कॉल"</string>
+ <string name="lockscreen_return_to_call" msgid="5244259785500040021">"कॉल पर वापस लौटें"</string>
+ <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"सही!"</string>
+ <string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"क्षमा करें, पुन: प्रयास करें"</string>
+ <string name="lockscreen_password_wrong" msgid="6237443657358168819">"क्षमा करें, पुन: प्रयास करें"</string>
+ <string name="lockscreen_plugged_in" msgid="8057762828355572315">"चार्ज हो रही है, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="lockscreen_charged" msgid="4938930459620989972">"चार्ज हो चुकी है."</string>
+ <string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="lockscreen_low_battery" msgid="1482873981919249740">"अपना चार्जर कनेक्ट करें."</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"कोई सिम कार्ड नहीं है."</string>
+ <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"टेबलेट में कोई सिम कार्ड नहीं है."</string>
+ <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"फ़ोन में कोई सिम कार्ड नहीं है."</string>
+ <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"कृपया एक सिम कार्ड सम्मिलित करें."</string>
+ <string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"सिम कार्ड गुम है या पढ़ने योग्य नहीं है. कृपया सिम कार्ड डालें."</string>
+ <string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"आपका सिम कार्ड स्थायी रूप से अक्षम है."\n" कोई अन्य सिम कार्ड प्राप्त करने के लिए कृपया अपने वायरलेस सेवा प्रदाता से संपर्क करें."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"पिछला ट्रैक बटन"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"अगला ट्रैक बटन"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"रोकें बटन"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"चलाएं बटन"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"रोकें बटन"</string>
+ <string name="emergency_calls_only" msgid="6733978304386365407">"केवल आपातकालीन कॉल"</string>
+ <string name="lockscreen_network_locked_message" msgid="143389224986028501">"नेटवर्क लॉक किया गया"</string>
+ <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"सिम कार्ड PUK-लॉक किया हुआ है."</string>
+ <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"कृपया उपयोगकर्ता मार्गदर्शिका देखें या ग्राहक सहायता से संपर्क करें."</string>
+ <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"सिम कार्ड लॉक किया गया है."</string>
+ <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"सिम कार्ड अनलॉक कर रहा है…"</string>
+ <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"आपने अपना अनलॉक वर्तमान में <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत आरेखित किया है. "\n\n"कृपया <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+ <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"आपने अपना पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत दर्ज किया है. "\n\n"कृपया <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+ <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"आपने अपनी पिन <xliff:g id="NUMBER_0">%d</xliff:g> बार दर्ज की है. "\n\n"कृपया <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="8687762517114904651">"आपने अपना अनलॉक प्रतिमान गलत तरीके से <xliff:g id="NUMBER_0">%d</xliff:g> बार आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने Google साइन-इन का उपयोग करते हुए अपने टेबलेट को अनलॉक करने को कहा जाएगा."\n\n" कृपया <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="3351013842320127827">"आपने अपना अनलॉक प्रतिमान <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने Google साइन-इन का उपयोग करते हुए फ़ोन को अनलॉक करने को कहा जाएगा."\n\n" कृपया <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"आप गलत तरीके से टेबलेट को अनलॉक करने का प्रयास <xliff:g id="NUMBER_0">%d</xliff:g> बार कर चुके हैं. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयास के बाद, टेबलेट फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"आप गलत तरीके से फ़ोन को अनलॉक करने का प्रयास <xliff:g id="NUMBER_0">%d</xliff:g> बार कर चुके हैं. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयास के बाद, फ़ोन फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"आप टेबलेट को गलत तरीके से <xliff:g id="NUMBER">%d</xliff:g> बार अनलॉक करने का प्रयास कर चुके हैं. टेबलेट अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string>
+ <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"आप फ़ोन को गलत तरीके से <xliff:g id="NUMBER">%d</xliff:g> बार अनलॉक करने का प्रयास कर चुके हैं. फ़ोन अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string>
+ <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+ <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"प्रतिमान भूल गए?"</string>
+ <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"खाता अनलॉक"</string>
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"बहुत सारे प्रतिमान प्रयास!"</string>
+ <string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"अनलॉक करने के लिए, अपने Google खाते के साथ साइन इन करें"</string>
+ <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"उपयोगकर्ता नाम (ईमेल)"</string>
+ <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"पासवर्ड"</string>
+ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"साइन इन करें"</string>
+ <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"अमान्य उपयोगकर्ता नाम या पासवर्ड."</string>
+ <string name="lockscreen_glogin_account_recovery_hint" msgid="8253152905532900548">"अपना उपयोगकर्ता नाम या पासवर्ड भूल गए हैं?"\n<b>"google.com/accounts/recovery"</b>" पर जाएं"</string>
+ <string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"जांच की जा रही है..."</string>
+ <string name="lockscreen_unlock_label" msgid="737440483220667054">"अनलॉक करें"</string>
+ <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"ध्वनि चालू करें"</string>
+ <string name="lockscreen_sound_off_label" msgid="996822825154319026">"ध्वनि बंद"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"प्रतिमान प्रारंभ किया गया"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"प्रतिमान साफ़ किया गया"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"कक्ष जोड़ा गया"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"प्रतिमान पूरा किया गया"</string>
+ <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+ <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+ <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+ <string name="hour_ampm" msgid="4329881288269772723">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+ <string name="hour_cap_ampm" msgid="1829009197680861107">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+ <string name="factorytest_failed" msgid="5410270329114212041">"फ़ैक्ट्री परीक्षण विफल"</string>
+ <string name="factorytest_not_system" msgid="4435201656767276723">"FACTORY_TEST क्रिया केवल /system/app में इंस्टॉल किए गए पैकेज के लिए समर्थित है."</string>
+ <string name="factorytest_no_action" msgid="872991874799998561">"ऐसा कोई पैकेज नहीं मिला था जो FACTORY_TEST कार्रवाई प्रदान करता हो."</string>
+ <string name="factorytest_reboot" msgid="6320168203050791643">"रीबूट करें"</string>
+ <string name="js_dialog_title" msgid="8143918455087008109">"\'<xliff:g id="TITLE">%s</xliff:g>\' पर पृष्ठ कहता है:"</string>
+ <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
+ <string name="js_dialog_before_unload" msgid="1901675448179653089">"इस पृष्ठ से दूर नेविगेट करें?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"जारी रखने के लिए ठीक का चयन करें, या वर्तमान पृष्ठ पर रहने के लिए रद्द करें का चयन करें."</string>
+ <string name="save_password_label" msgid="6860261758665825069">"पुष्टि करें"</string>
+ <string name="double_tap_toast" msgid="1068216937244567247">"युक्ति: ज़म इन और आउट के लिए दो बार टैप करें."</string>
+ <string name="autofill_this_form" msgid="1272247532604569872">"स्वतः भरण"</string>
+ <string name="setup_autofill" msgid="8154593408885654044">"स्वत: भरण सेटअप करें"</string>
+ <string name="autofill_address_name_separator" msgid="2504700673286691795">" "</string>
+ <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
+ <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
+ <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
+ <string name="autofill_province" msgid="2231806553863422300">"प्रांत"</string>
+ <string name="autofill_postal_code" msgid="4696430407689377108">"डाक कोड"</string>
+ <string name="autofill_state" msgid="6988894195520044613">"राज्य"</string>
+ <string name="autofill_zip_code" msgid="8697544592627322946">"ज़िप कोड"</string>
+ <string name="autofill_county" msgid="237073771020362891">"काउंटी"</string>
+ <string name="autofill_island" msgid="4020100875984667025">"द्वीप"</string>
+ <string name="autofill_district" msgid="8400735073392267672">"जिला"</string>
+ <string name="autofill_department" msgid="5343279462564453309">"विभाग"</string>
+ <string name="autofill_prefecture" msgid="2028499485065800419">"प्रशासकीय क्षेत्र"</string>
+ <string name="autofill_parish" msgid="8202206105468820057">"मोहल्ला"</string>
+ <string name="autofill_area" msgid="3547409050889952423">"क्षेत्र"</string>
+ <string name="autofill_emirate" msgid="2893880978835698818">"अमीरात"</string>
+ <string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"ब्राउज़र का इतिहास और बुकमार्क पढ़ें"</string>
+ <string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"एप्लिकेशन को ब्राउज़र द्वारा विज़िट किए गए सभी URL और ब्राउज़र के सभी बुकमार्क को पढ़ने की अनुमति देता है."</string>
+ <string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"ब्राउज़र का इतिहास और बुकमार्क लिखें"</string>
+ <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="7193514090469945307">"किसी एप्लिकेशन को आपके टेबलेट पर संग्रहीत ब्राउज़र का इतिहास या बुकमार्क संशोधित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन आपके ब्राउज़र के डेटा को मिटाने या संशोधित करने में इसका उपयोग कर सकती हैं."</string>
+ <string name="permdesc_writeHistoryBookmarks" product="default" msgid="945571990357114950">"किसी एप्लिकेशन को आपके फ़ोन पर संग्रहीत ब्राउज़र का इतिहास या बुकमार्क संशोधित करने की सुविधा देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग आपके ब्राउज़र के डेटा को मिटाने या संशोधित करने में कर सकती हैं."</string>
+ <string name="permlab_setAlarm" msgid="5924401328803615165">"अलार्म क्लॉक में अलार्म सेट करें"</string>
+ <string name="permdesc_setAlarm" msgid="5966966598149875082">"किसी एप्लिकेशन को इंस्टॉल की गई अलार्म क्लॉक एप्लिकेशन में अलार्म सेट करने की अनुमति देता है. हो सकता है कुछ अलार्म क्लॉक एप्लिकेशन इस सुविधा को लागू नहीं कर सकें."</string>
+ <string name="permlab_addVoicemail" msgid="5525660026090959044">"ध्वनिमेल जोड़ें"</string>
+ <string name="permdesc_addVoicemail" msgid="4828507394878206682">"एप्लिकेशन को आपके ध्वनिमेल इनबॉक्स में संदेश जोड़ने देता है."</string>
+ <string name="permlab_writeGeolocationPermissions" msgid="4715212655598275532">"ब्राउज़र भौगोलिक-स्थान अनुमतियों को संशोधित करें"</string>
+ <string name="permdesc_writeGeolocationPermissions" msgid="4011908282980861679">"किसी एप्लिकेशन को ब्राउज़र के भौगोलिक स्थान की अनुमतियों को संशोधित करने की अनुमति देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग स्वेच्छाचारी वेब साइट को स्थान जानकारी भेजने की अनुमति देने में कर सकती हैं."</string>
+ <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"पैकेज सत्यापित करें"</string>
+ <string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"एप्लिकेशन को इंस्टॉल करने योग्य पैकेज सत्यापित करने देता है."</string>
+ <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"पैकेज प्रमाणक से आबद्ध करें"</string>
+ <string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"धारक को पैकेज प्रमाणक के अनुरोध करने की अनुमति देता है. सामान्य एप्लिकेशन के लिए कभी आवश्यक नहीं होना चाहिए."</string>
+ <string name="save_password_message" msgid="767344687139195790">"क्या आप चाहते हैं कि ब्राउज़र पासवर्ड को याद रखे?"</string>
+ <string name="save_password_notnow" msgid="6389675316706699758">"अभी नहीं"</string>
+ <string name="save_password_remember" msgid="6491879678996749466">"याद रखें"</string>
+ <string name="save_password_never" msgid="8274330296785855105">"कभी नहीं"</string>
+ <string name="open_permission_deny" msgid="5661861460947222274">"आपके पास इस पृष्ठ को खोलने की अनुमति नहीं है."</string>
+ <string name="text_copied" msgid="4985729524670131385">"पाठ की क्लिपबोर्ड पर प्रतिलिपि बनाई गई."</string>
+ <string name="more_item_label" msgid="4650918923083320495">"अधिक"</string>
+ <string name="prepend_shortcut_label" msgid="2572214461676015642">"मेनू+"</string>
+ <string name="menu_space_shortcut_label" msgid="2410328639272162537">"space"</string>
+ <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
+ <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"हटाएं"</string>
+ <string name="search_go" msgid="8298016669822141719">"खोजें"</string>
+ <string name="searchview_description_search" msgid="6749826639098512120">"खोजें"</string>
+ <string name="searchview_description_query" msgid="5911778593125355124">"खोज क्वेरी"</string>
+ <string name="searchview_description_clear" msgid="1330281990951833033">"क्वेरी साफ़ करें"</string>
+ <string name="searchview_description_submit" msgid="2688450133297983542">"क्वेरी सबमिट करें"</string>
+ <string name="searchview_description_voice" msgid="2453203695674994440">"ध्वनि खोज"</string>
+ <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 माह पहले"</string>
+ <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 माह से पहले"</string>
+ <plurals name="num_seconds_ago">
+ <item quantity="one" msgid="4869870056547896011">"1 सेकंड पहले"</item>
+ <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> सेकंड पहले"</item>
+ </plurals>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="3306787433088810191">"1 मिनट पहले"</item>
+ <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> मिनट पहले"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="9150797944610821849">"1 घंटे पहले"</item>
+ <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> घंटे पहले"</item>
+ </plurals>
+ <plurals name="last_num_days">
+ <item quantity="other" msgid="3069992808164318268">"अंतिम <xliff:g id="COUNT">%d</xliff:g> दिन"</item>
+ </plurals>
+ <string name="last_month" msgid="3959346739979055432">"पिछला माह"</string>
+ <string name="older" msgid="5211975022815554840">"इससे पुराना"</string>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="861358534398115820">"बीता कल"</item>
+ <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> दिन पहले"</item>
+ </plurals>
+ <plurals name="in_num_seconds">
+ <item quantity="one" msgid="2729745560954905102">"1 सेकंड में"</item>
+ <item quantity="other" msgid="1241926116443974687">"<xliff:g id="COUNT">%d</xliff:g> सेकंड में"</item>
+ </plurals>
+ <plurals name="in_num_minutes">
+ <item quantity="one" msgid="8793095251325200395">"1 मिनट में"</item>
+ <item quantity="other" msgid="3330713936399448749">"<xliff:g id="COUNT">%d</xliff:g> मिनट में"</item>
+ </plurals>
+ <plurals name="in_num_hours">
+ <item quantity="one" msgid="7164353342477769999">"1 घंटे में"</item>
+ <item quantity="other" msgid="547290677353727389">"<xliff:g id="COUNT">%d</xliff:g> घंटे में"</item>
+ </plurals>
+ <plurals name="in_num_days">
+ <item quantity="one" msgid="5413088743009839518">"आने वाला कल"</item>
+ <item quantity="other" msgid="5109449375100953247">"<xliff:g id="COUNT">%d</xliff:g> दिन में"</item>
+ </plurals>
+ <plurals name="abbrev_num_seconds_ago">
+ <item quantity="one" msgid="1849036840200069118">"1 सेकंड पहले"</item>
+ <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> सेकंड पहले"</item>
+ </plurals>
+ <plurals name="abbrev_num_minutes_ago">
+ <item quantity="one" msgid="6361490147113871545">"1 मिनट पहले"</item>
+ <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> मिनट पहले"</item>
+ </plurals>
+ <plurals name="abbrev_num_hours_ago">
+ <item quantity="one" msgid="4796212039724722116">"1 घंटे पहले"</item>
+ <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> घंटे पहले"</item>
+ </plurals>
+ <plurals name="abbrev_num_days_ago">
+ <item quantity="one" msgid="8463161711492680309">"बीता कल"</item>
+ <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> दिन पहले"</item>
+ </plurals>
+ <plurals name="abbrev_in_num_seconds">
+ <item quantity="one" msgid="5842225370795066299">"1 सेकंड में"</item>
+ <item quantity="other" msgid="5495880108825805108">"<xliff:g id="COUNT">%d</xliff:g> सेकंड में"</item>
+ </plurals>
+ <plurals name="abbrev_in_num_minutes">
+ <item quantity="one" msgid="562786149928284878">"1 मिनट में"</item>
+ <item quantity="other" msgid="4216113292706568726">"<xliff:g id="COUNT">%d</xliff:g> मिनट में"</item>
+ </plurals>
+ <plurals name="abbrev_in_num_hours">
+ <item quantity="one" msgid="3274708118124045246">"1 घंटे में"</item>
+ <item quantity="other" msgid="3705373766798013406">"<xliff:g id="COUNT">%d</xliff:g> घंटे में"</item>
+ </plurals>
+ <plurals name="abbrev_in_num_days">
+ <item quantity="one" msgid="2178576254385739855">"आने वाला कल"</item>
+ <item quantity="other" msgid="2973062968038355991">"<xliff:g id="COUNT">%d</xliff:g> दिन में"</item>
+ </plurals>
+ <string name="preposition_for_date" msgid="9093949757757445117">"<xliff:g id="DATE">%s</xliff:g> को"</string>
+ <string name="preposition_for_time" msgid="5506831244263083793">"<xliff:g id="TIME">%s</xliff:g> पर"</string>
+ <string name="preposition_for_year" msgid="5040395640711867177">"<xliff:g id="YEAR">%s</xliff:g> में"</string>
+ <string name="day" msgid="8144195776058119424">"दिन"</string>
+ <string name="days" msgid="4774547661021344602">"दिन"</string>
+ <string name="hour" msgid="2126771916426189481">"घंटा"</string>
+ <string name="hours" msgid="894424005266852993">"घंटे"</string>
+ <string name="minute" msgid="9148878657703769868">"मिनट"</string>
+ <string name="minutes" msgid="5646001005827034509">"मिनट"</string>
+ <string name="second" msgid="3184235808021478">"सेकंड"</string>
+ <string name="seconds" msgid="3161515347216589235">"सेकंड"</string>
+ <string name="week" msgid="5617961537173061583">"सप्ताह"</string>
+ <string name="weeks" msgid="6509623834583944518">"सप्ताह"</string>
+ <string name="year" msgid="4001118221013892076">"वर्ष"</string>
+ <string name="years" msgid="6881577717993213522">"वर्ष"</string>
+ <string name="VideoView_error_title" msgid="3359437293118172396">"वीडियो चला नहीं सकते"</string>
+ <string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"क्षमा करें, यह वीडियो इस उपकरण की स्ट्रीमिंग के लिए मान्य नहीं है."</string>
+ <string name="VideoView_error_text_unknown" msgid="710301040038083944">"क्षमा करें, इस वीडियो को चलाया नहीं जा सकता."</string>
+ <string name="VideoView_error_button" msgid="2822238215100679592">"ठीक"</string>
+ <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="noon" msgid="7245353528818587908">"अपराह्न"</string>
+ <string name="Noon" msgid="3342127745230013127">"अपराह्न"</string>
+ <string name="midnight" msgid="7166259508850457595">"मध्यरात्रि"</string>
+ <string name="Midnight" msgid="5630806906897892201">"मध्यरात्रि"</string>
+ <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+ <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+ <string name="selectAll" msgid="6876518925844129331">"सभी का चयन करें"</string>
+ <string name="cut" msgid="3092569408438626261">"काटें"</string>
+ <string name="copy" msgid="2681946229533511987">"प्रतिलिपि बनाएं"</string>
+ <string name="paste" msgid="5629880836805036433">"चिपकाएं"</string>
+ <string name="replace" msgid="5781686059063148930">"बदलें•"</string>
+ <string name="delete" msgid="6098684844021697789">"हटाएं"</string>
+ <string name="copyUrl" msgid="2538211579596067402">"URL की प्रतिलिपि बनाएं"</string>
+ <string name="selectTextMode" msgid="6738556348861347240">"पाठ का चयन करें..."</string>
+ <string name="textSelectionCABTitle" msgid="5236850394370820357">"पाठ चयन"</string>
+ <string name="addToDictionary" msgid="9090375111134433012">"डिक्शनरी में जोड़ें"</string>
+ <string name="deleteText" msgid="7070985395199629156">"हटाएं"</string>
+ <string name="inputMethod" msgid="1653630062304567879">"इनपुट विधि"</string>
+ <string name="editTextMenuTitle" msgid="4909135564941815494">"पाठ क्रियाएं"</string>
+ <string name="low_internal_storage_view_title" msgid="1399732408701697546">"स्थान की कमी"</string>
+ <string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"टेबलेट संग्रहण स्थान कम हो रहा है."</string>
+ <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"फ़ोन संग्रहण स्थान कम हो रहा है."</string>
+ <string name="ok" msgid="5970060430562524910">"ठीक"</string>
+ <string name="cancel" msgid="6442560571259935130">"रद्द करें"</string>
+ <string name="yes" msgid="5362982303337969312">"ठीक"</string>
+ <string name="no" msgid="5141531044935541497">"रद्द करें"</string>
+ <string name="dialog_alert_title" msgid="2049658708609043103">"ध्यानाकर्षण"</string>
+ <string name="loading" msgid="1760724998928255250">"लोड हो रहा है..."</string>
+ <string name="capital_on" msgid="1544682755514494298">"चालू"</string>
+ <string name="capital_off" msgid="6815870386972805832">"बंद"</string>
+ <string name="whichApplication" msgid="4533185947064773386">"इसका उपयोग करके क्रिया पूर्ण करें"</string>
+ <string name="alwaysUse" msgid="4583018368000610438">"इस क्रिया के लिए डिफ़ॉल्ट रूप से उपयोग करें."</string>
+ <string name="clearDefaultHintMsg" msgid="4815455344600932173">"होम सेटिंग > एप्लिकेशन > एप्लिकेशन प्रबंधित करें में डिफ़ॉल्ट साफ़ करें."</string>
+ <string name="chooseActivity" msgid="1009246475582238425">"किसी क्रिया का चयन करें"</string>
+ <string name="chooseUsbActivity" msgid="7892597146032121735">"USB उपकरण के लिए किसी एप्लिकेशन का चयन करें"</string>
+ <string name="noApplications" msgid="1691104391758345586">"कोई एप्लिकेशन इस क्रिया को निष्पादित नहीं कर सकती."</string>
+ <string name="aerr_title" msgid="1905800560317137752"></string>
+ <string name="aerr_application" msgid="932628488013092776">"दुर्भाग्यवश, <xliff:g id="APPLICATION">%1$s</xliff:g> रुक गया है."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"दुर्भाग्यवश, <xliff:g id="PROCESS">%1$s</xliff:g> प्रक्रिया रुक गई है."</string>
+ <string name="anr_title" msgid="4351948481459135709"></string>
+ <string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> प्रतिसाद नहीं दे रहा है."\n\n"क्या आप इसे बंद करना चाहेंगे?"</string>
+ <string name="anr_activity_process" msgid="7018289416670457797">"<xliff:g id="ACTIVITY">%1$s</xliff:g> गतिविधि प्रतिसाद नहीं दे रही है."\n\n"क्या आप इसे बंद करना चाहेंगे?"</string>
+ <string name="anr_application_process" msgid="7208175830253210526">"<xliff:g id="APPLICATION">%1$s</xliff:g> प्रतिसाद नहीं दे रहा है. क्या आप इसे बंद करना चाहेंगे?"</string>
+ <string name="anr_process" msgid="306819947562555821">"<xliff:g id="PROCESS">%1$s</xliff:g> प्रक्रिया प्रतिसाद नहीं दे रही है."\n\n"क्या आप इसे बंद करना चाहेंगे?"</string>
+ <string name="force_close" msgid="8346072094521265605">"ठीक"</string>
+ <string name="report" msgid="4060218260984795706">"रिपोर्ट करें"</string>
+ <string name="wait" msgid="7147118217226317732">"प्रतीक्षा करें"</string>
+ <string name="launch_warning_title" msgid="8323761616052121936">"एप्लिकेशन रीडायरेक्ट की गई"</string>
+ <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> अभी चल रहा है."</string>
+ <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> को वास्तविक रूप से लॉन्च किया गया था."</string>
+ <string name="screen_compat_mode_scale" msgid="3202955667675944499">"स्केल"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"हमेशा दिखाएं"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"इसे सेटिंग > एप्लिकेशन > एप्लिकेशन प्रबंधित करें के साथ पुन: सक्षम करें."</string>
+ <string name="smv_application" msgid="295583804361236288">"एप्लिकेशन <xliff:g id="APPLICATION">%1$s</xliff:g> (<xliff:g id="PROCESS">%2$s</xliff:g> प्रक्रिया) ने उसकी स्व-प्रवर्तित StrictMode नीति का उल्लंघन किया है."</string>
+ <string name="smv_process" msgid="5120397012047462446">"प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g> ने उसकी स्व-प्रवर्तित StrictMode नीति का उल्लंघन किया है."</string>
+ <string name="android_upgrading_title" msgid="378740715658358071">"Android अपग्रेड हो रहा है..."</string>
+ <string name="android_upgrading_apk" msgid="274409861603566003">"<xliff:g id="NUMBER_1">%2$d</xliff:g> में से <xliff:g id="NUMBER_0">%1$d</xliff:g> एप्लिकेशन अनुकूलित हो रहा है."</string>
+ <string name="android_upgrading_starting_apps" msgid="7959542881906488763">"एप्लिकेशन प्रारंभ हो रहे हैं."</string>
+ <string name="android_upgrading_complete" msgid="1405954754112999229">"बूट समाप्त हो रहा है."</string>
+ <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> चल रही है"</string>
+ <string name="heavy_weight_notification_detail" msgid="2423977499339403402">"एप्लिकेशन पर स्विच करने के लिए चयन करें"</string>
+ <string name="heavy_weight_switcher_title" msgid="1135403633766694316">"एप्लिकेशन स्विच करें?"</string>
+ <string name="heavy_weight_switcher_text" msgid="4592075610079319667">"आप किसी नई एप्लिकेशन को चला सकें इसके पूर्व, पहले से चल रही दूसरी एप्लिकेशन को बंद किया जाना आवश्यक है."</string>
+ <string name="old_app_action" msgid="493129172238566282">"<xliff:g id="OLD_APP">%1$s</xliff:g> पर वापस लौटें"</string>
+ <string name="old_app_description" msgid="942967900237208466">"नई एप्लिकेशन प्रारंभ ना करें."</string>
+ <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> प्रारंभ करें"</string>
+ <string name="new_app_description" msgid="6830398339826789493">"पुरानी एप्लिकेशन को बिना सहेजे बंद करें."</string>
+ <string name="sendText" msgid="5132506121645618310">"पाठ के लिए क्रिया का चयन करें"</string>
+ <string name="volume_ringtone" msgid="6885421406845734650">"रिंगर वॉल्यूम"</string>
+ <string name="volume_music" msgid="5421651157138628171">"मीडिया वॉल्यूम"</string>
+ <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bluetooth द्वारा चलाया जा रहा है"</string>
+ <string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"मौन रिंगटोन का चयन किया गया"</string>
+ <string name="volume_call" msgid="3941680041282788711">"कॉल के दौरान वॉल्यूम"</string>
+ <string name="volume_bluetooth_call" msgid="2002891926351151534">"Bluetooth कॉल के दौरान वॉल्यूम"</string>
+ <string name="volume_alarm" msgid="1985191616042689100">"अलार्म वॉल्यूम"</string>
+ <string name="volume_notification" msgid="2422265656744276715">"सूचना वॉल्यूम"</string>
+ <string name="volume_unknown" msgid="1400219669770445902">"वॉल्यूम"</string>
+ <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth वॉल्यूम"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"रिंगटोन वॉल्यूम"</string>
+ <string name="volume_icon_description_incall" msgid="8890073218154543397">"कॉल वॉल्यूम"</string>
+ <string name="volume_icon_description_media" msgid="4217311719665194215">"मीडिया वॉल्यूम"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"सूचना वॉल्यूम"</string>
+ <string name="ringtone_default" msgid="3789758980357696936">"डिफ़ॉल्ट रिंगटोन"</string>
+ <string name="ringtone_default_with_actual" msgid="8129563480895990372">"डिफ़ॉल्ट रिंगटोन (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+ <string name="ringtone_silent" msgid="4440324407807468713">"मौन"</string>
+ <string name="ringtone_picker_title" msgid="3515143939175119094">"रिंगटोन"</string>
+ <string name="ringtone_unknown" msgid="5477919988701784788">"अज्ञात रिंगटोन"</string>
+ <plurals name="wifi_available">
+ <item quantity="one" msgid="6654123987418168693">"Wi-Fi नेटवर्क उपलब्ध"</item>
+ <item quantity="other" msgid="4192424489168397386">"Wi-Fi नेटवर्क उपलब्ध"</item>
+ </plurals>
+ <plurals name="wifi_available_detailed">
+ <item quantity="one" msgid="1634101450343277345">"उपलब्ध Wi-Fi नेटवर्क खोलें"</item>
+ <item quantity="other" msgid="7915895323644292768">"खुले Wi-Fi नेटवर्क उपलब्ध है"</item>
+ </plurals>
+ <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi से कनेक्ट नहीं हो सका"</string>
+ <string name="wifi_watchdog_network_disabled_detailed" msgid="4917472096696322767">" के पास एक कमज़ोर इंटरनेट कनेक्शन है."</string>
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi प्रत्यक्ष"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Wi-Fi प्रत्यक्ष कार्यवाही प्रारंभ करें. इससे Wi-Fi क्लाइंट/हॉटस्पॉट कार्यवाही बंद हो जाएगी."</string>
+ <string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Wi-Fi प्रत्यक्ष प्रारंभ नहीं हो सका"</string>
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> से Wi-Fi प्रत्यक्ष कनेक्शन सेटअप अनुरोध. स्वीकार करने के लिए ठीक क्लिक करें."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> से Wi-Fi प्रत्यक्ष कनेक्शन सेटअप अनुरोध. आगे बढ़ने के लिए पिन दर्ज करें."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"कनेक्शन सेटअप को आगे बढ़ाने के लिए WPS पिन <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> को साथी उपकरण <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> पर दर्ज करना आवश्यक है"</string>
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi प्रत्यक्ष चालू है"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"सेटिंग के लिए स्पर्श करें"</string>
+ <string name="select_character" msgid="3365550120617701745">"वर्ण सम्मिलित करें"</string>
+ <string name="sms_control_default_app_name" msgid="7630529934366549163">"अज्ञात एप्लिकेशन"</string>
+ <string name="sms_control_title" msgid="7296612781128917719">"SMS संदेश भेज रहा है"</string>
+ <string name="sms_control_message" msgid="1289331457999236205">"बड़ी संख्या में SMS संदेश भेजे जा रहे हैं. जारी रखने के लिए \"ठीक\" का चयन करें, या भेजना बंद करने के लिए \"रद्द करें\" का चयन करें."</string>
+ <string name="sms_control_yes" msgid="2532062172402615953">"ठीक"</string>
+ <string name="sms_control_no" msgid="1715320703137199869">"रद्द करें"</string>
+ <string name="sim_removed_title" msgid="6227712319223226185">"सिमकार्ड निकाला गया"</string>
+ <string name="sim_removed_message" msgid="2333164559970958645">"मान्य सिम कार्ड डालकर पुन: प्रारंभ करने तक मोबाइल नेटवर्क अनुपलब्ध रहेगा."</string>
+ <string name="sim_done_button" msgid="827949989369963775">"पूर्ण"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"सिम कार्ड जोड़ा गया"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"मोबाइल नेटवर्क पर पहुंचने के लिए आपको अपने उपकरण को पुन: प्रारंभ करना होगा."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"पुन: प्रारंभ करें"</string>
+ <string name="time_picker_dialog_title" msgid="8349362623068819295">"समय सेट करें"</string>
+ <string name="date_picker_dialog_title" msgid="5879450659453782278">"दिनांक सेट करें"</string>
+ <string name="date_time_set" msgid="5777075614321087758">"सेट करें"</string>
+ <string name="default_permission_group" msgid="2690160991405646128">"डिफ़ॉल्ट"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"किसी अनुमति की आवश्यकता नहीं है"</string>
+ <string name="perms_hide" msgid="7283915391320676226"><b>"छुपाएं"</b></string>
+ <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>
+ <string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"आप USB द्वारा अपने कंप्यूटर से कनेक्ट हैं. यदि आप अपने कंप्यूटर और Android के USB संग्रहण के बीच फ़ाइलों की प्रतिलिपि बनाना चाहते हैं तो नीचे बटन को स्पर्श करें."</string>
+ <string name="usb_storage_message" product="default" msgid="4510858346516069238">"आप USB द्वारा अपने कंप्यूटर से कनेक्ट हैं. यदि आपने कंप्यूटर और आपके Android के SD कार्ड के बीच फ़ाइलों की प्रतिलिपि बनाना चाहते हैं तो नीचे बटन को स्पर्श करें."</string>
+ <string name="usb_storage_button_mount" msgid="1052259930369508235">"USB संग्रहण चालू करें"</string>
+ <string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"USB विशाल संग्रहण के लिए आपके USB संग्रहण के उपयोग में समस्या है."</string>
+ <string name="usb_storage_error_message" product="default" msgid="120810397713773275">"USB विशाल संग्रहण के लिए आपके SD कार्ड का उपयोग करने में समस्या है."</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>
+ <string name="usb_storage_stop_message" product="nosdcard" msgid="1368842269463745067">"USB संग्रहण बंद करने के पहले, सुनिश्चित करें कि आपने अपने कंप्यूटर से अपने Android का USB संग्रहण अनमाउंट (“बाहर”) कर दिया है."</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>
+ <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB संग्रहण चालू करें"</string>
+ <string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"यदि आप USB संग्रहण चालू करते हैं, तो आपके द्वारा उपयोग की जारी कुछ एप्लिकेशन बंद हो जाएंगी और जब तक आप USB संग्रहण बंद नहीं करते तब तक संभवत: अनुपलब्ध रहेंगी."</string>
+ <string name="dlg_error_title" msgid="7323658469626514207">"USB कार्यवाही विफल"</string>
+ <string name="dlg_ok" msgid="7376953167039865701">"ठीक"</string>
+ <string name="usb_mtp_notification_title" msgid="3699913097391550394">"किसी मीडिया उपकरण के रूप में कनेक्ट किया गया"</string>
+ <string name="usb_ptp_notification_title" msgid="1960817192216064833">"कैमरे के रूप में कनेक्ट करें"</string>
+ <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"किसी इंस्टॉलर के रूप में कनेक्ट किया गया"</string>
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB सहायक सामग्री से कनेक्ट किया गया"</string>
+ <string name="usb_notification_message" msgid="4447869605109736382">"अन्य USB विकल्पों के लिए स्पर्श करें"</string>
+ <string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"USB संग्रहण प्रारूपित करें"</string>
+ <string name="extmedia_format_title" product="default" msgid="8663247929551095854">"SD कार्ड प्रारूपित करें"</string>
+ <string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"USB संग्रहण में स्टोर की गई सभी फ़ाइल मिटाते हुए उसे फ़ार्मेट करें? क्रिया को पूर्ववत नहीं किया जा सकता है!"</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>
+ <string name="adb_active_notification_message" msgid="8470296818270110396">"USB डीबग करना अक्षम करने के लिए चयन करें."</string>
+ <string name="select_input_method" msgid="6865512749462072765">"इनपुट विधि का चयन करें"</string>
+ <string name="configure_input_methods" msgid="6324843080254191535">"इनपुट पद्धतियां कॉन्फ़िगर करें"</string>
+ <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>
+ <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"USB संग्रहण तैयार किया जा रहा है"</string>
+ <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD कार्ड तैयार कर रहा है"</string>
+ <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"त्रुटियों की जांच कर रहा है."</string>
+ <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"रिक्त USB संग्रहण"</string>
+ <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"रिक्त SD कार्ड"</string>
+ <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="8623130522556087311">"USB संग्रहण रिक्त है या फ़ाइल सिस्टम असमर्थित है."</string>
+ <string name="ext_media_nofs_notification_message" product="default" msgid="3817704088027829380">"SD कार्ड रिक्त है या फ़ाइल सिस्टम असमर्थित है."</string>
+ <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"क्षतिग्रस्त USB संग्रहण"</string>
+ <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"क्षतिग्रस्त SD कार्ड"</string>
+ <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="529021299294450667">"USB संग्रहण क्षतिग्रस्त है. आपको उसे पुन: प्रारूपित करना पड़ सकता है."</string>
+ <string name="ext_media_unmountable_notification_message" product="default" msgid="6902531775948238989">"SD कार्ड क्षतिग्रस्त है. आपको इसे पुन: प्रारूपित करना पड़ सकता है."</string>
+ <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB संग्रहण अप्रत्याशित रूप से निकाला गया"</string>
+ <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD कार्ड को अनपेक्षित रूप से निकाल दिया गया"</string>
+ <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"डेटा हानि से बचने के लिए निकालने से पहले USB संग्रहण अनमाउंट करें."</string>
+ <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"डेटा हानि से बचने के लिए निकालने से पहले SD कार्ड अनमाउंट करें."</string>
+ <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"USB संग्रहण निकालने के लिए सुरक्षित है"</string>
+ <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD कार्ड निकालने के लिए सुरक्षित है"</string>
+ <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"आप USB संग्रहण को सुरक्षित रूप से निकाल सकते हैं."</string>
+ <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"आप SD कार्ड को सुरक्षित रूप से निकाल सकते हैं."</string>
+ <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"USB संग्रहण निकाला गया"</string>
+ <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD कार्ड निकाल दिया गया है"</string>
+ <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB संग्रहण निकाला गया. नया मीडिया सम्मिलित करें."</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>
+ <string name="permdesc_pkgUsageStats" msgid="891553695716752835">"संकलित घटक उपयोग आंकड़ो के संशोधन की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permlab_copyProtectedData" msgid="1660908117394854464">"सामग्री की प्रतिलिपि बनाने के लिए डिफ़ॉल्ट कंटेनर सेवा के बुलावे की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="permdesc_copyProtectedData" msgid="537780957633976401">"सामग्री की प्रतिलिपि बनाने के लिए डिफ़ॉल्ट कंटेनर सेवा के बुलावे की अनुमति देता है. सामान्य एप्लिकेशन द्वारा उपयोग किए जाने के लिए नहीं है."</string>
+ <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"ज़ूम नियंत्रण के लिए दो बार टैप करें"</string>
+ <string name="gadget_host_error_inflating" msgid="2613287218853846830">"त्रुटि वर्धक विजेट"</string>
+ <string name="ime_action_go" msgid="8320845651737369027">"जाएं"</string>
+ <string name="ime_action_search" msgid="658110271822807811">"खोजें"</string>
+ <string name="ime_action_send" msgid="2316166556349314424">"भेजें"</string>
+ <string name="ime_action_next" msgid="3138843904009813834">"अगला"</string>
+ <string name="ime_action_done" msgid="8971516117910934605">"पूर्ण"</string>
+ <string name="ime_action_previous" msgid="1443550039250105948">"पिछला"</string>
+ <string name="ime_action_default" msgid="2840921885558045721">"निष्पादित करें"</string>
+ <string name="dial_number_using" msgid="5789176425167573586">"<xliff:g id="NUMBER">%s</xliff:g> के उपयोग द्वारा "\n" नंबर डायल करें"</string>
+ <string name="create_contact_using" msgid="4947405226788104538">"<xliff:g id="NUMBER">%s</xliff:g> का उपयोग करके"\n" संपर्क बनाएं"</string>
+ <string name="grant_credentials_permission_message_header" msgid="6824538733852821001">"निम्न एक या अधिक एप्लिकेशन अभी और भविष्य में आपके खाते में पहुंच के लिए अनुमति का अनुरोध करती हैं."</string>
+ <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"क्या आप इस अनुरोध को अनुमति देना चाहते हैं?"</string>
+ <string name="grant_permissions_header_text" msgid="2722567482180797717">"पहुंच अनुरोध"</string>
+ <string name="allow" msgid="7225948811296386551">"अनुमति दें"</string>
+ <string name="deny" msgid="2081879885755434506">"अस्वीकारें"</string>
+ <string name="permission_request_notification_title" msgid="5390555465778213840">"अनुमति अनुरोधित"</string>
+ <string name="permission_request_notification_with_subtitle" msgid="4325409589686688000">"<xliff:g id="ACCOUNT">%s</xliff:g> खाते के लिए "\n"अनुमति का अनुरोध किया गया"</string>
+ <string name="input_method_binding_label" msgid="1283557179944992649">"इनपुट विधि"</string>
+ <string name="sync_binding_label" msgid="3687969138375092423">"सिंक"</string>
+ <string name="accessibility_binding_label" msgid="4148120742096474641">"पहुंच-योग्यता"</string>
+ <string name="wallpaper_binding_label" msgid="1240087844304687662">"वॉलपेपर"</string>
+ <string name="chooser_wallpaper" msgid="7873476199295190279">"वॉलपेपर बदलें"</string>
+ <string name="vpn_title" msgid="8219003246858087489">"VPN सक्रिय है."</string>
+ <string name="vpn_title_long" msgid="6400714798049252294">"VPN को <xliff:g id="APP">%s</xliff:g> द्वारा सक्रिय किया गया है"</string>
+ <string name="vpn_text" msgid="1610714069627824309">"नेटवर्क प्रबंधित करने के लिए टैप करें."</string>
+ <string name="vpn_text_long" msgid="4907843483284977618">"<xliff:g id="SESSION">%s</xliff:g> से कनेक्ट किया गया. नेटवर्क प्रबंधित करने के लिए टैप करें."</string>
+ <string name="upload_file" msgid="2897957172366730416">"फ़ाइल चुनें"</string>
+ <string name="no_file_chosen" msgid="6363648562170759465">"कोई फ़ाइल चुनी नहीं गई"</string>
+ <string name="reset" msgid="2448168080964209908">"रीसेट करें"</string>
+ <string name="submit" msgid="1602335572089911941">"सबमिट करें"</string>
+ <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"कार मोड सक्षम किया गया"</string>
+ <string name="car_mode_disable_notification_message" msgid="668663626721675614">"कार मोड से बाहर निकलने के लिए चयन करें."</string>
+ <string name="tethered_notification_title" msgid="3146694234398202601">"टेदरिंग या हॉटस्पॉट सक्रिय"</string>
+ <string name="tethered_notification_message" msgid="3067108323903048927">"कॉन्फ़िगर करने के लिए स्पर्श करें"</string>
+ <string name="back_button_label" msgid="2300470004503343439">"वापस जाएं"</string>
+ <string name="next_button_label" msgid="1080555104677992408">"अगला"</string>
+ <string name="skip_button_label" msgid="1275362299471631819">"छोड़ें"</string>
+ <string name="throttle_warning_notification_title" msgid="4890894267454867276">"उच्च मोबाइल डेटा उपयोग"</string>
+ <string name="throttle_warning_notification_message" msgid="2609734763845705708">"मोबाइल डेटा उपयोग के बारे में अधिक जानने के लिए स्पर्श करें"</string>
+ <string name="throttled_notification_title" msgid="6269541897729781332">"मोबाइल डेटा अधिकतम सीमा से अधिक है"</string>
+ <string name="throttled_notification_message" msgid="4712369856601275146">"मोबाइल डेटा उपयोग के बारे में अधिक जानने के लिए स्पर्श करें"</string>
+ <string name="no_matches" msgid="8129421908915840737">"कोई मिलान नहीं"</string>
+ <string name="find_on_page" msgid="1946799233822820384">"पृष्ठ पर ढूंढें"</string>
+ <plurals name="matches_found">
+ <item quantity="one" msgid="8167147081136579439">"1 मिलान"</item>
+ <item quantity="other" msgid="4641872797067609177">"<xliff:g id="TOTAL">%d</xliff:g> में से <xliff:g id="INDEX">%d</xliff:g>"</item>
+ </plurals>
+ <string name="action_mode_done" msgid="7217581640461922289">"पूर्ण"</string>
+ <string name="progress_unmounting" product="nosdcard" msgid="535863554318797377">"USB संग्रहण अनमाउंट कर रहा है..."</string>
+ <string name="progress_unmounting" product="default" msgid="5556813978958789471">"SD कार्ड अनमाउंट कर रहा है..."</string>
+ <string name="progress_erasing" product="nosdcard" msgid="4183664626203056915">"USB संग्रहण मिटा रहा है..."</string>
+ <string name="progress_erasing" product="default" msgid="2115214724367534095">"SD कार्ड मिटा रहा है..."</string>
+ <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB संग्रहण नहीं मिटाया जा सका."</string>
+ <string name="format_error" product="default" msgid="7315248696644510935">"SD कार्ड नहीं मिटाया जा सका."</string>
+ <string name="media_bad_removal" msgid="7960864061016603281">"SD कार्ड को अनमाउंट होने से पहले निकाल दिया गया था."</string>
+ <string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB संग्रहण वर्तमान में जांचा जा रहा है."</string>
+ <string name="media_checking" product="default" msgid="7334762503904827481">"SD कार्ड वर्तमान में जांचा जा रहा है."</string>
+ <string name="media_removed" msgid="7001526905057952097">"SD कार्ड निकाल दिया गया है."</string>
+ <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"USB संग्रहण का उपयोग वर्तमान में एक कंप्यूटर द्वारा किया जा रहा है."</string>
+ <string name="media_shared" product="default" msgid="5706130568133540435">"SD कार्ड का उपयोग वर्तमान में एक कंप्यूटर द्वारा किया जा रहा है."</string>
+ <string name="media_unknown_state" msgid="729192782197290385">"बाह्य मीडिया अज्ञात स्थिति में है."</string>
+ <string name="share" msgid="1778686618230011964">"शेयर करें"</string>
+ <string name="find" msgid="4808270900322985960">"ढूंढें"</string>
+ <string name="websearch" msgid="4337157977400211589">"वेब खोज"</string>
+ <string name="gpsNotifTicker" msgid="5622683912616496172">"<xliff:g id="NAME">%s</xliff:g> की ओर से स्थान अनुरोध"</string>
+ <string name="gpsNotifTitle" msgid="5446858717157416839">"स्थान अनुरोध"</string>
+ <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>) द्वारा अनुरोधित"</string>
+ <string name="gpsVerifYes" msgid="2346566072867213563">"हां"</string>
+ <string name="gpsVerifNo" msgid="1146564937346454865">"नहीं"</string>
+ <string name="sync_too_many_deletes" msgid="5296321850662746890">"हटाने की सीमा पार हो गई"</string>
+ <string name="sync_too_many_deletes_desc" msgid="7030265992955132593">"<xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> खाते के लिए <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> हटाए गए आइटम हैं. आप क्या करना चाहेंगे?"</string>
+ <string name="sync_really_delete" msgid="8933566316059338692">"आइटम हटाएं."</string>
+ <string name="sync_undo_deletes" msgid="8610996708225006328">"हटाए गए को पूर्ववत करें."</string>
+ <string name="sync_do_nothing" msgid="8717589462945226869">"अभी कुछ न करें."</string>
+ <string name="choose_account_label" msgid="4191313562041125787">"किसी खाते का चयन करें"</string>
+ <string name="add_account_label" msgid="2935267344849993553">"कोई खाता जोड़ें"</string>
+ <string name="choose_account_text" msgid="6891230675141555481">"आप किस खाते का उपयोग करना चाहेंगे?"</string>
+ <string name="add_account_button_label" msgid="3611982894853435874">"खाता जोड़ें"</string>
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"वृद्धि"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"कमी"</string>
+ <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> टैप करके रखें."</string>
+ <string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"बढ़ते क्रम के लिए ऊपर और घटते क्रम के लिए नीचे की ओर स्लाइड करें."</string>
+ <string name="time_picker_increment_minute_button" msgid="2843066823236250329">"बढ़ते क्रम में मिनट"</string>
+ <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"घटते क्रम में मिनट"</string>
+ <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"बढ़ते क्रम में घंटा"</string>
+ <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"घटते क्रम में घंटा"</string>
+ <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"सायं सेट करें"</string>
+ <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"प्रात: सेट करें"</string>
+ <string name="date_picker_increment_month_button" msgid="6324978841467899081">"बढ़ते क्रम में माह"</string>
+ <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"घटते क्रम में माह"</string>
+ <string name="date_picker_increment_day_button" msgid="4397040141921413183">"बढ़ते क्रम में दिन"</string>
+ <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"घटते क्रम में दिन"</string>
+ <string name="date_picker_increment_year_button" msgid="3058553394722295105">"बढ़ते क्रम में वर्ष"</string>
+ <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"घटते क्रम में वर्ष"</string>
+ <string name="checkbox_checked" msgid="7222044992652711167">"चेक किया गया"</string>
+ <string name="checkbox_not_checked" msgid="5174639551134444056">"चेक नहीं किया गया"</string>
+ <string name="radiobutton_selected" msgid="8603599808486581511">"चयनित"</string>
+ <string name="radiobutton_not_selected" msgid="2908760184307722393">"चयनित नहीं"</string>
+ <string name="switch_on" msgid="551417728476977311">"चालू"</string>
+ <string name="switch_off" msgid="7249798614327155088">"बंद"</string>
+ <string name="togglebutton_pressed" msgid="4180411746647422233">"दबाया गया"</string>
+ <string name="togglebutton_not_pressed" msgid="4495147725636134425">"दबाया नहीं गया."</string>
+ <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+ <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"रद्द करें"</string>
+ <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"हटाएं"</string>
+ <string name="keyboardview_keycode_done" msgid="1992571118466679775">"पूर्ण"</string>
+ <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mode change"</string>
+ <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+ <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+ <string name="activitychooserview_choose_application" msgid="4540794444768613567">"कोई एप्लिकेशन चुनें"</string>
+ <string name="shareactionprovider_share_with" msgid="806688056141131819">"इसके साथ साझा करें:"</string>
+ <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> के साथ साझा करें"</string>
+ <string name="content_description_sliding_handle" msgid="7311938669217173870">"स्लाइडिंग हैंडल. टैप करके रखें."</string>
+ <string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए ऊपर."</string>
+ <string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए नीचे."</string>
+ <string name="description_direction_left" msgid="6814008463839915747">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए बाएं."</string>
+ <string name="description_direction_right" msgid="4296057241963012862">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए दाएं."</string>
+ <string name="description_target_unlock" msgid="2228524900439801453">"अनलॉक करें"</string>
+ <string name="description_target_camera" msgid="969071997552486814">"कैमरा"</string>
+ <string name="description_target_silent" msgid="893551287746522182">"मौन"</string>
+ <string name="description_target_soundon" msgid="30052466675500172">"ध्वनि चालू करें"</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"ज़ोर से बोली गईं पासवर्ड कुंजियां सुनने के लिए हेडसेट प्लग इन करें."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"बिंदु."</string>
+ <string name="action_bar_home_description" msgid="5293600496601490216">"होम पर नेविगेट करें"</string>
+ <string name="action_bar_up_description" msgid="2237496562952152589">"ऊपर नेविगेट करें"</string>
+ <string name="action_menu_overflow_description" msgid="2295659037509008453">"अधिक विकल्प"</string>
+ <string name="storage_internal" msgid="7556050805474115618">"आंतरिक संग्रहण"</string>
+ <string name="storage_sd_card" msgid="8921771478629812343">"SD कार्ड"</string>
+ <string name="storage_usb" msgid="3017954059538517278">"USB संग्रहण"</string>
+ <string name="extract_edit_menu_button" msgid="302060189057163906">"संपादित करें..."</string>
+ <string name="data_usage_warning_title" msgid="1955638862122232342">"डेटा उपयोग की चेतावनी"</string>
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"उपयोग व सेटिंग देखने हेतु स्पर्श करें"</string>
+ <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G डेटा अक्षम किया गया"</string>
+ <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G डेटा अक्षम किया गया"</string>
+ <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"मोबाइल डेटा अक्षम किया गया"</string>
+ <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi डेटा अक्षम हो गया"</string>
+ <string name="data_usage_limit_body" msgid="4313857592916426843">"सक्षम करने के लिए स्पर्श करें"</string>
+ <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G डेटा सीमा पार हो गई है"</string>
+ <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G डेटा सीमा पार हो गई है"</string>
+ <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"मोबाइल डेटा सीमा पार हो गई है"</string>
+ <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi डेटा सीमा पार हो गई है"</string>
+ <string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> निर्दिष्ट सीमा से अधिक"</string>
+ <string name="data_usage_restricted_title" msgid="5965157361036321914">"पृष्ठभूमि डेटा प्रतिबंधित है"</string>
+ <string name="data_usage_restricted_body" msgid="5087354814839059798">"प्रतिबंध निकालने के लिए स्पर्श करें"</string>
+ <string name="ssl_certificate" msgid="6510040486049237639">"सुरक्षा प्रमाणपत्र"</string>
+ <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"यह प्रमाणपत्र मान्य है."</string>
+ <string name="issued_to" msgid="454239480274921032">"इन्हें जारी किया गया:"</string>
+ <string name="common_name" msgid="2233209299434172646">"सामान्य नाम:"</string>
+ <string name="org_name" msgid="6973561190762085236">"संगठन:"</string>
+ <string name="org_unit" msgid="7265981890422070383">"संगठनात्मक इकाई:"</string>
+ <string name="issued_by" msgid="2647584988057481566">"जारीकर्ता:"</string>
+ <string name="validity_period" msgid="8818886137545983110">"मान्यता:"</string>
+ <string name="issued_on" msgid="5895017404361397232">"जारी करने का दिनांक:"</string>
+ <string name="expires_on" msgid="3676242949915959821">"समय समाप्ति दिनांक:"</string>
+ <string name="serial_number" msgid="758814067660862493">"क्रमांक:"</string>
+ <string name="fingerprints" msgid="4516019619850763049">"फ़िंगरप्रिंट:"</string>
+ <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 फ़िंगरप्रिंट:"</string>
+ <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 फ़िंगरप्रिंट:"</string>
+ <string name="activity_chooser_view_see_all" msgid="180268188117163072">"सभी देखें..."</string>
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"गतिविधि का चयन करें"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"इससे साझा करें..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"उपकरण लॉक कर दिया गया."</string>
+ <string name="list_delimeter" msgid="3975117572185494152">", "</string>
+</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 7c64d5e..62e753f 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -665,6 +665,16 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Umetnite SIM karticu."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Nedostaje SIM kartica ili nije čitljiva. Umetnite SIM karticu."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Vaša SIM kartica trajno je onemogućena."\n"Obratite se svom pružatelju bežičnih usluga za dobivanje druge SIM kartice."</string>
+ <!-- no translation found for lockscreen_transport_prev_description (201594905152746886) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_next_description (6089297650481292363) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_pause_description (7659088786780128001) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_play_description (5888422938351019426) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_stop_description (4562318378766987601) -->
+ <skip />
<string name="emergency_calls_only" msgid="6733978304386365407">"Samo hitni pozivi"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Mreža je zaključana"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM kartica je zaključana PUK-om."</string>
@@ -694,6 +704,14 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Otključaj"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Zvuk je uključen"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Zvuk isključen"</string>
+ <!-- no translation found for lockscreen_access_pattern_start (3941045502933142847) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cleared (5583479721001639579) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cell_added (6756031208359292487) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_detected (4988730895554057058) -->
+ <skip />
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1178,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Bešumno"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zvuk je uključen"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tipka. Da bi se pri upisivanju zaporke čule tipke, potrebne su slušalice."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Priključite slušalice da biste čuli tipke zaporke izgovorene naglas."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Točka."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Kreni na početnu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Kreni gore"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Više opcija"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 4d898b4..b2b61e6 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Kérjük, helyezzen be egy SIM-kártyát."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"A SIM-kártya hiányzik vagy nem olvasható. Helyezzen be egy SIM-kártyát."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM-kártyája véglegesen letiltva."\n" Kérjük, forduljon a vezeték nélküli szolgáltatójához másik SIM-kártya beszerzése érdekében."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Előző szám gomb"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Következő szám gomb"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Szünet gomb"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Lejátszás gomb"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Leállítás gomb"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Csak segélyhívások"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"A hálózat lezárva"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"A SIM-kártya le van zárva a PUK-kóddal."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Feloldás"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Hang bekapcsolása"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Hang kikapcsolva"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Minta elindítva"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Minta törölve"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Cella hozzáadva"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Minta befejezve"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Kivágás"</string>
<string name="copy" msgid="2681946229533511987">"Másolás"</string>
<string name="paste" msgid="5629880836805036433">"Beillesztés"</string>
- <string name="replace" msgid="5781686059063148930">"Csere???"</string>
+ <string name="replace" msgid="5781686059063148930">"Csere..."</string>
<string name="delete" msgid="6098684844021697789">"Törlés"</string>
<string name="copyUrl" msgid="2538211579596067402">"URL másolása"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Szöveg kijelölése..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Némítás"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Hang bekapcsolása"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Billentyű. Fülhallgató szükséges, ha hallani szeretné a billentyűket a jelszó megadása közben."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Csatlakoztasson egy fejhallgatót, ha hallani szeretné a jelszó gombjait felolvasva."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Pont."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Ugrás a főoldalra"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Felfele mozgás"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"További lehetőségek"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index c6d600e..1f74260 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -665,6 +665,16 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Masukkan kartu SIM"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Kartu SIM tidak ada atau tidak dapat dibaca. Masukkan kartu SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Kartu SIM Anda dinonaktifkan secara permanen."\n" Hubungi penyedia layanan nirkabel Anda untuk mendapatkan kartu SIM lainnya."</string>
+ <!-- no translation found for lockscreen_transport_prev_description (201594905152746886) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_next_description (6089297650481292363) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_pause_description (7659088786780128001) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_play_description (5888422938351019426) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_stop_description (4562318378766987601) -->
+ <skip />
<string name="emergency_calls_only" msgid="6733978304386365407">"Panggilan darurat saja"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Jaringan terkunci"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kartu SIM terkunci PUK."</string>
@@ -694,6 +704,14 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Buka kunci"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Suara hidup"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Suara mati"</string>
+ <!-- no translation found for lockscreen_access_pattern_start (3941045502933142847) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cleared (5583479721001639579) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cell_added (6756031208359292487) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_detected (4988730895554057058) -->
+ <skip />
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +877,7 @@
<string name="cut" msgid="3092569408438626261">"Potong"</string>
<string name="copy" msgid="2681946229533511987">"Salin"</string>
<string name="paste" msgid="5629880836805036433">"Tempel"</string>
- <string name="replace" msgid="5781686059063148930">"Ganti???"</string>
+ <string name="replace" msgid="5781686059063148930">"Ganti..."</string>
<string name="delete" msgid="6098684844021697789">"Hapus"</string>
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
@@ -1160,9 +1178,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Suara hidup"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tombol. Perlu headset untuk mendengarkan suara tombol saat mengetik sandi."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Pasang headset untuk mendengar tombol sandi yang diucapkan dengan keras."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Titik."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi ke beranda"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi naik"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Opsi lainnya"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 394326e..9646d6a 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Inserisci una SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Scheda SIM mancante o non leggibile. Inserisci una scheda SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"La scheda SIM è stata disattivata definitivamente."\n" Contatta il fornitore del tuo servizio wireless per ricevere un\'altra scheda SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Pulsante traccia precedente"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Pulsante traccia successiva"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pulsante Pausa"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Pulsante Riproduci"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Pulsante di arresto"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Solo chiamate di emergenza"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rete bloccata"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La SIM è bloccata tramite PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Sblocca"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Audio attivato"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Audio disattivato"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Sequenza iniziata"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Sequenza cancellata"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Cella aggiunta"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Sequenza completata"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -886,8 +895,8 @@
<string name="chooseUsbActivity" msgid="7892597146032121735">"Seleziona un\'applicazione per il dispositivo USB"</string>
<string name="noApplications" msgid="1691104391758345586">"Nessuna applicazione è in grado di svolgere questa azione."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
- <string name="aerr_application" msgid="932628488013092776">"Purtroppo l\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> si è bloccata in modo anomalo."</string>
- <string name="aerr_process" msgid="4507058997035697579">"Purtroppo il processo <xliff:g id="PROCESS">%1$s</xliff:g> si è interrotto."</string>
+ <string name="aerr_application" msgid="932628488013092776">"L\'applicazione <xliff:g id="APPLICATION">%1$s</xliff:g> si è bloccata in modo anomalo."</string>
+ <string name="aerr_process" msgid="4507058997035697579">"Il processo <xliff:g id="PROCESS">%1$s</xliff:g> si è interrotto."</string>
<string name="anr_title" msgid="4351948481459135709"></string>
<string name="anr_activity_application" msgid="8339738283149696827">"<xliff:g id="APPLICATION">%2$s</xliff:g> non risponde."\n\n"Vuoi chiuderla?"</string>
<string name="anr_activity_process" msgid="7018289416670457797">"L\'attività <xliff:g id="ACTIVITY">%1$s</xliff:g> non risponde."\n\n"Vuoi chiuderla?"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotocamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenzioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Audio attivato"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tasto. Set auricolari richiesto per udire i tasti durante la digitazione di una password."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Collega gli auricolari per ascoltare la pronuncia dei tasti premuti per la password."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Vai alla home page"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Vai in alto"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Altre opzioni"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 42a677c..232232c 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -334,10 +334,10 @@
<string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"מאפשר ליישום לגשת לעדכונים חברתיים מהחברים שלך ולסנכרן אותם. יישומים זדוניים יוכלו להשתמש בכך כדי לגשת למסרים שהועברו באופן פרטי בינך לבין חבריך ברשתות חברתיות."</string>
<string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"כתיבה בזרם החברתי שלך"</string>
<string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"מאפשר ליישום להציג עדכונים חברתיים מהחברים שלך. יישומים זדוניים יוכלו להשתמש בכך כדי להתחזות לאחד מחבריך ולדלות ממך בדרכי מרמה סיסמאות או מידע סודי אחר."</string>
- <string name="permlab_readCalendar" msgid="5972727560257612398">"קריאת אירועי לוח שנה וגם מידע סודי"</string>
+ <string name="permlab_readCalendar" msgid="5972727560257612398">"קריאת אירועי יומן וגם מידע סודי"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"מאפשר ליישום לקרוא את כל אירועי לוח השנה שמאוחסנים בטבלט שלך, כולל אירועים של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לחלץ מידע אישי מלוחות שנה אלה ללא ידיעת הבעלים."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"מאפשר ליישום לקרוא את כל אירועי לוח השנה המאוחסנים בטלפון שלך, כולל אירועים של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לחלץ מידע אישי מלוחות השנה האלה ללא ידיעת הבעלים."</string>
- <string name="permlab_writeCalendar" msgid="8438874755193825647">"הוספה ושינוי של אירועי לוח שנה ושליחת דוא\"ל לאורחים ללא ידיעת הבעלים"</string>
+ <string name="permlab_writeCalendar" msgid="8438874755193825647">"הוספה ושינוי של אירועי יומן ושליחת דוא\"ל לאורחים ללא ידיעת הבעלים"</string>
<string name="permdesc_writeCalendar" msgid="5368129321997977226">"מאפשר ליישום לשלוח הזמנות לאירוע בתור הבעלים של לוח השנה ולהוסיף, להסיר ולשנות אירועים שניתן לשנות במכשיר, כולל אלה של חברים או עמיתים לעבודה. יישום זדוני בעל הרשאה זו יוכל לשלוח הודעות ספאם שייראו כאילו נשלחו מהבעלים של לוח השנה, לשנות אירועים ללא ידיעת הבעלים או להוסיף אירועים מזויפים."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"צור מקורות מיקום מדומים לצורך בדיקה"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"צור מקורות מיקום מדומים לצורך בדיקה. יישומים זדוניים עלולים להשתמש באפשרות זו כדי לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות המיקום האמיתיים כגון GPS או ספקי רשת."</string>
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"הכנס כרטיס SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"כרטיס ה-SIM חסר או לא קריא. הכנס כרטיס SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"כרטיס ה-SIM שלך מושבת לצמיתות."\n" צור קשר עם ספק השירות האלחוטי שלך כדי לקבל כרטיס SIM אחר."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"לחצן הרצועה הקודמת"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"לחצן הרצועה הבאה"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"לחצן ההשהיה"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"לחצן ההפעלה"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"לחצן העצירה"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"שיחות חירום בלבד"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"רשת נעולה"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"כרטיס SIM נעול באמצעות PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"בטל נעילה"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"קול פועל"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"ללא קול"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"יצירת התבנית החלה"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"התבנית נמחקה"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"התא נוסף"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"התבנית הושלמה"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"אבג"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"חתוך"</string>
<string name="copy" msgid="2681946229533511987">"העתק"</string>
<string name="paste" msgid="5629880836805036433">"הדבק"</string>
- <string name="replace" msgid="5781686059063148930">"להחליף???"</string>
+ <string name="replace" msgid="5781686059063148930">"להחליף..."</string>
<string name="delete" msgid="6098684844021697789">"מחק"</string>
<string name="copyUrl" msgid="2538211579596067402">"העתק כתובת אתר"</string>
<string name="selectTextMode" msgid="6738556348861347240">"בחר טקסט..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"מצלמה"</string>
<string name="description_target_silent" msgid="893551287746522182">"שקט"</string>
<string name="description_target_soundon" msgid="30052466675500172">"הקול פועל"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"מקש. נדרשות אוזניות כדי לשמוע את המקשים בעת הקלדת סיסמה."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"חבר אוזניות כדי לשמוע הקראה של מפתחות סיסמה."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"נקודה."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"נווט לדף הבית"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"נווט למעלה"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"אפשרויות נוספות"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index ae822b8..9e6e8b8 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -665,6 +665,16 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"SIMカードを挿入してください。"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIMカードが見つからないか読み取れません。SIMカードを挿入してください。"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"お使いのSIMカードは永久に無効となっています。"\n"ワイヤレスサービスプロバイダに問い合わせて新しいSIMカードを入手してください。"</string>
+ <!-- no translation found for lockscreen_transport_prev_description (201594905152746886) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_next_description (6089297650481292363) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_pause_description (7659088786780128001) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_play_description (5888422938351019426) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_stop_description (4562318378766987601) -->
+ <skip />
<string name="emergency_calls_only" msgid="6733978304386365407">"緊急通報のみ"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"ネットワークがロックされました"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIMカードはPUKでロックされています。"</string>
@@ -694,6 +704,14 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"ロック解除"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"サウンドON"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"サウンドOFF"</string>
+ <!-- no translation found for lockscreen_access_pattern_start (3941045502933142847) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cleared (5583479721001639579) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cell_added (6756031208359292487) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_detected (4988730895554057058) -->
+ <skip />
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1178,8 @@
<string name="description_target_camera" msgid="969071997552486814">"カメラ"</string>
<string name="description_target_silent" msgid="893551287746522182">"マナーモード"</string>
<string name="description_target_soundon" msgid="30052466675500172">"サウンドON"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"キー。パスワードの入力中にキーの音を聞くにはヘッドセットが必要です。"</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"パスワードのキーが音声出力されるのでヘッドセットを接続してください。"</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"ドット。"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"ホームへ移動"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"上へ移動"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"その他のオプション"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 95c35cf..95fbeeb 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"SIM 카드를 삽입하세요."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM 카드가 없거나 읽을 수 없습니다. SIM 카드를 삽입하세요."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM 카드 사용이 영구적으로 중지됩니다."\n"다른 SIM 카드를 사용하려면 무선 서비스 제공업체에 문의하시기 바랍니다."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"이전 트랙 버튼"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"다음 트랙 버튼"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"일시중지 버튼"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"재생 버튼"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"중지 버튼"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"긴급 통화만"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"네트워크 잠김"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM 카드가 PUK 잠김 상태입니다."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"잠금해제"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"사운드 켜기"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"사운드 끄기"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"패턴 시작됨"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"패턴 삭제됨"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"셀 추가됨"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"패턴 완료됨"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"카메라"</string>
<string name="description_target_silent" msgid="893551287746522182">"무음"</string>
<string name="description_target_soundon" msgid="30052466675500172">"사운드 켜기"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"키. 비밀번호를 입력할 때 키 소리를 들으려면 헤드셋이 필요합니다."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"비밀번호 키를 음성으로 들으려면 헤드셋을 연결하세요."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"점"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"홈 탐색"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"위로 탐색"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"옵션 더보기"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 2a83007..b62284a 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Įdėkite SIM kortelę."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Trūksta SIM kortelės arba ji neskaitoma. Įdėkite SIM kortelę."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM kortelė visam laikui neleidžiama."\n" Jei norite gauti kitą SIM kortelę, susisiekite su belaidžio ryšio paslaugos teikėju."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Ankstesnio takelio mygtukas"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Kito takelio mygtukas"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pristabdymo mygtukas"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Paleidimo mygtukas"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Sustabdymo mygtukas"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Tik pagalbos skambučiai"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Tinklas užrakintas"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM kortelė užrakinta PUK kodu."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Atblokuoti"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Garsas įjungtas"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Išjungti garsą"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Šablonas pradėtas"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Šablonas išvalytas"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Pridėtas langelis"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Šablonas užbaigtas"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Iškirpti"</string>
<string name="copy" msgid="2681946229533511987">"Kopijuoti"</string>
<string name="paste" msgid="5629880836805036433">"Įklijuoti"</string>
- <string name="replace" msgid="5781686059063148930">"Pakeisti???"</string>
+ <string name="replace" msgid="5781686059063148930">"Pakeisti•"</string>
<string name="delete" msgid="6098684844021697789">"Ištrinti"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopijuoti URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pasirinkti tekstą..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Vaizdo kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Begarsis"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Garsas įjungtas"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Klavišai. Jei norite įvesdami slaptažodį girdėti klavišų garsus, reikia ausinių."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Įjunkite ausines, kad išgirstumėte sakomus slaptažodžio klavišus."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Taškas."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Naršyti pagrindinį puslapį"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Naršyti į viršų"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Daugiau parinkčių"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index c8dde80..9812b43 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Lūdzu, ievietojiet SIM karti."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Nav SIM kartes, vai arī tā nav lasāma. Lūdzu, ievietojiet SIM karti."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Jūsu SIM karte ir neatgriezeniski atspējota."\n"Lūdzu, sazinieties ar savu bezvadu pakalpojumu sniedzēju, lai iegūtu citu SIM karti."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Iepriekšējā ieraksta poga"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nākamā ieraksta poga"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pārtraukšanas poga"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Atskaņošanas poga"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Apturēšanas poga"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Tikai ārkārtas zvani"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Tīkls ir bloķēts."</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM karte ir bloķēta ar PUK kodu."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Atbloķēt"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Skaņa ir ieslēgta"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Skaņa ir izslēgta."</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Kombinācija uzsākta"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Kombinācija notīrīta"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Šūna pievienota"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Kombinācija pabeigta"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Klusums"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Skaņa ieslēgta"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Taustiņš. Lai, rakstot paroli, dzirdētu taustiņu signālus, nepieciešamas austiņas."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Pievienojiet austiņas, lai dzirdētu paroles rakstzīmes."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkts."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Pārvietoties uz sākuma ekrānu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Pārvietoties augšup"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Vairāk opciju"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index a2ae911..b17803fa 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sila masukkan kad SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Kad SIM tiada atau tidak boleh dibaca. Sila masukkan kad SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Kad SIM anda dilumpuhkan secara kekal."\n" Sila hubungi pembekal perkhidmatan wayarles anda untuk mendapatkan kad SIM lain."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Butang lagu sebelumnya"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Butang lagu seterusnya"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Butang Jeda"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Butang main"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Butang berhenti"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Panggilan kecemasan sahaja"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rangkaian dikunci"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kad SIM dikunci dengan PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Buka kunci"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Bunyi dihidupkan"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Bunyi dimatikan"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Corak dimulakan"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Corak dipadamkan"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Sel ditambahkan"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Corak siap"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Potong"</string>
<string name="copy" msgid="2681946229533511987">"Salin"</string>
<string name="paste" msgid="5629880836805036433">"Tampal"</string>
- <string name="replace" msgid="5781686059063148930">"Ganti???"</string>
+ <string name="replace" msgid="5781686059063148930">"Ganti..."</string>
<string name="delete" msgid="6098684844021697789">"Padam"</string>
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Bunyi dihidupkan"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Kekunci. Set kepala diperlukan untuk mendengar kekunci semasa menaip kata laluan."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Pasangkan set kepala untuk mendengar kekunci kata laluan disebut dengan kuat."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Titik."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi laman utama"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi ke atas"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Lagi pilihan"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 01b9321..8ab8262 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sett inn et SIM-kort."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM-kort mangler eller er uleselig. Sett inn et SIM-kort."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM-kortet er permanent deaktivert."\n" Ta kontakt med mobiltjenesteleverandøren din for å få et annet SIM-kort."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Forrige sang-knappen"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Neste sang-knappen"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pause-knappen"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Avspilling-knappen"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Stopp-knappen"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Kun nødanrop"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Nettverk ikke tillatt"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortet er PUK-låst."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Lås opp"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Lyd på"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Lyd av"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Mønsteret er påbegynt"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Mønsteret er slettet"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Celle er lagt til"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Mønsteret er fullført"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stille"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Lyd på"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tast. Hodetelefoner kreves for å høre tastene mens du skriver inn et passord."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Koble til hodetelefoner for å høre hvilke taster som brukes for å skrive inn passordet."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punktum."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Gå til startsiden"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Gå opp"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere alternativer"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index bb4fb4b..cf5485d 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Plaats een SIM-kaart."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"De simkaart ontbreekt of kan niet worden gelezen. Plaats een simkaart."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Uw simkaart is permanent uitgeschakeld."\n" Neem contact op met uw draadloze serviceprovider voor een nieuwe simkaart."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knop voor vorig nummer"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knop voor volgend nummer"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Knop voor onderbreken"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Knop voor afspelen"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Knop voor stoppen"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Alleen noodoproepen"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netwerk vergrendeld"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kaart is vergrendeld met PUK-code."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Ontgrendelen"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Geluid aan"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Geluid uit"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Patroon gestart"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Patroon gewist"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Cel toegevoegd"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Patroon voltooid"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Geluid aan"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Toetsaanslag. Headset vereist om toetsaanslagen te kunnen horen bij het typen van een wachtwoord."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Sluit een headset aan om wachtwoordtoetsen hardop te laten voorlezen."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Stip."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigeren naar startpositie"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Omhoog navigeren"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Meer opties"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 0e5f57f..5fd6336 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -331,9 +331,9 @@
<string name="permlab_writeProfile" msgid="4679878325177177400">"zapis danych w Twoim profilu"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Umożliwia aplikacji zmienianie lub dodawanie danych do osobistych informacji w profilu, przechowywanych w urządzeniu – np. imienia, nazwiska czy danych kontaktowych. Oznacza to, że inne aplikacje mogą Cię zidentyfikować i wysyłać do innych osób informacje o Twoim profilu."</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"odczyt sieci społecznościowych"</string>
- <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Zezwala aplikacji na dostęp do aktualizacji społecznościowych od Ciebie i znajomych oraz na ich synchronizowanie. Złośliwe aplikacje mogą dzięki temu odczytywać prywatne informacje wymienianie przez Ciebie ze znajomymi w sieciach społecznościowych."</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Zezwala aplikacji na dostęp do aktualności społecznościowych od Ciebie i znajomych oraz na ich synchronizowanie. Złośliwe aplikacje mogą dzięki temu odczytywać prywatne informacje wymienianie przez Ciebie ze znajomymi w sieciach społecznościowych."</string>
<string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"zapis sieci społecznościowych"</string>
- <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Zezwala aplikacji na wyświetlanie aktualizacji społecznościowych od znajomych. Złośliwe aplikacje mogą dzięki temu udawać znajomych i wyłudzać hasła lub inne poufne informacje."</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"Zezwala aplikacji na wyświetlanie aktualności społecznościowych od znajomych. Złośliwe aplikacje mogą dzięki temu udawać znajomych i wyłudzać hasła lub inne poufne informacje."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"odczyt wydarzeń w kalendarzu wraz z informacjami poufnymi"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"Zezwala aplikacji na odczyt wszystkich wydarzeń w kalendarzu zapisanych w tablecie, w tym dotyczących znajomych lub współpracowników. Złośliwa aplikacja z tym uprawnieniem może bez wiedzy właściciela pobierać z kalendarza informacje osobiste."</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"Zezwala aplikacji na odczyt wszystkich wydarzeń w kalendarzu zapisanych w telefonie, w tym dotyczących znajomych lub współpracowników. Złośliwa aplikacja z tym uprawnieniem może bez wiedzy właściciela pobierać z kalendarza informacje osobiste."</string>
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Włóż kartę SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Brak karty SIM lub nie można jej odczytać. Włóż kartę SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Karta SIM jest trwale wyłączona."\n" Skontaktuj się z dostawcą usług bezprzewodowych, aby uzyskać inną kartę SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Przycisk poprzedniego utworu"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Przycisk następnego utworu"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Przycisk wstrzymania"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Przycisk odtwarzania"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Przycisk zatrzymania"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Tylko połączenia alarmowe"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Sieć zablokowana"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Karta SIM jest zablokowana kodem PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Odblokuj"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Włącz dźwięk"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Wyłącz dźwięk"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Wzór rozpoczęty"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Wzór wyczyszczony"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Dodano komórkę."</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Wzór ukończony"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Aparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Wyciszenie"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Włącz dźwięk"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Klawisz. Wymagany jest zestaw słuchawkowy, aby słyszeć klawisze podczas wpisywania hasła."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Podłącz zestaw słuchawkowy, aby usłyszeć znaki hasła wypowiadane na głos."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Kropka"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Przejdź do strony głównej"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Przejdź wyżej"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Więcej opcji"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 23e6ac4..9875c9d 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Introduza um cartão SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"O cartão SIM está em falta ou não é legível. Introduza um cartão SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"O seu cartão SIM está desativado definitivamente."\n" Contacte o seu fornecedor de serviços de rede sem fios para obter outro cartão."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botão Faixa anterior"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botão Faixa seguinte"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Botão Pausa"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Botão Reproduzir."</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Botão Interromper"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Apenas chamadas de emergência"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rede bloqueada"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"O cartão SIM está bloqueado por PUK"</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Desbloquear"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Som activado"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Som desactivado"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Sequência iniciada"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Sequência apagada"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Célula adicionada"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Sequência concluída"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Câmara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tecla. São necessários auscultadores com microfone integrado para ouvir as teclas ao escrever uma palavra-passe."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Ligue os auscultadores com microfone integrado para ouvir as teclas da palavra-passe."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Ponto."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar para página inicial"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 36ce6a6..7ddf142 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Insira um cartão SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"O cartão SIM não foi inserido ou não está legível. Insira um cartão SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Seu cartão SIM está permanentemente desativado."\n" Entre em contato com seu provedor de serviços de rede sem fio para obter outro cartão SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Botão \"Faixa anterior\""</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Botão \"Próxima faixa\""</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Botão \"Pausar\""</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Botão \"Reproduzir\""</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Botão \"Parar\""</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Apenas chamadas de emergência"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rede bloqueada"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"O cartão SIM está bloqueado pelo PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Desbloquear"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Som ativado"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Som desativado"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Padrão iniciado"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Padrão apagado"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Célula adicionada"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Padrão concluído"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Recortar"</string>
<string name="copy" msgid="2681946229533511987">"Copiar"</string>
<string name="paste" msgid="5629880836805036433">"Colar"</string>
- <string name="replace" msgid="5781686059063148930">"Substituir???"</string>
+ <string name="replace" msgid="5781686059063148930">"Substituir..."</string>
<string name="delete" msgid="6098684844021697789">"Excluir"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiar URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selecionar texto..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Câmera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tecla. É necessário um fone de ouvido para ouvir as teclas durante a digitação de uma senha."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Conecte um fone de ouvido para ouvir as teclas da senha em voz alta."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Ponto final."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navegar na página inicial"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navegar para cima"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index e84eb69..643b79e 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -746,6 +746,16 @@
<skip />
<!-- no translation found for lockscreen_permanent_disabled_sim_instructions (1631853574702335453) -->
<skip />
+ <!-- no translation found for lockscreen_transport_prev_description (201594905152746886) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_next_description (6089297650481292363) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_pause_description (7659088786780128001) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_play_description (5888422938351019426) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_stop_description (4562318378766987601) -->
+ <skip />
<string name="emergency_calls_only" msgid="6733978304386365407">"Mo cloms d\'urgenza"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rait bloccada"</string>
<!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
@@ -782,6 +792,14 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Debloccar"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Tun activà"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Tun deactivà"</string>
+ <!-- no translation found for lockscreen_access_pattern_start (3941045502933142847) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cleared (5583479721001639579) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cell_added (6756031208359292487) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_detected (4988730895554057058) -->
+ <skip />
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 2b0e1039..0fcbd3f 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -665,6 +665,16 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Introduceţi un card SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Cartela SIM lipseşte sau nu poate fi citită. Introduceţi o cartelă SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Cartela dvs. SIM este dezactivată definitiv."\n" Contactaţi furnizorul de servicii wireless pentru a obţine o altă cartelă SIM."</string>
+ <!-- no translation found for lockscreen_transport_prev_description (201594905152746886) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_next_description (6089297650481292363) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_pause_description (7659088786780128001) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_play_description (5888422938351019426) -->
+ <skip />
+ <!-- no translation found for lockscreen_transport_stop_description (4562318378766987601) -->
+ <skip />
<string name="emergency_calls_only" msgid="6733978304386365407">"Numai apeluri de urgenţă"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Reţea blocată"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Cardul SIM este blocat cu codul PUK."</string>
@@ -694,6 +704,14 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Deblocaţi"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sunet activat"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sunet dezactivat"</string>
+ <!-- no translation found for lockscreen_access_pattern_start (3941045502933142847) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cleared (5583479721001639579) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_cell_added (6756031208359292487) -->
+ <skip />
+ <!-- no translation found for lockscreen_access_pattern_detected (4988730895554057058) -->
+ <skip />
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +877,7 @@
<string name="cut" msgid="3092569408438626261">"Decupaţi"</string>
<string name="copy" msgid="2681946229533511987">"Copiaţi"</string>
<string name="paste" msgid="5629880836805036433">"Inseraţi"</string>
- <string name="replace" msgid="5781686059063148930">"Înlocuiţi???"</string>
+ <string name="replace" msgid="5781686059063148930">"Înlocuiţi..."</string>
<string name="delete" msgid="6098684844021697789">"Ştergeţi"</string>
<string name="copyUrl" msgid="2538211579596067402">"Copiaţi adresa URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Selectaţi text..."</string>
@@ -1160,9 +1178,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Cameră foto"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenţios"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sunet activat"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tastă. Setul căşti-microfon este necesar pentru ascultarea tastelor când introduceţi o parolă."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Conectaţi un set de căşti pentru a auzi tastele apăsate la introducerea parolei rostite cu voce tare."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punct."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Navigaţi la ecranul de pornire"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigaţi în sus"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mai multe opţiuni"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 201d5fc..0541edf 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -326,9 +326,9 @@
<string name="permlab_writeContacts" msgid="644616215860933284">"перезаписывать данные контакта"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="7782689510038568495">"Позволяет приложению изменять данные (адрес) контакта, сохраненные в памяти планшетного ПК. Вредоносные приложения могут использовать эту возможность для удаления или изменения данных контакта."</string>
<string name="permdesc_writeContacts" product="default" msgid="3924383579108183601">"Позволяет приложению изменять данные (адрес) контакта, сохраненные в памяти телефона. Вредоносные приложения могут использовать эту возможность для удаления или изменения данных контакта."</string>
- <string name="permlab_readProfile" msgid="6824681438529842282">"получать данные профиля"</string>
+ <string name="permlab_readProfile" msgid="6824681438529842282">"просматривать данные профиля"</string>
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"Позволяет приложению получать доступ к хранящейся на вашем устройстве личной информации профиля, например к имени и контактным данным. Это означает, что приложение может идентифицировать вас и отправить эти данные другим пользователям."</string>
- <string name="permlab_writeProfile" msgid="4679878325177177400">"запись в данные профиля"</string>
+ <string name="permlab_writeProfile" msgid="4679878325177177400">"изменение данных профиля"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"Позволяет приложению изменять или добавлять в личный профиль хранящуюся на вашем устройстве информацию, например имя или контактные данные. Это означает, что приложение может идентифицировать вас и отправить эти данные другим пользователям."</string>
<string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"читать записи в вашей социальной ленте"</string>
<string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"Позволяет приложению читать и синхронизировать новости от вас и ваших друзей. Вредоносные программы могут таким образом получить доступ к вашим личным записям в социальных сетях."</string>
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Вставьте SIM-карту."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM-карта отсутствует или не читается. Вставьте SIM-карту."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Ваша SIM-карта окончательно заблокирована."\n"Чтобы получить новую SIM-карту, обратитесь к оператору мобильной связи."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка перехода к предыдущему треку"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка перехода к следующему треку"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Кнопка паузы"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Кнопка воспроизведения"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Кнопка остановки"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Только экстренные вызовы"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Сеть заблокирована"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-карта заблокирована с помощью кода PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Разблокировать"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Вкл. звук"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Откл. звук"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Ввод графического ключа начался"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Графический ключ сброшен"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Ячейка добавлена"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Графический ключ введен"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"АБВ"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -927,10 +936,10 @@
<string name="volume_notification" msgid="2422265656744276715">"Громкость уведомления"</string>
<string name="volume_unknown" msgid="1400219669770445902">"Громкость"</string>
<string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Громкость Bluetooth-устройства"</string>
- <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Громкость мелодии звонка"</string>
+ <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Громкость рингтона"</string>
<string name="volume_icon_description_incall" msgid="8890073218154543397">"Громкости мелодии вызова"</string>
<string name="volume_icon_description_media" msgid="4217311719665194215">"Громкость мультимедиа"</string>
- <string name="volume_icon_description_notification" msgid="7044986546477282274">"Громкость мелодии оповещений"</string>
+ <string name="volume_icon_description_notification" msgid="7044986546477282274">"Громкость уведомлений"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Мелодия по умолчанию"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"По умолчанию (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="4440324407807468713">"Без звука"</string>
@@ -1160,8 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Без звука"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Включить звук"</string>
- <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Подключите гарнитуру, чтобы услышать ключи пароля."</string>
- <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Точка."</string>
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Подключите гарнитуру, чтобы услышать пароль."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Точка"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на главную"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вверх"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Ещё"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 1ccbbed..abcb3f6 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Vložte kartu SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Karta SIM chýba alebo sa z nej nedá čítať. Vložte kartu SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Vaša karta SIM je natrvalo zakázaná."\n"Ak chcete získať inú kartu SIM, kontaktujte poskytovateľa bezdrôtových služieb."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Tlačidlo Predchádzajúca stopa"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Tlačidlo Ďalšia stopa"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Tlačidlo Pozastaviť"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Tlačidlo Prehrať"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Tlačidlo Zastaviť"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Len tiesňové volania"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Sieť je zablokovaná"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Karta SIM je uzamknutá pomocou kódu PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Odomknúť"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Zapnúť zvuk"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Vypnúť zvuk"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Bezpečnostný vzor bol začatý"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Bezpečnostný vzor bol vymazaný"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Bunka bola pridaná"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Bezpečnostný vzor bol dokončený"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Vystrihnúť"</string>
<string name="copy" msgid="2681946229533511987">"Kopírovať"</string>
<string name="paste" msgid="5629880836805036433">"Prilepiť"</string>
- <string name="replace" msgid="5781686059063148930">"Nahradiť???"</string>
+ <string name="replace" msgid="5781686059063148930">"Nahradiť•"</string>
<string name="delete" msgid="6098684844021697789">"Odstrániť"</string>
<string name="copyUrl" msgid="2538211579596067402">"Skopírovať adresu URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Vybrať text..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tichý"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Zapnúť zvuk"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Kláves. Pri zadávaní hesla je potrebné použiť náhlavnú súpravu."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Ak si chcete vypočuť nahlas vyslovené klávesy hesla, pripojte náhlavnú súpravu."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Bodka."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Prejsť na plochu"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Prejsť na"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Viac možností"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 5379bb5..12fac56 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Vstavite kartico SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Ni kartice SIM ali je ni mogoče prebrati. Vstavite kartico SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Kartica SIM je trajno onemogočena."\n" Če želite dobiti drugo kartico SIM, se obrnite na ponudnika brezžičnih storitev."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Gumb za prejšnjo skladbo"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Gumb za naslednjo skladbo"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Gumb »Premor«"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Gumb »Predvajaj«."</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Gumb »Ustavi«"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Le klici v sili"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Omrežje je zaklenjeno"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kartica SIM je zaklenjena s kodo PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Odkleni"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Vklopi zvok"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Izklopi zvok"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Vzorec se je začel"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Vzorec je izbrisan"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Celica je dodana"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Vzorec je končan"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Izreži"</string>
<string name="copy" msgid="2681946229533511987">"Kopiraj"</string>
<string name="paste" msgid="5629880836805036433">"Prilepi"</string>
- <string name="replace" msgid="5781686059063148930">"Zamenjaj???"</string>
+ <string name="replace" msgid="5781686059063148930">"Zamenjaj •"</string>
<string name="delete" msgid="6098684844021697789">"Izbriši"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Izbiranje besedila ..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tiho"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Vklopljen zvok"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Če želite med vnašanjem gesla slišati tipke, potrebujete slušalke."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Priključite slušalke, če želite slišati zvok tipkanja gesla."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Pika."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Krmarjenje domov"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Krmarjenje navzgor"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Več možnosti"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index f403c81..f08b80e 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Уметните SIM картицу."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Недостаје SIM картица или не може да се прочита. Уметните SIM картицу."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM картица је трајно онемогућена."\n" Обратите се добављачу услуге бежичне мреже да бисте добили другу SIM картицу."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Дугме за претходну песму"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Дугме за следећу песму"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Дугме за паузу"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Дугме Пусти"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Дугме за заустављање"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Само хитни позиви"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Мрежа је закључана"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM картица је закључана PUK кодом."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Откључај"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Укључи звук"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Искључи звук"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Образац је започет"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Образац је обрисан"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Ћелија је додата"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Образац је довршен"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Нечујно"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Укључи звук"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Тастер. Потребне су слушалице да бисте чули тастере док куцате лозинку."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Укључите слушалице да бисте чули наглас изговорене тастере за лозинку."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Тачка."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Кретање до Почетне"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Кретање нагоре"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Још опција"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 851e79c..4230f28 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sätt i ett SIM-kort."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM-kort saknas eller kan inte läsas. Sätt i ett SIM-kort."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM-kortet har inaktiverats permanent."\n" Beställ ett nytt SIM-kort från din operatör."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knapp för föregående spår"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Knapp för nästa spår"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pausknappen"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Uppspelningsknappen"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Stoppknappen"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Endast nödsamtal"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Nätverk låst"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortet är PUK-låst."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Lås upp"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Ljud på"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Ljud av"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Skriver grafiskt lösenord"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Grafiskt lösenord har tagits bort"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"En cell har lagts till"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Grafiskt lösenord har slutförts"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Klipp ut"</string>
<string name="copy" msgid="2681946229533511987">"Kopiera"</string>
<string name="paste" msgid="5629880836805036433">"Klistra in"</string>
- <string name="replace" msgid="5781686059063148930">"Ersätt???"</string>
+ <string name="replace" msgid="5781686059063148930">"Ersätt..."</string>
<string name="delete" msgid="6098684844021697789">"Ta bort"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopiera webbadress"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Markera text..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tyst"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ljud på"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Du behöver ett headset för att höra tangenterna när du skriver in ett lösenord."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Anslut hörlurar om du vill höra lösenorden läsas upp."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Visa startsidan"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Navigera uppåt"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Fler alternativ"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index fa7e94a..b5465ac 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Tafadhali ingiza kadi ya SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Kadi ya SIM inakosekana au haisomekani. Tafadhali ingiza kadi ya SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Kadi yako ya SIM imelemazwa kabisa. "\n" tafadhali wasiliana na mtoa huduma wako wa psiwaya ili kupata kadi nyingine ya SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Kitufe cha awali cha wimbo"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Kitufe cha wimbo unaofuata"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Kitufe cha pauzi"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Kitufe cha kucheza"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Kitufe cha kusitisha"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Simu za dharura pekee"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Mtandao umefungwa"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kadi ya SIM imefungwa na PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Fungua"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sauti imewezeshwa"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sauti imezimwa"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Kiolezo imeanzishwa"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Kiolezo imefutwa"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Kiini imeongezwa"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Kiolezo imekamilika"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Kata"</string>
<string name="copy" msgid="2681946229533511987">"Nakala"</string>
<string name="paste" msgid="5629880836805036433">"Bandika"</string>
- <string name="replace" msgid="5781686059063148930">"Badilisha???"</string>
+ <string name="replace" msgid="5781686059063148930">"Badilisha..."</string>
<string name="delete" msgid="6098684844021697789">"Futa"</string>
<string name="copyUrl" msgid="2538211579596067402">"Nakili URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Chagua maandishi"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Kimya"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sauti imewashwa"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Muhimu. Kifaa cha kuskiza kilihitaji kusikiliza vichupo wakati wa kucharaza nenosiri."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Chomeka plagi ya kifaa cha kichwa cha kusikiza ili kusikiliza msimbo wa nenosiri inayozungumwa kwa sauti ya juu."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Nukta."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Abiri nyumbani"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Ongoza"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Chaguo zaidi"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 1738de3..fd4955d 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"โปรดใส่ซิมการ์ด"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"ไม่มีซิมการ์ดหรือไม่สามารถอ่านได้ โปรดใส่ซิมการ์ด"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"ซิมการ์ดของคุณถูกปิดใช้งานอย่างถาวร"\n"โปรดติดต่อผู้ให้บริการไร้สายของคุณเพื่อรับซิมการ์ดอีกอันหนึ่ง"</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"ปุ่มแทร็กก่อนหน้า"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"ปุ่มแทร็กถัดไป"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"ปุ่มหยุดชั่วคราว"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"ปุ่มเล่น"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"ปุ่มหยุด"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"โทรฉุกเฉินเท่านั้น"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"ล็อกเครือข่ายไว้"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"ซิมการ์ดถูกล็อกด้วย PUK"</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"ปลดล็อก"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"เปิดเสียง"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"ปิดเสียง"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"เริ่มวาดรูปแบบแล้ว"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"ล้างรูปแบบแล้ว"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"เพิ่มเซลแล้ว"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"วาดรูปแบบเสร็จสิ้น"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"ตัด"</string>
<string name="copy" msgid="2681946229533511987">"คัดลอก"</string>
<string name="paste" msgid="5629880836805036433">"วาง"</string>
- <string name="replace" msgid="5781686059063148930">"แทนที่???"</string>
+ <string name="replace" msgid="5781686059063148930">"แทนที่..."</string>
<string name="delete" msgid="6098684844021697789">"ลบ"</string>
<string name="copyUrl" msgid="2538211579596067402">"คัดลอก URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"เลือกข้อความ..."</string>
@@ -877,7 +886,7 @@
<string name="no" msgid="5141531044935541497">"ยกเลิก"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"โปรดทราบ"</string>
<string name="loading" msgid="1760724998928255250">"กำลังโหลด..."</string>
- <string name="capital_on" msgid="1544682755514494298">"ในวันที่"</string>
+ <string name="capital_on" msgid="1544682755514494298">"เปิด"</string>
<string name="capital_off" msgid="6815870386972805832">"ปิด"</string>
<string name="whichApplication" msgid="4533185947064773386">"ทำงานให้เสร็จโดยใช้"</string>
<string name="alwaysUse" msgid="4583018368000610438">"ใช้ค่าเริ่มต้นสำหรับการทำงานนี้"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"กล้องถ่ายรูป"</string>
<string name="description_target_silent" msgid="893551287746522182">"ปิดเสียง"</string>
<string name="description_target_soundon" msgid="30052466675500172">"เปิดเสียง"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"แป้นพิมพ์ จำเป็นต้องใช้ชุดหูฟังในการฟังเสียงแป้นพิมพ์ขณะพิมพ์รหัสผ่าน"</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"เสียบชุดหูฟังเพื่อฟังเสียงเมื่อพิมพ์รหัสผ่าน"</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"เครื่องหมายจุด"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"นำทางไปหน้าแรก"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"นำทางขึ้น"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"ตัวเลือกเพิ่มเติม"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index c9213b3..746cb96 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Mangyaring magpasok ng SIM card."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Nawawala o hindi nababasa ang SIM card. Mangyaring magpasok ng isang SIM card."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Ang iyong SIM card ay permanenteng hindi pinagana."\n" Mangyaring makipag-ugnay sa iyong wireless service provider upang makakuha ng isa pang SIM card."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Button na nakaraang track"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Button na Susunod na track"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Button na I-pause"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Button na I-play"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Button na Itigil"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Mga pang-emergency na tawag lang"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Naka-lock ang network"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Naka-PUK-lock ang SIM card."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"I-unlock"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"I-on ang tunog"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"I-off ang tunog"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Sinimulan ang pattern"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Na-clear ang pattern"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Idinagdag ang cell"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Nakumpleto ang pattern"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"I-cut"</string>
<string name="copy" msgid="2681946229533511987">"Kopyahin"</string>
<string name="paste" msgid="5629880836805036433">"I-paste"</string>
- <string name="replace" msgid="5781686059063148930">"Palitan???"</string>
+ <string name="replace" msgid="5781686059063148930">"Palitan..."</string>
<string name="delete" msgid="6098684844021697789">"Tanggalin"</string>
<string name="copyUrl" msgid="2538211579596067402">"Kopyahin ang URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pumili ng teksto..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Tahimik"</string>
<string name="description_target_soundon" msgid="30052466675500172">"I-on ang tunog"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Key. Kinakailangan ng headset upang marinig ang mga key habang nata-type ng password."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Mag-plug in ng isang headset upang marinig ang mga password key na binabanggit nang malakas."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dot."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Magnabiga sa home"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Magnabiga pataas"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Higit pang mga pagpipilian"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index f4bafb6..2b76c22 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Lütfen SIM kart takın."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM kart eksik veya okunamıyor. Bir SIM kart takın."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM kartınız kalıcı olarak devre dışı bırakıldı."\n" Başka bir SIM kart almak için kablosuz servis sağlayıcınıza başvurun."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Önceki parça düğmesi"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Sonraki parça düğmesi"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Duraklat düğmesi"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Oynat düğmesi"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Durdur düğmesi"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Yalnızca acil çağrılar için"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Ağ kilitli"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM kart PUK kilidi devrede."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Kilit Aç"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sesi aç"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sesi kapat"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Desen başlatıldı"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Desen temizlendi"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Hücre eklendi"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Desen tamamlandı"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Sessiz"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Ses açık"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Tuş. Şifre yazarken tuşları duyabilmek için kulaklık gerekir."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Şifre tuşlarının sesli okunmasını dinlemek için mikrofonlu kulaklık takın."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Nokta."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Ana sayfaya git"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Yukarı git"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Diğer seçenekler"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 65fd6a2..c71cc8c 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Вставте SIM-карту."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM-карта відсутня або недоступна для зчитування. Вставте SIM-карту."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Вашу SIM-карту вимкнено назавжди."\n" Зверніться до свого постачальника послуг бездротового зв’язку, щоб отримати іншу SIM-карту."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка \"Попередня доріжка\""</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка \"Наступна доріжка\""</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Кнопка \"Призупинити\""</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Кнопка \"Відтворити\""</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Кнопка \"Зупинити\""</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Лише аварійні виклики"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Мережу заблок."</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-карту заблоковано PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Розблок."</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Увімк. звук"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Вимкн. звук"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Малювання ключа розпочалося"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Ключ очищено"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Телефон додано"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Малювання ключа закінчено"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Без звуку"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Увімкнути звук"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Клавіша. Гарнітура має чути звук клавіш під час введення пароля."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Підключіть гарнітуру, щоб прослухати відтворені вголос символи пароля."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Крапка."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Перейти на головну"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Перейти вгору"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Інші варіанти"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 918d269..c65ecf4 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Vui lòng lắp thẻ SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Thẻ SIM bị thiếu hoặc không thể đọc được. Vui lòng lắp thẻ SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Thẻ SIM của bạn đã bị vô hiệu hóa vĩnh viễn."\n" Hãy liên hệ với nhà cung cấp dịch vụ không dây của bạn để lấy thẻ SIM khác."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Nút bài hát trước"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nút bài hát tiếp theo"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Nút tạm dừng"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Nút phát"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Nút dừng"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Chỉ cuộc gọi khẩn cấp"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Mạng đã khoá"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Thẻ SIM đã bị khoá PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Mở khoá"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Bật âm thanh"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Tắt âm thanh"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Đã bắt đầu vẽ hình"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Đã xóa hình"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Đã thêm ô"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Đã vẽ xong hình"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"Cắt"</string>
<string name="copy" msgid="2681946229533511987">"Sao chép"</string>
<string name="paste" msgid="5629880836805036433">"Dán"</string>
- <string name="replace" msgid="5781686059063148930">"Thay thế???"</string>
+ <string name="replace" msgid="5781686059063148930">"Thay thế..."</string>
<string name="delete" msgid="6098684844021697789">"Xóa"</string>
<string name="copyUrl" msgid="2538211579596067402">"Sao chép URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Chọn văn bản..."</string>
@@ -1006,7 +1015,7 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Gỡ lỗi USB đã được kết nối"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Chọn để vô hiệu hoá gỡ lỗi USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Chọn phương thức nhập"</string>
- <string name="configure_input_methods" msgid="6324843080254191535">"Định cấu hình phương pháp nhập liệu"</string>
+ <string name="configure_input_methods" msgid="6324843080254191535">"Định cấu hình phương thức nhập liệu"</string>
<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>"ứng viên"</u></string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Máy ảnh"</string>
<string name="description_target_silent" msgid="893551287746522182">"Im lặng"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Bật âm thanh"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Phím. Yêu cầu phải có tai nghe để nghe phím khi nhập mật khẩu."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Hãy cắm tai nghe để nghe mật khẩu."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dấu chấm."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Điều hướng về trang chủ"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Điều hướng lên trên"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Tùy chọn khác"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index d6cdcbc..d559569 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"请插入 SIM 卡"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM 卡丢失或无法读取。请插入 SIM 卡。"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"您的 SIM 卡已永久停用。"\n"请与您的无线服务提供商联系,以便重新获取一张 SIM 卡。"</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"“上一曲目”按钮"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"“下一曲目”按钮"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"“暂停”按钮"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"“播放”按钮"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"“停止”按钮"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"只能使用紧急呼叫"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"网络已锁定"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM 卡已用 PUK 码锁定"</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"解锁"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"打开声音"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"关闭声音"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"开始绘制图案"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"图案已清除"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"单元格已添加"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"图案绘制完成"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"剪切"</string>
<string name="copy" msgid="2681946229533511987">"复制"</string>
<string name="paste" msgid="5629880836805036433">"粘贴"</string>
- <string name="replace" msgid="5781686059063148930">"替换???"</string>
+ <string name="replace" msgid="5781686059063148930">"替换..."</string>
<string name="delete" msgid="6098684844021697789">"删除"</string>
<string name="copyUrl" msgid="2538211579596067402">"复制网址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"选择文字..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"相机"</string>
<string name="description_target_silent" msgid="893551287746522182">"静音"</string>
<string name="description_target_soundon" msgid="30052466675500172">"打开声音"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"按键声。需要插入耳机才能在键入密码时听到按键声。"</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"需要插入耳机才能听到密码的按键声。"</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"点。"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"导航首页"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"向上导航"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"更多选项"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 3149403..4b791f1 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -330,10 +330,10 @@
<string name="permdesc_readProfile" product="default" msgid="6335739730324727203">"允許應用程式讀取儲存在裝置上的個人資料資訊,例如您的姓名和聯絡資訊。這表示該應用程式可以識別您的身分,並將您的個人資料資訊傳送給他人。"</string>
<string name="permlab_writeProfile" msgid="4679878325177177400">"寫入您的個人資料"</string>
<string name="permdesc_writeProfile" product="default" msgid="6431297330378229453">"允許應用程式新增或變更儲存在裝置上的個人資料資訊,例如您的姓名和聯絡資訊。這表示其他應用程式可以識別您的身分,並將您的個人資料資訊傳送給他人。"</string>
- <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"閱讀您的社交串流"</string>
- <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"允許應用程式存取並同步處理來自好友的動態更新。惡意應用程式可能會藉此讀取您和好友在社交網路上的私人訊息。"</string>
+ <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"讀取您的社交串流"</string>
+ <string name="permdesc_readSocialStream" product="default" msgid="6619997662735851111">"允許應用程式存取並同步處理好友的最新動態。惡意應用程式可能會藉此竊取您和好友在社交網路上的私人訊息。"</string>
<string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"寫入您的社交串流"</string>
- <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"允許應用程式顯示好友的動態更新。惡意應用程式可能會藉此假裝成您的好友,欺騙您透露密碼或其他機密資訊。"</string>
+ <string name="permdesc_writeSocialStream" product="default" msgid="2689083745826002521">"允許應用程式顯示好友的最新動態。惡意應用程式可能會藉此假冒您的好友,騙取您的密碼或其他機密資訊。"</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"讀取日曆活動與機密資訊"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="5665520896961671949">"允許應用程式讀取所有儲存在您平板電腦上的日曆活動,包含好友或同事的日曆活動。惡意應用程式可能藉此在未經擁有者同意的情況下,從這些日曆擷取個人資訊。"</string>
<string name="permdesc_readCalendar" product="default" msgid="2915879965326930312">"允許應用程式讀取所有儲存在您手機上的日曆活動,包含好友或同事的日曆活動。惡意應用程式可能藉此在未經擁有者同意的情況下,從這些日曆擷取個人資訊。"</string>
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"請插入 SIM 卡。"</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"找不到 SIM 卡或無法讀取 SIM 卡,請插入 SIM 卡。"</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"您的 SIM 卡已永久停用。"\n"請與您的無線服務供應商聯絡,以取得其他 SIM 卡。"</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"[上一首曲目] 按鈕"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"[下一首曲目] 按鈕"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"[暫停] 按鈕"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"[播放] 按鈕"</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"[停止] 按鈕"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"僅可撥打緊急電話"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"網路已鎖定"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM 的 PUK 已鎖定。"</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"解除封鎖"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"開啟音效"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"關閉音效"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"已開始繪畫解鎖圖形"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"已清除解鎖圖形"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"已加入 1 格"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"已畫出解鎖圖形"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -859,7 +868,7 @@
<string name="cut" msgid="3092569408438626261">"剪下"</string>
<string name="copy" msgid="2681946229533511987">"複製"</string>
<string name="paste" msgid="5629880836805036433">"貼上"</string>
- <string name="replace" msgid="5781686059063148930">"取代???"</string>
+ <string name="replace" msgid="5781686059063148930">"取代…"</string>
<string name="delete" msgid="6098684844021697789">"刪除"</string>
<string name="copyUrl" msgid="2538211579596067402">"複製網址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"選取文字..."</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"相機"</string>
<string name="description_target_silent" msgid="893551287746522182">"靜音"</string>
<string name="description_target_soundon" msgid="30052466675500172">"開啟音效"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"提醒您,輸入密碼時需要使用耳機才能聽到按鍵名稱。"</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"接上耳機即可聽見系統朗讀密碼鍵。"</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"點。"</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"瀏覽首頁"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"向上瀏覽"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"更多選項"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 8341e92..a61416f 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -665,6 +665,11 @@
<string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sicela ufake ikhadi le-SIM."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Ikhadi le-SIM alitholakali noma alifundeki. Sicela ufake ikhadi le-SIM."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Ikhadi lakho lwe-SIM lukhubazekhisiwe ngokuphelele. "\n" Sicela uthintane nomhlinzeki wosizo ongenantambo ukuthola elinye ikhadi le-SIM."</string>
+ <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Inkinombo yengoma yangaphambilini"</string>
+ <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Inkinobho yengoma elandelayo"</string>
+ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Inkinobho yokukuma kancane"</string>
+ <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Inkinobho yokudlala."</string>
+ <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Misa inkinombo"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Amakholi aphuthumayo kuphela"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Inethiwekhi ivaliwe"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Ikhadi le-SIM livalwe nge-PUK."</string>
@@ -694,6 +699,10 @@
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Vula"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Umsindo uvuliwe"</string>
<string name="lockscreen_sound_off_label" msgid="996822825154319026">"Umsindo uvaliwe"</string>
+ <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Kuqalwe iphethini"</string>
+ <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Iphethini isusiwe"</string>
+ <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Kwengezwe"</string>
+ <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Iphethini isiphelile"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -1160,9 +1169,8 @@
<string name="description_target_camera" msgid="969071997552486814">"Ikhamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Thulile"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Umsindo uvuliwe"</string>
- <!-- outdated translation 4407722573911224960 --> <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Izinkinobho. I-Headset edingeka ukuze kuzwakale izinkinobho ngesikhathi uthayipha i-password."</string>
- <!-- no translation found for keyboard_password_character_no_headset (2859873770886153678) -->
- <skip />
+ <string name="keyboard_headset_required_to_hear_password" msgid="5913502399391940888">"Faka ama-headset ukuze uzwe izinkinobho zephasiwedi eziphimiswayo."</string>
+ <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Icashazi."</string>
<string name="action_bar_home_description" msgid="5293600496601490216">"Zulazulela ekhaya"</string>
<string name="action_bar_up_description" msgid="2237496562952152589">"Zulazulela phezulu"</string>
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Izinketho ezingaphezulu"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 6c7a981..d7691f7 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2639,6 +2639,9 @@
<!-- The offset of the baseline within this view. See {see android.view.View#getBaseline}
for details -->
<attr name="baseline" format="dimension" />
+ <!-- @hide The alpha value (0-255) set on the ImageView's drawable. Equivalent
+ to calling ImageView.setAlpha(int), not the same as View.setAlpha(float). -->
+ <attr name="drawableAlpha" format="integer" />
</declare-styleable>
<declare-styleable name="ToggleButton">
<!-- The text for the button when it is checked. -->
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index a9c603f..c37871b 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -85,8 +85,8 @@
<color name="darker_gray">#aaa</color>
<!-- For security permissions -->
- <color name="perms_dangerous_grp_color">#dd6826</color>
- <color name="perms_dangerous_perm_color">#dd6826</color>
+ <color name="perms_dangerous_grp_color">#33b5e5</color>
+ <color name="perms_dangerous_perm_color">#33b5e5</color>
<color name="shadow">#cc222222</color>
<!-- For search-related UIs -->
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 20af731..e60e8b2 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -230,10 +230,11 @@
<style name="TextAppearance.StatusBar.Icon">
</style>
<style name="TextAppearance.StatusBar.EventContent">
- <item name="android:textColor">?android:attr/textColorPrimary</item>
+ <item name="android:textColor">?android:attr/textColorSecondary</item>
<item name="android:textSize">13sp</item>
</style>
<style name="TextAppearance.StatusBar.EventContent.Title">
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">16sp</item>
<item name="android:textStyle">bold</item>
</style>
diff --git a/data/sounds/AudioPackage7.mk b/data/sounds/AudioPackage7.mk
index 66edb7a..8d92b05 100755
--- a/data/sounds/AudioPackage7.mk
+++ b/data/sounds/AudioPackage7.mk
@@ -62,6 +62,6 @@
$(LOCAL_PATH)/ringtones/ogg/Scarabaeus.ogg:system/media/audio/ringtones/Scarabaeus.ogg \
$(LOCAL_PATH)/ringtones/ogg/Sceptrum.ogg:system/media/audio/ringtones/Sceptrum.ogg \
$(LOCAL_PATH)/ringtones/ogg/Solarium.ogg:system/media/audio/ringtones/Solarium.ogg \
- $(LOCAL_PATH)/ringtones/ogg/Testudo.ogg:system/media/audio/ringtones/Testudo.ogg \
+ $(LOCAL_PATH)/ringtones/ogg/Themos.ogg:system/media/audio/ringtones/Themos.ogg \
$(LOCAL_PATH)/ringtones/ogg/UrsaMinor.ogg:system/media/audio/ringtones/UrsaMinor.ogg \
$(LOCAL_PATH)/ringtones/ogg/Zeta.ogg:system/media/audio/ringtones/Zeta.ogg
diff --git a/data/sounds/ringtones/ogg/Themos.ogg b/data/sounds/ringtones/ogg/Themos.ogg
new file mode 100644
index 0000000..bc850b8
--- /dev/null
+++ b/data/sounds/ringtones/ogg/Themos.ogg
Binary files differ
diff --git a/data/sounds/ringtones/wav/Themos.wav b/data/sounds/ringtones/wav/Themos.wav
new file mode 100644
index 0000000..d4d5c6e
--- /dev/null
+++ b/data/sounds/ringtones/wav/Themos.wav
Binary files differ
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index f3540e2..b7710c3 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -262,20 +262,20 @@
</ul>
</li>
<li class="toggle-list">
- <div><a href="<?cs var:toroot ?>guide/topics/renderscript/index.html">
- <span class="en">RenderScript</span>
- </a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>guide/topics/renderscript/graphics.html">
- <span class="en">Graphics</span>
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>guide/topics/renderscript/compute.html">
- <span class="en">Compute</span>
- </a>
- </li>
- </ul>
- </li>
+ <div><a href="<?cs var:toroot ?>guide/topics/renderscript/index.html">
+ <span class="en">RenderScript</span></a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/graphics.html">
+ <span class="en">Graphics</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>guide/topics/renderscript/compute.html">
+ <span class="en">Compute</span>
+ </a>
+ </li>
+ </ul>
+ </li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/topics/media/index.html">
@@ -332,9 +332,15 @@
<li><a href="<?cs var:toroot?>guide/topics/wireless/bluetooth.html">
<span class="en">Bluetooth</span></a>
</li>
- <li><a href="<?cs var:toroot?>guide/topics/nfc/index.html">
- <span class="en">Near Field Communication</span>
- </a></li>
+ <li class="toggle-list">
+ <div><a href="<?cs var:toroot?>guide/topics/nfc/index.html">
+ <span class="en">Near Field Communication</span></a> <span class="new">updated</span>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>guide/topics/nfc/nfc.html">NFC Basics</a></li>
+ <li><a href="<?cs var:toroot ?>guide/topics/nfc/advanced-nfc.html">Advanced NFC</a></li>
+ </ul>
+ </li>
<li class="toggle-list">
<div><a href="<?cs var:toroot?>guide/topics/usb/index.html">
<span class="en">USB</span></a>
@@ -715,7 +721,7 @@
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/index.html">
<span class="en">UI Guidelines</span>
- </a></div>
+ </a> <span class="new-child">updated</span></div>
<ul>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design.html">
diff --git a/docs/html/guide/topics/nfc/advanced-nfc.jd b/docs/html/guide/topics/nfc/advanced-nfc.jd
new file mode 100644
index 0000000..b43b559
--- /dev/null
+++ b/docs/html/guide/topics/nfc/advanced-nfc.jd
@@ -0,0 +1,300 @@
+page.title=Advanced NFC
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#tag-tech">Working with Supported Tag Technologies</a>
+ <ol>
+ <li><a href="#tech-intent">Working with tag technologies and the ACTION_TECH_DISCOVERED
+ intent</a></li>
+ <li><a href="#read-write">Reading and writing to tags</a></li>
+ </ol></li>
+ <li><a href="#foreground-dispatch">Using the Foreground Dispatch System</a></li>
+ </ol>
+</div>
+</div>
+
+<p>This document describes advanced NFC topics, such as working with various tag technologies,
+writing to NFC tags, and foreground dispatching, which allows an application in the foreground to
+handle intents even when other applications filter for the same ones.</p>
+
+<h2 id="tag-tech">Working with Supported Tag Technologies</h2>
+<p>When working with NFC tags and Android-powered devices, the main format you use to read
+and write data on tags is NDEF. When a device scans a tag with NDEF data, Android provides support
+in parsing the message and delivering it in an {@link android.nfc.NdefMessage} when
+possible. There are cases, however, when you scan a tag that does not contain
+NDEF data or when the NDEF data could not be mapped to a MIME type or URI.
+In these cases, you need to open communication directly with the tag and read and write to it with
+your own protocol (in raw bytes). Android provides generic support for these use cases with the
+{@link android.nfc.tech} package, which is described in <a href="#tech-table">Table 1</a>. You can
+use the {@link android.nfc.Tag#getTechList getTechList()} method to determine the technologies
+supported by the tag and create the corresponding {@link android.nfc.tech.TagTechnology}
+object with one of classes provided by {@link android.nfc.tech} </p>
+
+<p class="table-caption" id="table1">
+<strong>Table 1.</strong> Supported tag technologies</p>
+<table id="tech-table">
+
+ <tr>
+ <th>Class</th>
+
+ <th>Description</th>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.TagTechnology}</td>
+
+ <td>The interface that all tag technology classes must implement.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NfcA}</td>
+
+ <td>Provides access to NFC-A (ISO 14443-3A) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NfcB}</td>
+
+ <td>Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NfcF}</td>
+
+ <td>Provides access to NFC-F (JIS 6319-4) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NfcV}</td>
+
+ <td>Provides access to NFC-V (ISO 15693) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.IsoDep}</td>
+
+ <td>Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.Ndef}</td>
+
+ <td>Provides access to NDEF data and operations on NFC tags that have been formatted as
+ NDEF.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.NdefFormatable}</td>
+
+ <td>Provides a format operations for tags that may be NDEF formattable.</td>
+ </tr>
+ </table>
+<p>The following tag technlogies are not required to be supported by Android-powered devices.</p>
+ <p class="table-caption" id="table2">
+<strong>Table 2.</strong> Optional supported tag technologies</p>
+ <table>
+ <tr>
+ <th>Class</th>
+
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>{@link android.nfc.tech.MifareClassic}</td>
+
+ <td>Provides access to MIFARE Classic properties and I/O operations, if this Android device
+ supports MIFARE.</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.nfc.tech.MifareUltralight}</td>
+
+ <td>Provides access to MIFARE Ultralight properties and I/O operations, if this Android
+ device supports MIFARE.</td>
+ </tr>
+ </table>
+
+<h3 id="tech-intent">Working with tag technologies and the ACTION_TECH_DISCOVERED intent</h3>
+<p>When a device scans a tag that has NDEF data on it, but could not be mapped to a MIME or URI,
+the tag dispatch system tries to start an activity with the {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}
+intent. The {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} is also used when a tag
+with non-NDEF data is scanned. Having this fallback allows you to work with the data on the tag
+directly if the tag dispatch system could not parse it for you. The basic steps when working with
+tag technologies are as follows:</p>
+
+<ol>
+ <li>Filter for an {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent specifying the
+tag technologies that you want to handle. See <a
+href="{@docRoot}guide/topics/nfc/nfc.html#tech-disc">Filtering for NFC
+intents</a> for more information. In general, the tag dispatch system tries to start a {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent when an NDEF message
+cannot be mapped to a MIME type or URI, or if the tag scanned did not contain NDEF data. For
+more information on how this is determined, see <a
+href="{@docRoot}guide/topics/nfc/nfc.html#tag-dispatch">The Tag Dispatch System</a>.</li>
+ <li>When your application receives the intent, obtain the {@link android.nfc.Tag} object from
+the intent:
+<pre>Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);</pre></li>
+<li>Obtain an instance of a {@link android.nfc.tech.TagTechnology}, by calling one of the
+<code>get</code> factory methods of the classes in the {@link android.nfc.tech} package. You can
+enumerate the supported technologies of the tag by calling {@link android.nfc.Tag#getTechList
+getTechList()} before calling a <code>get</code> factory method. For example, to obtain an instance
+of {@link android.nfc.tech.MifareUltralight} from a {@link android.nfc.Tag}, do the following:
+
+<pre>
+MifareUltralight.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
+</pre>
+</li>
+</ol>
+
+
+
+<h3 id="read-write">Reading and writing to tags</h3>
+
+<p>Reading and writing to an NFC tag involves obtaining the tag from the intent and
+opening communication with the tag. You must define your own protocol stack to read and write data
+to the tag. Keep in mind, however, that you can still read and write NDEF data when working
+directly with a tag. It is up to you how you want to structure things. The
+following example shows how to work with a MIFARE Ultralight tag.</p>
+
+<pre>
+package com.example.android.nfc;
+
+import android.nfc.Tag;
+import android.nfc.tech.MifareUltralight;
+import android.util.Log;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+public class MifareUltralightTagTester {
+
+ private static final String TAG = MifareUltralightTagTester.class.getSimpleName();
+
+ public void writeTag(Tag tag, String tagText) {
+ MifareUltralight ultralight = MifareUltralight.get(tag);
+ try {
+ ultralight.connect();
+ ultralight.writePage(4, "abcd".getBytes(Charset.forName("US-ASCII")));
+ ultralight.writePage(5, "efgh".getBytes(Charset.forName("US-ASCII")));
+ ultralight.writePage(6, "ijkl".getBytes(Charset.forName("US-ASCII")));
+ ultralight.writePage(7, "mnop".getBytes(Charset.forName("US-ASCII")));
+ } catch (IOException e) {
+ Log.e(TAG, "IOException while closing MifareUltralight...", e);
+ } finally {
+ try {
+ ultralight.close();
+ } catch (IOException e) {
+ Log.e(TAG, "IOException while closing MifareUltralight...", e);
+ }
+ }
+ }
+
+ public String readTag(Tag tag) {
+ MifareUltralight mifare = MifareUltralight.get(tag);
+ try {
+ mifare.connect();
+ byte[] payload = mifare.readPages(4);
+ return new String(payload, Charset.forName("US-ASCII"));
+ } catch (IOException e) {
+ Log.e(TAG, "IOException while writing MifareUltralight
+ message...", e);
+ } finally {
+ if (mifare != null) {
+ try {
+ mifare.close();
+ }
+ catch (IOException e) {
+ Log.e(TAG, "Error closing tag...", e);
+ }
+ }
+ }
+ return null;
+ }
+}
+</pre>
+
+</pre>
+
+ <h2 id="foreground-dispatch">Using the Foreground Dispatch System</h2>
+
+ <p>The foreground dispatch system allows an activity to intercept an intent and claim
+priority over other activities that handle the same intent. Using this system involves
+ constructing a few data structures for the Android system to be able to send the appropriate
+ intents to your application. To enable the foreground dispatch system:</p>
+
+ <ol>
+ <li>Add the following code in the <code>onCreate()</code> method of your activity:
+
+ <ol>
+ <li>Create a {@link android.app.PendingIntent} object so the Android system can populate it
+ with the details of the tag when it is scanned.
+ <pre>
+PendingIntent pendingIntent = PendingIntent.getActivity(
+ this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
+</pre>
+ </li>
+
+ <li>Declare intent filters to handle the intents that you want to intercept. The foreground
+ dispatch system checks the specified intent filters with the intent that is received when
+ the device scans a tag. If it matches, then your application handles the intent. If it does
+ not match, the foreground dispatch system falls back to the intent dispatch system.
+ Specifying a <code>null</code> array of intent filters and technology filters, specifies
+ that you want to filter for all tags that fallback to the <code>TAG_DISCOVERED</code>
+ intent. The code snippet below handles all MIME types for <code>NDEF_DISCOVERED</code>. You
+ should only handle the ones that you need.
+<pre>
+IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
+ try {
+ ndef.addDataType("*/*"); /* Handles all MIME based dispatches.
+ You should specify only the ones that you need. */
+ }
+ catch (MalformedMimeTypeException e) {
+ throw new RuntimeException("fail", e);
+ }
+ intentFiltersArray = new IntentFilter[] {ndef, };
+</pre>
+ </li>
+
+ <li>Set up an array of tag technologies that your application wants to handle. Call the
+ <code>Object.class.getName()</code> method to obtain the class of the technology that you
+ want to support.
+<pre>
+techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
+</pre>
+ </li>
+ </ol>
+ </li>
+
+ <li>Override the following activity lifecycle callbacks and add logic to enable and disable the
+ foreground dispatch when the activity loses ({@link android.app.Activity#onPause onPause()})
+ and regains ({@link android.app.Activity#onResume onResume()}) focus. {@link
+ android.nfc.NfcAdapter#enableForegroundDispatch enableForegroundDispatch()} must be called from
+the main thread and only when the activity is in the foreground (calling in {@link
+android.app.Activity#onResume onResume()} guarantees this). You also need to implement the {@link
+ android.app.Activity#onNewIntent onNewIntent} callback to process the data from the scanned NFC
+ tag.</li>
+
+<pre>
+public void onPause() {
+ super.onPause();
+ mAdapter.disableForegroundDispatch(this);
+}
+
+public void onResume() {
+ super.onResume();
+ mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
+}
+
+public void onNewIntent(Intent intent) {
+ Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+ //do something with tagFromIntent
+}
+</pre>
+ </li>
+ </ol>
+
+ <p>See the <a href=
+"{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html">
+ForegroundDispatch</a> sample from API Demos for the complete sample.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/nfc/index.jd b/docs/html/guide/topics/nfc/index.jd
index b486d3b..b86d72d 100644
--- a/docs/html/guide/topics/nfc/index.jd
+++ b/docs/html/guide/topics/nfc/index.jd
@@ -1,601 +1,33 @@
page.title=Near Field Communication
@jd:body
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#api">API Overview</a></li>
- <li><a href="#manifest">Declaring Android Manifest elements</a></li>
- <li><a href="#dispatch">The Tag Dispatch System</a>
- <ol>
- <li><a href="#intent-dispatch">Using the intent dispatch system</a></li>
- <li><a href="#foreground-dispatch">Using the foreground dispatch system</a></li>
- </ol></li>
- <li><a href="#ndef">Working with Data on NFC Tags</a></li>
- <li><a href="#read">Reading an NFC Tag</a></li>
- <li><a href="#write">Writing to an NFC Tag</a></li>
- <li><a href="#p2p">Peer-to-Peer Data Exchange</a></li>
- </ol>
-</div>
-</div>
-
<p>Near Field Communication (NFC) is a set of short-range wireless technologies, typically
- requiring a distance of 4cm or less. NFC operates at 13.56mhz, and at rates ranging from 106
- kbit/s to 848 kbit/s. NFC communication always involves an initiator and a target. The initiator
- actively generates an RF field that can power a passive target. This enables NFC targets to take
- very simple form factors such as tags, stickers or cards that do not require power. NFC
- peer-to-peer communication is also possible, where both devices are powered.</p>
+ requiring a distance of 4cm or less to initiate a connection. NFC allows you to share small
+ payloads of data between an NFC tag and an Android-powered device, or between two Android-powered
+ devices.
- <p>Compared to other wireless technologies such as Bluetooth or WiFi, NFC provides much lower
- bandwidth and range, but enables low-cost, un-powered targets and does not require discovery or
- pairing. Interactions can be initiated with just a tap.</p>
-
- <p>An Android device with NFC hardware will typically act as an initiator when the screen is on.
- This mode is also known as NFC reader/writer. It will actively look for NFC tags and start
- activities to handle them. Android 2.3.3 also has some limited P2P support.</p>
-
- <p>Tags can range in complexity, simple tags just offer read/write semantics, sometimes with
+ <p>Tags can range in complexity. Simple tags offer just read and write semantics, sometimes with
one-time-programmable areas to make the card read-only. More complex tags offer math operations,
and have cryptographic hardware to authenticate access to a sector. The most sophisticated tags
- contain operating environments, allowing complex interactions with code executing on the tag.</p>
+ contain operating environments, allowing complex interactions with code executing on the tag.
+ The data stored in the tag can also be written in a variety of formats, but many of the Android
+ framework APIs are based around a <a href="http://www.nfc-forum.org/">NFC Forum</a> standard
+ called NDEF (NFC Data Exchange Format).</p>
- <h2 id="api">API Overview</h2>
+ <dl>
+ <dt><strong><a href="{@docRoot}guide/topics/nfc/nfc.html">NFC Basics</a></strong></dt>
+ <dd>This document describes how Android handles discovered NFC tags and how it notifies
+applications of data that is relevant to the application. It also goes over how to work with the
+NDEF data in your applications and gives an overview of the framework APIs that support the basic
+NFC feature set of Android.</dd>
- <p>The {@link android.nfc} package contains the high-level classes to interact with the local
- device's NFC adapter, to represent discovered tags, and to use the NDEF data format.</p>
-
- <table>
- <tr>
- <th>Class</th>
-
- <th>Description</th>
- </tr>
-
- <tr>
- <td>{@link android.nfc.NfcManager}</td>
-
- <td>A high level manager class that enumerates the NFC adapters on this Android device. Since
- most Android devices only have one NFC adapter, you can just use the static helper {@link
- android.nfc.NfcAdapter#getDefaultAdapter(Context)} for most situations.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.NfcAdapter}</td>
-
- <td>Represents the local NFC adapter. Defines the intent's used to request tag dispatch to
- your activity, and provides methods to register for foreground tag dispatch and foreground
- NDEF push. Foreground NDEF push is the only peer-to-peer support that is currently provided
- in Android.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.NdefMessage} and {@link android.nfc.NdefRecord}</td>
-
- <td>NDEF is an NFC Forum defined data structure, designed to efficiently store data on NFC
- tags, such as text, URL's, and other MIME types. A {@link android.nfc.NdefMessage} acts as a
- container for the data that you want to transmit or read. One {@link android.nfc.NdefMessage}
- object contains zero or more {@link android.nfc.NdefRecord}s. Each NDEF record has a type
- such as text, URL, smart poster, or any MIME data. The type of the first NDEF record in the
- NDEF message is used to dispatch a tag to an activity on Android.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.Tag}</td>
-
- <td>Represents a passive NFC target. These can come in many form factors such as a tag, card,
- key fob, or even a phone doing card emulation. When a tag is discovered, a {@link
- android.nfc.Tag} object is created and wrapped inside an Intent. The NFC dispatch system
- sends the intent to a compatible activity using <code>startActivity()</code>. You can use the
- {@link android.nfc.Tag#getTechList getTechList()} method to determine the technologies
- supported by this tag and create the corresponding {@link android.nfc.tech.TagTechnology}
- object with one of classes provided by {@link android.nfc.tech}.</td>
- </tr>
- </table>
-
- <p>The {@link android.nfc.tech} package contains classes to query properties and perform I/O
- operations on a tag. The classes are divided to represent different NFC technologies that can be
- available on a Tag:</p>
-
- <table>
- <tr>
- <th>Class</th>
-
- <th>Description</th>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.TagTechnology}</td>
-
- <td>The interface that all tag technology classes must implement.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.NfcA}</td>
-
- <td>Provides access to NFC-A (ISO 14443-3A) properties and I/O operations.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.NfcB}</td>
-
- <td>Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.NfcF}</td>
-
- <td>Provides access to NFC-F (JIS 6319-4) properties and I/O operations.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.NfcV}</td>
-
- <td>Provides access to NFC-V (ISO 15693) properties and I/O operations.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.IsoDep}</td>
-
- <td>Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.Ndef}</td>
-
- <td>Provides access to NDEF data and operations on NFC tags that have been formatted as
- NDEF.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.NdefFormatable}</td>
-
- <td>Provides a format operations for tags that may be NDEF formattable.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.MifareClassic}</td>
-
- <td>Provides access to MIFARE Classic properties and I/O operations, if this Android device
- supports MIFARE.</td>
- </tr>
-
- <tr>
- <td>{@link android.nfc.tech.MifareUltralight}</td>
-
- <td>Provides access to MIFARE Ultralight properties and I/O operations, if this Android
- device supports MIFARE.</td>
- </tr>
- </table>
-
- <h2 id="manifest">Declaring Android Manifest elements</h2>
-
- <p>Before you can access a device's NFC hardware and properly handle NFC intents, declare these
- items in your <code>AndroidManifest.xml</code> file:</p>
-
- <ol>
- <li>The NFC <code><uses-permission></code> element to access the NFC hardware:
- <pre>
-<uses-permission android:name="android.permission.NFC" />
-</pre>
- </li>
-
- <li>The minimum SDK version that your application can support. API level 9 only supports
- limited tag dispatch via {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}, and only gives
- access to NDEF messages via the {@link android.nfc.NfcAdapter#EXTRA_NDEF_MESSAGES} extra. No
- other tag properties or I/O operations are accessible. You probably want to use API level 10
- which includes comprehensive reader/writer support.
- <pre class="pretty-print">
-<uses-sdk android:minSdkVersion="10"/>
-</pre>
- </li>
-
- <li>The uses-feature element so that your application can show up in the Android Market for
- devices that have NFC hardware:
- <pre>
-<uses-feature android:name="android.hardware.nfc" android:required="true" />
-</pre>
- </li>
-
- <li>The NFC intent filter to tell the Android system your Activity can handle NFC data. Specify
- one or more of these three intent filters:
- <pre>
-<intent-filter>
- <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
- <data android:mimeType="<em>mime/type</em>" />
-</intent-filter>
-
-<intent-filter>
- <action android:name="android.nfc.action.TECH_DISCOVERED"/>
- <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
- android:resource="@xml/<em>nfc_tech_filter</em>.xml" />
-</intent-filter>
-
-<intent-filter>
- <action android:name="android.nfc.action.TAG_DISCOVERED"/>
-</intent-filter>
-</pre>
-
- <p>The three intent filters are prioritized and behave in specific ways. Declare only the
- ones that your Activity needs to handle. For more information on how to handle these filters,
- see the section about <a href="#dispatch">The Tag Dispatch System</a>.</p>
- </li>
- </ol>
-
- <p>View the <a href=
- "../../../resources/samples/NFCDemo/AndroidManifest.html">AndroidManifest.xml</a> from the
- NFCDemo sample to see a complete example.</p>
-
- <h2 id="dispatch">The Tag Dispatch System</h2>
-
- <p>When an Android device scans an NFC tag, the desired behavior is to have the most appropriate
- Activity handle the intent without asking the user what application to use. Because devices scan
- NFC tags at a very short range, it is likely that making users manually select an Activity forces
- them to move the device away from the tag and break the connection. You should develop your
- Activity to only handle the NFC tags that your Activity cares about to prevent the Activity
- Chooser from appearing. Android provides two systems to help you correctly identify an NFC tag
- that your Activity should handle: the Intent dispatch system and the foreground Activity dispatch
- system.</p>
-
- <p>The intent dispatch system checks the intent filters of all the Activities along with the
- types of data that the Activities support to find the best Activity that can handle the NFC tag.
- If multiple Activities specify the same intent filter and data to handle, then the Activity
- Chooser is presented to the user as a last resort.</p>
-
- <p>The foreground dispatch system allows an Activity application to override the intent dispatch
- system and have priority when an NFC tag is scanned. The Activity handling the request must be
- running in the foreground of the device. When an NFC tag is scanned and matches the intent and
- data type that the foreground dispatch Activity defines, the intent is immediately sent to the
- Activity even if another Activity can handle the intent. If the Activity cannot handle the
- intent, the foreground dispatch system falls back to the intent dispatch system.</p>
-
- <h3 id="intent-dispatch">Using the intent dispatch system</h3>
-
- <p>The intent dispatch system specifies three intents that each have a priority. The intents that
- start when a device scans a tag depend on the type of tag scanned. In general, the intents are
- started in the following manner:</p>
-
- <ul>
- <li>
- <code>android.nfc.action.NDEF_DISCOVERED</code>: This intent starts when a tag that contains
- an NDEF payload is scanned. This is the highest priority intent. The Android system does not
- let you specify this intent generically to handle all data types. You must specify
- <code><data></code> elements in the <code>AndroidManifest.xml</code> along with this
- intent to correctly handle NFC tags that start this intent. For example, to handle a
- <code>NDEF_DISCOVERED</code> intent that contains plain text, specify the following filter in
- your <code>AndroidManifest.xml</code> file:
- <pre>
-<intent-filter>
- <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
- <data android:mimeType="text/plain" />
-</intent-filter>
-</pre>
-
- <p>If the <code>NDEF_DISCOVERED</code> intent is started, the <code>TECH_DISCOVERED</code>
- and <code>TAG_DISCOVERED</code> intents are not started. This intent does not start if an
- unknown tag is scanned or if the tag does not contain an NDEF payload.</p>
- </li>
-
- <li><code>android.nfc.action.TECH_DISCOVERED</code>: If the <code>NDEF_DISCOVERED</code> intent
- does not start or is not filtered by any Activity on the device, this intent starts if the tag
- is known. The <code>TECH_DISCOVERED</code> intent requires that you specify the technologies
- that you want to support in an XML resource file. For more information, see the section about
- <a href="#technology-resources">Specifying tag technologies to handle</a>.</li>
-
- <li><code>android.nfc.action.TAG_DISCOVERED</code>: This intent starts if no Activities handle
- the <code>NDEF_DISCOVERED</code> and <code>TECH_DISCOVERED</code> intents or if the tag that is
- scanned is unknown.</li>
- </ul>
-
- <h4 id="tech">Specifying tag technologies to handle</h4>
-
- <p>If your Activity declares the <code>android.nfc.action.TECH_DISCOVERED</code> intent in your
- <code>AndroidManifest.xml</code> file, you must create an XML resource file that specifies the
- technologies that your Activity supports within a <code>tech-list</code> set. Your Activity is
- considered a match if a <code>tech-list</code> set is a subset of the technologies that are
- supported by the tag, which you can obtain by calling {@link android.nfc.Tag#getTechList
- getTechList()}.</p>
-
- <p>For example, if the tag that is scanned supports MifareClassic, NdefFormatable, and NfcA, your
- <code>tech-list</code> set must specify all three, two, or one of the technologies (and nothing
- else) in order for your Activity to be matched.</p>
-
- <p>The following sample defines all of the technologies. You can remove the ones that you do not
- need. Save this file (you can name it anything you wish) in the
- <code><project-root>/res/xml</code> folder.</p>
- <pre>
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <tech-list>
- <tech>android.nfc.tech.IsoDep</tech>
- <tech>android.nfc.tech.NfcA</tech>
- <tech>android.nfc.tech.NfcB</tech>
- <tech>android.nfc.tech.NfcF</tech>
- <tech>android.nfc.tech.NfcV</tech>
- <tech>android.nfc.tech.Ndef</tech>
- <tech>android.nfc.tech.NdefFormatable</tech>
- <tech>android.nfc.tech.MifareClassic</tech>
- <tech>android.nfc.tech.MifareUltralight</tech>
- </tech-list>
-</resources>
-</pre>
-
- <p>You can also specify multiple <code>tech-list</code> sets. Each of the <code>tech-list</code>
- sets is considered independently, and your Activity is considered a match if any single
- <code>tech-list</code> set is a subset of the technologies that are returned by {@link
- android.nfc.Tag#getTechList getTechList()}. This provides <code>AND</code> and <code>OR</code>
- semantics for matching technologies. The following example matches tags that can support the
- NfcA and Ndef technologies or can support the NfcB and Ndef technologies:</p>
- <pre>
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <tech-list>
- <tech>android.nfc.tech.NfcA</tech>
- <tech>android.nfc.tech.Ndef</tech>
- </tech-list>
-</resources>
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <tech-list>
- <tech>android.nfc.tech.NfcB</tech>
- <tech>android.nfc.tech.Ndef</tech>
- </tech-list>
-</resources>
-</pre>
-
- <p>In your <code>AndroidManifest.xml</code> file, specify the resource file that you just created
- in the <code><meta-data></code> element inside the <code><activity></code>
- element like in the following example:</p>
- <pre>
-<activity>
-...
-<intent-filter>
- <action android:name="android.nfc.action.TECH_DISCOVERED"/>
-</intent-filter>
-
-<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
- android:resource="@xml/nfc_tech_filter" />
-...
-</activity>
-</pre>
-
- <h3 id="foreground-dispatch">Using the foreground dispatch system</h3>
-
- <p>The foreground dispatch system allows an Activity to intercept an intent and claim priority
- over other Activities that handle the same intent. The system is easy to use and involves
- constructing a few data structures for the Android system to be able to send the appropriate
- intents to your application. To enable the foreground dispatch system:</p>
-
- <ol>
- <li>Add the following code in the onCreate() method of your Activity:
-
- <ol type="a">
- <li>Create a {@link android.app.PendingIntent} object so the Android system can populate it
- with the details of the tag when it is scanned
- <pre>
-PendingIntent pendingIntent = PendingIntent.getActivity(
- this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
-</pre>
- </li>
-
- <li>Declare intent filters to handle the intents that you want to intercept. The foreground
- dispatch system checks the specified intent filters with the intent that is received when
- the device scans a tag. If they match, then your application handles the intent. If it does
- not match, the foreground dispatch system falls back to the intent dispatch system.
- Specifying a <code>null</code> array of intent filters and for the technology filters, you
- receive a <code>TAG_DISCOVERED</code> intent for all tags discovered. Note that the snippet
- below handles all MIME types. You should only handle the ones that you need.
- <pre>
- IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
- try {
- ndef.addDataType("*/*"); /* Handles all MIME based dispatches.
- You should specify only the ones that you need. */
- }
- catch (MalformedMimeTypeException e) {
- throw new RuntimeException("fail", e);
- }
- intentFiltersArray = new IntentFilter[] {
- ndef,
- };
-</pre>
- </li>
-
- <li>Set up an array of tag technologies that your application wants to handle. Call the
- <code>Object.class.getName()</code> method to obtain the class of the technology that you
- want to support.
- <pre>
-
- techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
-
-</pre>
- </li>
- </ol>
- </li>
-
- <li>Override the following Activity lifecycle callbacks and add logic to enable and disable the
- foreground dispatch when the Activity loses ({@link android.app.Activity#onPause onPause()})
- and regains ({@link android.app.Activity#onResume onResume()}) focus. {@link
- android.nfc.NfcAdapter#enableForegroundDispatch} must be called from the main thread and only
- when the activity is in the foreground (calling in {@link android.app.Activity#onResume
- onResume()} guarantees this). You also need to implement the {@link
- android.app.Activity#onNewIntent onNewIntent} callback to process the data from the scanned NFC
- tag.
- <pre>
-public void onPause() {
- super.onPause();
- mAdapter.disableForegroundDispatch(this);
-}
-
-public void onResume() {
- super.onResume();
- mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
-}
-
-public void onNewIntent(Intent intent) {
- Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
- //do something with tagFromIntent
-}
-</pre>
- </li>
- </ol>
-
- <p>See the <a href=
- "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html">ForegroundDispatch</a>
- sample from API Demos for the complete sample.</p>
-
- <h2 id="ndef">Working with Data on NFC Tags</h2>
-
- <p>Data on NFC tags are encoded in raw bytes, so you must convert the bytes to something human
- readable if you are presenting the data to the user. When writing to NFC tags, you must write
- them in bytes as well. Android provides APIs to help write messages that conform to the NDEF
- standard, which was developed by the <a href="http://www.nfc-forum.org/specs/">NFC Forum</a> to
- standardized data on tags. Using this standard ensures that your data will be supported by all
- Android NFC devices if you are writing to tags. However, many tag technologies use their own
- standard for storing data and are supported by Android as well, but you have to implement your
- own protocol stack to read and write to these tags. You can find a full list of the supported
- technologies in {@link android.nfc.tech} and an overview of the technologies in the {@link
- android.nfc.tech.TagTechnology} interface. This section is a brief overview of how to work with
- NDEF messages in the context of the Android system. It is not meant to be a complete discussion
- of the NDEF specification, but highlights the main things that you need to be aware of when
- working with NDEF messages in Android.</p>
-
- <p>To facilitate working with NDEF messages, Android provides the {@link android.nfc.NdefRecord}
- and {@link android.nfc.NdefMessage} to encapsulate the raw bytes that represent NDEF messages. An
- {@link android.nfc.NdefMessage} is the container for zero or more {@link
- android.nfc.NdefRecord}s. Each {@link android.nfc.NdefRecord} has its own unique type name
- format, record type, and ID to distinguish them from other records within the same {@link
- android.nfc.NdefMessage}. You can store different types of records of varying length in a single
- {@link android.nfc.NdefMessage}. The size constraint of the NFC tag determines how big your
- {@link android.nfc.NdefMessage} can be.</p>
-
- <p>Tags that support the {@link android.nfc.tech.Ndef} and {@link
- android.nfc.tech.NdefFormatable} technologies return and accept {@link android.nfc.NdefMessage}
- objects as parameters for read and write operations. You need to create your own logic to read
- and write bytes for other tag technologies in {@link android.nfc.tech}.</p>
-
- <p>You can download technical specifications for different types of NDEF message standards, such
- as plain text and Smart Posters, at the <a href="http://www.nfc-forum.org/specs/">NFC Forum</a>
- website. The NFCDemo sample application also declares sample <a href=
- "{@docRoot}resources/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.html">
- plain text and SmartPoster NDEF messages.</a></p>
-
- <h2 id="read">Reading an NFC Tag</h2>
-
- <p>When a device comes in proximity to an NFC tag, the appropriate intent is started on the
- device, notifying interested applications that a NFC tag was scanned. By previously declaring the
- appropriate intent filter in your <code>AndroidManifest.xml</code> file or using foreground
- dispatching, your application can request to handle the intent.</p>
-
- <p>The following method (slightly modified from the NFCDemo sample application), handles the
- <code>TAG_DISCOVERED</code> intent and iterates through an array obtained from the intent that
- contains the NDEF payload:</p>
- <pre>
-NdefMessage[] getNdefMessages(Intent intent) {
- // Parse the intent
- NdefMessage[] msgs = null;
- String action = intent.getAction();
- if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
- Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
- if (rawMsgs != null) {
- msgs = new NdefMessage[rawMsgs.length];
- for (int i = 0; i < rawMsgs.length; i++) {
- msgs[i] = (NdefMessage) rawMsgs[i];
- }
- }
- else {
- // Unknown tag type
- byte[] empty = new byte[] {};
- NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty);
- NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
- msgs = new NdefMessage[] {msg};
- }
- }
- else {
- Log.e(TAG, "Unknown intent " + intent);
- finish();
- }
- return msgs;
-}
-</pre>
-
- <p>Keep in mind that the data that the device reads is in bytes, so you must implement your own
- logic if you need to present the data in a readable format to the user. The classes in
- <code>com.example.android.nfc.record</code> of the NFCDemo sample show you how to parse some
- common types of NDEF messages such as plain text or a SmartPoster.</p>
-
- <h2 id="write">Writing to an NFC Tag</h2>
-
- <p>Writing to an NFC tag involves constructing your NDEF message in bytes and using the
- appropriate tag technology for the tag that you are writing to. The following code sample shows
- you how to write a simple text message to a {@link android.nfc.tech.NdefFormatable} tag:</p>
- <pre>
-NdefFormatable tag = NdefFormatable.get(t);
-Locale locale = Locale.US;
-final byte[] langBytes = locale.getLanguage().getBytes(Charsets.US_ASCII);
-String text = "Tag, you're it!";
-final byte[] textBytes = text.getBytes(Charsets.UTF_8);
-final int utfBit = 0;
-final char status = (char) (utfBit + langBytes.length);
-final byte[] data = Bytes.concat(new byte[] {(byte) status}, langBytes, textBytes);
-NdefRecord record = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);
-try {
- NdefRecord[] records = {text};
- NdefMessage message = new NdefMessage(records);
- tag.connect();
- tag.format(message);
-}
-catch (Exception e){
- //do error handling
-}
-</pre>
-
- <h2 id="p2p">Peer-to-Peer Data Exchange</h2>
-
- <p>Support for simple peer-to-peer data exchange is supported by the foreground push feature,
- which is enabled with the {@link android.nfc.NfcAdapter#enableForegroundNdefPush} method. To use
- this feature:</p>
-
- <ul>
- <li>The Activity that is pushing the data must be in the foreground</li>
-
- <li>You must encapsulate the data that you are sending in an {@link android.nfc.NdefMessage}
- object</li>
-
- <li>The NFC device that is receiving the pushed data (the scanned device) must support the
- <code>com.android.npp</code> NDEF push protocol, which is optional for Android devices.</li>
- </ul>
-
- <p class="note">If your Activity enables the foreground push feature and is in the foreground,
- the standard intent dispatch system is disabled. However, if your Activity also enables
- foreground dispatching, then it can still scan tags that match the intent filters set in the
- foreground dispatching.</p>
-
- <p>To enable foreground dispatching:</p>
-
- <ol>
- <li>Create an NdefMessage that contains the NdefRecords that you want to push onto the other
- device.</li>
-
- <li>Implement the {@link android.app.Activity#onResume onResume()} and {@link
- android.app.Activity#onPause onPause()} callbacks in your Activity to appropriately handle the
- foreground pushing lifecycle. You must call {@link
- android.nfc.NfcAdapter#enableForegroundNdefPush} from the main thread and only when the
- activity is in the foreground (calling in {@link android.app.Activity#onResume onResume()}
- guarantees this).
- <pre>
-public void onResume() {
- super.onResume();
- if (mAdapter != null)
- mAdapter.enableForegroundNdefPush(this, myNdefMessage);
-}
-public void onPause() {
- super.onPause();
- if (mAdapter != null)
- mAdapter.disableForegroundNdefPush(this);
-}
-</pre>
- </li>
- </ol>
-
- <p>When the Activity is in the foreground, you can now tap the device to another device and push
- the data to it. See the <a href=
- "../../../resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.html">ForegroundNdefPush</a>
- sample in API Demos for a simple example of peer-to-peer data exchange.</p>
\ No newline at end of file
+ <dt><strong><a href="{@docRoot}guide/topics/nfc/advanced-nfc.html">Advanced
+ NFC</a></strong></dt>
+ <dd>This document goes over the APIs that enable use of the various tag technologies that
+ Android supports. When you are not working with NDEF data, or when you are working with NDEF
+ data that Android cannot fully understand, you have to manually read or write to the tag in raw
+ bytes using your own protocol stack. In these cases, Android provides support to detect
+ certain tag technologies and to open communication with the tag using your own protocol
+ stack.</dd>
+ </dl>
+</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/nfc/nfc.jd b/docs/html/guide/topics/nfc/nfc.jd
new file mode 100644
index 0000000..175bc7cc
--- /dev/null
+++ b/docs/html/guide/topics/nfc/nfc.jd
@@ -0,0 +1,923 @@
+page.title=NFC Basics
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#tag-dispatch">The Tag Dispatch System</a>
+ <ol>
+ <li><a href="#ndef">How NFC tags are mapped to MIME types and URIs</a></li>
+ <li><a href="#dispatching">How NFC Tags are Dispatched to Applications</a></li>
+ </ol>
+ </li>
+ <li><a href="#manifest">Requesting NFC Access in the Android Manifest</a></li>
+ <li><a href="#filtering-intents">Filtering for Intents</a>
+ <ol>
+ <li><a href="#ndef-disc">ACTION_NDEF_DISCOVERED</a></li>
+ <li><a href="#tech-disc">ACTION_TECH_DISCOVERED</a></li>
+ <li><a href="#tag-disc">ACTION_TAG_DISCOVERED</a></li>
+ <li><a href="#obtain-info">Obtaining information from intents</a></li>
+ </ol>
+ </li>
+ <li><a href="#creating-records">Creating Common Types of NDEF Records</a>
+ <ol>
+ <li><a href="#abs-uri">TNF_ABSOLUTE_URI</a></li>
+ <li><a href="#mime">TNF_MIME_MEDIA</a></li>
+ <li><a href="#well-known-text">TNF_WELL_KNOWN with RTD_TEXT</a></li>
+ <li><a href="#well-known-uri">TNF_WELL_KNOWN with RTD_URI</a></li>
+ <li><a href="#ext-type">TNF_EXTERNAL_TYPE</a></li>
+ <li><a href="#aar">Android Application Records</a></li>
+ </ol>
+ </li>
+ <li><a href="#p2p">Beaming NDEF Messages to Other Devices</a></li>
+ </ol>
+</div>
+</div>
+
+<p>This document describes the basic NFC tasks you perform in Android. It explains how to send and
+receive NFC data in the form of NDEF messages and describes the Android framework APIs that support
+these features. For more advanced topics, including a discussion of working with non-NDEF data,
+see <a href="{@docRoot}guide/topics/nfc/advanced-nfc.html">Advanced NFC</a>.</p>
+
+
+<p>There are two major uses cases when working with NDEF data and Android:</p>
+
+<ul>
+ <li>Reading NDEF data from an NFC tag</li>
+ <li>Beaming NDEF messages from one device to another with <a href="#p2p">Android
+Beam™</a></li>
+</ul>
+
+
+<p>Reading NDEF data from an NFC tag is handled with the <a href="#tag-dispatch">tag dispatch
+system</a>, which analyzes discovered NFC tags, appropriately categorizes the data, and starts
+an application that is interested in the categorized data. An application that wants to handle the
+scanned NFC tag can <a href="#filtering-intents">declare an intent filter</a> and
+request to handle the data.</p>
+
+<p>The Android Beam™ feature allows a device to push an NDEF message onto
+another device by physically tapping the devices together. This interaction provides an easier way
+to send data than other wireless technologies like Bluetooth, because with NFC, no manual device
+discovery or pairing is required. The connection is automatically started when two devices come
+into range. Android Beam is available through a set of NFC APIs, so any application can transmit
+information between devices. For example, the Contacts, Browser, and YouTube applications use
+Android Beam to share contacts, web pages, and videos with other devices.
+</p>
+
+
+<h2 id="tag-dispatch">The Tag Dispatch System</h2>
+
+<p>Android-powered devices are usually looking for NFC tags when the screen
+is unlocked, unless NFC is disabled in the device's Settings menu.
+When an Android-powered device discovers an NFC tag, the desired behavior
+is to have the most appropriate activity handle the intent without asking the user what application
+to use. Because devices scan NFC tags at a very short range, it is likely that making users manually
+select an activity would force them to move the device away from the tag and break the connection.
+You should develop your activity to only handle the NFC tags that your activity cares about to
+prevent the Activity Chooser from appearing.</p>
+
+<p>To help you with this goal, Android provides a special tag dispatch system that analyzes scanned
+NFC tags, parses them, and tries to locate applications that are interested in the scanned data. It
+does this by:</p>
+
+<ol>
+ <li>Parsing the NFC tag and figuring out the MIME type or a URI that identifies the data payload
+ in the tag.</li>
+ <li>Encapsulating the MIME type or URI and the payload into an intent. These first two
+ steps are described in <a href="#ndef">How NFC tags are mapped to MIME types and URIs</a>.</li>
+ <li>Starts an activity based on the intent. This is described in
+ <a href="#dispatching">How NFC Tags are Dispatched to Applications</a>.</li>
+</ol>
+
+<h3 id="ndef">How NFC tags are mapped to MIME types and URIs</h3>
+<p>Before you begin writing your NFC applications, it is important to understand the different
+types of NFC tags, how the tag dispatch system parses NFC tags, and the special work that the tag
+dispatch system does when it detects an NDEF message. NFC tags come in a
+wide array of technologies and can also have data written to them in many different ways.
+Android has the most support for the NDEF standard, which is defined by the <a
+href="http://www.nfc-forum.org/home">NFC Forum</a>.
+</p>
+
+<p>NDEF data is encapsulated inside a message ({@link android.nfc.NdefMessage}) that contains one
+or more records ({@link android.nfc.NdefRecord}). Each NDEF record must be well-formed according to
+the specification of the type of record that you want to create. Android
+also supports other types of tags that do not contain NDEF data, which you can work with by using
+the classes in the {@link android.nfc.tech} package. To learn more
+about these technologies, see the <a href="{@docRoot}guide/topics/nfc/advanced-nfc.html">Advanced
+NFC</a> topic. Working with these other types of tags involves
+writing your own protocol stack to communicate with the tags, so we recommend using NDEF when
+possible for ease of development and maximum support for Android-powered devices.
+</p>
+
+<p class="note"><strong>Note:</strong>
+To download complete NDEF specifications, go to the <a
+href="http://www.nfc-forum.org/specs/spec_license">NFC Forum Specification Download</a> site and see
+<a href="#creating-records">Creating common types of NDEF records</a> for examples of how to
+construct NDEF records. </p>
+
+<p>Now that you have some background in NFC tags, the following sections describe in more detail how
+Android handles NDEF formatted tags. When an Android-powered device scans an NFC tag containing NDEF
+formatted data, it parses the message and tries to figure out the data's MIME type or identifying
+URI. To do this, the system reads the first {@link android.nfc.NdefRecord} inside the {@link
+android.nfc.NdefMessage} to determine how to interpret the entire NDEF message (an NDEF message can
+have multiple NDEF records). In a well-formed NDEF message, the first {@link android.nfc.NdefRecord}
+contains the following fields:
+<dl>
+ <dt><strong>3-bit TNF (Type Name Format)</strong></dt>
+ <dd>Indicates how to interpret the variable length type field. Valid values are described in
+described in <a href="#table1">Table 1</a>.</dd>
+
+ <dt><strong>Variable length type</strong></dt>
+ <dd>Describes the type of the record. If using {@link android.nfc.NdefRecord#TNF_WELL_KNOWN}, use
+this field to specify the Record Type Definition (RTD). Valid RTD values are described in <a
+href="#table2">Table 2</a>.</dd>
+
+<dt><strong>Variable length ID</strong></dt>
+<dd>A unique identifier for the record. This field is not used often, but
+if you need to uniquely identify a tag, you can create an ID for it.</dd>
+
+<dt><strong>Variable length payload</strong></dt>
+<dd>The actual data payload that you want to read or write. An NDEF
+message can contain multiple NDEF records, so don't assume the full payload is in the first NDEF
+record of the NDEF message.</dd>
+
+</dl>
+
+<p>The tag dispatch system uses the TNF and type fields to try to map a MIME type or URI to the
+NDEF message. If successful, it encapsulates that information inside of a {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent along with the actual payload. However, there
+are cases when the tag dispatch system cannot determine the type of data based on the first NDEF
+record. This happens when the NDEF data cannot be mapped to a MIME type or URI, or when the
+NFC tag does not contain NDEF data to begin with. In such cases, a {@link
+android.nfc.Tag} object that has information about the tag's technologies and the payload are
+encapsulated inside of a {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent instead.</p>
+
+<p>
+<a href="#table1">Table 1.</a> describes how the tag dispatch system maps TNF and type
+fields to MIME types or URIs. It also describes which TNFs cannot be mapped to a MIME type or URI.
+In these cases, the tag dispatch system falls back to
+{@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.
+
+<p>For example, if the tag dispatch system encounters a record of type {@link
+android.nfc.NdefRecord#TNF_ABSOLUTE_URI}, it maps the variable length type field of that record
+into a URI. The tag dispatch system encapsulates that URI in the data field of an {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent along with other information about the tag,
+such as the payload. On the other hand, if it encounters a record of type {@link
+android.nfc.NdefRecord#TNF_UNKNOWN}, it creates an intent that encapsulates the tag's technologies
+instead.</p>
+
+
+<p class="table-caption" id="table1">
+ <strong>Table 1.</strong> Supported TNFs and their mappings</p>
+<table id="mappings">
+ <tr>
+ <th>Type Name Format (TNF)</th>
+ <th>Mapping</th>
+ </tr>
+ <tr>
+ <td>{@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI}</td>
+ <td>URI based on the type field.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#TNF_EMPTY}</td>
+ <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#TNF_EXTERNAL_TYPE}</td>
+ <td>URI based on the URN in the type field. The URN is encoded into the NDEF type field in
+ a shortened form: <code><em><domain_name>:<service_name></em></code>.
+ Android maps this to a URI in the form:
+ <code>vnd.android.nfc://ext/<em><domain_name>:<service_name></em></code>.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#TNF_MIME_MEDIA}</td>
+ <td>MIME type based on the type field.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#TNF_UNCHANGED}</td>
+ <td>Invalid in the first record, so falls back to
+ {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#TNF_UNKNOWN}</td>
+ <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#TNF_WELL_KNOWN}</td>
+ <td>MIME type or URI depending on the Record Type Definition (RTD), which you set in the
+type field. See <a href="#well_known">Table 2.</a> for more information on
+available RTDs and their mappings.</td>
+ </tr>
+</table>
+
+<p class="table-caption" id="table2">
+ <strong>Table 2.</strong> Supported RTDs for TNF_WELL_KNOWN and their
+mappings</p>
+<table id="well-known">
+ <tr>
+ <th>Record Type Definition (RTD)</th>
+ <th>Mapping</th>
+ </tr>
+ <tr>
+ <td>{@link android.nfc.NdefRecord#RTD_ALTERNATIVE_CARRIER}</td>
+ <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_CARRIER}</td>
+ <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_REQUEST}</td>
+ <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_SELECT}</td>
+ <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#RTD_SMART_POSTER}</td>
+ <td>URI based on parsing the payload.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#RTD_TEXT}</td>
+ <td>MIME type of <code>text/plain</code>.</td>
+ </tr>
+ <td>{@link android.nfc.NdefRecord#RTD_URI}</td>
+ <td>URI based on payload.</td>
+ </tr>
+</table>
+
+<h3 id="dispatching">How NFC Tags are Dispatched to Applications</h3>
+
+<p>When the tag dispatch system is done creating an intent that encapsulates the NFC tag and its
+identifying information, it sends the intent to an interested application that
+filters for the intent. If more than one application can handle the intent, the Activity Chooser
+is presented so the user can select the Activity. The tag dispatch system defines three intents,
+which are listed in order of highest to lowest priority:</p>
+
+<ol>
+ <li>
+ {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}: This intent is used to start an
+Activity when a tag that contains an NDEF payload is scanned and is of a recognized type. This is
+the highest priority intent, and the tag dispatch system tries to start an Activity with this
+intent before any other intent, whenever possible.
+ </li>
+
+ <li>{@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}: If no activities register to
+handle the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
+intent, the tag dispatch system tries to start an application with this intent. This
+intent is also directly started (without starting {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} first) if the tag that is scanned
+contains NDEF data that cannot be mapped to a MIME type or URI, or if the tag does not contain NDEF
+data but is of a known tag technology.
+</li>
+
+ <li>{@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}: This intent is started
+ if no activities handle the {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}
+ intents.</li>
+ </ol>
+
+<p>The basic way the tag dispatch system works is as follows:</p>
+
+<ol>
+ <li>Try to start an Activity with the intent that was created by the tag dispatch system
+when parsing the NFC tag (either
+{@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}).</li>
+ <li>If no activities filter for that intent, try to start an Activity with the next
+ lowest priority intent (either {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}) until an application filters for the
+ intent or until the tag dispatch system tries all possible intents.</li>
+ <li>If no applications filter for any of the intents, do nothing.</li>
+</ol>
+
+<img src="{@docRoot}images/nfc_tag_dispatch.png" />
+
+<p class="figure"><strong>Figure 1. </strong> Tag Dispatch System</p>
+
+
+<p>Whenever possible, work with NDEF messages and the {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent, because it is the most specific out of
+the three. This intent allows you to start your application at a more appropriate time than the
+other two intents, giving the user a better experience.</p>
+
+<h2 id="manifest">Requesting NFC Access in the Android Manifest</h2>
+
+ <p>Before you can access a device's NFC hardware and properly handle NFC intents, declare these
+ items in your <code>AndroidManifest.xml</code> file:</p>
+
+ <ul>
+ <li>The NFC <code><uses-permission></code> element to access the NFC hardware:
+ <pre>
+<uses-permission android:name="android.permission.NFC" />
+</pre>
+ </li>
+
+ <li>The minimum SDK version that your application can support. API level 9 only supports
+ limited tag dispatch via {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}, and only gives
+ access to NDEF messages via the {@link android.nfc.NfcAdapter#EXTRA_NDEF_MESSAGES} extra. No
+ other tag properties or I/O operations are accessible. API level 10
+ includes comprehensive reader/writer support as well as foreground NDEF pushing, and API level
+ 14 provides an easier way to push NDEF messages to other devices with Android Beam and extra
+ convenience methods to create NDEF records.
+<pre class="pretty-print">
+<uses-sdk android:minSdkVersion="10"/>
+</pre>
+ </li>
+
+ <li>The <code>uses-feature</code> element so that your application shows up in the Android
+Market only for devices that have NFC hardware:
+ <pre>
+<uses-feature android:name="android.hardware.nfc" android:required="true" />
+</pre>
+<p>If your application uses NFC functionality, but that functionality is not crucial to your
+application, you can omit the <code>uses-feature</code> element and check for NFC avalailbility at
+runtime by checking to see if {@link android.nfc.NfcAdapter#getDefaultAdapter getDefaultAdapter()}
+is <code>null</code>.</p>
+ </li>
+ </ul>
+
+ <h2 id="filtering-intents">Filtering for NFC Intents</h2>
+
+ <p>To start your application when an NFC tag that you want to handle is scanned, your application
+can filter for one, two, or all three of the NFC intents in the Android manifest. However, you
+usually want to filter for the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent for the
+most control of when your application starts. The {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent is a fallback for {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} when no applications filter for
+ {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or for when the payload is not
+NDEF. Filtering for {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} is usually too general of a
+category to filter on. Many applications will filter for {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} before {@link
+android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}, so your application has a low probability of
+starting. {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} is only available as a last resort
+for applications to filter for in the cases where no other applications are installed to handle the
+{@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}intent.</p>
+
+<p>Because NFC tag deployments vary and are many times not under your control, this is not always
+possible, which is why you can fallback to the other two intents when necessary. When you have
+control over the types of tags and data written, it is recommended that you use NDEF to format your
+tags. The following sections describe how to filter for each type of intent.</p>
+
+
+<h3 id="ndef-disc">ACTION_NDEF_DISCOVERED</h3>
+<p>
+To filter for {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intents, declare the
+intent filter along with the type of data that you want to filter for. The
+following example filters for {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
+intents with a MIME type of <code>text/plain</code>:
+</p>
+<pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="text/plain" />
+</intent-filter>
+</pre>
+<p>The following example filters for a URI in the form of
+<code>http://developer.android.com/index.html</code>.
+<pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:scheme="http"
+ android:host="developer.android.com"
+ android:pathPrefix="/index.html" />
+</intent-filter>
+</pre>
+
+
+ <h3 id="tech-disc">ACTION_TECH_DISCOVERED</h3>
+
+ <p>If your activity filters for the {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent,
+you must create an XML resource file that specifies the technologies that your activity supports
+within a <code>tech-list</code> set. Your activity is
+ considered a match if a <code>tech-list</code> set is a subset of the technologies that are
+ supported by the tag, which you can obtain by calling {@link android.nfc.Tag#getTechList
+ getTechList()}.</p>
+
+ <p>For example, if the tag that is scanned supports MifareClassic, NdefFormatable, and NfcA, your
+ <code>tech-list</code> set must specify all three, two, or one of the technologies (and nothing
+ else) in order for your activity to be matched.</p>
+
+ <p>The following sample defines all of the technologies. You can remove the ones that you do not
+ need. Save this file (you can name it anything you wish) in the
+ <code><project-root>/res/xml</code> folder.</p>
+ <pre>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <tech-list>
+ <tech>android.nfc.tech.IsoDep</tech>
+ <tech>android.nfc.tech.NfcA</tech>
+ <tech>android.nfc.tech.NfcB</tech>
+ <tech>android.nfc.tech.NfcF</tech>
+ <tech>android.nfc.tech.NfcV</tech>
+ <tech>android.nfc.tech.Ndef</tech>
+ <tech>android.nfc.tech.NdefFormatable</tech>
+ <tech>android.nfc.tech.MifareClassic</tech>
+ <tech>android.nfc.tech.MifareUltralight</tech>
+ </tech-list>
+</resources>
+</pre>
+
+ <p>You can also specify multiple <code>tech-list</code> sets. Each of the <code>tech-list</code>
+ sets is considered independently, and your activity is considered a match if any single
+ <code>tech-list</code> set is a subset of the technologies that are returned by {@link
+ android.nfc.Tag#getTechList getTechList()}. This provides <code>AND</code> and <code>OR</code>
+ semantics for matching technologies. The following example matches tags that can support the
+ NfcA and Ndef technologies or can support the NfcB and Ndef technologies:</p>
+ <pre>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <tech-list>
+ <tech>android.nfc.tech.NfcA</tech>
+ <tech>android.nfc.tech.Ndef</tech>
+ </tech-list>
+</resources>
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <tech-list>
+ <tech>android.nfc.tech.NfcB</tech>
+ <tech>android.nfc.tech.Ndef</tech>
+ </tech-list>
+</resources>
+</pre>
+
+ <p>In your <code>AndroidManifest.xml</code> file, specify the resource file that you just created
+ in the <code><meta-data></code> element inside the <code><activity></code>
+ element like in the following example:</p>
+ <pre>
+<activity>
+...
+<intent-filter>
+ <action android:name="android.nfc.action.TECH_DISCOVERED"/>
+</intent-filter>
+
+<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
+ android:resource="@xml/nfc_tech_filter" />
+...
+</activity>
+</pre>
+
+<p>For more information about working with tag technologies and the {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent, see <a
+href="{@docRoot}guide/topics/nfc/advanced-nfc.html#tag-tech">Working with Supported Tag
+Technologies</a> in the Advanced NFC document.</p>
+<h3 id="tag-disc">ACTION_TAG_DISCOVERED</h3>
+<p>To filter for {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} use the following intent
+filter:</p>
+
+
+<pre><intent-filter>
+ <action android:name="android.nfc.action.TAG_DISCOVERED"/>
+</intent-filter>
+</pre>
+
+
+
+<h3 id="obtain-info">Obtaining information from intents</h3>
+
+<p>If an activity starts because of an NFC intent, you can obtain information about the scanned NFC
+tag from the intent. Intents can contain the following extras depending on the tag that was scanned:
+
+<ul>
+ <li>{@link android.nfc.NfcAdapter#EXTRA_TAG} (required): A {@link android.nfc.Tag} object
+representing the scanned tag.</li>
+ <li>{@link android.nfc.NfcAdapter#EXTRA_NDEF_MESSAGES} (optional): An array of NDEF messages
+parsed from the tag. This extra is mandatory on {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED
+intents.</li>
+ <li>{@link android.nfc.NfcAdapter#EXTRA_ID} (optional): The low-level ID of the tag.</li></ul>
+
+<p>To obtain these extras, check to see if your activity was launched with one of
+the NFC intents to ensure that a tag was scanned, and then obtain the extras out of the
+intent. The following example checks for the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
+intent and gets the NDEF messages from an intent extra.</p>
+
+<pre>
+public void onResume() {
+ super.onResume();
+ ...
+ if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
+ Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
+ if (rawMsgs != null) {
+ msgs = new NdefMessage[rawMsgs.length];
+ for (int i = 0; i < rawMsgs.length; i++) {
+ msgs[i] = (NdefMessage) rawMsgs[i];
+ }
+ }
+ }
+ //process the msgs array
+}
+</pre>
+
+<p>Alternatively, you can obtain a {@link android.nfc.Tag} object from the intent, which will
+contain the payload and allow you to enumerate the tag's technologies:</p>
+
+<pre>Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);</pre>
+
+
+<h2 id="creating-records">Creating Common Types of NDEF Records</h2>
+<p>This section describes how to create common types of NDEF records to help you when writing to
+NFC tags or sending data with Android Beam. It also describes how to create the corresponding
+intent filter for the record. All of these NDEF record examples should be in the first NDEF
+record of the NDEF message that you are writing to a tag or beaming.</p>
+
+<h3 id="abs-uri">TNF_ABSOLUTE_URI</h3>
+<p>Given the following {@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI} NDEF record, which is
+stored as the first record inside of an {@link android.nfc.NdefMessage}:</p>
+
+<pre>
+NdefRecord uriRecord = new NdefRecord(
+ NdefRecord.TNF_ABSOLUTE_URI ,
+ "http://developer.android.com/index.html".getBytes(Charset.forName("US-ASCII")),
+ new byte[0], new byte[0]);
+</pre>
+
+<p>the intent filter would look like this:</p>
+<pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:scheme="http"
+ android:host="developer.android.com"
+ android:pathPrefix="/index.html" />
+</intent-filter>
+</pre>
+
+
+<h3 id="mime">TNF_MIME_MEDIA</h3>
+<p>Given the following {@link android.nfc.NdefRecord#TNF_MIME_MEDIA} NDEF record, which is stored as
+the first record inside
+of an {@link android.nfc.NdefMessage}:</p>
+<pre>
+NdefRecord mimeRecord = new NdefRecord(
+ NdefRecord.TNF_MIME_MEDIA ,
+ "application/com.example.android.beam".getBytes(Charset.forName("US-ASCII")),
+ new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));
+</pre>
+
+<p>the intent filter would look like this:</p>
+<pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="application/com.example.android.beam" />
+</intent-filter>
+</pre>
+
+
+<h3 id="well-known-text">TNF_WELL_KNOWN with RTD_TEXT</h3>
+
+<p>Given the following {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record, which is stored as
+the first record inside of an {@link android.nfc.NdefMessage}:</p>
+<pre>
+public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
+ byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
+ Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
+ byte[] textBytes = payload.getBytes(utfEncoding);
+ int utfBit = encodeInUtf8 ? 0 : (1 << 7);
+ char status = (char) (utfBit + langBytes.length);
+ byte[] data = new byte[1 + langBytes.length + textBytes.length];
+ data[0] = (byte) status;
+ System.arraycopy(langBytes, 0, data, 1, langBytes.length);
+ System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length);
+ NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
+ NdefRecord.RTD_TEXT, new byte[0], data);
+ return record;
+}
+</pre>
+
+<p>the intent filter would look like this:</p>
+<pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="text/plain" />
+</intent-filter>
+</pre>
+
+
+<h3 id="well-known-uri">TNF_WELL_KNOWN with RTD_URI</h3>
+
+<p>Given the following {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record, which is stored as
+the first record inside of an {@link android.nfc.NdefMessage}:</p>
+
+<pre>
+byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII"));
+byte[] payload = new byte[uriField.length + 1]; //add 1 for the URI Prefix
+byte payload[0] = 0x01; //prefixes http://www. to the URI
+System.arraycopy(uriField, 0, payload, 1, uriField.length); //appends URI to payload
+NdefRecord rtdUriRecord = new NdefRecord(
+ NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
+</pre>
+
+<p>the intent filter would look like this:</p>
+
+<pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:scheme="http"
+ android:host="example.com"
+ android:pathPrefix="" />
+</intent-filter>
+</pre>
+
+<h3 id="ext-type">TNF_EXTERNAL_TYPE</h3>
+<p>Given the following {@link android.nfc.NdefRecord#TNF_EXTERNAL_TYPE} NDEF record, which is stored
+as the first record inside of an {@link android.nfc.NdefMessage}:</p>
+
+<pre>
+byte[] payload;
+...
+NdefRecord mimeRecord = new NdefRecord(
+ NdefRecord.TNF_EXTERNAL_TYPE, "example.com:externalType", new byte[0], payload);
+</pre>
+
+<p>the intent filter would look like this:</p>
+<pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:scheme="vnd.android.nfc"
+ android:host="ext"
+ android:pathPrefix="/example.com:externalType"/>
+</intent-filter>
+</pre>
+
+
+<p>Use TNF_EXTERNAL_TYPE for more generic NFC tag deployments to better support both
+Android-powered and non-Android-powered devices.</p>
+
+<p class="note"><strong>Note</strong>: URNs for {@link
+android.nfc.NdefRecord#TNF_EXTERNAL_TYPE} have a canonical format of:
+<code>urn:nfc:ext:example.com:externalType</code>, however the NFC Forum RTD specification
+declares that the <code>urn:nfc:ext:</code> portion of the URN must be ommitted from the
+NDEF record. So all you need to provide is the domain (<code>example.com</code> in the example)
+and type (<code>externalType</code> in the example) separated by a colon.
+When dispatching TNF_EXTERNAL_TYPE, Android converts the <code>urn:nfc:ext:example.com:externalType</code> URN to a
+<code>vnd.android.nfc://ext/example.com:externalType</code> URI, which is what the intent filter in the example
+declares.</p>
+
+<h3 id="aar">Android Application Records</h3>
+
+<p>
+Introduced in Android 4.0 (API level 14), an Android Application Record (AAR) provides a stronger
+certainty that your application is started when an NFC tag is scanned. An AAR has the package name
+of an application embedded inside an NDEF record. You can add an AAR to any NDEF record of your NDEF message,
+because Android searches the entire NDEF message for AARs. If it finds an AAR, it starts the application based
+on the package name inside the AAR. If the application is not present on the device,
+Android Market is launched to download the application.</p>
+
+<p>AARs are useful if you want to prevent other applications from filtering for the same intent and
+potentially handling specific tags that you have deployed. AARs are only supported at the
+application level, because of the package name constraint, and not at the Activity level as with
+intent filtering. If you want to handle an intent at the Activity level, <a
+href="filtering-intents">use intent filters</a>.
+</p>
+
+
+
+<p>If a tag contains an AAR, the tag dispatch system dispatches in the following manner:</p>
+<ol>
+ <li>Try to start an Activity using an intent filter as normal. If the Activity that matches
+the intent also matches the AAR, start the Activity.</li>
+ <li>If the Activity that filters for the intent does not match the
+AAR, if multiple Activities can handle the intent, or if no Activity handles the intent, start the
+application specified by the AAR.</li>
+ <li>If no application can start with the AAR, go to the Android Market to download the
+application based on the AAR.</li>
+</ol>
+
+</p>
+
+<p class="note"><strong>Note:</strong> You can override AARs and the intent dispatch system with the <a
+href="{@docRoot}guide/topics/nfc/advanced-nfc.html#foreground-dispatch">foreground dispatch
+system</a>, which allows a foreground activity to have priority when an NFC tag is discovered.
+With this method, the activity must be in the foreground to
+override AARs and the intent dispatch system.</p>
+
+<p>If you still want to filter for scanned tags that do not contain an AAR, you can declare
+intent filters as normal. This is useful if your application is interested in other tags
+that do not contain an AAR. For example, maybe you want to guarantee that your application handles
+proprietary tags that you deploy as well as general tags deployed by third parties. Keep in mind
+that AARs are specific to Android 4.0 devices or later, so when deploying tags, you most likely want
+to use a combination of AARs and MIME types/URIs to support the widest range of devices. In
+addition, when you deploy NFC tags, think about how you want to write your NFC tags to enable
+support for the most devices (Android-powered and other devices). You can do this by
+defining a relatively unique MIME type or URI to make it easier for applications to distinguish.
+</p>
+
+<p>Android provides a simple API to create an AAR,
+{@link android.nfc.NdefRecord#createApplicationRecord createApplicationRecord()}. All you need to
+do is embed the AAR anywhere in your {@link android.nfc.NdefMessage}. You do not want
+to use the first record of your {@link android.nfc.NdefMessage}, unless the AAR is the only
+record in the {@link android.nfc.NdefMessage}. This is because the Android
+system checks the first record of an {@link android.nfc.NdefMessage} to determine the MIME type or
+URI of the tag, which is used to create an intent for applications to filter. The following code
+shows you how to create an AAR:</p>
+
+<pre>
+NdefMessage msg = new NdefMessage(
+ new NdefRecord[] {
+ ...,
+ NdefRecord.createApplicationRecord("com.example.android.beam")}
+</pre>
+
+
+<h2 id="p2p">Beaming NDEF Messages to Other Devices</h2>
+
+<p>Android Beam allows simple peer-to-peer data exchange between two Android-powered devices. The
+application that wants to beam data to another device must be in the foreground and the device
+receiving the data must not be locked. When the beaming device comes in close enough contact with a
+receiving device, the beaming device displays the "Touch to Beam" UI. The user can then choose
+whether or not to beam the message to the receiving device.</p>
+
+<p class="note"><strong>Note:</strong> Foreground NDEF pushing was available at API level 10,
+which provides similar functionality to Android Beam. These APIs have since been deprecated, but
+are available to support older devices. See {@link android.nfc.NfcAdapter#enableForegroundNdefPush
+enableForegroundNdefPush()} for more information.</p>
+
+<p>You can enable Android Beam for your application by calling one of the two methods:</p>
+ <ul>
+ <li>{@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()}: Accepts an
+{@link android.nfc.NdefMessage} to set as the message to beam. Automatically beams the message
+when two devices are in close enough proximity.</li>
+ <li>{@link android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()}:
+Accepts a callback that contains a
+{@link android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()}
+which is called when a device is in range to beam data to. The callback lets you create
+the NDEF message only when necessary.</li>
+ </ul>
+
+<p>An activity can only push one NDEF message at a time, so {@link
+android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()} takes precedence
+over {@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} if both are set. To use
+Android Beam, the following general guidelines must be met:
+</p>
+
+ <ul>
+ <li>The activity that is beaming the data must be in the foreground. Both devices must have
+their screens unlocked.</li>
+
+ <li>You must encapsulate the data that you are beaming in an {@link android.nfc.NdefMessage}
+ object.</li>
+
+ <li>The NFC device that is receiving the beamed data must support the
+ <code>com.android.npp</code> NDEF push protocol or NFC Forum's SNEP (Simple NDEF Exchange
+Protocol). The <code>com.android.npp</code> protocol is required for devices on API level 9 (Android
+2.3) to API level 13 (Android 3.2). <code>com.android.npp</code> and SNEP are both required on
+API level 14 (Android 4.0) and later.</li>
+</li>
+ </ul>
+
+ <p class="note"><strong>Note:</strong> If your activity enables Android Beam and is
+in the foreground, the standard intent dispatch system is disabled. However, if your activity also
+enables <a href="{@docRoot}guide/topics/nfc/advanced-nfc.html#foreground-dispatch">foreground
+dispatching</a>, then it can still scan tags that match the intent filters set in the foreground
+dispatching.</p>
+
+ <p>To enable Android Beam:</p>
+
+ <ol>
+ <li>Create an {@link android.nfc.NdefMessage} that contains the {@link android.nfc.NdefRecord}s
+that you want to push onto the other device.</li>
+
+ <li>Call {@link
+android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} with a {@link
+android.nfc.NdefMessage} or call {@link
+android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback} passing in a {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback} object in the <code>onCreate()</code> method of
+your activity. These methods require at least one activity that you want to enable with Android
+Beam, along with an optional list of other activities to activate.
+
+<p>In general, you normally use {@link
+android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} if your Activity only needs to
+push the same NDEF message at all times, when two devices are in range to communicate. You use
+{@link android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback} when your
+application cares about the current context of the application and wants to push an NDEF message
+depending on what the user is doing in your application.</p>
+ </li>
+ </ol>
+
+<p>The following sample shows how a simple activity calls {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback} in the <code>onCreate()</code> method of an
+activity (see <a href="{@docRoot}resources/samples/AndroidBeam/index.html"></a> for the
+complete sample). This example also has methods to help you create a MIME record:</p>
+
+<pre id="code-example">
+package com.example.android.beam;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+import android.nfc.NfcAdapter.CreateNdefMessageCallback;
+import android.nfc.NfcEvent;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.widget.TextView;
+import android.widget.Toast;
+import java.nio.charset.Charset;
+
+
+public class Beam extends Activity implements CreateNdefMessageCallback {
+ NfcAdapter mNfcAdapter;
+ TextView textView;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ TextView textView = (TextView) findViewById(R.id.textView);
+ // Check for available NFC Adapter
+ mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
+ if (mNfcAdapter == null) {
+ Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show();
+ finish();
+ return;
+ }
+ // Register callback
+ mNfcAdapter.setNdefPushMessageCallback(this, this);
+ }
+
+ @Override
+ public NdefMessage createNdefMessage(NfcEvent event) {
+ String text = ("Beam me up, Android!\n\n" +
+ "Beam Time: " + System.currentTimeMillis());
+ NdefMessage msg = new NdefMessage(
+ new NdefRecord[] { createMimeRecord(
+ "application/com.example.android.beam", text.getBytes())
+ /**
+ * The Android Application Record (AAR) is commented out. When a device
+ * receives a push with an AAR in it, the application specified in the AAR
+ * is guaranteed to run. The AAR overrides the tag dispatch system.
+ * You can add it back in to guarantee that this
+ * activity starts when receiving a beamed message. For now, this code
+ * uses the tag dispatch system.
+ */
+ //,NdefRecord.createApplicationRecord("com.example.android.beam")
+ });
+ return msg;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ // Check to see that the Activity started due to an Android Beam
+ if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
+ processIntent(getIntent());
+ }
+ }
+
+ @Override
+ public void onNewIntent(Intent intent) {
+ // onResume gets called after this to handle the intent
+ setIntent(intent);
+ }
+
+ /**
+ * Parses the NDEF Message from the intent and prints to the TextView
+ */
+ void processIntent(Intent intent) {
+ textView = (TextView) findViewById(R.id.textView);
+ Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
+ NfcAdapter.EXTRA_NDEF_MESSAGES);
+ // only one message sent during the beam
+ NdefMessage msg = (NdefMessage) rawMsgs[0];
+ // record 0 contains the MIME type, record 1 is the AAR, if present
+ textView.setText(new String(msg.getRecords()[0].getPayload()));
+ }
+
+ /**
+ * Creates a custom MIME type encapsulated in an NDEF record
+ */
+ public NdefRecord createMimeRecord(String mimeType, byte[] payload) {
+ byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
+ NdefRecord mimeRecord = new NdefRecord(
+ NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);
+ return mimeRecord;
+ }
+}
+</pre>
+
+<p>Note that this code comments out an AAR, which you can remove. If you enable the AAR, the
+application specified in the AAR always receives the Android Beam message. If the application is not
+present, the Android Market is started to download the application. Therefore, the following intent
+filter is not technically necessary for Android 4.0 devices or later if the AAR is used:
+</p>
+
+<pre>
+<intent-filter>
+ <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="application/com.example.android.beam"/>
+</intent-filter>
+</pre>
+<p>With this intent filter, the <code>com.example.android.beam</code> application now can be started
+when it scans an NFC tag or receives an Android Beam with an AAR of
+type <code>com.example.android.beam</code>, or when an NDEF formatted message contains a MIME record
+of type <code>application/com.example.android.beam</code>.</p>
+
+<p>Even though AARs guarantee an application is started or downloaded, intent filters are
+recommended, because they let you start an Activity of your choice in your
+application instead of always starting the main Activity within the package specified by an AAR.
+AARs do not have Activity level granularity. Also, because some Android-powered devices do not
+support AARs, you should also embed identifying information in the first NDEF record of your NDEF
+messages and filter for that as well, just in case. See <a href="#creating-records">Creating Common
+Types of NDEF records</a> for more information on how to create records.
+</p>
diff --git a/docs/html/images/nfc_tag_dispatch.png b/docs/html/images/nfc_tag_dispatch.png
new file mode 100644
index 0000000..70ed711
--- /dev/null
+++ b/docs/html/images/nfc_tag_dispatch.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index a8b61bf..d412993 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -129,15 +129,14 @@
'sdk': {
'layout':"imgLeft",
'icon':"sdk-small.png",
- 'name':"Android 3.2",
- 'img':"honeycomb-android.png",
- 'title':"Android 3.2 is here!",
- 'desc': "<p>Android 3.2 is a minor feature update that includes new APIs that allow you to "
-+ "better target your layouts for specific screen sizes and other miscellaneous new APIs.</p>"
+ 'name':"Android 4.0",
+ 'img':"ics-android.png",
+ 'title':"Ice Cream Sandwich!",
+ 'desc': "<br/><br/><br/><p>Oh my goodness, that looks tasty!</p>"
+/*
+ "<p>For more information about all the changes in Android 3.2, read the "
+ "<a href='{@docRoot}sdk/android-3.2.html'>version notes</a> and <a "
+ "href='{@docRoot}sdk/api_diff/13/changes.html'>diff report</a>.</p>"
-/*
+ "<p>If you have an existing SDK, add Android 3.0 as an "
+ "<a href='{@docRoot}sdk/adding-components.html'>SDK "
+ "component</a>. If you're new to Android, install the "
diff --git a/docs/html/offline.jd b/docs/html/offline.jd
index 1064a99..5f8e37ce 100644
--- a/docs/html/offline.jd
+++ b/docs/html/offline.jd
@@ -29,7 +29,7 @@
especially <a href="{@docRoot}resources/samples/ApiDemos/index.html">API Demos</a></li>
<li>Read the <a href="{@docRoot}guide/topics/fundamentals/index.html">Application
Fundamentals</a></li>
- <li>Read the <a href="{@docRoot}guide/developing/index.html">Overview</a> for using the SDK
+ <li>Read the <a href="{@docRoot}guide/developing/index.html">Introduction</a> for using the SDK
tools</li>
</ul>
</div>
@@ -44,9 +44,6 @@
<p>There's no additional setup.</p>
-<p>New Android platforms are saved in the <code><sdk>/platforms/</code> directory of
-your existing SDK and new add-ons are saved in the <code><sdk>/add-ons/</code> directory.</p>
-
<div class="note">
<p><strong>Note:</strong> You are currently viewing the offline version of the Android developer
diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js
index 3e673a5..310310e 100644
--- a/docs/html/resources/resources-data.js
+++ b/docs/html/resources/resources-data.js
@@ -419,16 +419,16 @@
},
{
tags: ['sample', 'new'],
- path: 'samples/AndroidBeam/index.html',
+ path: 'samples/AndroidBeamDemo/index.html',
title: {
- en: 'Android Beam'
+ en: 'Android Beam Demo'
},
description: {
en: 'An example of how to use the Android Beam feature to send messages between two Android-powered devices (API level 14 or later) that support NFC.'
}
},
{
- tags: ['sample', 'layout', 'ui'],
+ tags: ['sample', 'layout', 'ui', 'updated'],
path: 'samples/ApiDemos/index.html',
title: {
en: 'API Demos'
@@ -608,7 +608,7 @@
}
},
{
- tags: ['sample', 'accountsync'],
+ tags: ['sample', 'accountsync', 'updated'],
path: 'samples/SampleSyncAdapter/index.html',
title: {
en: 'SampleSyncAdapter'
diff --git a/docs/html/resources/samples/images/hcgallery-phone1.png b/docs/html/resources/samples/images/hcgallery-phone1.png
new file mode 100644
index 0000000..9f0c280
--- /dev/null
+++ b/docs/html/resources/samples/images/hcgallery-phone1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/hcgallery-phone2.png b/docs/html/resources/samples/images/hcgallery-phone2.png
new file mode 100644
index 0000000..b049a65
--- /dev/null
+++ b/docs/html/resources/samples/images/hcgallery-phone2.png
Binary files differ
diff --git a/docs/html/sdk/android-4.0.jd b/docs/html/sdk/android-4.0.jd
index 619c907..9a9f02a 100644
--- a/docs/html/sdk/android-4.0.jd
+++ b/docs/html/sdk/android-4.0.jd
@@ -10,6 +10,7 @@
<ol>
<li><a href="#relnotes">Revisions</a></li>
<li><a href="#api">API Overview</a></li>
+ <li><a href="#Honeycomb">Previous APIs</a></li>
<li><a href="#api-diff">API Differences Report</a></li>
<li><a href="#api-level">API Level</a></li>
<li><a href="#apps">Built-in Applications</a></li>
@@ -45,14 +46,14 @@
Components</a>. If you are new to Android, <a
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
-<p>For a high-level introduction to the new user and developer features in Android 4.0, see the
-<a href="http://developer.android.com/sdk/android-4.0-highlights.html">Platform Highlights</a>.</p>
-
<p class="note"><strong>Reminder:</strong> If you've already published an
Android application, please test your application on Android {@sdkPlatformVersion} as
soon as possible to be sure your application provides the best
experience possible on the latest Android-powered devices.</p>
+<p>For a high-level introduction to the new user and developer features in Android 4.0, see the
+<a href="http://developer.android.com/sdk/android-4.0-highlights.html">Platform Highlights</a>.</p>
+
<h2 id="relnotes">Revisions</h2>
@@ -71,12 +72,7 @@
<div class="toggle-content-toggleme" style="padding-left:2em;">
<dl>
-<dt>Initial release. SDK Tools r14 or higher is required.
-<p class="note"><strong>Important:</strong> To download the new Android
-4.0 system components from the Android SDK Manager, you must first update the
-SDK tools to revision 14 and restart the Android SDK Manager. If you do not,
-the Android 4.0 system components will not be available for download.</p>
-</dt>
+<dt>Initial release. SDK Tools r14 or higher is recommended.</dt>
</dl>
</div>
@@ -97,21 +93,21 @@
<div class="toggle-content-toggleme" style="padding-left:2em;">
<ol class="toc" style="margin-left:-1em">
- <li><a href="#Contacts">Contacts</a></li>
- <li><a href="#Calendar">Calendar</a></li>
+ <li><a href="#Contacts">Contact Provider</a></li>
+ <li><a href="#Calendar">Calendar Provider</a></li>
+ <li><a href="#Voicemail">Voicemail Provider</a></li>
<li><a href="#Camera">Camera</a></li>
<li><a href="#Multimedia">Multimedia</a></li>
<li><a href="#Bluetooth">Bluetooth</a></li>
<li><a href="#AndroidBeam">Android Beam (NDEF Push with NFC)</a></li>
- <li><a href="#P2pWiFi">Peer-to-peer Wi-Fi</a></li>
- <li><a href="#NetworkData">Network Data</a></li>
- <li><a href="#Sensors">Device Sensors</a></li>
- <li><a href="#Renderscript">Renderscript</a></li>
+ <li><a href="#WiFiDirect">Wi-Fi Direct</a></li>
+ <li><a href="#NetworkUsage">Network Usage</a></li>
+ <li><a href="#RenderScript">RenderScript</a></li>
<li><a href="#A11y">Accessibility</a></li>
<li><a href="#Enterprise">Enterprise</a></li>
- <li><a href="#Voicemail">Voicemail</a></li>
- <li><a href="#SpellChecker">Spell Checker Services</a></li>
+ <li><a href="#Sensors">Device Sensors</a></li>
<li><a href="#TTS">Text-to-speech Engines</a></li>
+ <li><a href="#SpellChecker">Spell Checker Services</a></li>
<li><a href="#ActionBar">Action Bar</a></li>
<li><a href="#UI">User Interface and Views</a></li>
<li><a href="#Properties">Properties</a></li>
@@ -128,86 +124,95 @@
-<h3 id="Contacts">Contacts</h3>
+<h3 id="Contacts">Contact Provider</h3>
-<p>The Contact APIs that are defined by the {@link android.provider.ContactsContract} provider have
-been extended to support new features such as a personal profile for the device owner, large contact
-photos, and the ability for users to invite individual contacts to social networks that are
-installed on the device.</p>
+<p>The contact APIs that are defined by the {@link android.provider.ContactsContract} provider have
+been extended to support new features such as a personal profile for the device owner, high
+resolution contact photos, and the ability for users to invite individual contacts to social
+networks that are installed on the device.</p>
<h4>User Profile</h4>
<p>Android now includes a personal profile that represents the device owner, as defined by the
-{@link
-android.provider.ContactsContract.Profile} table. Social apps that maintain a user identity can
-contribute to the user's profile data by creating a new {@link
+{@link android.provider.ContactsContract.Profile} table. Social apps that maintain a user identity
+can contribute to the user's profile data by creating a new {@link
android.provider.ContactsContract.RawContacts} entry within the {@link
android.provider.ContactsContract.Profile}. That is, raw contacts that represent the device user do
not belong in the traditional raw contacts table defined by the {@link
android.provider.ContactsContract.RawContacts} Uri; instead, you must add a profile raw contact in
the table at {@link android.provider.ContactsContract.Profile#CONTENT_RAW_CONTACTS_URI}. Raw
-contacts in this table are then aggregated into the single user-visible profile information.</p>
+contacts in this table are then aggregated into the single user-visible profile labeled "Me".</p>
<p>Adding a new raw contact for the profile requires the {@link
android.Manifest.permission#WRITE_PROFILE} permission. Likewise, in order to read from the profile
table, you must request the {@link android.Manifest.permission#READ_PROFILE} permission. However,
-reading the user profile should not be required by most apps, even when contributing data to the
-profile. Reading the user profile is a sensitive permission and users will be very skeptical of apps
-that request reading their profile information.</p>
+most apps should need to read the user profile, even when contributing data to the
+profile. Reading the user profile is a sensitive permission and you should expect users to be
+skeptical of apps that request it.</p>
+
<h4>Large photos</h4>
<p>Android now supports high resolution photos for contacts. Now, when you push a photo into a
-contact
-record, the system processes it into both a 96x96 thumbnail (as it has previously) and a 256x256
-"display photo" stored in a new file-based photo store (the exact dimensions that the system chooses
-may vary in the future). You can add a large photo to a contact by putting a large photo in the
-usual {@link android.provider.ContactsContract.CommonDataKinds.Photo#PHOTO} column of a data row,
-which the system will then process into the appropriate thumbnail and display photo records.</p>
+contact record, the system processes it into both a 96x96 thumbnail (as it has previously) and a
+256x256 "display photo" that's stored in a new file-based photo store (the exact dimensions that the
+system chooses may vary in the future). You can add a large photo to a contact by putting a large
+photo in the usual {@link android.provider.ContactsContract.CommonDataKinds.Photo#PHOTO} column of a
+data row, which the system will then process into the appropriate thumbnail and display photo
+records.</p>
+
<h4>Invite Intent</h4>
-<p>The {@link android.provider.ContactsContract.Intents#INVITE_CONTACT} intent action allows you to
-invoke an action that indicates the user wants to add a contact to a social network that understand
-this intent and use it to invite the contact specified in the contact to that social network.</p>
+<p>The {@link android.provider.ContactsContract.Intents#INVITE_CONTACT} intent action allows an app
+to invoke an action that indicates the user wants to add a contact to a social network. The app
+receiving the app uses it to invite the specified contact to that
+social network. Most apps will be on the receiving-end of this operation. For example, the
+built-in People app invokes the invite intent when the user selects "Add connection" for a specific
+social app that's listed in a person's contact details.</p>
-<p>Apps that use a sync adapter to provide information about contacts can register with the system
-to
-receive the invite intent when there’s an opportunity for the user to “invite” a contact to the
-app’s social network (such as from a contact card in the People app). To receive the invite intent,
-you simply need to add the {@code inviteContactActivity} attribute to your app’s XML sync
-configuration file, providing a fully-qualified name of the activity that the system should start
-when the user wants to “invite” a contact in your social network. The activity that starts can then
-retrieve the URI for the contact in question from the intent’s data and perform the necessary work
-to
-invite that contact to the network or add the person to the user’s connections.</p>
+<p>To make your app visible as in the "Add connection" list, your app must provide a sync adapter to
+sync contact information from your social network. You must then indicate to the system that your
+app responds to the {@link android.provider.ContactsContract.Intents#INVITE_CONTACT} intent by
+adding the {@code inviteContactActivity} attribute to your app’s sync configuration file, with a
+fully-qualified name of the activity that the system should start when sending the invite intent.
+The activity that starts can then retrieve the URI for the contact in question from the intent’s
+data and perform the necessary work to invite that contact to the network or add the person to the
+user’s connections.</p>
+
+<p>See the <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">Sample Sync
+Adapter</a> app for an example (specifically, see the <a
+href="{@docRoot}resources/samples/SampleSyncAdapter/res/xml-v14/contacts.html">contacts.xml</a>
+file).</p>
+
<h4>Contact Usage Feedback</h4>
<p>The new {@link android.provider.ContactsContract.DataUsageFeedback} APIs allow you to help track
how often the user uses particular methods of contacting people, such as how often the user uses
each phone number or e-mail address. This information helps improve the ranking for each contact
-method associated with each person and provide such contact methods as suggestions.</p>
+method associated with each person and provide better suggestions for contacting each person.</p>
-<h3 id="Calendar">Calendar</h3>
+<h3 id="Calendar">Calendar Provider</h3>
-<p>The new calendar API allows you to access and modify the user’s calendars and events. The
-calendar
-APIs are provided with the {@link android.provider.CalendarContract} provider. Using the calendar
-provider, you can:</p>
-<ul>
-<li>Read, write, and modify calendars.</li>
-<li>Add and modify events, attendees, reminders, and alarms.</li>
-</ul>
+<p>The new calendar APIs allow you to read, add, modify and delete calendars, events, attendees,
+reminders and alerts, which are stored in the Calendar Provider.</p>
-<p>{@link android.provider.CalendarContract} defines the data model of calendar and event-related
-information. All of the user’s calendar data is stored in a number of tables defined by subclasses
-of {@link android.provider.CalendarContract}:</p>
+<p>A variety of apps and widgets can use these APIs to read and modify calendar events. However,
+some of the most compelling use cases are sync adapters that synchronize the user's calendar from
+other calendar services with the Calendar Provider, in order to offer a unified location for all the
+user's events. Google Calendar events, for example, are synchronized with the Calendar Provider by
+the Google Calendar Sync Adapter, allowing these events to be viewed with Android's built-in
+Calendar app.</p>
+
+<p>The data model for calendars and event-related information in the Calendar Provider is
+defined by {@link android.provider.CalendarContract}. All the user’s calendar data is stored in a
+number of tables defined by various subclasses of {@link android.provider.CalendarContract}:</p>
<ul>
<li>The {@link android.provider.CalendarContract.Calendars} table holds the calendar-specific
@@ -215,11 +220,10 @@
color, sync information, and so on.</li>
<li>The {@link android.provider.CalendarContract.Events} table holds event-specific information.
-Each
-row in this table has the information for a single event. It contains information such as event
-title, location, start time, end time, and so on. The event can occur one-time or can recur multiple
-times. Attendees, reminders, and extended properties are stored in separate tables and reference the
-event’s _ID to link them with the event.</li>
+Each row in this table contains the information for a single event, such as the
+event title, location, start time, end time, and so on. The event can occur one time or recur
+multiple times. Attendees, reminders, and extended properties are stored in separate tables and
+use the event’s {@code _ID} to link them with the event.</li>
<li>The {@link android.provider.CalendarContract.Instances} table holds the start and end time for
occurrences of an event. Each row in this table represents a single occurrence. For one-time events
@@ -228,47 +232,93 @@
<li>The {@link android.provider.CalendarContract.Attendees} table holds the event attendee or guest
information. Each row represents a single guest of an event. It specifies the type of guest the
-person is and the person’s attendance response for the event.</li>
+person is and the person’s response for the event.</li>
<li>The {@link android.provider.CalendarContract.Reminders} table holds the alert/notification data.
Each row represents a single alert for an event. An event can have multiple reminders. The number of
-reminders per event is specified in MAX_REMINDERS, which is set by the Sync Adapter that owns the
-given calendar. Reminders are specified in minutes before the event and have a type.</li>
+reminders per event is specified in {@code MAX_REMINDERS}, which is set by the sync adapter that
+owns the given calendar. Reminders are specified in number-of-minutes before the event is
+scheduled and specify an alarm method such as to use an alert, email, or SMS to remind
+the user.</li>
<li>The {@link android.provider.CalendarContract.ExtendedProperties} table hold opaque data fields
-used
-by the sync adapter. The provider takes no action with items in this table except to delete them
-when their related events are deleted.</li>
+used by the sync adapter. The provider takes no action with items in this table except to delete
+them when their related events are deleted.</li>
</ul>
-<p>To access a user’s calendar data with the calendar provider, your application must request
-permission from the user by declaring <uses-permission
-android:name="android.permission.READ_CALENDAR" /> (for read access) and <uses-permission
-android:name="android.permission.WRITE_CALENDAR" /> (for write access) in their manifest files.</p>
+<p>To access a user’s calendar data with the Calendar Provider, your application must request
+the {@link android.Manifest.permission#READ_CALENDAR} permission (for read access) and
+{@link android.Manifest.permission#WRITE_CALENDAR} (for write access).</p>
-<p>However, if all you want to do is add an event to the user’s calendar, you can instead use an
-INSERT
-{@link android.content.Intent} to start an activity in the Calendar app that creates new events.
-Using the intent does not require the WRITE_CALENDAR permission and you can specify the {@link
-android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME} and {@link
-android.provider.CalendarContract#EXTRA_EVENT_END_TIME} extra fields to pre-populate the form with
-the time of the event. The values for these times must be in milliseconds from the epoch. You must
-also specify {@code “vnd.android.cursor.item/event”} as the intent type.</p>
+<h4>Event intent</h4>
+
+<p>If all you want to do is add an event to the user’s calendar, you can use an
+{@link android.content.Intent#ACTION_INSERT} intent with a {@code "vnd.android.cursor.item/event"}
+MIME type to start an activity in the Calendar app that creates new events. Using the intent does
+not require any permission and you can specify event details with the following extras:</p>
+
+<ul>
+ <li>{@link android.provider.CalendarContract.EventsColumns#TITLE Events.TITLE}: Name for the
+event</li>
+ <li>{@link
+android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}:
+Event begin time in milliseconds from the
+epoch</li>
+ <li>{@link
+android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}: Event
+end time in milliseconds from the epoch</li>
+ <li>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}:
+Location of the event</li>
+ <li>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}: Event
+description</li>
+ <li>{@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL}: Email addresses of those to
+invite</li>
+ <li>{@link android.provider.CalendarContract.EventsColumns#RRULE Events.RRULE}: The recurrence
+rule for the event</li>
+ <li>{@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}:
+Whether the event is private or public</li>
+ <li>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}:
+Whether the time period of this event allows for other events to be scheduled at the same time</li>
+</ul>
+
+
+
+
+<h3 id="Voicemail">Voicemail Provider</h3>
+
+<p>The new voicemail APIs allows applications to add voicemails to a content provider on the device.
+Because the APIs currently do not allow third party apps to read all the voicemails from the system,
+the only third-party apps that should use the voicemail APIs are those that have voicemail to
+deliver to the user. For instance, it’s possible that a user has multiple voicemail sources, such as
+one provided by the phone’s service provider and others from VoIP or other alternative voice
+services. These apps can use the APIs to add their voicemails to the system for quick playback. The
+built-in Phone application presents all voicemails from the Voicemail Provider with a single list.
+Although the system’s Phone application is the only application that can read all the voicemails,
+each application that provides voicemails can read those that it has added to the system (but cannot
+read voicemails from other services).</p>
+
+<p>The {@link android.provider.VoicemailContract} class defines the content provider for the
+voicemail APIs. The subclasses {@link android.provider.VoicemailContract.Voicemails} and {@link
+android.provider.VoicemailContract.Status} provide tables in which the Voicemail Providers can
+insert voicemail data for storage on the device. For an example of a voicemail provider app, see the
+<a href="{@docRoot}resources/samples/VoicemailProviderDemo/index.html">Voicemail Provider
+Demo</a>.</p>
<h3 id="Camera">Camera</h3>
-<p>The {@link android.hardware.Camera} APIs now support face detection and control for metering and
-focus areas.</p>
+<p>The {@link android.hardware.Camera} class now includes APIs for detecting faces and controlling
+focus and metering areas.</p>
-<h4>Face Detection</h4>
-<p>Camera apps can now enhance their abilities with Android’s face detection software, which not
-only
-detects the face of a subject, but also specific facial features, such as the eyes and mouth. </p>
+<h4>Face detection</h4>
+
+<p>Camera apps can now enhance their abilities with Android’s face detection APIs, which not
+only detect the face of a subject, but also specific facial features, such as the eyes and mouth.
+</p>
<p>To detect faces in your camera application, you must register a {@link
android.hardware.Camera.FaceDetectionListener} by calling {@link
@@ -276,41 +326,44 @@
your camera surface and start detecting faces by calling {@link
android.hardware.Camera#startFaceDetection}.</p>
-<p>When the system detects a face, it calls the {@link
+<p>When the system detects one or more faces in the camera scene, it calls the {@link
android.hardware.Camera.FaceDetectionListener#onFaceDetection onFaceDetection()} callback in your
implementation of {@link android.hardware.Camera.FaceDetectionListener}, including an array of
{@link android.hardware.Camera.Face} objects.</p>
<p>An instance of the {@link android.hardware.Camera.Face} class provides various information about
-the
-face detected by the camera, including:</p>
+the face detected, including:</p>
<ul>
<li>A {@link android.graphics.Rect} that specifies the bounds of the face, relative to the camera's
current field of view</li>
-<li>An integer betwen 0 and 100 that indicates how confident the system is that the object is a
-human
-face</li>
+<li>An integer betwen 1 and 100 that indicates how confident the system is that the object is a
+human face</li>
<li>A unique ID so you can track multiple faces</li>
<li>Several {@link android.graphics.Point} objects that indicate where the eyes and mouth are
located</li>
</ul>
+<p class="note"><strong>Note:</strong> Face detection may not be supported on some
+devices, so you should check by calling {@link
+android.hardware.Camera.Parameters#getMaxNumDetectedFaces()} and ensure the return
+value is greater than zero. Also, some devices may not support identification of eyes and mouth,
+in which case, those fields in the {@link android.hardware.Camera.Face} object will be null.</p>
-<h4>Focus and Metering Areas</h4>
+
+<h4>Focus and metering areas</h4>
-<p>Camera apps can now control the areas that the camera uses for focus and when metering white
+<p>Camera apps can now control the areas that the camera uses for focus and for metering white
balance
-and auto-exposure (when supported by the hardware). Both features use the new {@link
-android.hardware.Camera.Area} class to specify the region of the camera’s current view that should
-be focused or metered. An instance of the {@link android.hardware.Camera.Area} class defines the
-bounds of the area with a {@link android.graphics.Rect} and the weight of the
-area—representing the level of importance of that area, relative to other areas in
-consideration—with an integer.</p>
+and auto-exposure. Both features use the new {@link android.hardware.Camera.Area} class to specify
+the region of the camera’s current view that should be focused or metered. An instance of the {@link
+android.hardware.Camera.Area} class defines the bounds of the area with a {@link
+android.graphics.Rect} and the area's weight—representing the level of importance of that
+area, relative to other areas in consideration—with an integer.</p>
<p>Before setting either a focus area or metering area, you should first call {@link
android.hardware.Camera.Parameters#getMaxNumFocusAreas} or {@link
android.hardware.Camera.Parameters#getMaxNumMeteringAreas}, respectively. If these return zero, then
-the device does not support the respective feature. </p>
+the device does not support the corresponding feature.</p>
<p>To specify the focus or metering areas to use, simply call {@link
android.hardware.Camera.Parameters#setFocusAreas setFocusAreas()} or {@link
@@ -318,33 +371,53 @@
java.util.List} of {@link android.hardware.Camera.Area} objects that indicate the areas to consider
for focus or metering. For example, you might implement a feature that allows the user to set the
focus area by touching an area of the preview, which you then translate to an {@link
-android.hardware.Camera.Area} object and set the focus to that spot. The focus or exposure in that
-area will continually update as the scene in the area changes.</p>
+android.hardware.Camera.Area} object and request that the camera focus on that area of the scene.
+The focus or exposure in that area will continually update as the scene in the area changes.</p>
-<h4>Other Camera Features</h4>
-<ul>
-<li>Capture photos during video recording
-While recording video, you can now call {@link android.hardware.Camera#takePicture takePicture()} to
-save a photo without interrupting the video session. Before doing so, you should call {@link
-android.hardware.Camera.Parameters#isVideoSnapshotSupported} to be sure the hardware supports
-it.</li>
+<h4>Continuous auto focus for photos</h4>
-<li>Lock auto exposure and white balance with {@link
+<p>You can now enable continuous auto focusing (CAF) when taking photos. To enable CAF in your
+camera app, pass {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}
+to {@link android.hardware.Camera.Parameters#setFocusMode setFocusMode()}. When ready to capture
+a photo, call {@link android.hardware.Camera#autoFocus autoFocus()}. Your {@link
+android.hardware.Camera.AutoFocusCallback} immediately receives a callback to indicate whether
+focus was acheived. To resume CAF after receiving the callback, you must call {@link
+android.hardware.Camera#cancelAutoFocus()}.</p>
+
+<p class="note"><strong>Note:</strong> Continuous auto focus is also supported when capturing
+video, using {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}, which was
+added in API level 9.</p>
+
+
+<h4>Other camera features</h4>
+
+<ul>
+<li>While recording video, you can now call {@link android.hardware.Camera#takePicture
+takePicture()} to save a photo without interrupting the video session. Before doing so, you should
+call {@link android.hardware.Camera.Parameters#isVideoSnapshotSupported} to be sure the hardware
+supports it.</li>
+
+<li>You can now lock auto exposure and white balance with {@link
android.hardware.Camera.Parameters#setAutoExposureLock setAutoExposureLock()} and {@link
-android.hardware.Camera.Parameters#setAutoWhiteBalanceLock setAutoWhiteBalanceLock()}, to prevent
+android.hardware.Camera.Parameters#setAutoWhiteBalanceLock setAutoWhiteBalanceLock()} to prevent
these properties from changing.</li>
+
+<li>You can now call {@link android.hardware.Camera#setDisplayOrientation
+setDisplayOrientation()} while the camera preview is running. Previously, you could call this
+only before beginning the preview, but you can now change the orientation at any time.</li>
</ul>
-<h4>Camera Broadcast Intents</h4>
+
+<h4>Camera broadcast intents</h4>
<ul>
-<li>{@link android.hardware.Camera#ACTION_NEW_PICTURE Camera.ACTION_NEW_PICTURE}
-This indicates that the user has captured a new photo. The built-in camera app invokes this
+<li>{@link android.hardware.Camera#ACTION_NEW_PICTURE Camera.ACTION_NEW_PICTURE}:
+This indicates that the user has captured a new photo. The built-in Camera app invokes this
broadcast after a photo is captured and third-party camera apps should also broadcast this intent
after capturing a photo.</li>
-<li>{@link android.hardware.Camera#ACTION_NEW_VIDEO Camera.ACTION_NEW_VIDEO}
-This indicates that the user has captured a new video. The built-in camera app invokes this
+<li>{@link android.hardware.Camera#ACTION_NEW_VIDEO Camera.ACTION_NEW_VIDEO}:
+This indicates that the user has captured a new video. The built-in Camera app invokes this
broadcast after a video is recorded and third-party camera apps should also broadcast this intent
after capturing a video.</li>
</ul>
@@ -356,25 +429,29 @@
<h3 id="Multimedia">Multimedia</h3>
<p>Android 4.0 adds several new APIs for applications that interact with media such as photos,
-videos,
-and music.</p>
+videos, and music.</p>
-<h4>Media Player</h4>
+<h4>Media player</h4>
<ul>
-<li>Streaming online media from {@link android.media.MediaPlayer} now requires {@link
+<li>Streaming online media from {@link android.media.MediaPlayer} now requires the {@link
android.Manifest.permission#INTERNET} permission. If you use {@link android.media.MediaPlayer} to
-play content from the internet, be sure to add the {@link android.Manifest.permission#INTERNET}
-permission or else your media playback will not work beginning with Android 4.0.</li>
+play content from the Internet, be sure to add the {@link android.Manifest.permission#INTERNET}
+permission to your manifest or else your media playback will not work beginning with Android
+4.0.</li>
+
<li>{@link android.media.MediaPlayer#setSurface(Surface) setSurface()} allows you define a {@link
android.view.Surface} to behave as the video sink.</li>
+
<li>{@link android.media.MediaPlayer#setDataSource(Context,Uri,Map) setDataSource()} allows you to
send additional HTTP headers with your request, which can be useful for HTTP(S) live streaming</li>
+
<li>HTTP(S) live streaming now respects HTTP cookies across requests</li>
</ul>
-<h4>Media Type Support</h4>
+
+<h4>Media types</h4>
<p>Android 4.0 adds support for:</p>
<ul>
@@ -383,20 +460,21 @@
<li>WEBP images</li>
<li>Matroska video</li>
</ul>
-<p>For more info, see <a href=”{@docRoot}guide/appendix/media-formats.html”>Supported Media
+<p>For more info, see <a href="{@docRoot}guide/appendix/media-formats.html">Supported Media
Formats</a>.</p>
-<h4>Remote Control Client</h4>
+
+<h4>Remote control client</h4>
<p>The new {@link android.media.RemoteControlClient} allows media players to enable playback
-controls
-from remote control clients such as the device lock screen. Media players can also expose
+controls from remote control clients such as the device lock screen. Media players can also expose
information about the media currently playing for display on the remote control, such as track
information and album art.</p>
<p>To enable remote control clients for your media player, instantiate a {@link
-android.media.RemoteControlClient} with a {@link android.app.PendingIntent} that broadcasts {@link
+android.media.RemoteControlClient} with its constructor, passing it a {@link
+android.app.PendingIntent} that broadcasts {@link
android.content.Intent#ACTION_MEDIA_BUTTON}. The intent must also declare the explicit {@link
android.content.BroadcastReceiver} component in your app that handles the {@link
android.content.Intent#ACTION_MEDIA_BUTTON} event.</p>
@@ -423,22 +501,20 @@
android.media.MediaMetadataRetriever}.</p>
<p>For a sample implementation, see the <a
-href=”{@docRoot}resources/samples/RandomMusicPlayer/index.html”>Random Music Player</a>, which
-provides compatibility logic such that it enables the remote control client while continuing to
-support Android 2.1 devices.</p>
+href="{@docRoot}resources/samples/RandomMusicPlayer/index.html">Random Music Player</a>, which
+provides compatibility logic such that it enables the remote control client on Android 4.0
+devices while continuing to support devices back to Android 2.1.</p>
<h4>Media Effects</h4>
<p>A new media effects framework allows you to apply a variety of visual effects to images and
-videos.
-The system performs all effects processing on the GPU to obtain maximum performance. Applications in
-Android 4.0 such as Google Talk or the Gallery editor make use of the effects API to apply real-time
-effects to video and photos.</p>
+videos. For example, image effects allow you to easily fix red-eye, convert an image to grayscale,
+adjust brightness, adjust saturation, rotate an image, apply a fisheye effect, and much more. The
+system performs all effects processing on the GPU to obtain maximum performance.</p>
<p>For maximum performance, effects are applied directly to OpenGL textures, so your application
-must
-have a valid OpenGL context before it can use the effects APIs. The textures to which you apply
+must have a valid OpenGL context before it can use the effects APIs. The textures to which you apply
effects may be from bitmaps, videos or even the camera. However, there are certain restrictions that
textures must meet:</p>
<ol>
@@ -447,8 +523,7 @@
</ol>
<p>An {@link android.media.effect.Effect} object defines a single media effect that you can apply to
-an
-image frame. The basic workflow to create an {@link android.media.effect.Effect} is:</p>
+an image frame. The basic workflow to create an {@link android.media.effect.Effect} is:</p>
<ol>
<li>Call {@link android.media.effect.EffectContext#createWithCurrentGlContext
@@ -457,17 +532,15 @@
android.media.effect.EffectContext#getFactory EffectContext.getFactory()}, which returns an instance
of {@link android.media.effect.EffectFactory}.</li>
<li>Call {@link android.media.effect.EffectFactory#createEffect createEffect()}, passing it an
-effect
-name from @link android.media.effect.EffectFactory}, such as {@link
+effect name from @link android.media.effect.EffectFactory}, such as {@link
android.media.effect.EffectFactory#EFFECT_FISHEYE} or {@link
android.media.effect.EffectFactory#EFFECT_VIGNETTE}.</li>
</ol>
<p>Not all devices support all effects, so you must first check if the desired effect is supported
-by
-calling {@link android.media.effect.EffectFactory#isEffectSupported isEffectSupported()}.</p>
+by calling {@link android.media.effect.EffectFactory#isEffectSupported isEffectSupported()}.</p>
-<p>You can adjust the effect’s parameters by calling {@link android.media.effect.Effect#setParameter
+<p>You can adjust an effect’s parameters by calling {@link android.media.effect.Effect#setParameter
setParameter()} and passing a parameter name and parameter value. Each type of effect accepts
different parameters, which are documented with the effect name. For example, {@link
android.media.effect.EffectFactory#EFFECT_FISHEYE} has one parameter for the {@code scale} of the
@@ -480,8 +553,8 @@
image (usually done by calling the {@link android.opengl.GLES20#glTexImage2D glTexImage2D()}
function). You may provide multiple mipmap levels. If the output texture has not been bound to a
texture image, it will be automatically bound by the effect as a {@link
-android.opengl.GLES20#GL_TEXTURE_2D}. It will contain one mipmap level (0), which will have the same
-size as the input.</p>
+android.opengl.GLES20#GL_TEXTURE_2D} and with one mipmap level (0), which will have the same
+size as the input.</p>
@@ -501,7 +574,7 @@
android.bluetooth.BluetoothProfile#HEALTH} profile type to establish a connection with the profile
proxy object.</p>
-<p>Once you’ve acquired the Health profile proxy (the {@link android.bluetooth.BluetoothHealth}
+<p>Once you’ve acquired the Health Profile proxy (the {@link android.bluetooth.BluetoothHealth}
object), connecting to and communicating with paired health devices involves the following new
Bluetooth classes:</p>
<ul>
@@ -515,15 +588,15 @@
android.bluetooth.BluetoothHealth} APIs.</li>
</ul>
-<p>For more information about using the Bluetooth Health profile, see the documentation for {@link
+<p>For more information about using the Bluetooth Health Profile, see the documentation for {@link
android.bluetooth.BluetoothHealth}.</p>
+
<h3 id="AndroidBeam">Android Beam (NDEF Push with NFC)</h3>
-<p>Android Beam allows you to send NDEF messages (an NFC standard for data stored on NFC tags) from
-one
-device to another (a process also known as “NDEF Push”). The data transfer is initiated when two
+<p>Android Beam is a new NFC feature that allows you to send NDEF messages from one device to
+another (a process also known as “NDEF Push"). The data transfer is initiated when two
Android-powered devices that support Android Beam are in close proximity (about 4 cm), usually with
their backs touching. The data inside the NDEF message can contain any data that you wish to share
between devices. For example, the People app shares contacts, YouTube shares videos, and Browser
@@ -531,29 +604,30 @@
<p>To transmit data between devices using Android Beam, you need to create an {@link
android.nfc.NdefMessage} that contains the information you want to share while your activity is in
-the foreground. You must then pass the
-{@link android.nfc.NdefMessage} to the system in one of two ways:</p>
+the foreground. You must then pass the {@link android.nfc.NdefMessage} to the system in one of two
+ways:</p>
<ul>
-<li>Define a single {@link android.nfc.NdefMessage} to use from the activity:
+<li>Define a single {@link android.nfc.NdefMessage} to push while in the activity:
<p>Call {@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} at any time to set
-the
-message you want to send. For instance, you might call this method and pass it your {@link
+the message you want to send. For instance, you might call this method and pass it your {@link
android.nfc.NdefMessage} during your activity’s {@link android.app.Activity#onCreate onCreate()}
-method. Then, whenever Android Beam is activated with another device while your activity is in the
-foreground, the system sends that {@link android.nfc.NdefMessage} to the other device.</p></li>
+method. Then, whenever Android Beam is activated with another device while the activity is in the
+foreground, the system sends the {@link android.nfc.NdefMessage} to the other device.</p></li>
-<li>Define the {@link android.nfc.NdefMessage} depending on the current context:
-<p>Implement {@link android.nfc.NfcAdapter.CreateNdefMessageCallback}, in which the {@link
-android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()} callback
+<li>Define the {@link android.nfc.NdefMessage} to push at the time that Android Beam is initiated:
+<p>Implement {@link android.nfc.NfcAdapter.CreateNdefMessageCallback}, in which your
+implementation of the {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()}
method returns the {@link android.nfc.NdefMessage} you want to send. Then pass the {@link
-android.nfc.NfcAdapter.CreateNdefMessageCallback} to {@link
-android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()}. In this case, when
-Android Beam is activated with another device while your activity is in the foreground, the system
-calls {@link android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()}
-to retrieve the {@link android.nfc.NdefMessage} you want to send. This allows you to create a
-different {@link android.nfc.NdefMessage} for each occurrence, depending on the user context (such
-as which contact in the People app is currently visible).</p></li>
+android.nfc.NfcAdapter.CreateNdefMessageCallback} implementation to {@link
+android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()}.</p>
+<p>In this case, when Android Beam is activated with another device while your activity is in the
+foreground, the system calls {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()} to retrieve
+the {@link android.nfc.NdefMessage} you want to send. This allows you to define the {@link
+android.nfc.NdefMessage} to deliver only once Android Beam is initiated, in case the contents
+of the message might vary throughout the life of the activity.</p></li>
</ul>
<p>In case you want to run some specific code once the system has successfully delivered your NDEF
@@ -567,9 +641,9 @@
tags. The system invokes an intent with the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
action to start an activity, with either a URL or a MIME type set according to the first {@link
android.nfc.NdefRecord} in the {@link android.nfc.NdefMessage}. For the activity you want to
-respond, you can set intent filters for the URLs or MIME types your app cares about. For more
+respond, you can declare intent filters for the URLs or MIME types your app cares about. For more
information about Tag Dispatch see the <a
-href=”{@docRoot}guide/topics/nfc/index.html#dispatch”>NFC</a> developer guide.</p>
+href="{@docRoot}guide/topics/nfc/index.html#dispatch">NFC</a> developer guide.</p>
<p>If you want your {@link android.nfc.NdefMessage} to carry a URI, you can now use the convenience
method {@link android.nfc.NdefRecord#createUri createUri} to construct a new {@link
@@ -578,46 +652,51 @@
should create an intent filter for your activity using the same URI scheme in order to receive the
incoming NDEF message.</p>
-<p>You may also want to pass an “Android application record” with your {@link
-android.nfc.NdefMessage}
-in order to guarantee a specific application handles an NDEF message, regardless of whether other
-applications filter for the same intent. You can create an Android application record by calling
-{@link android.nfc.NdefRecord#createApplicationRecord createApplicationRecord()}, passing it the
-application’s package name. When the other device receives the NDEF message with this record, the
-system automatically starts the application matching the package name. If the target device does not
-currently have the application installed, the system uses the Android application record to launch
-Android Market and take the user to the application to install it.</p>
+<p>You should also pass an “Android application record" with your {@link android.nfc.NdefMessage} in
+order to guarantee that your application handles the incoming NDEF message, even if other
+applications filter for the same intent action. You can create an Android application record by
+calling {@link android.nfc.NdefRecord#createApplicationRecord createApplicationRecord()}, passing it
+your application’s package name. When the other device receives the NDEF message with the
+application record and multiple applications contain activities that handle the specified intent,
+the system always delivers the message to the activity in your application (based on the matching
+application record). If the target device does not currently have your application installed, the
+system uses the Android application record to launch Android Market and take the user to the
+application in order to install it.</p>
<p>If your application doesn’t use NFC APIs to perform NDEF Push messaging, then Android provides a
default behavior: When your application is in the foreground on one device and Android Beam is
invoked with another Android-powered device, then the other device receives an NDEF message with an
Android application record that identifies your application. If the receiving device has the
application installed, the system launches it; if it’s not installed, Android Market opens and takes
-the user to your application so they can install it.</p>
+the user to your application in order to install it.</p>
+
+<p>For some example code, see the <a
+href="{@docRoot}resources/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.html">Android
+Beam Demo</a> sample app.</p>
+<h3 id="WiFiDirect">Wi-Fi Direct</h3>
-<h3 id="P2pWiFi">Peer-to-peer Wi-Fi</h3>
-
-<p>Android now supports Wi-Fi Direct™ for peer-to-peer (P2P) connections between
-Android-powered
+<p>Android now supports Wi-Fi Direct for peer-to-peer (P2P) connections between Android-powered
devices and other device types without a hotspot or Internet connection. The Android framework
provides a set of Wi-Fi P2P APIs that allow you to discover and connect to other devices when each
-device supports Wi-Fi Direct™, then communicate over a speedy connection across distances much
-longer than a Bluetooth connection.</p>
+device supports Wi-Fi Direct, then communicate over a speedy connection across distances much longer
+than a Bluetooth connection.</p>
<p>A new package, {@link android.net.wifi.p2p}, contains all the APIs for performing peer-to-peer
connections with Wi-Fi. The primary class you need to work with is {@link
-android.net.wifi.p2p.WifiP2pManager}, for which you can get an instance by calling {@link
+android.net.wifi.p2p.WifiP2pManager}, which you can acquire by calling {@link
android.app.Activity#getSystemService getSystemService(WIFI_P2P_SERVICE)}. The {@link
-android.net.wifi.p2p.WifiP2pManager} provides methods that allow you to:</p>
+android.net.wifi.p2p.WifiP2pManager} includes APIs that allow you to:</p>
<ul>
<li>Initialize your application for P2P connections by calling {@link
android.net.wifi.p2p.WifiP2pManager#initialize initialize()}</li>
+
<li>Discover nearby devices by calling {@link android.net.wifi.p2p.WifiP2pManager#discoverPeers
discoverPeers()}</li>
+
<li>Start a P2P connection by calling {@link android.net.wifi.p2p.WifiP2pManager#connect
connect()}</li>
<li>And more</li>
@@ -627,18 +706,20 @@
<ul>
<li>The {@link android.net.wifi.p2p.WifiP2pManager.ActionListener} interface allows you to receive
callbacks when an operation such as discovering peers or connecting to them succeeds or fails.</li>
+
<li>{@link android.net.wifi.p2p.WifiP2pManager.PeerListListener} interface allows you to receive
information about discovered peers. The callback provides a {@link
android.net.wifi.p2p.WifiP2pDeviceList}, from which you can retrieve a {@link
android.net.wifi.p2p.WifiP2pDevice} object for each device within range and get information such as
the device name, address, device type, the WPS configurations the device supports, and more.</li>
+
<li>The {@link android.net.wifi.p2p.WifiP2pManager.GroupInfoListener} interface allows you to
-receive
-information about a P2P group. The callback provides a {@link android.net.wifi.p2p.WifiP2pGroup}
-object, which provides group information such as the owner, the network name, and passphrase.</li>
+receive information about a P2P group. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pGroup} object, which provides group information such as the owner, the
+network name, and passphrase.</li>
+
<li>{@link android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener} interface allows you to
-receive
-information about the current connection. The callback provides a {@link
+receive information about the current connection. The callback provides a {@link
android.net.wifi.p2p.WifiP2pInfo} object, which has information such as whether a group has been
formed and who is the group owner.</li>
</ul>
@@ -647,58 +728,57 @@
<ul>
<li>{@link android.Manifest.permission#ACCESS_WIFI_STATE}</li>
<li>{@link android.Manifest.permission#CHANGE_WIFI_STATE}</li>
-<li>{@link android.Manifest.permission#INTERNET} (even though your app doesn’t technically connect
-to
-the Internet, the WiFi Direct implementation uses traditional sockets that do require Internet
-permission to work).</li>
+<li>{@link android.Manifest.permission#INTERNET} (although your app doesn’t technically connect
+to the Internet, communicating to Wi-Fi Direct peers with standard java sockets requires Internet
+permission).</li>
</ul>
<p>The Android system also broadcasts several different actions during certain Wi-Fi P2P events:</p>
<ul>
<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_CONNECTION_CHANGED_ACTION}: The P2P
-connection
-state has changed. This carries {@link android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_P2P_INFO} with
-a {@link android.net.wifi.p2p.WifiP2pInfo} object and {@link
+connection state has changed. This carries {@link
+android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_P2P_INFO} with a {@link
+android.net.wifi.p2p.WifiP2pInfo} object and {@link
android.net.wifi.p2p.WifiP2pManager#EXTRA_NETWORK_INFO} with a {@link android.net.NetworkInfo}
object.</li>
+
<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_CHANGED_ACTION}: The P2P state has
-changed
-between enabled and disabled. It carries {@link
+changed between enabled and disabled. It carries {@link
android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_STATE} with either {@link
android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_DISABLED} or {@link
android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_ENABLED}</li>
+
<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION}: The list of peer
-devices
-has changed.</li>
+devices has changed.</li>
+
<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_THIS_DEVICE_CHANGED_ACTION}: The details for
this device have changed.</li>
</ul>
<p>See the {@link android.net.wifi.p2p.WifiP2pManager} documentation for more information. Also
-look
-at the <a href=”{@docRoot}resources/samples/WiFiDirectDemo/index.html”>Wi-Fi Direct</a> sample
-application for example code.</p>
+look at the <a href="{@docRoot}resources/samples/WiFiDirectDemo/index.html">Wi-Fi Direct Demo</a>
+sample application.</p>
-<h3 id="NetworkData">Network Data</h3>
+<h3 id="NetworkUsage">Network Usage</h3>
-<p>Android 4.0 gives users precise visibility of how much network data applications are using. The
-Settings app provides controls that allow users to manage set limits for network data usage and even
-disable the use of background data for individual apps. In order to avoid users disabling your app’s
-access to data from the background, you should develop strategies to use use the data connection
-efficiently and vary your usage depending on the type of connection available.</p>
+<p>Android 4.0 gives users precise visibility of how much network data their applications are using.
+The Settings app provides controls that allow users to manage set limits for network data usage and
+even disable the use of background data for individual apps. In order to avoid users disabling your
+app’s access to data from the background, you should develop strategies to use use the data
+connection efficiently and adjust your usage depending on the type of connection available.</p>
<p>If your application performs a lot of network transactions, you should provide user settings that
allow users to control your app’s data habits, such as how often your app syncs data, whether to
perform uploads/downloads only when on Wi-Fi, whether to use data while roaming, etc. With these
controls available to them, users are much less likely to disable your app’s access to data when
they approach their limits, because they can instead precisely control how much data your app uses.
-When you provide an activity with these settings, you should include in its manifest declaration an
-intent filter for the {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} action. For
-example:</p>
+If you provide a preference activity with these settings, you should include in its manifest
+declaration an intent filter for the {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE}
+action. For example:</p>
<pre>
<activity android:name="DataPreferences" android:label="@string/title_preferences">
@@ -709,10 +789,10 @@
</activity>
</pre>
-<p>This intent filter indicates to the system that this is the application that controls your
+<p>This intent filter indicates to the system that this is the activity that controls your
application’s data usage. Thus, when the user inspects how much data your app is using from the
-Settings app, a “View application settings” button is available that launches your activity so the
-user can refine how much data your app uses.</p>
+Settings app, a “View application settings" button is available that launches your
+preference activity so the user can refine how much data your app uses.</p>
<p>Also beware that {@link android.net.ConnectivityManager#getBackgroundDataSetting()} is now
deprecated and always returns true—use {@link
@@ -720,7 +800,7 @@
transactions, you should always call {@link android.net.ConnectivityManager#getActiveNetworkInfo()}
to get the {@link android.net.NetworkInfo} that represents the current network and query {@link
android.net.NetworkInfo#isConnected()} to check whether the device has a
-connection. You can then check various other connection properties, such as whether the device is
+connection. You can then check other connection properties, such as whether the device is
roaming or connected to Wi-Fi.</p>
@@ -729,43 +809,10 @@
-<h3 id="Sensors">Device Sensors</h3>
-<p>Two new sensor types have been added in Android 4.0: {@link
-android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} and {@link
-android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY}. </p>
+<h3 id="RenderScript">RenderScript</h3>
-<p>{@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} is a temperature sensor that provides
-the ambient (room) temperature near a device. This sensor reports data in degrees Celsius. {@link
-android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY} is a humidity sensor that provides the relative
-ambient (room) humidity. The sensor reports data as a percentage. If a device has both {@link
-android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} and {@link
-android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY} sensors, you can use them to calculate the dew point
-and the absolute humidity.</p>
-
-<p>The existing temperature sensor ({@link android.hardware.Sensor#TYPE_TEMPERATURE}) has been
-deprecated. You should use the {@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} sensor
-instead.</p>
-
-<p>Additionally, Android’s three synthetic sensors have been improved so they now have lower latency
-and smoother output. These sensors include the gravity sensor ({@link
-android.hardware.Sensor#TYPE_GRAVITY}), rotation vector sensor ({@link
-android.hardware.Sensor#TYPE_ROTATION_VECTOR}), and linear acceleration sensor ({@link
-android.hardware.Sensor#TYPE_LINEAR_ACCELERATION}). The improved sensors rely on the gyroscope
-sensor to improve their output so the sensors appear only on devices that have a gyroscope. If a
-device already provides one of the sensors, then that sensor appears as a second sensor on the
-device. The three improved sensors have a version number of 2.</p>
-
-
-
-
-
-
-
-
-<h3 id="Renderscript">Renderscript</h3>
-
-<p>Three major features have been added to Renderscript:</p>
+<p>Three major features have been added to RenderScript:</p>
<ul>
<li>Off-screen rendering to a framebuffer object</li>
@@ -776,24 +823,24 @@
<p>The {@link android.renderscript.Allocation} class now supports a {@link
android.renderscript.Allocation#USAGE_GRAPHICS_RENDER_TARGET} memory space, which allows you to
render things directly into the {@link android.renderscript.Allocation} and use it as a framebuffer
-object. </p>
+object.</p>
-<p>{@link android.renderscript.RSTextureView} provides a means to display Renderscript graphics
-inside
-of a normal View, unlike {@link android.renderscript.RSSurfaceView}, which creates a separate
-window. This key difference allows you to do things such as move, transform, or animate an {@link
-android.renderscript.RSTextureView} as well as draw Renderscript graphics inside the View alongside
-other traditional View widgets.</p>
+<p>{@link android.renderscript.RSTextureView} provides a means to display RenderScript graphics
+inside of a {@link android.view.View}, unlike {@link android.renderscript.RSSurfaceView}, which
+creates a separate window. This key difference allows you to do things such as move, transform, or
+animate an {@link android.renderscript.RSTextureView} as well as draw RenderScript graphics inside
+a view that lies within an activity layout.</p>
-<p>The {@link android.renderscript.Script#forEach forEach()} method allows you to call Renderscript
-compute scripts from the VM level and have them automatically delegated to available cores on the
-device. You do not use this method directly, but any compute Renderscript that you write will have a
-{@link android.renderscript.Script#forEach forEach()} method that you can call in the reflected
-Renderscript class. You can call the reflected {@link android.renderscript.Script#forEach forEach()}
-method by passing in an input {@link android.renderscript.Allocation} to process, an output {@link
-android.renderscript.Allocation} to write the result to, and a data structure if the Renderscript
-needs more information in addition to the {@link android.renderscript.Allocation}s to. Only one of
-the {@link android.renderscript.Allocation}s is necessary and the data structure is optional.</p>
+<p>The {@link android.renderscript.Script#forEach Script.forEach()} method allows you to call
+RenderScript compute scripts from the VM level and have them automatically delegated to available
+cores on the device. You do not use this method directly, but any compute RenderScript that you
+write will have a {@link android.renderscript.Script#forEach forEach()} method that you can call in
+the reflected RenderScript class. You can call the reflected {@link
+android.renderscript.Script#forEach forEach()} method by passing in an input {@link
+android.renderscript.Allocation} to process, an output {@link android.renderscript.Allocation} to
+write the result to, and a {@link android.renderscript.FieldPacker} data structure in case the
+RenderScript needs more information. Only one of the {@link android.renderscript.Allocation}s is
+necessary and the data structure is optional.</p>
@@ -802,118 +849,154 @@
<h3 id="A11y">Accessibility</h3>
-<p>Android 4.0 improves accessibility for users with disabilities with the Touch Exploration service
-and provides extended APIs for developers of new accessibility services.</p>
-
-<h4>Touch Exploration</h4>
-
-<p>Users with vision loss can now explore applications by touching areas of the screen and hearing
-voice descriptions of the content. The “Explore by Touch” feature works like a virtual cursor as the
-user drags a finger across the screen.</p>
-
-<p>You don’t have to use any new APIs to enhance touch exploration in your application, because the
-existing {@link android.R.attr#contentDescription android:contentDescription}
-attribute and {@link android.view.View#setContentDescription setContentDescription()} method is all
-you need. Because touch exploration works like a virtual cursor, it allows screen readers to
-identify the descriptive the same way that screen readers can when navigating with a d-pad or
-trackball. So this is a reminder to provide descriptive text for the views in your application,
-especially for {@link android.widget.ImageButton}, {@link android.widget.EditText}, {@link
-android.widget.CheckBox} and other interactive widgets that might not contain text information by
-default.</p>
-
-<h4>Accessibility for Custom Views</h4>
-
-<p>Developers of custom Views, ViewGroups and widgets can make their components compatible with
-accessibility services like Touch Exploration. For custom views and widgets targeted for Android 4.0
-and later, developers should implement the following accessibility API methods in their classes:</p>
-<ul>
-<li>These two methods initiate the accessibility event generation process and must be implemented by
-your custom view class.
- <ul>
- <li>{@link android.view.View#sendAccessibilityEvent(int) sendAccessibilityEvent()} If
-accessibility
- is
- not enabled, this call has no effect.</li>
- <li>{@link
- android.view.View#sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent)
- sendAccessibilityEventUnchecked()} - This method executes regardless of whether accessibility is
- enabled or not.</li>
- </ul>
-</li>
-
-<li>These methods are called in order by the sendAccessibilityEvent methods listed above to collect
-accessibility information about the view, and its child views.
- <ul>
- <li>{@link
- android.view.View#onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent)
- onInitializeAccessibilityEvent()} - This method collects information about the view. If your
- application has specific requirements for accessibility, you should extend this method to add that
- information to the {@link android.view.accessibility.AccessibilityEvent}.</li>
-
- <li>{@link
-
-android.view.View#dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent)
- dispatchPopulateAccessibilityEvent()} is called by the framework to request text information for
- this view and its children. This method calls {@link
- android.view.View#onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent)
- onPopulateAccessibilityEvent()} first on the current view and then on its children.</li>
- </ul>
-</li>
-
-<li>The {@link
-android.view.View#onInitializeAccessibilityNodeInfo onInitializeAccessibilityNodeInfo()} method
-provides additional context information for
-accessibility services. You should implement or override this method to provide improved information
-for accessibility services investigating your custom view.</li>
-
-<li>Custom {@link android.view.ViewGroup} classes should also implement {@link
-android.view.ViewGroup#onRequestSendAccessibilityEvent(android.view.View,
-android.view.accessibility.AccessibilityEvent) onRequestSendAccessibilityEvent()} </li>
-</ul>
-
-<p>Developers who want to maintain compatibility with Android versions prior to 4.0, while still
-providing support for new the accessibility APIs, can use the {@link
-android.view.View#setAccessibilityDelegate(android.view.View.AccessibilityDelegate)
-setAccessibilityDelegate()} method to provide an {@link android.view.View.AccessibilityDelegate}
-containing implementations of the new accessibility API methods while maintaining compatibility with
-prior releases.</p>
+<p>Android 4.0 improves accessibility for sight-impaired users with new explore-by-touch mode
+and extended APIs that allow you to provide more information about view content or
+develop advanced accessibility services.</p>
+<h4>Explore-by-touch mode</h4>
-<h4>Accessibility Service APIs</h4>
+<p>Users with vision loss can now explore the screen by touching and dragging a finger across the
+screen to hear voice descriptions of the content. Because the explore-by-touch mode works like a
+virtual cursor, it allows screen readers to identify the descriptive text the same way that screen
+readers can when the user navigates with a d-pad or trackball—by reading information provided
+by {@link android.R.attr#contentDescription android:contentDescription} and {@link
+android.view.View#setContentDescription setContentDescription()} upon a simulated "hover" event. So,
+consider this is a reminder that you should provide descriptive text for the views in your
+application, especially for {@link android.widget.ImageButton}, {@link android.widget.EditText},
+{@link android.widget.ImageView} and other widgets that might not naturally contain descriptive
+text.</p>
-<p>Accessibility events have been significantly improved to provide better information for
-accessibility services. In particular, events are generated based on view composition, providing
-better context information and allowing accessibility service developers to traverse view
-hierarchies to get additional view information and deal with special cases.</p>
-<p>To access additional content information and traverse view hierarchies, accessibility service
-application developers should use the following procedure.</p>
+<h4>Accessibility for views</h4>
+
+<p>To enhance the information available to accessibility services such as screen readers, you can
+implement new callback methods for accessibility events in your custom {@link
+android.view.View} components.</p>
+
+<p>It's important to first note that the behavior of the {@link
+android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} method has changed in Android
+4.0. As with previous version of Android, when the user enables accessibility services on the device
+and an input event such as a click or hover occurs, the respective view is notified with a call to
+{@link android.view.View#sendAccessibilityEvent sendAccessibilityEvent()}. Previously, the
+implementation of {@link android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} would
+initialize an {@link android.view.accessibility.AccessibilityEvent} and send it to {@link
+android.view.accessibility.AccessibilityManager}. The new behavior involves some additional callback
+methods that allow the view and its parents to add more contextual information to the event:
<ol>
-<li>Upon receiving an {@link android.view.accessibility.AccessibilityEvent} from an application,
-call
-the {@link android.view.accessibility.AccessibilityEvent#getRecord(int)
-AccessibilityEvent.getRecord()} to retrieve new accessibility information about the state of the
-view.</li>
-<li>From the {@link android.view.accessibility.AccessibilityRecord}, call {@link
-android.view.accessibility.AccessibilityRecord#getSource() getSource()} to retrieve a {@link
-android.view.accessibility.AccessibilityNodeInfo} object.</li>
-<li>With the {@link android.view.accessibility.AccessibilityNodeInfo}, call {@link
-android.view.accessibility.AccessibilityNodeInfo#getParent getParent()} or {@link
-android.view.accessibility.AccessibilityNodeInfo#getChild getChild()} to traverse the view
-hierarchy and get additional context information.</li>
+ <li>When invoked, the {@link
+android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} and {@link
+android.view.View#sendAccessibilityEventUnchecked sendAccessibilityEventUnchecked()} methods defer
+to {@link android.view.View#onInitializeAccessibilityEvent onInitializeAccessibilityEvent()}.
+ <p>Custom implementations of {@link android.view.View} might want to implement {@link
+android.view.View#onInitializeAccessibilityEvent onInitializeAccessibilityEvent()} to
+attach additional accessibility information to the {@link
+android.view.accessibility.AccessibilityEvent}, but should also call the super implementation to
+provide default information such as the standard content description, item index, and more.
+However, you should not add additional text content in this callback—that happens
+next.</p></li>
+ <li>Once initialized, if the event is one of several types that should be populated with text
+information, the view then receives a call to {@link
+android.view.View#dispatchPopulateAccessibilityEvent dispatchPopulateAccessibilityEvent()}, which
+defers to the {@link android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()}
+callback.
+ <p>Custom implementations of {@link android.view.View} should usually implement {@link
+android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()} to add additional
+text content to the {@link android.view.accessibility.AccessibilityEvent} if the {@link
+android.R.attr#contentDescription android:contentDescription} text is missing or
+insufficient. To add more text description to the
+{@link android.view.accessibility.AccessibilityEvent}, call {@link
+android.view.accessibility.AccessibilityEvent#getText()}.{@link java.util.List#add add()}.</p>
+</li>
+ <li>At this point, the {@link android.view.View} passes the event up the view hierarchy by calling
+{@link android.view.ViewGroup#requestSendAccessibilityEvent requestSendAccessibilityEvent()} on the
+parent view. Each parent view then has the chance to augment the accessibility information by
+adding an {@link android.view.accessibility.AccessibilityRecord}, until it
+ultimately reaches the root view, which sends the event to the {@link
+android.view.accessibility.AccessibilityManager} with {@link
+android.view.accessibility.AccessibilityManager#sendAccessibilityEvent
+sendAccessibilityEvent()}.</li>
</ol>
-<p>In order to retrieve {@link android.view.accessibility.AccessibilityNodeInfo} information, your
-application must request permission to retrieve application window content through a manifest
-declaration that includes a new, separate xml configuration file, which supercedes {@link
-android.accessibilityservice.AccessibilityServiceInfo}. For more information, see {@link
+<p>In addition to the new methods above, which are useful when extending the {@link
+android.view.View} class, you can also intercept these event callbacks on any {@link
+android.view.View} by extending {@link
+android.view.View.AccessibilityDelegate AccessibilityDelegate} and setting it on the view with
+{@link android.view.View#setAccessibilityDelegate setAccessibilityDelegate()}.
+When you do, each accessibility method in the view defers the call to the corresponding method in
+the delegate. For example, when the view receives a call to {@link
+android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()}, it passes it to the
+same method in the {@link android.view.View.AccessibilityDelegate}. Any methods not handled by
+the delegate are given right back to the view for default behavior. This allows you to override only
+the methods necessary for any given view without extending the {@link android.view.View} class.</p>
+
+
+<p>If you want to maintain compatibility with Android versions prior to 4.0, while also supporting
+the new the accessibility APIs, you can do so with the latest version of the <em>v4 support
+library</em> (in <a href="{@docRoot}sdk/compatibility-library.html">Compatibility Package, r4</a>)
+using a set of utility classes that provide the new accessibility APIs in a backward-compatible
+design.</p>
+
+
+
+<h4>Accessibility services</h4>
+
+<p>If you're developing an accessibility service, the information about various accessibility events
+has been significantly expanded to enable more advanced accessibility feedback for users. In
+particular, events are generated based on view composition, providing better context information and
+allowing accessibility services to traverse view hierarchies to get additional view information and
+deal with special cases.</p>
+
+<p>If you're developing an accessibility service (such as a screen reader), you can access
+additional content information and traverse view hierarchies with the following procedure:</p>
+<ol>
+<li>Upon receiving an {@link android.view.accessibility.AccessibilityEvent} from an application,
+call the {@link android.view.accessibility.AccessibilityEvent#getRecord(int)
+AccessibilityEvent.getRecord()} to retrieve a specific {@link
+android.view.accessibility.AccessibilityRecord} (there may be several records attached to the
+event).</li>
+
+<li>From either {@link android.view.accessibility.AccessibilityEvent} or an individual {@link
+android.view.accessibility.AccessibilityRecord}, you can call {@link
+android.view.accessibility.AccessibilityRecord#getSource() getSource()} to retrieve a {@link
+android.view.accessibility.AccessibilityNodeInfo} object.
+ <p>An {@link android.view.accessibility.AccessibilityNodeInfo} represents a single node
+of the window content in a format that allows you to query accessibility information about that
+node. The {@link android.view.accessibility.AccessibilityNodeInfo} object returned from {@link
+android.view.accessibility.AccessibilityEvent} describes the event source, whereas the source from
+an {@link android.view.accessibility.AccessibilityRecord} describes the predecessor of the event
+source.</p></li>
+
+<li>With the {@link android.view.accessibility.AccessibilityNodeInfo}, you can query information
+about it, call {@link
+android.view.accessibility.AccessibilityNodeInfo#getParent getParent()} or {@link
+android.view.accessibility.AccessibilityNodeInfo#getChild getChild()} to traverse the view
+hierarchy, and even add child views to the node.</li>
+</ol>
+
+<p>In order for your application to publish itself to the system as an accessibility service, it
+must declare an XML configuration file that corresponds to {@link
+android.accessibilityservice.AccessibilityServiceInfo}. For more information about creating an
+accessibility service, see {@link
android.accessibilityservice.AccessibilityService} and {@link
android.accessibilityservice.AccessibilityService#SERVICE_META_DATA
-AccessibilityService.SERVICE_META_DATA}.</p>
+SERVICE_META_DATA} for information about the XML configuration.</p>
+<h4>Other accessibility APIs</h4>
+<p>If you're interested in the device's accessibility state, the {@link
+android.view.accessibility.AccessibilityManager} has some new APIs such as:</p>
+<ul>
+ <li>{@link android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener}
+is an interface that allows you to receive a callback whenever accessibility is enabled or
+disabled.</li>
+ <li>{@link android.view.accessibility.AccessibilityManager#getEnabledAccessibilityServiceList
+ getEnabledAccessibilityServiceList()} provides information about which accessibility services
+ are currently enabled.</li>
+ <li>{@link android.view.accessibility.AccessibilityManager#isTouchExplorationEnabled()} tells
+ you whether the explore-by-touch mode is enabled.</li>
+</ul>
@@ -921,13 +1004,12 @@
<p>Android 4.0 expands the capabilities for enterprise application with the following features.</p>
-<h4>VPN Services</h4>
+<h4>VPN services</h4>
<p>The new {@link android.net.VpnService} allows applications to build their own VPN (Virtual
-Private
-Network), running as a {@link android.app.Service}. A VPN service creates an interface for a virtual
-network with its own address and routing rules and performs all reading and writing with a file
-descriptor.</p>
+Private Network), running as a {@link android.app.Service}. A VPN service creates an interface for a
+virtual network with its own address and routing rules and performs all reading and writing with a
+file descriptor.</p>
<p>To create a VPN service, use {@link android.net.VpnService.Builder}, which allows you to specify
the network address, DNS server, network route, and more. When complete, you can establish the
@@ -941,7 +1023,7 @@
users must manually enable it in the system settings.</p>
-<h4>Device Restrictions</h4>
+<h4>Device restrictions</h4>
<p>Applications that manage the device restrictions can now disable the camera using {@link
android.app.admin.DevicePolicyManager#setCameraDisabled setCameraDisabled()} and the {@link
@@ -949,54 +1031,46 @@
<disable-camera />} element in the policy configuration file).</p>
-<h4>Certificate Management</h4>
+<h4>Certificate management</h4>
<p>The new {@link android.security.KeyChain} class provides APIs that allow you to import and access
-certificates and key stores in credential storage. See the {@link android.security.KeyChain}
+certificates in the system key store. Certificates streamline the installation of both client
+certificates (to validate the identity of the user) and certificate authority certificates (to
+verify server identity). Applications such as web browsers or email clients can access the installed
+certificates to authenticate users to servers. See the {@link android.security.KeyChain}
documentation for more information.</p>
-<h3 id="Voicemail">Voicemail</h3>
-
-<p>A new voicemail APIs allows applications to add voicemails to the system. Because the APIs
-currently
-do not allow third party apps to read all the voicemails from the system, the only third-party apps
-that should use the voicemail APIs are those that have voicemail to deliver to the user. For
-instance, it’s possible that a users have multiple voicemail sources, such as one provided by their
-phone’s service provider and others from VoIP or other alternative services. These kinds of apps can
-use the APIs to add voicemail to the system. The built-in Phone application can then present all
-voicemails to the user with a single list. Although the system’s Phone application is the only
-application that can read all the voicemails, each application that provides voicemails can read
-those that it has added to the system.</p>
-
-<p>The {@link android.provider.VoicemailContract} class defines the content provider for the
-voicemail
-APIs. The subclasses {@link android.provider.VoicemailContract.Voicemails} and {@link
-android.provider.VoicemailContract.Status} provide tables in which the voicemail providers can
-insert voicemail data for storage on the device. For an example of a voicemail provider app, see the
-<a href=”{@docRoot}resources/samples/VoicemailProviderDemo/index.html”>Voicemail Provider
-Demo</a>.</p>
+<h3 id="Sensors">Device Sensors</h3>
-<h3 id="SpellChecker">Spell Checker Services</h3>
+<p>Two new sensor types have been added in Android 4.0:</p>
-<p>The new spell checker framework allows apps to create spell checkers in a manner similar to the
-input method framework. To create a new spell checker, you must override the {@link
-android.service.textservice.SpellCheckerService.Session} class to provide spelling suggestions based
-on text provided by the interface callback methods, returning suggestions as a {@link
-android.view.textservice.SuggestionsInfo} object. </p>
+<ul>
+ <li>{@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE}: A temperature sensor that provides
+the ambient (room) temperature in degrees Celsius.</li>
+ <li>{@link android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY}: A humidity sensor that provides the
+relative ambient (room) humidity as a percentage.</li>
+</ul>
-<p>Applications with a spell checker service must declare the {@link
-android.Manifest.permission#BIND_TEXT_SERVICE} permission as required by the service, such that
-other services must have this permission in order for them to bind with the spell checker service.
-The service must also declare an intent filter with <action
-android:name="android.service.textservice.SpellCheckerService" /> as the intent’s action and should
-include a {@code <meta-data>} element that declares configuration information for the spell
-checker. </p>
+<p>If a device has both {@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} and {@link
+android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY} sensors, you can use them to calculate the dew point
+and the absolute humidity.</p>
+
+<p>The previous temperature sensor, {@link android.hardware.Sensor#TYPE_TEMPERATURE}, has been
+deprecated. You should use the {@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} sensor
+instead.</p>
+
+<p>Additionally, Android’s three synthetic sensors have been improved so they now have lower latency
+and smoother output. These sensors include the gravity sensor ({@link
+android.hardware.Sensor#TYPE_GRAVITY}), rotation vector sensor ({@link
+android.hardware.Sensor#TYPE_ROTATION_VECTOR}), and linear acceleration sensor ({@link
+android.hardware.Sensor#TYPE_LINEAR_ACCELERATION}). The improved sensors rely on the gyroscope
+sensor to improve their output, so the sensors appear only on devices that have a gyroscope.</p>
@@ -1004,22 +1078,20 @@
<h3 id="TTS">Text-to-speech Engines</h3>
-<p>Android’s text-to-speech (TTS) APIs have been greatly extended to allow applications to more
-easily
-implement custom TTS engines, while applications that want to use a TTS engine have a couple new
-APIs for selecting the engine.</p>
+<p>Android’s text-to-speech (TTS) APIs have been significantly extended to allow applications to
+more easily implement custom TTS engines, while applications that want to use a TTS engine have a
+couple new APIs for selecting an engine.</p>
<h4>Using text-to-speech engines</h4>
<p>In previous versions of Android, you could use the {@link android.speech.tts.TextToSpeech} class
-to
-perform text-to-speech (TTS) operations using the TTS engine provided by the system or set a custom
-engine using {@link android.speech.tts.TextToSpeech#setEngineByPackageName
-setEngineByPackageName()}.
-In Android 4.0, the {@link android.speech.tts.TextToSpeech#setEngineByPackageName
-setEngineByPackageName()} method has been deprecated and you can now specify the engine to use with
-a new {@link android.speech.tts.TextToSpeech} that accepts the package name of a TTS engine.</p>
+to perform text-to-speech (TTS) operations using the TTS engine provided by the system or set a
+custom engine using {@link android.speech.tts.TextToSpeech#setEngineByPackageName
+setEngineByPackageName()}. In Android 4.0, the {@link
+android.speech.tts.TextToSpeech#setEngineByPackageName setEngineByPackageName()} method has been
+deprecated and you can now specify the engine to use with a new {@link
+android.speech.tts.TextToSpeech} constructor that accepts the package name of a TTS engine.</p>
<p>You can also query the available TTS engines with {@link
android.speech.tts.TextToSpeech#getEngines()}. This method returns a list of {@link
@@ -1029,39 +1101,59 @@
<h4>Building text-to-speech engines</h4>
-<p>Previously, custom engines required that the engine be built using native code, based on a TTS
-engine header file. In Android 4.0, there is a framework API for building TTS engines. </p>
+<p>Previously, custom engines required that the engine be built using an undocumented native header
+file. In Android 4.0, there is a complete set of framework APIs for building TTS engines. </p>
<p>The basic setup requires an implementation of {@link android.speech.tts.TextToSpeechService} that
responds to the {@link android.speech.tts.TextToSpeech.Engine#INTENT_ACTION_TTS_SERVICE} intent. The
primary work for a TTS engine happens during the {@link
-android.speech.tts.TextToSpeechService#onSynthesizeText onSynthesizeText()} callback in the {@link
-android.speech.tts.TextToSpeechService}. The system delivers this method two objects:</p>
+android.speech.tts.TextToSpeechService#onSynthesizeText onSynthesizeText()} callback in a service
+that extends {@link android.speech.tts.TextToSpeechService}. The system delivers this method two
+objects:</p>
<ul>
<li>{@link android.speech.tts.SynthesisRequest}: This contains various data including the text to
synthesize, the locale, the speech rate, and voice pitch.</li>
<li>{@link android.speech.tts.SynthesisCallback}: This is the interface by which your TTS engine
-delivers the resulting speech data as streaming audio, by calling {@link
+delivers the resulting speech data as streaming audio. First the engine must call {@link
android.speech.tts.SynthesisCallback#start start()} to indicate that the engine is ready to deliver
-the
-audio, then call {@link android.speech.tts.SynthesisCallback#audioAvailable audioAvailable()},
-passing it the audio
-data in a byte buffer. Once your engine has passed all audio through the buffer, call {@link
-android.speech.tts.SynthesisCallback#done()}.</li>
+the audio, then call {@link android.speech.tts.SynthesisCallback#audioAvailable audioAvailable()},
+passing it the audio data in a byte buffer. Once your engine has passed all audio through the
+buffer, call {@link android.speech.tts.SynthesisCallback#done()}.</li>
</ul>
-<p>Now that the framework supports a true API for creating TTS engines, support for the previous
-technique using native code has been removed. Watch for a blog post about the compatibility layer
-that you can use to convert TTS engines built using the previous technique to the new framework.</p>
+<p>Now that the framework supports a true API for creating TTS engines, support for the native code
+implementation has been removed. Look for a blog post about a compatibility layer
+that you can use to convert your old TTS engines to the new framework.</p>
<p>For an example TTS engine using the new APIs, see the <a
-href=”{@docRoot}resources/samples/TtsEngine/index.html”>Text To Speech Engine</a> sample app.</p>
+href="{@docRoot}resources/samples/TtsEngine/index.html">Text To Speech Engine</a> sample app.</p>
+<h3 id="SpellChecker">Spell Checker Services</h3>
+
+<p>A new spell checker framework allows apps to create spell checkers in a manner similar to the
+input method framework. To create a new spell checker, you must implement a service that extends
+{@link android.service.textservice.SpellCheckerService} and extend the {@link
+android.service.textservice.SpellCheckerService.Session} class to provide spelling suggestions based
+on text provided by interface callback methods. In the {@link
+android.service.textservice.SpellCheckerService.Session} callback methods, you must return the
+spelling suggestions as {@link android.view.textservice.SuggestionsInfo} objects. </p>
+
+<p>Applications with a spell checker service must declare the {@link
+android.Manifest.permission#BIND_TEXT_SERVICE} permission as required by the service, such that
+other services must have this permission in order for them to bind with the spell checker service.
+The service must also declare an intent filter with {@code <action
+android:name="android.service.textservice.SpellCheckerService" />} as the intent’s action and should
+include a {@code <meta-data>} element that declares configuration information for the spell
+checker. </p>
+
+
+
+
@@ -1071,34 +1163,36 @@
<p>The {@link android.app.ActionBar} has been updated to support several new behaviors. Most
importantly, the system gracefully manages the action bar’s size and configuration when running on
-smaller screens in order to provide an optimal user experience. For example, when the screen is
-narrow (such as when a handset is in portrait orientation), the action bar’s navigation tabs appear
-in a “stacked bar,” which appears directly below the main action bar. You can also opt-in to a
-“split action bar,” which will place all action items in a separate bar at the bottom of the screen
-when the screen is narrow.</p>
+smaller screens in order to provide an optimal user experience on all screen sizes. For example,
+when the screen is narrow (such as when a handset is in portrait orientation), the action bar’s
+navigation tabs appear in a “stacked bar," which appears directly below the main action bar. You can
+also opt-in to a “split action bar," which places all action items in a separate bar at the bottom
+of the screen when the screen is narrow.</p>
-<h4>Split Action Bar</h4>
+<h4>Split action bar</h4>
-<p>If your action bar includes several action items, not all of them will fit into the action bar
-when on a narrow screen, so the system will place them into the overflow menu. However, Android 4.0
-allows you to enable “split action bar” so that more action items can appear on the screen in a
+<p>If your action bar includes several action items, not all of them will fit into the action bar on
+a narrow screen, so the system will place more of them into the overflow menu. However, Android 4.0
+allows you to enable “split action bar" so that more action items can appear on the screen in a
separate bar at the bottom of the screen. To enable split action bar, add {@link
-android.R.attr#uiOptions android:uiOptions} with {@code ”splitActionBarWhenNarrow”} to either your
-{@code <application>} tag or individual {@code <activity>} tags in your manifest file.
-When enabled, the system will enable the additional bar for action items when the screen is narrow
-and add all action items to the new bar (no action items will appear in the primary action bar).</p>
+android.R.attr#uiOptions android:uiOptions} with {@code "splitActionBarWhenNarrow"} to either your
+<a href="guide/topics/manifest/application-element.html">{@code <application>}</a> tag or
+individual <a href="guide/topics/manifest/activity-element.html">{@code <activity>}</a> tags
+in your manifest file. When enabled, the system will add an additional bar at the bottom of the
+screen for all action items when the screen is narrow (no action items will appear in the primary
+action bar).</p>
<p>If you want to use the navigation tabs provided by the {@link android.app.ActionBar.Tab} APIs,
-but
-don’t want the stacked bar—you want only the tabs to appear, then enable the split action bar
-as described above and also call {@link android.app.ActionBar#setDisplayShowHomeEnabled
-setDisplayShowHomeEnabled(false)} to disable the application icon in the action bar. With nothing
-left in the main action bar, it disappears—all that’s left are the navigation tabs at the top
-and the action items at the bottom of the screen.</p>
+but don’t need the main action bar on top (you want only the tabs to appear at the top), then enable
+the split action bar as described above and also call {@link
+android.app.ActionBar#setDisplayShowHomeEnabled setDisplayShowHomeEnabled(false)} to disable the
+application icon in the action bar. With nothing left in the main action bar, it
+disappears—all that’s left are the navigation tabs at the top and the action items at the
+bottom of the screen.</p>
-<h4>Action Bar Styles</h4>
+<h4>Action bar styles</h4>
<p>If you want to apply custom styling to the action bar, you can use new style properties {@link
android.R.attr#backgroundStacked} and {@link android.R.attr#backgroundSplit} to apply a background
@@ -1108,31 +1202,38 @@
setSplitBackgroundDrawable()}.</p>
-<h4>Action Provider</h4>
+<h4>Action provider</h4>
-<p>The new {@link android.view.ActionProvider} class facilitates user actions to which several
-different applications may respond. For example, a “share” action in your application might invoke
-several different apps that can handle the {@link android.content.Intent#ACTION_SEND} intent and the
-associated data. In this case, you can use the {@link android.widget.ShareActionProvider} (an
-extension of {@link android.view.ActionProvider}) in your action bar, instead of a traditional menu
-item that invokes the intent. The {@link android.widget.ShareActionProvider} populates a drop-down
-menu with all the available apps that can handle the intent.</p>
+<p>The new {@link android.view.ActionProvider} class allows you to create a specialized handler for
+action items. An action provider can define an action view, a default action behavior, and a submenu
+for each action item to which it is associated. When you want to create an action item that has
+dynamic behaviors (such as a variable action view, default action, or submenu), extending {@link
+android.view.ActionProvider} is a good solution in order to create a reusable component, rather than
+handling the various action item transformations in your fragment or activity.</p>
+
+<p>For example, the {@link android.widget.ShareActionProvider} is an extension of {@link
+android.view.ActionProvider} that facilitates a “share" action from the action bar. Instead of using
+traditional action item that invokes the {@link android.content.Intent#ACTION_SEND} intent, you can
+use this action provider to present an action view with a drop-down list of applications that handle
+the {@link android.content.Intent#ACTION_SEND} intent. When the user selects an application to use
+for the action, {@link android.widget.ShareActionProvider} remembers that selection and provides it
+in the action view for faster access to sharing with that app.</p>
<p>To declare an action provider for an action item, include the {@code android:actionProviderClass}
-attribute in the {@code <item>} element for your activity’s options menu, with the class name
-of the action provider as the attribute value. For example:</p>
+attribute in the <a href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code
+<item>}</a> element for your activity’s options menu, with the class name of the action
+provider as the value. For example:</p>
<pre>
<item android:id="@+id/menu_share"
android:title="Share"
- android:icon="@drawable/ic_share"
android:showAsAction="ifRoom"
android:actionProviderClass="android.widget.ShareActionProvider" />
</pre>
<p>In your activity’s {@link android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()}
-callback
-method, retrieve an instance of the action provider from the menu item and set the intent:</p>
+callback method, retrieve an instance of the action provider from the menu item and set the
+intent:</p>
<pre>
public boolean onCreateOptionsMenu(Menu menu) {
@@ -1147,21 +1248,23 @@
</pre>
<p>For an example using the {@link android.widget.ShareActionProvider}, see the <a
-href=”{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarActionProviderActivity.html”>ActionBarActionProviderActivity</a>
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/
+ActionBarActionProviderActivity.html">ActionBarActionProviderActivity</a>
class in ApiDemos.</p>
-<h4>Collapsible Action Views</h4>
+<h4>Collapsible action views</h4>
-<p>Menu items that appear as action items can now toggle between their action view state and
+<p>Action items that provide an action view can now toggle between their action view state and
traditional action item state. Previously only the {@link android.widget.SearchView} supported
collapsing when used as an action view, but now you can add an action view for any action item and
switch between the expanded state (action view is visible) and collapsed state (action item is
visible).</p>
<p>To declare that an action item that contains an action view be collapsible, include the {@code
-“collapseActionView”} flag in the {@code android:showAsAction} attribute for the {@code
-<item>} element in the menu’s XML file.</p>
+“collapseActionView"} flag in the {@code android:showAsAction} attribute for the <a
+href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code
+<item>}</a> element in the menu’s XML file.</p>
<p>To receive callbacks when an action view switches between expanded and collapsed, register an
instance of {@link android.view.MenuItem.OnActionExpandListener} with the respective {@link
@@ -1178,20 +1281,20 @@
collapsed.</p>
-<h4>Other APIs for Action Bar</h4>
+<h4>Other APIs for action bar</h4>
<ul>
-<li>{@link android.app.ActionBar#setHomeButtonEnabled setHomeButtonEnabled()} allows you to disable
-the
-default behavior in which the application icon/logo behaves as a button (pass “false” to disable it
-as a button).</li>
+<li>{@link android.app.ActionBar#setHomeButtonEnabled setHomeButtonEnabled()} allows you to specify
+whether the icon/logo behaves as a button to navigate home or “up" (pass “true" to make it behave as
+a button).</li>
+
<li>{@link android.app.ActionBar#setIcon setIcon()} and {@link android.app.ActionBar#setLogo
-setLogo()}
-to define the action bar icon or logo at runtime.</li>
+setLogo()} allow you to define the action bar icon or logo at runtime.</li>
+
<li>{@link android.app.Fragment#setMenuVisibility Fragment.setMenuVisibility()} allows you to enable
-or
-disable the visibility of the options menu items declared by the fragment. This is useful if the
+or disable the visibility of the options menu items declared by the fragment. This is useful if the
fragment has been added to the activity, but is not visible, so the menu items should be
hidden.</li>
+
<li>{@link android.app.FragmentManager#invalidateOptionsMenu
FragmentManager.invalidateOptionsMenu()}
allows you to invalidate the activity options menu during various states of the fragment lifecycle
@@ -1209,6 +1312,7 @@
<p>Android 4.0 introduces a variety of new views and other UI components.</p>
+
<h4>System UI</h4>
<p>Since the early days of Android, the system has managed a UI component known as the <em>status
@@ -1219,8 +1323,8 @@
Android 4.0, the system provides a new type of system UI called the <em>navigation bar</em>. The
navigation bar shares some qualities with the system bar, because it provides navigation controls
for devices that don’t have hardware counterparts for navigating the system, but the navigation
-controls is all that it provides (a device with the navigation bar, thus, also includes the status
-bar at the top of the screen).</p>
+controls is all that the navigation bar offers (a device with the navigation bar, thus, also
+includes the status bar at the top of the screen).</p>
<p>To this day, you can hide the status bar on handsets using the {@link
android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN} flag. In Android 4.0, the APIs that control
@@ -1228,43 +1332,41 @@
and navigation bar:</p>
<ul>
<li>The {@link android.view.View#SYSTEM_UI_FLAG_LOW_PROFILE} flag replaces View.STATUS_BAR_HIDDEN
-flag
-(now deprecated). When set, this flag enables “low profile” mode for the system bar or navigation
-bar. Navigation buttons dim and other elements in the system bar also hide.</li>
+flag. When set, this flag enables “low profile" mode for the system bar or
+navigation bar. Navigation buttons dim and other elements in the system bar also hide.</li>
+
<li>The {@link android.view.View#SYSTEM_UI_FLAG_VISIBLE} flag replaces the {@code
-STATUS_BAR_VISIBLE}
-flag to request the system bar or navigation bar be visible.</li>
+STATUS_BAR_VISIBLE} flag to request the system bar or navigation bar be visible.</li>
+
<li>The {@link android.view.View#SYSTEM_UI_FLAG_HIDE_NAVIGATION} is a new flag that requests that
-the
-navigation bar hide completely. Take note that this works only for the <em>navigation bar</em> used
-by some handsets (it does <strong>not</strong> hide the system bar on tablets). The navigation bar
-returns as soon as the system receives user input. As such, this mode is generally used for video
-playback or other cases in which user input is not required.</li>
+the navigation bar hide completely. Take note that this works only for the <em>navigation bar</em>
+used by some handsets (it does <strong>not</strong> hide the system bar on tablets). The navigation
+bar returns as soon as the system receives user input. As such, this mode is generally used for
+video playback or other cases in which the whole screen is needed but user input is not
+required.</li>
</ul>
-<p>You can set each of these flags for the system bar by calling {@link
-android.view.View#setSystemUiVisibility setSystemUiVisibility()} on any view in your activity
-window. The window manager will combine (OR-together) all flags from all views in your window and
+<p>You can set each of these flags for the system bar and navigation bar by calling {@link
+android.view.View#setSystemUiVisibility setSystemUiVisibility()} on any view in your activity. The
+window manager will combine (OR-together) all flags from all views in your window and
apply them to the system UI as long as your window has input focus. When your window loses input
focus (the user navigates away from your app, or a dialog appears), your flags cease to have effect.
Similarly, if you remove those views from the view hierarchy their flags no longer apply.</p>
<p>To synchronize other events in your activity with visibility changes to the system UI (for
-example,
-hide the action bar or other UI controls when the system UI hides), you can register a {@link
-android.view.View.OnSystemUiVisibilityChangeListener} to get a callback when the visibility
-changes.</p>
+example, hide the action bar or other UI controls when the system UI hides), you should register a
+{@link android.view.View.OnSystemUiVisibilityChangeListener} to be notified when the visibility
+of the system bar or navigation bar changes.</p>
<p>See the <a
-href=”{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html”>
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html">
OverscanActivity</a> class for a demonstration of different system UI options.</p>
<h4>GridLayout</h4>
<p>{@link android.widget.GridLayout} is a new view group that places child views in a rectangular
-grid.
-Unlike {@link android.widget.TableLayout}, {@link android.widget.GridLayout} relies on a flat
+grid. Unlike {@link android.widget.TableLayout}, {@link android.widget.GridLayout} relies on a flat
hierarchy and does not make use of intermediate views such as table rows for providing structure.
Instead, children specify which row(s) and column(s) they should occupy (cells can span multiple
rows and/or columns), and by default are laid out sequentially across the grid’s rows and columns.
@@ -1274,7 +1376,8 @@
on children.</p>
<p>See <a
-href=”{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/index.html”>ApiDemos</a>
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/index.html">ApiDemos</a
+>
for samples using {@link android.widget.GridLayout}.</p>
@@ -1282,11 +1385,10 @@
<h4>TextureView</h4>
<p>{@link android.view.TextureView} is a new view that allows you to display a content stream, such
-as
-a video or an OpenGL scene. Although similar to {@link android.view.SurfaceView}, {@link
+as a video or an OpenGL scene. Although similar to {@link android.view.SurfaceView}, {@link
android.view.TextureView} is unique in that it behaves like a regular view, rather than creating a
separate window, so you can treat it like any other {@link android.view.View} object. For example,
-you can apply transforms, animate it using {@link android.view.ViewPropertyAnimator}, or easily
+you can apply transforms, animate it using {@link android.view.ViewPropertyAnimator}, or
adjust its opacity with {@link android.view.View#setAlpha setAlpha()}.</p>
<p>Beware that {@link android.view.TextureView} works only within a hardware accelerated window.</p>
@@ -1294,38 +1396,36 @@
<p>For more information, see the {@link android.view.TextureView} documentation.</p>
-<h4>Switch Widget</h4>
+<h4>Switch widget</h4>
<p>The new {@link android.widget.Switch} widget is a two-state toggle that users can drag to one
-side
-or the other (or simply tap) to toggle an option between two states.</p>
+side or the other (or simply tap) to toggle an option between two states.</p>
-<p>You can declare a switch in your layout with the {@code <Switch>} element. You can use the
-{@code android:textOn} and {@code android:textOff} attributes to specify the text to appear on the
-switch when in the on and off setting. The {@code android:text} attribute also allows you to place a
-label alongside the switch.</p>
+<p>You can use the {@code android:textOn} and {@code android:textOff} attributes to specify the text
+to appear on the switch when in the on and off setting. The {@code android:text} attribute also
+allows you to place a label alongside the switch.</p>
<p>For a sample using switches, see the <a
-href=”{@docRoot}resources/samples/ApiDemos/res/layout/switches.html”>switches.xml</a> layout file
+href="{@docRoot}resources/samples/ApiDemos/res/layout/switches.html">switches.xml</a> layout file
and respective <a
-href=”{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html”>Switches
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html">Switches
</a> activity.</p>
-<h4>Popup Menus</h4>
+<h4>Popup menus</h4>
<p>Android 3.0 introduced {@link android.widget.PopupMenu} to create short contextual menus that pop
-up
-at an anchor point you specify (usually at the point of the item selected). Android 4.0 extends the
-{@link android.widget.PopupMenu} with a couple useful features:</p>
+up at an anchor point you specify (usually at the point of the item selected). Android 4.0 extends
+the {@link android.widget.PopupMenu} with a couple useful features:</p>
<ul>
<li>You can now easily inflate the contents of a popup menu from an XML <a
-href=”{@docRoot}guide/topics/resources/menu-resource.html”>menu resource</a> with {@link
+href="{@docRoot}guide/topics/resources/menu-resource.html">menu resource</a> with {@link
android.widget.PopupMenu#inflate inflate()}, passing it the menu resource ID.</li>
<li>You can also now create a {@link android.widget.PopupMenu.OnDismissListener} that receives a
callback when the menu is dismissed.</li>
</ul>
+
<h4>Preferences</h4>
<p>A new {@link android.preference.TwoStatePreference} abstract class serves as the basis for
@@ -1337,10 +1437,10 @@
android.preference.SwitchPreference} for the Wi-Fi and Bluetooth settings.</p>
-<h4>Hover Events</h4>
+<h4>Hover events</h4>
-<p>The {@link android.view.View} class now supports “hover” events to enable richer interactions
-through the use of pointer devices (such as a mouse or other device that drives an on-screen
+<p>The {@link android.view.View} class now supports “hover" events to enable richer interactions
+through the use of pointer devices (such as a mouse or other devices that drive an on-screen
cursor).</p>
<p>To receive hover events on a view, implement the {@link android.view.View.OnHoverListener} and
@@ -1360,21 +1460,19 @@
listener returns false, then the hover event will be dispatched to the parent view as usual.</p>
<p>If your application uses buttons or other widgets that change their appearance based on the
-current
-state, you can now use the {@code android:state_hovered} attribute in a <a
-href=”{@docRoot}guide/topics/resources/drawable-resource.html#StateList”>state list drawable</a> to
+current state, you can now use the {@code android:state_hovered} attribute in a <a
+href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">state list drawable</a> to
provide a different background drawable when a cursor hovers over the view.</p>
<p>For a demonstration of the new hover events, see the <a
-href=”{@docRoot}samples/ApiDemos/src/com/example/android/apis/view/Hover.html”>Hover</a> class in
+href="{@docRoot}samples/ApiDemos/src/com/example/android/apis/view/Hover.html">Hover</a> class in
ApiDemos.</p>
-<h4>Stylus and Mouse Button Input Events</h4>
+<h4>Stylus and mouse button events</h4>
<p>Android now provides APIs for receiving input from a stylus input device such as a digitizer
-tablet
-peripheral or a stylus-enabled touch screen.</p>
+tablet peripheral or a stylus-enabled touch screen.</p>
<p>Stylus input operates in a similar manner to touch or mouse input. When the stylus is in contact
with the digitizer, applications receive touch events just like they would when a finger is used to
@@ -1383,7 +1481,7 @@
are pressed.</p>
<p>Your application can distinguish between finger, mouse, stylus and eraser input by querying the
-“tool type” associated with each pointer in a {@link android.view.MotionEvent} using {@link
+“tool type" associated with each pointer in a {@link android.view.MotionEvent} using {@link
android.view.MotionEvent#getToolType getToolType()}. The currently defined tool types are: {@link
android.view.MotionEvent#TOOL_TYPE_UNKNOWN}, {@link android.view.MotionEvent#TOOL_TYPE_FINGER},
{@link android.view.MotionEvent#TOOL_TYPE_MOUSE}, {@link android.view.MotionEvent#TOOL_TYPE_STYLUS},
@@ -1391,26 +1489,24 @@
can choose to handle stylus input in different ways from finger or mouse input.</p>
<p>Your application can also query which mouse or stylus buttons are pressed by querying the “button
-state” of a {@link android.view.MotionEvent} using {@link android.view.MotionEvent#getButtonState
+state" of a {@link android.view.MotionEvent} using {@link android.view.MotionEvent#getButtonState
getButtonState()}. The currently defined button states are: {@link
-android.view.MotionEvent#BUTTON_PRIMARY}, {@link
-android.view.MotionEvent#BUTTON_SECONDARY}, {@link
-android.view.MotionEvent#BUTTON_TERTIARY}, {@link android.view.MotionEvent#BUTTON_BACK},
-and {@link android.view.MotionEvent#BUTTON_FORWARD}.
-For convenience, the back and forward mouse buttons are automatically mapped to the {@link
-android.view.KeyEvent#KEYCODE_BACK} and {@link android.view.KeyEvent#KEYCODE_FORWARD} keys. Your
-application can handle these keys to support mouse button based back and forward navigation.</p>
+android.view.MotionEvent#BUTTON_PRIMARY}, {@link android.view.MotionEvent#BUTTON_SECONDARY}, {@link
+android.view.MotionEvent#BUTTON_TERTIARY}, {@link android.view.MotionEvent#BUTTON_BACK}, and {@link
+android.view.MotionEvent#BUTTON_FORWARD}. For convenience, the back and forward mouse buttons are
+automatically mapped to the {@link android.view.KeyEvent#KEYCODE_BACK} and {@link
+android.view.KeyEvent#KEYCODE_FORWARD} keys. Your application can handle these keys to support
+mouse button based back and forward navigation.</p>
<p>In addition to precisely measuring the position and pressure of a contact, some stylus input
-devices
-also report the distance between the stylus tip and the digitizer, the stylus tilt angle, and the
-stylus orientation angle. Your application can query this information using {@link
+devices also report the distance between the stylus tip and the digitizer, the stylus tilt angle,
+and the stylus orientation angle. Your application can query this information using {@link
android.view.MotionEvent#getAxisValue getAxisValue()} with the axis codes {@link
android.view.MotionEvent#AXIS_DISTANCE}, {@link android.view.MotionEvent#AXIS_TILT}, and {@link
android.view.MotionEvent#AXIS_ORIENTATION}.</p>
<p>For a demonstration of tool types, button states and the new axis codes, see the <a
-href=”{@docRoot}samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html”>TouchPaint
+href="{@docRoot}samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html">TouchPaint
</a> class in ApiDemos.</p>
@@ -1468,40 +1564,42 @@
application has set either <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> or
<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> to
-{@code “14”} or higher. Hardware acceleration generally results in smoother animations, smoother
+{@code “14"} or higher. Hardware acceleration generally results in smoother animations, smoother
scrolling, and overall better performance and response to user interaction.</p>
<p>If necessary, you can manually disable hardware acceleration with the <a
-href=”{@docRoot}guide/topics/manifest/activity-element.html#hwaccel”>{@code hardwareAccelerated}</a>
+href="{@docRoot}guide/topics/manifest/activity-element.html#hwaccel">{@code hardwareAccelerated}</a>
attribute for individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
<activity>}</a> elements or the <a
href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element. You can alternatively disable hardware acceleration for individual views by calling {@link
android.view.View#setLayerType setLayerType(LAYER_TYPE_SOFTWARE)}.</p>
+<p>For more information about hardware acceleration, including a list of unsupported drawing
+operations, see the <a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware
+Acceleration</a> document.</p>
+
+
<h3 id="Jni">JNI Changes</h3>
-<p>In previous versions of Android, JNI local references weren’t indirect handles; we used direct
-pointers. This didn’t seem like a problem as long as we didn’t have a garbage collector that moves
-objects, but it was because it meant that it was possible to write buggy code that still seemed to
-work. In Android 4.0, we’ve moved to using indirect references so we can detect these bugs before we
-need third-party native code to be correct.</p>
+<p>In previous versions of Android, JNI local references weren’t indirect handles; Android used
+direct pointers. This wasn't a problem as long as the garbage collector didn't move objects, but it
+seemed to work because it made it possible to write buggy code. In Android 4.0, the system now uses
+indirect references in order to detect these bugs.</p>
-<p>The ins and outs of JNI local references are described in “Local and Global References” in
-<a href="{@docRoot}guide/practices/design/jni.html">JNI Tips</a>. In Android 4.0, <a
-href="http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html">CheckJNI</a>
-has been
-enhanced to detect these errors. Watch the <a href=”http://android-developers.blogspot.com/”>Android
-Developers Blog</a> for an upcoming post about common errors with JNI references and how you can fix
-them.</p>
+<p>The ins and outs of JNI local references are described in “Local and Global References" in <a
+href="{@docRoot}guide/practices/design/jni.html">JNI Tips</a>. In Android 4.0, <a
+href="http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html">
+CheckJNI</a> has been enhanced to detect these errors. Watch the <a
+href="http://android-developers.blogspot.com/">Android Developers Blog</a> for an upcoming post
+about common errors with JNI references and how you can fix them.</p>
<p>This change in the JNI implementation only affects apps that target Android 4.0 by setting either
-the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> or
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> to
-{@code “14”} or higher. If you’ve set these attributes to any lower
-value, then JNI local references will behave the same as in previous versions.</p>
+the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+targetSdkVersion}</a> or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+minSdkVersion}</a> to {@code “14"} or higher. If you’ve set these attributes to any lower value,
+then JNI local references behave the same as in previous versions.</p>
@@ -1526,7 +1624,7 @@
<ul>
<li>Updated V8 JavaScript compiler for faster performance</li>
<li>Plus other notable enhancements carried over from <a
-href=”{@docRoot}sdk/android-3.0.html”>Android
+href="{@docRoot}sdk/android-3.0.html">Android
3.0</a> are now available for handsets:
<ul>
<li>Support for fixed position elements on all pages</li>
@@ -1569,8 +1667,115 @@
+<h2 id="Honeycomb">Previous APIs</h2>
+<p>In addition to everything above, Android 4.0 naturally supports all APIs from previous releases.
+Because the Android 3.x (Honeycomb) platform is available only for large-screen devices, if you've
+been developing primarily for handsets, then you might not be aware of all the APIs added to Android
+in these recent releases.</p>
+<p>Here's a look at some of the most notable APIs you might have missed that are now available
+on handsets as well:</p>
+
+<dl>
+ <dt><a href="android-3.0.html">Android 3.0</a></dt>
+ <dd>
+ <ul>
+ <li>{@link android.app.Fragment}: A framework component that allows you to separate distinct
+elements of an activity into self-contained modules that define their own UI and lifecycle. See the
+<a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</li>
+ <li>{@link android.app.ActionBar}: A replacement for the traditional title bar at the top of
+the activity window. It includes the application logo in the left corner and provides a new
+interface for menu items. See the
+<a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer guide.</li>
+ <li>{@link android.content.Loader}: A framework component that facilitates asynchronour
+loading of data in combination with UI components to dynamically load data without blocking the
+main thread. See the
+<a href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> developer guide.</li>
+ <li>System clipboard: Applications can copy and paste data (beyond mere text) to and from
+the system-wide clipboard. Clipped data can be plain text, a URI, or an intent. See the
+<a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy and Paste</a> developer guide.</li>
+ <li>Drag and drop: A set of APIs built into the view framework that facilitates drag and drop
+operations. See the
+<a href="{@docRoot}guide/topics/ui/drag-drop.html">Drag and Drop</a> developer guide.</li>
+ <li>An all new flexible animation framework allows you to animate arbitrary properties of any
+object (View, Drawable, Fragment, Object, or anything else) and define animation aspects such
+as duration, interpolation, repeat and more. The new framework makes Animations in Android
+simpler than ever. See the
+<a href="{@docRoot}guide/topics/graphics/property-animation.html">Property Animation</a> developer
+guide.</li>
+ <li>RenderScript graphics and compute engine: RenderScript offers a high performance 3D
+graphics rendering and compute API at the native level, which you write in the C (C99 standard),
+providing the type of performance you expect from a native environment while remaining portable
+across various CPUs and GPUs. See the
+<a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer
+guide.</li>
+ <li>Hardware accelerated 2D graphics: You can now enable the OpenGL renderer for your
+application by setting {android:hardwareAccelerated="true"} in your manifest element's <a
+href="{@docRoot}guide/topics/manifest/application-element.html"><code><application></code></a>
+element or for individual <a
+href="{@docRoot}guide/topics/manifest/activity-element.html"><code><activity></code></a>
+elements. This results
+in smoother animations, smoother scrolling, and overall better performance and response to user
+interaction.
+ <p class="note"><strong>Note:</strong> If you set your application's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+{@code "14"} or higher, hardware acceleration is enabled by default.</p></li>
+ <li>And much, much more. See the <a href="android-3.0.html">Android 3.0 Platform</a>
+notes for more information.</li>
+ </ul>
+ </dd>
+
+ <dt><a href="android-3.1.html">Android 3.1</a></dt>
+ <dd>
+ <ul>
+ <li>USB APIs: Powerful new APIs for integrating connected peripherals with
+Android applications. The APIs are based on a USB stack and services that are
+built into the platform, including support for both USB host and device interactions. See the <a
+href="{@docRoot}guide/topics/usb/index.html">USB Host and Accessory</a> developer guide.</li>
+ <li>MTP/PTP APIs: Applications can interact directly with connected cameras and other PTP
+devices to receive notifications when devices are attached and removed, manage files and storage on
+those devices, and transfer files and metadata to and from them. The MTP API implements the PTP
+(Picture Transfer Protocol) subset of the MTP (Media Transfer Protocol) specification. See the
+{@link android.mtp} documentation.</li>
+ <li>RTP APIs: Android exposes an API to its built-in RTP (Real-time Transport Protocol) stack,
+which applications can use to manage on-demand or interactive data streaming. In particular, apps
+that provide VOIP, push-to-talk, conferencing, and audio streaming can use the API to initiate
+sessions and transmit or receive data streams over any available network. See the {@link
+android.net.rtp} documentation.</li>
+ <li>Support for joysticks and other generic motion inputs.</li>
+ <li>See the <a href="android-3.1.html">Android 3.1 Platform</a>
+notes for many more new APIs.</li>
+ </ul>
+ </dd>
+
+ <dt><a href="android-3.2.html">Android 3.2</a></dt>
+ <dd>
+ <ul>
+ <li>New screens support APIs that give you more control over how your applications are
+displayed across different screen sizes. The API extends the existing screen support model with the
+ability to precisely target specific screen size ranges by dimensions, measured in
+density-independent pixel units (such as 600dp or 720dp wide), rather than by their generalized
+screen sizes (such as large or xlarge). For example, this is important in order to help you
+distinguish between a 5" device and a 7" device, which would both traditionally be bucketed as
+"large" screens. See the blog post, <a
+href="http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html">
+New Tools for Managing Screen Sizes</a>.</li>
+ <li>New constants for <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> to
+declare landscape or portrait screen orientation requirements.</li>
+ <li>The device "screen size" configuration now changes during a screen orientation
+change. If your app targets API level 13 or higher, you must handle the {@code "screenSize"}
+configuration change if you also want to handle the {@code "orientation"} configuration change. See
+<a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
+android:configChanges}</a> for more information.</li>
+ <li>See the <a href="android-3.2.html">Android 3.2 Platform</a>
+notes for other new APIs.</li>
+ </ul>
+ </dd>
+
+</dl>
@@ -1579,32 +1784,28 @@
<h2 id="api-diff">API Differences Report</h2>
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
-Level
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
{@sdkPlatformApiLevel}), see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report</a>.</p>
-
-
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
<h2 id="api-level">API Level</h2>
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of the framework API. The
-Android {@sdkPlatformVersion} API is assigned an integer identifier —
-<strong>{@sdkPlatformApiLevel}</strong> — that is stored in the system itself. This
-identifier, called the "API Level", allows the system to correctly determine whether an application
-is compatible with the system, prior to installing the application. </p>
+<p>The Android {@sdkPlatformVersion} API is assigned an integer
+identifier—<strong>{@sdkPlatformApiLevel}</strong>—that is stored in the system itself.
+This identifier, called the "API level", allows the system to correctly determine whether an
+application is compatible with the system, prior to installing the application. </p>
<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the
-application against the Android library that is provided in the Android {@sdkPlatformVersion} SDK
-platform. Depending on your needs, you might also need to add an
+application against an Android platform that supports API level {@sdkPlatformApiLevel} or
+higher. Depending on your needs, you might also need to add an
<code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
-<code><uses-sdk></code> element in the application's manifest.</p>
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
+element.</p>
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
+<p>For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API Levels</a>
+document. </p>
<h2 id="apps">Built-in Applications</h2>
@@ -1619,6 +1820,7 @@
<li>API Demos</li>
<li>Browser</li>
<li>Calculator</li>
+<li>Calendar</li>
<li>Camera</li>
<li>Clock</li>
<li>Custom Locale</li>
@@ -1637,7 +1839,7 @@
<li>Phone</li>
<li>Search</li>
<li>Settings</li>
-<li>Spare Parts</li>
+<li>Speech Recorder</li>
<li>Speech Recorder</li>
<li>Widget Preview</li>
</ul>
@@ -1648,13 +1850,10 @@
<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-<p>The system image included in the downloadable SDK platform provides a variety
-of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android 3.0 system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
+<p>The system image included in the downloadable SDK platform provides a variety of built-in
+locales. In some cases, region-specific strings are available for the locales. In other cases, a
+default version of the language is used. The languages that are available in the Android 3.0 system
+image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p>
<table style="border:0;padding-bottom:0;margin-bottom:0;">
<tr>
@@ -1731,15 +1930,45 @@
<h2 id="skins">Emulator Skins</h2>
-<p>The downloadable platform includes the following emulator skin:</p>
+<p>The downloadable platform includes the following emulator skins:</p>
<ul>
<li>
- WVGA800 (1280x800, extra high density, normal screen)
+ QVGA (240x320, low density, small screen)
+ </li>
+ <li>
+ WQVGA400 (240x400, low density, normal screen)
+ </li>
+ <li>
+ WQVGA432 (240x432, low density, normal screen)
+ </li>
+ <li>
+ HVGA (320x480, medium density, normal screen)
+ </li>
+ <li>
+ WVGA800 (480x800, high density, normal screen)
+ </li>
+ <li>
+ WVGA854 (480x854 high density, normal screen)
+ </li>
+ <li>
+ WXGA720 (1280x720, extra-high density, normal screen) <span class="new">new</span>
+ </li>
+ <li>
+ WSVGA (1024x600, medium density, large screen) <span class="new">new</span>
+ </li>
+ <li>
+ WXGA (1280x800, medium density, xlarge screen)
</li>
</ul>
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
+<p>To test your application on an emulator that represents the latest Android device, you can create
+an AVD with the new WXGA720 skin (it's an xhdpi, normal screen device). Note that the emulator
+currently doesn't support the new on-screen navigation bar for devices without hardware navigation
+buttons, so when using this skin, you must use keyboard keys <em>Home</em> for the Home button,
+<em>ESC</em> for the Back button, and <em>F2</em> or <em>Page-up</em> for the Menu button.</p>
+
+<p>However, due to performance issues in the emulator when running high-resolution screens such as
+the one for the WXGA720 skin, we recommend that you primarily use the traditional WVGA800 skin
+(hdpi, normal screen) to test your application.</p>
+
diff --git a/docs/html/sdk/eclipse-adt.jd b/docs/html/sdk/eclipse-adt.jd
index dab5b29..59675a8 100644
--- a/docs/html/sdk/eclipse-adt.jd
+++ b/docs/html/sdk/eclipse-adt.jd
@@ -1,8 +1,8 @@
page.title=ADT Plugin for Eclipse
adt.zip.version=14.0.0
adt.zip.download=ADT-14.0.0.zip
-adt.zip.bytes=6745047
-adt.zip.checksum=014312e1553e3b8da55cb6a24e33e432
+adt.zip.bytes=6747816
+adt.zip.checksum=3883973cd229dc4336911117af949509
@jd:body
@@ -66,6 +66,9 @@
<p>The sections below provide notes about successive releases of
the ADT Plugin, as denoted by revision number. </p>
+<p>For a summary of all known issues in ADT, see <a
+href="http://tools.android.com/release/knownissues">http://tools.android.com/release/knownissues</a>.</p>
+
<script type="text/javascript">
function toggleDiv(link) {
var toggleable = $(link).parent();
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 67be5c9..82db803 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -2,20 +2,20 @@
sdk.redirect=0
sdk.win_installer=installer_r14-windows.exe
-sdk.win_installer_bytes=33860326
-sdk.win_installer_checksum=6d4f76385daaee766ad901699cdae6cc
+sdk.win_installer_bytes=33853391
+sdk.win_installer_checksum=4f1cb329a41328c2cee2908b31ae6f6b
sdk.win_download=android-sdk_r14-windows.zip
-sdk.win_bytes=33853090
-sdk.win_checksum=0c39628e296d6176ed928cc64498ba04
+sdk.win_bytes=33846273
+sdk.win_checksum=48d44ae4cfcadede68621acb53caee80
sdk.mac_download=android-sdk_r14-macosx.zip
-sdk.mac_bytes=30426431
-sdk.mac_checksum=189ce3e26dfb46298a7def21d3bdf271
+sdk.mac_bytes=30428734
+sdk.mac_checksum=812887018435382de8486f3bb26a5db4
sdk.linux_download=android-sdk_r14-linux.tgz
-sdk.linux_bytes=26082867
-sdk.linux_checksum=500483f8acd0d3cae94c68c3dcefbb98
+sdk.linux_bytes=26075938
+sdk.linux_checksum=35c989ff67184766dc4960813ede8ab5
@jd:body
diff --git a/docs/html/sdk/tools-notes.jd b/docs/html/sdk/tools-notes.jd
index 6cb246c..f5b61ee 100644
--- a/docs/html/sdk/tools-notes.jd
+++ b/docs/html/sdk/tools-notes.jd
@@ -23,6 +23,9 @@
Tools you are using, refer to the "Installed Packages" listing in the Android SDK
and AVD Manager. </p>
+<p>For a summary of all known issues in SDK Tools, see <a
+href="http://tools.android.com/release/knownissues">http://tools.android.com/release/knownissues</a>.</p>
+
<script type="text/javascript">
function toggleDiv(link) {
var toggleable = $(link).parent();
diff --git a/include/gui/SensorManager.h b/include/gui/SensorManager.h
index e1b1a7be..3176462 100644
--- a/include/gui/SensorManager.h
+++ b/include/gui/SensorManager.h
@@ -20,6 +20,8 @@
#include <stdint.h>
#include <sys/types.h>
+#include <binder/IBinder.h>
+
#include <utils/Errors.h>
#include <utils/RefBase.h>
#include <utils/Singleton.h>
@@ -41,7 +43,9 @@
// ----------------------------------------------------------------------------
-class SensorManager : public ASensorManager, public Singleton<SensorManager>
+class SensorManager :
+ public ASensorManager,
+ public Singleton<SensorManager>
{
public:
SensorManager();
@@ -52,9 +56,17 @@
sp<SensorEventQueue> createEventQueue();
private:
- sp<ISensorServer> mSensorServer;
- Sensor const** mSensorList;
- Vector<Sensor> mSensors;
+ // DeathRecipient interface
+ void sensorManagerDied();
+
+ status_t assertStateLocked() const;
+
+private:
+ mutable Mutex mLock;
+ mutable sp<ISensorServer> mSensorServer;
+ mutable Sensor const** mSensorList;
+ mutable Vector<Sensor> mSensors;
+ mutable sp<IBinder::DeathRecipient> mDeathObserver;
};
// ----------------------------------------------------------------------------
diff --git a/libs/gui/ISurfaceTexture.cpp b/libs/gui/ISurfaceTexture.cpp
index babd2c0..d2e5627 100644
--- a/libs/gui/ISurfaceTexture.cpp
+++ b/libs/gui/ISurfaceTexture.cpp
@@ -58,13 +58,16 @@
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(bufferIdx);
- remote()->transact(REQUEST_BUFFER, data, &reply);
+ status_t result =remote()->transact(REQUEST_BUFFER, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
bool nonNull = reply.readInt32();
if (nonNull) {
*buf = new GraphicBuffer();
reply.read(**buf);
}
- status_t result = reply.readInt32();
+ result = reply.readInt32();
return result;
}
@@ -73,9 +76,12 @@
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(bufferCount);
- remote()->transact(SET_BUFFER_COUNT, data, &reply);
- status_t err = reply.readInt32();
- return err;
+ status_t result =remote()->transact(SET_BUFFER_COUNT, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
+ result = reply.readInt32();
+ return result;
}
virtual status_t dequeueBuffer(int *buf, uint32_t w, uint32_t h,
@@ -86,9 +92,12 @@
data.writeInt32(h);
data.writeInt32(format);
data.writeInt32(usage);
- remote()->transact(DEQUEUE_BUFFER, data, &reply);
+ status_t result = remote()->transact(DEQUEUE_BUFFER, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
*buf = reply.readInt32();
- int result = reply.readInt32();
+ result = reply.readInt32();
return result;
}
@@ -98,11 +107,14 @@
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(buf);
data.writeInt64(timestamp);
- remote()->transact(QUEUE_BUFFER, data, &reply);
+ status_t result = remote()->transact(QUEUE_BUFFER, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
*outWidth = reply.readInt32();
*outHeight = reply.readInt32();
*outTransform = reply.readInt32();
- status_t result = reply.readInt32();
+ result = reply.readInt32();
return result;
}
@@ -120,8 +132,11 @@
data.writeFloat(reg.top);
data.writeFloat(reg.right);
data.writeFloat(reg.bottom);
- remote()->transact(SET_CROP, data, &reply);
- status_t result = reply.readInt32();
+ status_t result = remote()->transact(SET_CROP, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
+ result = reply.readInt32();
return result;
}
@@ -129,8 +144,11 @@
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(transform);
- remote()->transact(SET_TRANSFORM, data, &reply);
- status_t result = reply.readInt32();
+ status_t result = remote()->transact(SET_TRANSFORM, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
+ result = reply.readInt32();
return result;
}
@@ -138,8 +156,11 @@
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(mode);
- remote()->transact(SET_SCALING_MODE, data, &reply);
- status_t result = reply.readInt32();
+ status_t result = remote()->transact(SET_SCALING_MODE, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
+ result = reply.readInt32();
return result;
}
@@ -147,9 +168,12 @@
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(what);
- remote()->transact(QUERY, data, &reply);
+ status_t result = remote()->transact(QUERY, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
value[0] = reply.readInt32();
- status_t result = reply.readInt32();
+ result = reply.readInt32();
return result;
}
@@ -157,8 +181,11 @@
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(enabled);
- remote()->transact(SET_SYNCHRONOUS_MODE, data, &reply);
- status_t result = reply.readInt32();
+ status_t result = remote()->transact(SET_SYNCHRONOUS_MODE, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
+ result = reply.readInt32();
return result;
}
@@ -167,11 +194,14 @@
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(api);
- remote()->transact(CONNECT, data, &reply);
+ status_t result = remote()->transact(CONNECT, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
*outWidth = reply.readInt32();
*outHeight = reply.readInt32();
*outTransform = reply.readInt32();
- status_t result = reply.readInt32();
+ result = reply.readInt32();
return result;
}
@@ -179,8 +209,11 @@
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(api);
- remote()->transact(DISCONNECT, data, &reply);
- status_t result = reply.readInt32();
+ status_t result =remote()->transact(DISCONNECT, data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
+ result = reply.readInt32();
return result;
}
};
diff --git a/libs/gui/SensorManager.cpp b/libs/gui/SensorManager.cpp
index d719efb..dafcdea 100644
--- a/libs/gui/SensorManager.cpp
+++ b/libs/gui/SensorManager.cpp
@@ -23,6 +23,7 @@
#include <utils/RefBase.h>
#include <utils/Singleton.h>
+#include <binder/IBinder.h>
#include <binder/IServiceManager.h>
#include <gui/ISensorServer.h>
@@ -40,17 +41,8 @@
SensorManager::SensorManager()
: mSensorList(0)
{
- const String16 name("sensorservice");
- while (getService(name, &mSensorServer) != NO_ERROR) {
- usleep(250000);
- }
-
- mSensors = mSensorServer->getSensorList();
- size_t count = mSensors.size();
- mSensorList = (Sensor const**)malloc(count * sizeof(Sensor*));
- for (size_t i=0 ; i<count ; i++) {
- mSensorList[i] = mSensors.array() + i;
- }
+ // okay we're not locked here, but it's not needed during construction
+ assertStateLocked();
}
SensorManager::~SensorManager()
@@ -58,29 +50,100 @@
free(mSensorList);
}
+void SensorManager::sensorManagerDied()
+{
+ Mutex::Autolock _l(mLock);
+ mSensorServer.clear();
+ free(mSensorList);
+ mSensorList = NULL;
+ mSensors.clear();
+}
+
+status_t SensorManager::assertStateLocked() const {
+ if (mSensorServer == NULL) {
+ // try for one second
+ const String16 name("sensorservice");
+ for (int i=0 ; i<4 ; i++) {
+ status_t err = getService(name, &mSensorServer);
+ if (err == NAME_NOT_FOUND) {
+ usleep(250000);
+ continue;
+ }
+ if (err != NO_ERROR) {
+ return err;
+ }
+ break;
+ }
+
+ class DeathObserver : public IBinder::DeathRecipient {
+ SensorManager& mSensorManger;
+ virtual void binderDied(const wp<IBinder>& who) {
+ LOGW("sensorservice died [%p]", who.unsafe_get());
+ mSensorManger.sensorManagerDied();
+ }
+ public:
+ DeathObserver(SensorManager& mgr) : mSensorManger(mgr) { }
+ };
+
+ mDeathObserver = new DeathObserver(*const_cast<SensorManager *>(this));
+ mSensorServer->asBinder()->linkToDeath(mDeathObserver);
+
+ mSensors = mSensorServer->getSensorList();
+ size_t count = mSensors.size();
+ mSensorList = (Sensor const**)malloc(count * sizeof(Sensor*));
+ for (size_t i=0 ; i<count ; i++) {
+ mSensorList[i] = mSensors.array() + i;
+ }
+ }
+
+ return NO_ERROR;
+}
+
+
+
ssize_t SensorManager::getSensorList(Sensor const* const** list) const
{
+ Mutex::Autolock _l(mLock);
+ status_t err = assertStateLocked();
+ if (err < 0) {
+ return ssize_t(err);
+ }
*list = mSensorList;
return mSensors.size();
}
Sensor const* SensorManager::getDefaultSensor(int type)
{
- // For now we just return the first sensor of that type we find.
- // in the future it will make sense to let the SensorService make
- // that decision.
- for (size_t i=0 ; i<mSensors.size() ; i++) {
- if (mSensorList[i]->getType() == type)
- return mSensorList[i];
+ Mutex::Autolock _l(mLock);
+ if (assertStateLocked() == NO_ERROR) {
+ // For now we just return the first sensor of that type we find.
+ // in the future it will make sense to let the SensorService make
+ // that decision.
+ for (size_t i=0 ; i<mSensors.size() ; i++) {
+ if (mSensorList[i]->getType() == type)
+ return mSensorList[i];
+ }
}
return NULL;
}
sp<SensorEventQueue> SensorManager::createEventQueue()
{
- sp<SensorEventQueue> result = new SensorEventQueue(
- mSensorServer->createSensorEventConnection());
- return result;
+ sp<SensorEventQueue> queue;
+
+ Mutex::Autolock _l(mLock);
+ while (assertStateLocked() == NO_ERROR) {
+ sp<ISensorEventConnection> connection =
+ mSensorServer->createSensorEventConnection();
+ if (connection == NULL) {
+ // SensorService just died.
+ LOGE("createEventQueue: connection is NULL. SensorService died.");
+ continue;
+ }
+ queue = new SensorEventQueue(connection);
+ break;
+ }
+ return queue;
}
// ----------------------------------------------------------------------------
diff --git a/libs/gui/tests/Surface_test.cpp b/libs/gui/tests/Surface_test.cpp
index ce587b3..693b7b8 100644
--- a/libs/gui/tests/Surface_test.cpp
+++ b/libs/gui/tests/Surface_test.cpp
@@ -75,7 +75,7 @@
}
// This test probably doesn't belong here.
-TEST_F(SurfaceTest, ScreenshotsOfProtectedBuffersFail) {
+TEST_F(SurfaceTest, ScreenshotsOfProtectedBuffersSucceed) {
sp<ANativeWindow> anw(mSurface);
// Verify the screenshot works with no protected buffers.
@@ -114,31 +114,8 @@
}
heap = 0;
w = h = fmt = 0;
- ASSERT_EQ(INVALID_OPERATION, sf->captureScreen(0, &heap, &w, &h, &fmt,
+ ASSERT_EQ(NO_ERROR, sf->captureScreen(0, &heap, &w, &h, &fmt,
64, 64, 0, 0x7fffffff));
- ASSERT_TRUE(heap == NULL);
-
- // XXX: This should not be needed, but it seems that the new buffers don't
- // correctly show up after the upcoming dequeue/lock/queue loop without it.
- // We should look into this at some point.
- ASSERT_EQ(NO_ERROR, native_window_set_buffer_count(anw.get(), 3));
-
- // Un-set the PROTECTED usage bit and verify that the screenshot works
- // again. Note that we have to change the buffers geometry to ensure that
- // the buffers get reallocated, as the new usage bits are a subset of the
- // old.
- ASSERT_EQ(NO_ERROR, native_window_set_usage(anw.get(), 0));
- ASSERT_EQ(NO_ERROR, native_window_set_buffers_geometry(anw.get(), 32, 32, 0));
- for (int i = 0; i < 4; i++) {
- // Loop to make sure SurfaceFlinger has retired a protected buffer.
- ASSERT_EQ(NO_ERROR, anw->dequeueBuffer(anw.get(), &buf));
- ASSERT_EQ(NO_ERROR, anw->lockBuffer(anw.get(), buf));
- ASSERT_EQ(NO_ERROR, anw->queueBuffer(anw.get(), buf));
- }
- heap = 0;
- w = h = fmt = 0;
- ASSERT_EQ(NO_ERROR, sf->captureScreen(0, &heap, &w, &h, &fmt, 64, 64, 0,
- 0x7fffffff));
ASSERT_TRUE(heap != NULL);
}
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 4f4f929..1d20e248 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -85,8 +85,7 @@
private static final String TAG = "AudioService";
/** Debug remote control client/display feature */
- // TODO set to false before release
- protected static final boolean DEBUG_RC = true;
+ protected static final boolean DEBUG_RC = false;
/** How long to delay before persisting a change in volume/ringer mode. */
private static final int PERSIST_DELAY = 3000;
@@ -369,6 +368,8 @@
intentFilter.addAction(Intent.ACTION_USB_DGTL_HEADSET_PLUG);
intentFilter.addAction(Intent.ACTION_HDMI_AUDIO_PLUG);
intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
+ intentFilter.addAction(Intent.ACTION_SCREEN_ON);
+ intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
context.registerReceiver(mReceiver, intentFilter);
// Register for package removal intent broadcasts for media button receiver persistence
@@ -516,8 +517,8 @@
ensureValidDirection(direction);
ensureValidStreamType(streamType);
-
- VolumeStreamState streamState = mStreamStates[STREAM_VOLUME_ALIAS[streamType]];
+ int streamTypeAlias = STREAM_VOLUME_ALIAS[streamType];
+ VolumeStreamState streamState = mStreamStates[streamTypeAlias];
final int oldIndex = (streamState.muteCount() != 0) ? streamState.mLastAudibleIndex : streamState.mIndex;
boolean adjustVolume = true;
@@ -526,14 +527,14 @@
if (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
(!mVoiceCapable && streamType != AudioSystem.STREAM_VOICE_CALL &&
streamType != AudioSystem.STREAM_BLUETOOTH_SCO) ||
- (mVoiceCapable && streamType == AudioSystem.STREAM_RING)) {
+ (mVoiceCapable && streamTypeAlias == AudioSystem.STREAM_RING)) {
// do not vibrate if already in silent mode
if (mRingerMode != AudioManager.RINGER_MODE_NORMAL) {
flags &= ~AudioManager.FLAG_VIBRATE;
}
// Check if the ringer mode changes with this volume adjustment. If
// it does, it will handle adjusting the volume, so we won't below
- adjustVolume = checkForRingerModeChange(oldIndex, direction);
+ adjustVolume = checkForRingerModeChange(oldIndex, direction, streamTypeAlias);
}
// If stream is muted, adjust last audible index only
@@ -550,7 +551,7 @@
if (adjustVolume && streamState.adjustIndex(direction)) {
// Post message to set system volume (it in turn will post a message
// to persist). Do not change volume if stream is muted.
- sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, STREAM_VOLUME_ALIAS[streamType], SENDMSG_NOOP, 0, 0,
+ sendMsg(mAudioHandler, MSG_SET_SYSTEM_VOLUME, streamTypeAlias, SENDMSG_NOOP, 0, 0,
streamState, 0);
}
index = streamState.mIndex;
@@ -566,6 +567,23 @@
final int oldIndex = (streamState.muteCount() != 0) ? streamState.mLastAudibleIndex : streamState.mIndex;
+ // setting ring or notifications volume to 0 on voice capable devices enters silent mode
+ if (mVoiceCapable && (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
+ (STREAM_VOLUME_ALIAS[streamType] == AudioSystem.STREAM_RING))) {
+ int newRingerMode = mRingerMode;
+ if (index == 0) {
+ newRingerMode = System.getInt(mContentResolver, System.VIBRATE_IN_SILENT, 1) == 1
+ ? AudioManager.RINGER_MODE_VIBRATE
+ : AudioManager.RINGER_MODE_SILENT;
+ setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, false, true);
+ } else {
+ newRingerMode = AudioManager.RINGER_MODE_NORMAL;
+ }
+ if (newRingerMode != mRingerMode) {
+ setRingerMode(newRingerMode);
+ }
+ }
+
index = rescaleIndex(index * 10, streamType, STREAM_VOLUME_ALIAS[streamType]);
setStreamVolumeInt(STREAM_VOLUME_ALIAS[streamType], index, false, true);
@@ -691,6 +709,13 @@
if (isStreamMutedByRingerMode(streamType)) {
if (!isStreamAffectedByRingerMode(streamType) ||
mRingerMode == AudioManager.RINGER_MODE_NORMAL) {
+ // ring and notifications volume should never be 0 when not silenced
+ // on voice capable devices
+ if (mVoiceCapable &&
+ STREAM_VOLUME_ALIAS[streamType] == AudioSystem.STREAM_RING &&
+ mStreamStates[streamType].mLastAudibleIndex == 0) {
+ mStreamStates[streamType].mLastAudibleIndex = 10;
+ }
mStreamStates[streamType].mute(null, false);
mRingerModeMutedStreams &= ~(1 << streamType);
}
@@ -1592,7 +1617,7 @@
* adjusting volume. If so, this will set the proper ringer mode and volume
* indices on the stream states.
*/
- private boolean checkForRingerModeChange(int oldIndex, int direction) {
+ private boolean checkForRingerModeChange(int oldIndex, int direction, int streamType) {
boolean adjustVolumeIndex = true;
int newRingerMode = mRingerMode;
int uiIndex = (oldIndex + 5) / 10;
@@ -1607,7 +1632,8 @@
? AudioManager.RINGER_MODE_VIBRATE
: AudioManager.RINGER_MODE_SILENT;
}
- if (uiIndex == 0) {
+ if (uiIndex == 0 || (mPrevVolDirection == AudioManager.ADJUST_LOWER &&
+ mVoiceCapable && streamType == AudioSystem.STREAM_RING)) {
adjustVolumeIndex = false;
}
}
@@ -1615,13 +1641,8 @@
if (direction == AudioManager.ADJUST_RAISE) {
// exiting silent mode
newRingerMode = AudioManager.RINGER_MODE_NORMAL;
- if (uiIndex != 0) {
- adjustVolumeIndex = false;
- }
- } else {
- // prevent last audible index to reach 0
- adjustVolumeIndex = false;
}
+ adjustVolumeIndex = false;
}
if (newRingerMode != mRingerMode) {
@@ -2566,6 +2587,10 @@
removeMediaButtonReceiverForPackage(packageName);
}
}
+ } else if (action.equals(Intent.ACTION_SCREEN_ON)) {
+ AudioSystem.setParameters("screen_state=on");
+ } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
+ AudioSystem.setParameters("screen_state=off");
}
}
}
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index f3174fe..63cbf5e 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -274,8 +274,14 @@
sp<ISurfaceTexture> new_st;
if (jsurface) {
sp<Surface> surface(Surface_getSurface(env, jsurface));
- new_st = surface->getSurfaceTexture();
- new_st->incStrong(thiz);
+ if (surface != NULL) {
+ new_st = surface->getSurfaceTexture();
+ new_st->incStrong(thiz);
+ } else {
+ jniThrowException(env, "java/lang/IllegalArgumentException",
+ "The surface has been released");
+ return;
+ }
}
env->SetIntField(thiz, fields.surface_texture, (int)new_st.get());
diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp
index 4f183f5..1e1de04 100644
--- a/media/libstagefright/NuCachedSource2.cpp
+++ b/media/libstagefright/NuCachedSource2.cpp
@@ -279,6 +279,8 @@
void NuCachedSource2::fetchInternal() {
LOGV("fetchInternal");
+ bool reconnect = false;
+
{
Mutex::Autolock autoLock(mLock);
CHECK(mFinalStatus == OK || mNumRetriesLeft > 0);
@@ -286,18 +288,24 @@
if (mFinalStatus != OK) {
--mNumRetriesLeft;
- status_t err =
- mSource->reconnectAtOffset(mCacheOffset + mCache->totalSize());
+ reconnect = true;
+ }
+ }
- if (err == ERROR_UNSUPPORTED) {
- mNumRetriesLeft = 0;
- return;
- } else if (err != OK) {
- LOGI("The attempt to reconnect failed, %d retries remaining",
- mNumRetriesLeft);
+ if (reconnect) {
+ status_t err =
+ mSource->reconnectAtOffset(mCacheOffset + mCache->totalSize());
- return;
- }
+ Mutex::Autolock autoLock(mLock);
+
+ if (err == ERROR_UNSUPPORTED) {
+ mNumRetriesLeft = 0;
+ return;
+ } else if (err != OK) {
+ LOGI("The attempt to reconnect failed, %d retries remaining",
+ mNumRetriesLeft);
+
+ return;
}
}
diff --git a/packages/BackupRestoreConfirmation/res/values-af/strings.xml b/packages/BackupRestoreConfirmation/res/values-af/strings.xml
index 0d7422e..8ee5550 100644
--- a/packages/BackupRestoreConfirmation/res/values-af/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-af/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Laai my data terug"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Moenie herstel nie"</string>
<string name="current_password_text" msgid="8268189555578298067">"Voer asseblief jou huidige rugsteunwagwoord hieronder in:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Voer jou toestelenkripsie-wagwoord hier onder in."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Voer jou toestelenkripsie-wagwoord hier onder in. Dit sal ook gebruik word om die rugsteunargief te enkripteer."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Voer asb. \'n wagwoord in om te gebruik vir enkripsie van die volle rugsteundata. As dit leeg gelaat word, sal jou huidige rugsteunwagwoord gebruik word:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"As jy die volle rugsteundata wil enkripteer, voer \'n wagwoord hieronder in:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"As die hersteldata geïnkripteer word, voer asb. die wagwoord hieronder in:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-am/strings.xml b/packages/BackupRestoreConfirmation/res/values-am/strings.xml
index 41fa6a0..512d917 100644
--- a/packages/BackupRestoreConfirmation/res/values-am/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-am/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"ውሂቤን እነበረበት መልስ"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"እነበረበት አትመልስ"</string>
<string name="current_password_text" msgid="8268189555578298067">"እባክዎ የአሁኑን የመጠባበቂያ ይለፍቃል ከታች ያስገቡ፡"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"እባክህ የመሳሪያህ ምስጠራ የይለፍ ቃል ከታች አስገባ፡፡"</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"እባክህ የመሳሪያህ ምስጠራ የይለፍ ቃል ከታች አስገባ፡፡ይሄ ለምትኬ መዝገብ ለመመስጠርም ይጠቅማል፡፡"</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"እባክዎ የሙሉ ውሂብ መጠበቂያ ማመስጠር ለመጠቅም የይለፍ ቃል ያስገቡ። ይህም ባዶ ከሆነ፣ የእርስዎ የአሁኑ የመጠበቂያ ይለፍ ቃል ይወሰዳል፡"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"ሙሉ የውሂብ መጠበቂያ ለማመስጠር ከፈለጉ ከታች የይለፍ ቃል ያስገቡ፡"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"ውሂብ እነበረበት መልስ የተመሳጠረ ከሆነ፣ እባክዎ ከታች የይለፍ ቃል ያስገቡ"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
index ceabaaf..2e9ec40 100644
--- a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"استرداد بياناتي"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"عدم الاسترداد"</string>
<string name="current_password_text" msgid="8268189555578298067">"الرجاء إدخال كلمة مرور النسخ الاحتياطي أدناه:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"الرجاء إدخال كلمة مرور تشفير جهازك أدناه."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"الرجاء إدخال كلمة مرور تشفير الجهاز. سيتم استخدام ذلك أيضًا لتشفير أرشيف النسخ الاحتياطي."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"الرجاء إدخال كلمة المرور للاستخدام لتشفير بيانات النسخة الاحتياطية بالكامل. إذا تم ترك هذا فارغًا، فسيتم استخدام كلمة مرور النسخ الاحتياطي الحالية:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"إذا كنت ترغب في تشفير بيانات النسخة الاحتياطية بالكامل، فأدخل كلمة المرور أدناه:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"إذا كانت بيانات الاسترداد مشفرة، فالرجاء إدخال كلمة المرور أدناه:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-bg/strings.xml b/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
index f90b666..914750a 100644
--- a/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
@@ -25,6 +25,10 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Възстановяване на данните ми"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Без възстановяване"</string>
<string name="current_password_text" msgid="8268189555578298067">"Моля, въведете текущата си парола за резервно копие по-долу:"</string>
+ <!-- no translation found for device_encryption_restore_text (1570864916855208992) -->
+ <skip />
+ <!-- no translation found for device_encryption_backup_text (5866590762672844664) -->
+ <skip />
<string name="backup_enc_password_text" msgid="4981585714795233099">"Моля, въведете парола, която да използвате за шифроване на пълното резервно копие на данните. Ако не е попълнена, ще бъде използвана текущата ви парола за резервно копие:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ако искате да шифровате пълното резервно копие на данните, въведете парола по-долу:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ако възстановените данни са шифровани, моля, въведете паролата по-долу:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-ca/strings.xml b/packages/BackupRestoreConfirmation/res/values-ca/strings.xml
index d4b9cd2..c511510 100644
--- a/packages/BackupRestoreConfirmation/res/values-ca/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ca/strings.xml
@@ -19,12 +19,14 @@
<string name="backup_confirm_title" msgid="827563724209303345">"Fes una còpia de seguretat completa"</string>
<string name="restore_confirm_title" msgid="5469365809567486602">"Restaura completament"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"S\'ha sol·licitat una còpia de seguretat completa de totes les dades a un equip de sobretaula connectat. Vols permetre que això passi?"\n" "\n"Si no has sol·licitat la còpia de seguretat tu mateix, no permetis que continuï l\'operació."</string>
- <string name="allow_backup_button_label" msgid="4217228747769644068">"Còpia seg. de les meves dades"</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Còpia de seguretat de dades"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"No en facis una còpia de seguretat"</string>
<string name="restore_confirm_text" msgid="7499866728030461776">"S\'ha sol·licitat una restauració completa de totes les dades d\'un equip d\'escriptori connectat. Vols permetre que això passi?"\n" "\n"Si no has sol·licitat la restauració tu mateix, no permetis que continuï l\'operació. Això reemplaçarà les dades que hi hagi actualment a l\'equip."</string>
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restaura les meves dades"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"No ho restauris"</string>
<string name="current_password_text" msgid="8268189555578298067">"Introdueix la teva contrasenya actual de còpia de seguretat a continuació:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Introdueix la contrasenya d\'encriptació del dispositiu a continuació."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Introdueix la contrasenya d\'encriptació del dispositiu a continuació. També es farà servir per encriptar l\'arxiu de seguretat."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introdueix una contrasenya que utilitzaràs per a l\'encriptació de les dades de còpia de la seguretat completa. Si es deixa en blanc, s\'utilitzarà la teva contrasenya de còpia de seguretat actual:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si vols xifrar les dades de la còpia de seguretat completa, introdueix una contrasenya a continuació:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si la recuperació de dades està xifrada, introdueix la contrasenya a continuació:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-cs/strings.xml b/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
index 89085f3..0732cd8 100644
--- a/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Obnovit moje data"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Neobnovovat"</string>
<string name="current_password_text" msgid="8268189555578298067">"Zadejte prosím aktuální heslo pro zálohy níže:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Zadejte prosím své heslo pro šifrování zařízení."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Sem prosím zadejte bezpečnostní gesto. Toto gesto se použije také při šifrování záložního archivu."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Zadejte prosím heslo pro šifrování dat úplné zálohy. Pokud pole ponecháte prázdné, použije se aktuální heslo pro zálohy:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Chcete-li data úplné zálohy zašifrovat, zadejte heslo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Pokud jsou obnovená data šifrována, zadejte prosím heslo níže:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-da/strings.xml b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
index 5cbaab4..b3756d9 100644
--- a/packages/BackupRestoreConfirmation/res/values-da/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Gendan mine data"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Gendan ikke"</string>
<string name="current_password_text" msgid="8268189555578298067">"Indtast din aktuelle adgangskode til sikkerhedskopiering nedenfor:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Indtast adgangskoden til kryptering for din enhed nedenfor."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Indtast adgangskoden til kryptering for din enhed nedenfor. Denne bliver også brugt til at kryptere sikkerhedskopien af arkivet."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Angiv en adgangskode, som skal bruges til kryptering af alle dine sikkerhedsdata. Hvis dette felt er tomt, bruges din aktuelle adgangskode til sikkerhedskopiering:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du ønsker at kryptere sikkerhedsdataene, skal du indtaste en adgangskode nedenfor:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis gendannelsesdataene er krypteret, skal du angive adgangskoden nedenfor:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-de/strings.xml b/packages/BackupRestoreConfirmation/res/values-de/strings.xml
index e4bdb6b..7a19b2e 100644
--- a/packages/BackupRestoreConfirmation/res/values-de/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-de/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Meine Daten wiederherstellen"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Nicht wiederherstellen"</string>
<string name="current_password_text" msgid="8268189555578298067">"Geben Sie Ihr aktuelles Sicherungspasswort unten ein:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Geben Sie Ihr Passwort zur Geräteverschlüsselung unten ein."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Geben Sie Ihr Passwort zur Geräteverschlüsselung unten ein. Damit wird ebenfalls das Sicherungsarchiv verschlüsselt."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Geben Sie ein Passwort für die Verschlüsselung der vollständigen Sicherungsdaten ein. Wenn Sie dieses Feld leer lassen, wird Ihr aktuelles Sicherungspasswort verwendet:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Wenn Sie die gesamten Sicherungsdaten verschlüsseln möchten, geben Sie unten ein Passwort ein:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Geben Sie das Passwort unten ein, wenn die Daten für die Wiederherstellung verschlüsselt sind:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-el/strings.xml b/packages/BackupRestoreConfirmation/res/values-el/strings.xml
index 8571860..13a78cb 100644
--- a/packages/BackupRestoreConfirmation/res/values-el/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-el/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Αποκατάσταση των δεδομένων μου"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Να μην γίνει επαναφορά"</string>
<string name="current_password_text" msgid="8268189555578298067">"Εισαγάγετε τον τρέχοντα κωδικό πρόσβασής αντιγράφων ασφαλείας παρακάτω:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Εισαγάγετε τον κωδικό πρόσβασης κρυπτογράφησης συσκευής παρακάτω."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Εισαγάγετε τον κωδικό πρόσβασης για την κρυπτογράφηση συσκευής παρακάτω. Ο κωδικός αυτός θα χρησιμοποιηθεί και για την κρυπτογράφηση του αρχείου αντιγράφων ασφαλείας."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Εισαγάγετε έναν κωδικό πρόσβασης για χρήση για την κωδικοποίηση του πλήρους αντιγράφου ασφαλείας δεδομένων. Αν μείνει κενό, θα χρησιμοποιηθεί ο τρέχων κωδικός σας πρόσβασης:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Αν θέλετε να κρυπτογραφήσετε τα πλήρη δεδομένα αντιγράφων ασφαλείας, πληκτρολογήστε έναν κωδικό πρόσβασης παρακάτω:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Εάν η επαναφορά των δεδομένων είναι κρυπτογραφημένη, εισάγετε τον κωδικό πρόσβασης παρακάτω:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml b/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml
index b7d15cd..7b94e2e 100644
--- a/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restore my data"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Do not restore"</string>
<string name="current_password_text" msgid="8268189555578298067">"Please enter your current backup password below:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Please enter your device encryption password below."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Please enter your device encryption password below. This will also be used to encrypt the backup archive."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Please enter a password to use for encrypting the full backup data. If this is left blank, your current backup password will be used:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"If you wish to encrypt the full backup data, enter a password below:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"If the restore data is encrypted, please enter the password below:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
index 57e3f0c..7a732df 100644
--- a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar mis datos"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"No restaurar"</string>
<string name="current_password_text" msgid="8268189555578298067">"Introduce tu contraseña actual de copia de seguridad a continuación:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Introduce tu contraseña de encriptación del dispositivo a continuación:"</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Introduce tu contraseña de encriptación del dispositivo a continuación. Esto también se utilizará para encriptar la copia de seguridad."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce una contraseña para encriptar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se utilizará tu contraseña actual de copia de seguridad:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si deseas encriptar los datos de la copia de seguridad completa, introduce una contraseña a continuación:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de recuperación están encriptados, vuelve a introducir la contraseña a continuación:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-es/strings.xml b/packages/BackupRestoreConfirmation/res/values-es/strings.xml
index 8ae4762..ef97e3c 100644
--- a/packages/BackupRestoreConfirmation/res/values-es/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-es/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar mis datos"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"No restaurar"</string>
<string name="current_password_text" msgid="8268189555578298067">"Introduce a continuación la contraseña actual de copia de seguridad:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Introduce a continuación la contraseña de encriptación del dispositivo."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Introduce a continuación la contraseña de encriptación del dispositivo. Esta contraseña se usará también para encriptar el archivo de copia de seguridad."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce la contraseña que quieras usar para cifrar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se usará tu contraseña de copia de seguridad actual:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si quieres cifrar los datos de la copia de seguridad completa, introduce la contraseña a continuación:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de restauración están cifrados, introduce la contraseña a continuación:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
index c4f8da4..d202d74 100644
--- a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"بازیابی دادههای من"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"بازیابی نشود"</string>
<string name="current_password_text" msgid="8268189555578298067">"لطفاً گذرواژه نسخه پشتیبان فعلی خود را در زیر وارد کنید:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"لطفاً گذرواژه رمزگذاری دستگاه خود را در زیر وارد کنید."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"لطفاً گذرواژه رمزگذاری دستگاه خود را در زیر وارد کنید. این برای رمزگذاری بایگانی پشتیبان نیز مورد استفاده قرار میگیرد."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"لطفاً یک گذرواژه برای رمزگذاری دادههای کامل نسخه پشتیبانی وارد کنید. اگر این خالی بماند، گذرواژه فعلی نسخه پشتیبان مورد استفاده قرار خواهد گرفت:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"اگر میخواهید تمام نسخه پشتیبانی داده را رمزدار کنید، یک گذرواژه در زیر وارد کنید:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"اگر داده بازیابی شده رمزگذاری شده است، لطفاً گذرواژه را در زیر وارد کنید:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-fi/strings.xml b/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
index f50ce6a..80da29b 100644
--- a/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Palauta omat tiedot"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Älä palauta"</string>
<string name="current_password_text" msgid="8268189555578298067">"Kirjoita nykyinen varmuuskopioinnin salasana alla:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Kirjoita laitteen salauksen salasana alle."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Kirjoita laitteen salauksen salasana alle. Salasanaa käytetään myös varmuuskopioarkiston salaamiseen."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Anna salasana kaikkien varmuuskopiotietojen salaamiseksi. Jos tämä jätetään tyhjäksi, nykyistä varmuuskopioinnin salasanaa käytetään:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jos haluat salata kaikki varmuuskopiotiedot, kirjoita salasana alle:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jos palautustiedot on salattu, anna salasana alla:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-fr/strings.xml b/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
index 0f0a9df..9af37b0 100644
--- a/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurer mes données"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Ne pas restaurer"</string>
<string name="current_password_text" msgid="8268189555578298067">"Veuillez saisir votre mot de passe de sauvegarde actuel ci-dessous :"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Veuillez saisir le mot de passe de chiffrement de l\'appareil ci-dessous."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Veuillez saisir le mot de passe de chiffrement de l\'appareil ci-dessous. Il permettra également de chiffrer les archives de sauvegarde."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Veuillez saisir un mot de passe à utiliser pour chiffrer les données de sauvegarde complète. Si ce champ n\'est pas renseigné, votre mot de passe de sauvegarde actuel sera utilisé :"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si vous souhaitez chiffrer l\'ensemble des données de sauvegarde, veuillez saisir un mot de passe ci-dessous :"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si les données de restauration sont chiffrées, veuillez saisir le mot de passe ci-dessous :"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-hi/strings.xml b/packages/BackupRestoreConfirmation/res/values-hi/strings.xml
new file mode 100644
index 0000000..ccac982
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-hi/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_title" msgid="827563724209303345">"पूर्ण बैकअप"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"पूर्ण पुनर्स्थापना"</string>
+ <string name="backup_confirm_text" msgid="1878021282758896593">"कनेक्ट किए गए डेस्कटॉप कंप्यूटर से सभी डेटा के संपूर्ण बैकअप का अनुरोध किया गया है. क्या आप इसकी अनुमति देना चाहते हैं?"\n\n"यदि आपने स्वयं बैकअप का अनुरोध नहीं किया है, तो प्रक्रिया जारी रखने की अनुमति न दें."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"मेरे डेटा का बैकअप लें"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"बैकअप न लें"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"कनेक्ट किए गए डेस्कटॉप कंप्यूटर से सभी डेटा की पूर्ण पुनर्स्थापना का अनुरोध किया गया है. क्या आप इसकी अनुमति देना चाहते हैं?"\n\n"यदि आपने स्वयं पुनर्प्राप्ति का अनुरोध नहीं किया है, तो प्रक्रिया जारी रखने की अनुमति न दें. इससे वर्तमान में आपके उपकरण पर मौजूद डेटा बदल जाएगा!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"मेरा डेटा पुनर्स्थापित करें"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"पुनर्स्थापित न करें"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"कृपया नीचे अपना वर्तमान बैकअप पासवर्ड दर्ज करें:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया नीचे अपना उपकरण एन्क्रिप्शन पासवर्ड दर्ज करें."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया अपना उपकरण एन्क्रिप्शन पासवर्ड नीचे दर्ज करें. बैकअप संग्रहण को एन्क्रिप्ट करने के लिए भी इसका उपयोग किया जाएगा."</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया संपूर्ण बैकअप डेटा को एन्क्रिप्ट करने में उपयोग के लिए पासवर्ड दर्ज करें. यदि यह खाली छोड़ दिया जाता है, तो आपके वर्तमान बैकअप पासवर्ड का उपयोग किया जाएगा:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"यदि आप संपूर्ण बैकअप डेटा एन्क्रिप्ट करना चाहते हैं, तो नीचे पासवर्ड दर्ज करें:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"यदि पुनर्स्थापित डेटा को एन्क्रिप्ट किया गया है, तो कृपया नीचे पासवर्ड दर्ज करें:"</string>
+ <string name="toast_backup_started" msgid="550354281452756121">"बैकअप प्रारंभ हो रहा है..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"बैकअप पूर्ण"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"पुनर्स्थापना प्रारंभ हो रही है..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"पुनर्स्थापना समाप्त"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"कार्यवाही समयबाह्य हो गई"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
index ce06db9f..0c4cfd9 100644
--- a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
@@ -25,6 +25,10 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Vrati moje podatke"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Ne vraćaj"</string>
<string name="current_password_text" msgid="8268189555578298067">"U nastavku unesite trenutačnu zaporku za sigurnosnu kopiju:"</string>
+ <!-- no translation found for device_encryption_restore_text (1570864916855208992) -->
+ <skip />
+ <!-- no translation found for device_encryption_backup_text (5866590762672844664) -->
+ <skip />
<string name="backup_enc_password_text" msgid="4981585714795233099">"Unesite zaporku koju ćete upotrebljavati za kriptiranje podataka potpune sigurnosne kopije. Ako je ostavite praznom, bit će upotrijebljena vaša trenutačna zaporka za sigurnosno kopiranje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ako želite kriptirati podatke potpune sigurnosne kopije, u nastavku unesite zaporku:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ako su podaci za vraćanje kriptirani, unesite zaporku u nastavku:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-hu/strings.xml b/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
index b244f26..c2901c1 100644
--- a/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Adatok visszaállítása"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Ne állítsa vissza"</string>
<string name="current_password_text" msgid="8268189555578298067">"Kérjük, adja meg a jelenlegi biztonsági jelszót alább:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Kérjük, adja meg az eszköz titkosítási jelszavát."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Kérjük, adja meg az eszköz titkosítási jelszavát. Ezt használjuk a biztonsági mentések archívumának titkosításához is."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Kérjük, írjon be egy jelszót a teljes biztonsági mentés adatainak titkosításához. Ha üresen hagyja, jelenlegi biztonsági jelszavát fogjuk használni:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ha minden mentett adatot szeretne titkosítani, adjon meg egy jelszót alább:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ha a visszaállítási adatok titkosítva vannak, kérjük, adja meg a jelszót alább:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-in/strings.xml b/packages/BackupRestoreConfirmation/res/values-in/strings.xml
index 5a26304..65196bd 100644
--- a/packages/BackupRestoreConfirmation/res/values-in/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-in/strings.xml
@@ -25,6 +25,10 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Memulihkan data saya"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Jangan pulihkan"</string>
<string name="current_password_text" msgid="8268189555578298067">"Masukkan sandi cadangan Anda saat ini di bawah:"</string>
+ <!-- no translation found for device_encryption_restore_text (1570864916855208992) -->
+ <skip />
+ <!-- no translation found for device_encryption_backup_text (5866590762672844664) -->
+ <skip />
<string name="backup_enc_password_text" msgid="4981585714795233099">"Masukkan sandi yang digunakan untuk mengenkripsi data cadangan lengkap. Jika bidang ini dikosongkan, sandi cadangan Anda saat ini akan digunakan:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jika Anda ingin mengenkripsi data cadangan lengkap, masukkan sandi di bawah:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jika data pemulihan dienkripsi, masukkan sandi di bawah:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-it/strings.xml b/packages/BackupRestoreConfirmation/res/values-it/strings.xml
index bf624777..9442ae3 100644
--- a/packages/BackupRestoreConfirmation/res/values-it/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-it/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Ripristina i miei dati"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Non ripristinare"</string>
<string name="current_password_text" msgid="8268189555578298067">"Inserisci la tua password di backup corrente di seguito:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Inserisci la tua password di crittografia dispositivo di seguito."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Inserisci la tua password di crittografia dispositivo di seguito. Verrà utilizzata anche per crittografare l\'archivio di backup."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Inserisci una password da utilizzare per la crittografia dei dati di backup completi. Se non ne inserisci una, verrà utilizzata la tua password di backup corrente:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Se desideri crittografare tutti i dati di backup, inserisci una password qui di seguito:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Se i dati di ripristino sono crittografati, inserisci la password qui di seguito:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
index 056b245..a41944a 100644
--- a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"שחזר את הנתונים שלי"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"אל תשחזר"</string>
<string name="current_password_text" msgid="8268189555578298067">"הזן את סיסמת הגיבוי הנוכחית למטה:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"הזן את סיסמת ההצפנה של המכשיר שלך בהמשך."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"הזן את סיסמת ההצפנה של המכשיר שלך בהמשך. הסיסמה תשמש גם להצפנת ארכיון הגיבוי."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"הזן סיסמה שתשמש להצפנה של נתוני הגיבוי המלא. אם תשאיר שדה זה ריק, ייעשה שימוש בסיסמת הגיבוי הנוכחית שלך:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"אם אתה רוצה להצפין את נתוני הגיבוי המלא, הזן סיסמה בהמשך:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"אם נתוני השחזור מוצפנים, הזן את הסיסמה למטה:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-ja/strings.xml b/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
index 9b575c9..5ddcc22 100644
--- a/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
@@ -25,6 +25,10 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"データを復元する"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"復元しない"</string>
<string name="current_password_text" msgid="8268189555578298067">"以下に現在のバックアップ用のパスワードを入力してください:"</string>
+ <!-- no translation found for device_encryption_restore_text (1570864916855208992) -->
+ <skip />
+ <!-- no translation found for device_encryption_backup_text (5866590762672844664) -->
+ <skip />
<string name="backup_enc_password_text" msgid="4981585714795233099">"フルバックアップデータの暗号化に使用するパスワードを入力してください。空白のままにした場合、現在のバックアップ用のパスワードが使用されます:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"フルバックアップのデータを暗号化する場合は、以下にパスワードを入力してください:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"復元するデータが暗号化されている場合、以下にパスワードを入力してください:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-ko/strings.xml b/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
index 0fca3cd..4137058 100644
--- a/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"데이터 복원"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"복원하지 않음"</string>
<string name="current_password_text" msgid="8268189555578298067">"아래에 현재 사용 중인 백업 비밀번호를 입력하세요."</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"아래에 기기 암호화 비밀번호를 입력하세요."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"아래에 기기 암호화 비밀번호를 입력하세요. 백업 자료실을 암호화할 때에도 사용됩니다."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"전체 백업 데이터를 암호화하려면 사용할 비밀번호를 입력하세요. 공백으로 남겨 두면 현재 백업 비밀번호가 사용됩니다."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"전체 백업 데이터를 암호화하려면 아래에 비밀번호를 입력하세요."</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"복원 데이터가 암호화되어 있는 경우, 아래에 비밀번호를 입력하세요."</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-lt/strings.xml b/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
index bd49320..4e9efc5 100644
--- a/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Atkurti mano duomenis"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Neatkurti"</string>
<string name="current_password_text" msgid="8268189555578298067">"Toliau įveskite dabartinį atsarginės kopijos slaptažodį:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Toliau įveskite įrenginio šifruotės slaptažodį."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Toliau įveskite įrenginio šifruotės slaptažodį. Jis bus naudojamas ir atsarginės kopijos archyvui šifruoti."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Įveskite slaptažodį, kuris bus naudojamas visai atsarginei duomenų kopijai šifruoti. Jei reikšmės neįvesite, bus naudojamas dabartinis atsarginės kopijos slaptažodis:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jei norite užšifruoti visą atsarginę duomenų kopiją, įveskite slaptažodį:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jei atkūrimo duomenys užšifruoti, įveskite toliau nurodytą slaptažodį:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-lv/strings.xml b/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
index a6f3d67..b8ce24b 100644
--- a/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Atjaunot manus datus"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Neatjaunot"</string>
<string name="current_password_text" msgid="8268189555578298067">"Lūdzu, tālāk ievadiet pašreizējo dublējuma paroli:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Lūdzu, ievadiet ierīces šifrēšanas paroli."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Lūdzu, ievadiet ierīces šifrēšanas paroli. Tā tiks arī izmantota, lai šifrētu dublējuma arhīvu."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Lūdzu, ievadiet paroli, kas tiks izmantota dublējuma datu pilnīgai šifrēšanai. Ja paroles lauciņu atstāsiet tukšu, tiks izmantota jūsu pašreizējā dublējuma parole:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ja vēlaties pilnībā šifrēt dublējuma datus, tālāk ievadiet paroli:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ja atjaunošanas dati ir šifrēti, lūdzu, ievadiet tālāk paroli:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-ms/strings.xml b/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
index f0b6b62..bcfa615 100644
--- a/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Pulihkan data saya"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Jangan kembalikan"</string>
<string name="current_password_text" msgid="8268189555578298067">"Sila masukkan kata laluan sandaran semasa anda di bawah:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Sila masukkan kata laluan penyulitan peranti anda di bawah."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Sila masukkan kata laluan penyulitan peranti anda di bawah. Ini juga akan digunakan untuk menyulitkan arkib sandaran."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Sila masukkan kata laluan yang hendak digunakan untuk menyulitkan data sandaran lengkap. Jika dibiarkan kosong, kata laluan sandaran semasa anda akan digunakan:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jika anda ingin menyulitkan data sandaran lengkap, masukkan kata laluan di bawah:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jika pemulihan data disulitkan, sila masukkan kata laluan di bawah:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-nb/strings.xml b/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
index a54138d..a04d90d 100644
--- a/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Gjenopprett dataene mine"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Ikke gjenopprett"</string>
<string name="current_password_text" msgid="8268189555578298067">"Skriv inn ditt nåværende passord for sikkerhetskopiering nedenfor:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Skriv inn krypteringspassordet for enheten din nedenfor."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Skriv inn krypteringspassordet for enheten din nedenfor. Dette brukes også til å kryptere arkivet for sikkerhetskopier."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Skriv inn et passord for kryptering av full sikkerhetskopi. Hvis feltet er tomt, brukes det gjeldende passordet ditt for sikkerhetskopiering:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du vil kryptere alle de sikkerhetskopierte dataene, skriver du inn et passord nedenfor:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis de gjenopprettede dataene er krypterte, må du skrive inn passordet nedenfor:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-nl/strings.xml b/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
index 24e6c3b..d525429 100644
--- a/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Mijn gegevens herstellen"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Niet herstellen"</string>
<string name="current_password_text" msgid="8268189555578298067">"Geef hieronder uw huidige back-upwachtwoord op:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Geef hieronder uw wachtwoord voor apparaatcodering op."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Geef hieronder uw wachtwoord voor apparaatcodering op. Dit wordt ook gebruikt om het back-uparchief te coderen."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Geef een wachtwoord op dat u wilt gebruiken voor het coderen van de gegevens van de volledige back-up. Als u dit leeg laat, wordt uw huidige back-upwachtwoord gebruikt:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Als u de gegevens van de volledige back-up wilt coderen, geeft u daarvoor hieronder een wachtwoord op:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Als deze herstelgegevens zijn gecodeerd, geeft u hieronder het wachtwoord op:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-pl/strings.xml b/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
index 04552d6..1a70bb0 100644
--- a/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Przywróć moje dane"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Nie przywracaj"</string>
<string name="current_password_text" msgid="8268189555578298067">"Wpisz poniżej aktualne hasło kopii zapasowej:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Wpisz poniżej hasło szyfrowania urządzenia."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Wpisz poniżej hasło szyfrowania urządzenia. Służy ono również do szyfrowania archiwum kopii zapasowych."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Wpisz hasło do zaszyfrowania pełnej kopii zapasowej. Jeśli pozostawisz puste pole, zostanie użyte aktualne hasło kopii zapasowej:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jeśli chcesz zaszyfrować pełną kopię zapasową, wprowadź poniżej hasło:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jeśli przywracane dane są zaszyfrowane, wpisz poniżej hasło:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
index 3eca061..9540300 100644
--- a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar os meus dados"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Não restaurar"</string>
<string name="current_password_text" msgid="8268189555578298067">"Introduza a palavra-passe de cópia de segurança atual abaixo:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Introduza a palavra-passe de encriptação do aparelho abaixo."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Introduza a palavra-passe de encriptação do aparelho abaixo. Esta também será utilizada para encriptar o arquivo da cópia de segurança."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduza uma palavra-passe a utilizar para encriptar os dados da cópia de segurança completa. Se deixar o campo em branco, será utilizada a palavra-passe de cópia de segurança atual."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Se pretender encriptar os dados da cópia de segurança completa, introduza uma palavra-passe abaixo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados a restaurar estiverem encriptados, introduza a palavra-passe abaixo:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
index 680b538..99fd2e1 100644
--- a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurar meus dados"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Não restaurar"</string>
<string name="current_password_text" msgid="8268189555578298067">"Digite sua senha de backup atual abaixo:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Insira sua senha de criptografia do dispositivo abaixo."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Insira sua senha de criptografia do dispositivo abaixo. Ela também será usada para criptografar o arquivo de backup."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Digite uma senha para usar para criptografar os dados de backup por completo. Se isso for deixado em branco, sua senha atual de backup será usada:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Se você deseja criptografar os dados de backup por completo, digite uma senha abaixo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados restaurados forem criptografada, digite a senha abaixo:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
index b36680f..82cdfaf 100644
--- a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
@@ -25,6 +25,10 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Restabiliţi datele dvs."</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Nu restabiliţi"</string>
<string name="current_password_text" msgid="8268189555578298067">"Introduceţi mai jos parola actuală pentru copia de rezervă:"</string>
+ <!-- no translation found for device_encryption_restore_text (1570864916855208992) -->
+ <skip />
+ <!-- no translation found for device_encryption_backup_text (5866590762672844664) -->
+ <skip />
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduceţi o parolă pentru a o utiliza la criptarea datelor copiei de rezervă complete. Dacă acest câmp rămâne necompletat, pentru copierea de rezervă se va utiliza parola dvs. actuală."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Dacă doriţi să criptaţi datele copiei de rezervă complete, introduceţi o parolă mai jos:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Dacă datele pentru restabilire sunt criptate, introduceţi parola mai jos:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
index 91c5755..2ce3ff6 100644
--- a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Восстановить данные"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Не восстанавливать"</string>
<string name="current_password_text" msgid="8268189555578298067">"Введите пароль для резервного копирования:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Введите пароль для шифрования устройства."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Введите пароль для шифрования устройства, а также архива резервных копий."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Введите пароль для шифрования всех резервных данных. Если поле останется пустым, будет использован текущий пароль:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Чтобы зашифровать все резервные данные, введите пароль:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Если восстановленные данные зашифрованы, введите пароль:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
index bc8ff97..b432165 100644
--- a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Obnoviť údaje"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Neobnoviť"</string>
<string name="current_password_text" msgid="8268189555578298067">"Zadajte svoje aktuálne heslo pre zálohu nižšie:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Zadajte svoje heslo na šifrovanie zariadenia nižšie."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Zadajte svoje heslo na šifrovanie zariadenia nižšie. Bude tiež použité na šifrovanie archívu zálohy."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Zadajte heslo, ktoré sa použije pri šifrovaní údajov úplnej zálohy. Ak pole ponecháte prázdne, použije sa vaše aktuálne heslo zálohy:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ak chcete šifrovať údaje úplnej zálohy, zadajte heslo nižšie:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ak sú údaje obnovenia šifrované, zadajte heslo nižšie:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-sl/strings.xml b/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
index d634810..5df0449 100644
--- a/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Obnovi moje podatke"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Ne obnovi"</string>
<string name="current_password_text" msgid="8268189555578298067">"Spodaj vnesite trenutno geslo za varnostno kopiranje:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Vnesite geslo za šifriranje naprave spodaj."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Vnesite geslo za šifriranje naprave spodaj. Uporabljeno bo tudi za šifriranje arhiva varnostnih kopij."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Vnesite geslo za šifriranje podatkov popolnega varnostnega kopiranja. Če to pustite prazno, bo uporabljeno trenutno geslo za varnostno kopiranje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Če želite šifrirati vse varnostno kopirane podatke, spodaj vnesite geslo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Če so podatki za obnovitev šifrirani, spodaj vnesite geslo:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-sr/strings.xml b/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
index 5b3b250..0a5859e 100644
--- a/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Врати моје податке"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Не враћај"</string>
<string name="current_password_text" msgid="8268189555578298067">"Унесите тренутну лозинку резервне копије у наставку:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Унесите лозинку уређаја за шифровање у наставку."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Унесите лозинку уређаја за шифровање. Ово ће се користити и за шифровање резервне архиве."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Унесите лозинку коју ћете користити за шифровање података потпуне резервне копије. Ако то поље оставите празно, користиће се тренутна лозинка резервне копије:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ако желите да шифрујете податке потпуне резервне копије, унесите лозинку у наставку."</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ако су подаци за враћање шифровани, унесите лозинку у наставку:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
index 4ac0a54..167fce3 100644
--- a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Återställ mina data"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Återställ inte"</string>
<string name="current_password_text" msgid="8268189555578298067">"Ange det aktuella lösenordet för säkerhetskopian nedan:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Ange lösenordet för enhetskryptering nedan."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Ange lösenordet för enhetskryptering nedan. Lösenordet kommer även att användas för att kryptera säkerhetskopian."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Ange ett lösenord för kryptering av alla säkerhetskopierade data. Om det här lämnas tomt kommer ditt nuvarande lösenord för säkerhetskopior att användas:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Om du vill kryptera alla säkerhetskopierade data anger du ett lösenord nedan:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Om återställda data är krypterade anger du lösenordet nedan:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
index 2069d83..f0961a2 100644
--- a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Rejesha upya data yangu"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Usirejeshe upya"</string>
<string name="current_password_text" msgid="8268189555578298067">"Tafadhali ingiza nenosiri lako la chelezo hapo chini:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Tafadhali ingiza nenosiri ya usimbaji fiche ya kifaa chako hapo chini."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Tafadhali ingiza nenosiri yako ya msimbo fiche hapo chini. Hii pia itatumika kusimba fiche jalidi ya hifadhi."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Tafadhali ingiza nenosiri la kutumia kwa usimbaji fiche wa chelezo ya data kamili. Ikiwa hii itawachwa wazi, nenosiri lako la sasa litatumika:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ikiwa unataka kusimba fiche data nzima ya kucheleza, ingiza nenosiri la hapo chini:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ikiwa data iliyorejeshwa upya, tafadhali ingiza nenosiri lililo hapo chini:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-th/strings.xml b/packages/BackupRestoreConfirmation/res/values-th/strings.xml
index dc76577..2d08620 100644
--- a/packages/BackupRestoreConfirmation/res/values-th/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-th/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"คืนค่าข้อมูลของฉัน"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"ไม่คืนค่า"</string>
<string name="current_password_text" msgid="8268189555578298067">"โปรดป้อนรหัสผ่านการสำรองข้อมูลปัจจุบันของคุณด้านล่างนี้:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"โปรดป้อนรหัสผ่านการเข้ารหัสอุปกรณ์ของคุณด้านล่าง"</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"โปรดป้อนรหัสผ่านการเข้ารหัสอุปกรณ์ของคุณด้านล่างนี้ ซึ่งจะใช้ในการเข้ารหัสที่เก็บข้อมูลสำรองด้วย"</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"โปรดป้อนรหัสผ่านเพื่อใช้สำหรับเข้ารหัสข้อมูลที่สำรองแบบเต็มรูปแบบ หากเว้นว่างไว้ รหัสผ่านการสำรองข้อมูลปัจจุบันของคุณจะถูกใช้:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"หากคุณต้องการเข้ารหัสข้อมูลที่สำรองเต็มรูปแบบ โปรดป้อนรหัสผ่านด้านล่างนี้:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"หากมีการเข้ารหัสข้อมูลที่คืนค่า โปรดป้อนรหัสผ่านด้านล่างนี้:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-tl/strings.xml b/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
index 99f2e48..97662b5 100644
--- a/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Ipanumbalik ang aking data"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Huwag ipanumbalik"</string>
<string name="current_password_text" msgid="8268189555578298067">"Pakilagay ang iyong kasalukuyang backup na password sa ibaba:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Mangyaring ilagay ang password ng pag-encrypt ng iyong device sa ibaba."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Mangyaring ilagay ang password ng pag-encrypt ng iyong device sa ibaba. Gagamitin rin ito upang i-encrypt ang backup na archive."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Mangyaring maglagay ng password na gamitin sa pag-e-encrypt ng buong data sa pag-backup. Kung iiwanan itong blangko, gagamitin ang iyong kasalukuyang backup na password:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Kung nais mong i-encrypt ang buong data ng backup, maglagay ng password sa ibaba:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Kung naka-encrypt ang data sa pagpapanumbalik, pakilagay ang password sa ibaba:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-tr/strings.xml b/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
index 2bbdd33..62b9f4b 100644
--- a/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Verilerimi geri yükle"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Geri yükleme"</string>
<string name="current_password_text" msgid="8268189555578298067">"Lütfen mevcut yedekleme şifrenizi aşağıya girin:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Lütfen cihazı şifrelemek için kullandığınız şifreyi aşağıya girin."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Lütfen cihazınızı şifrelemek için kullandığınız şifreyi aşağıya girin. Bu şifre aynı zamanda yedekleme arşivini şifrelemek için de kullanılacaktır."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Tam yedekleme verilerini şifrelemek için lütfen bir şifre girin. Boş bırakılırsa, mevcut yedekleme şifreniz kullanılır:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Yedeklenen tüm verileri şifrelemek isterseniz, aşağıya bir şifre girin:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Geri yükleme verileri şifreliyse, lütfen şifreyi aşağıya girin:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-uk/strings.xml b/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
index 9b2df90..f3dfa1c 100644
--- a/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Відновити мої дані"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Не відновлювати"</string>
<string name="current_password_text" msgid="8268189555578298067">"Введіть свій поточний пароль резервного копіювання нижче:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Нижче введіть свій пароль шифрування пристрою."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Нижче введіть свій пароль шифрування пристрою. Він також використовуватиметься для шифрування архіву резервної копії."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Введіть пароль, який використовується для шифрування повного резервного копіювання даних. Якщо залишити це поле порожнім, буде використано поточний пароль резервного копіювання."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Якщо ви хочете зашифрувати повне резервне копіювання даних, введіть пароль нижче:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Якщо дані для відновлення зашифровано, введіть пароль нижче:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-vi/strings.xml b/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
index ad98262..ac34a993 100644
--- a/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Khôi phục dữ liệu của tôi"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Không khôi phục"</string>
<string name="current_password_text" msgid="8268189555578298067">"Vui lòng nhập mật khẩu sao lưu hiện tại của bạn bên dưới:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Vui lòng nhập mật khẩu mã hóa thiết bị của bạn bên dưới."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Vui lòng nhập mật khẩu mã hóa thiết bị của bạn bên dưới. Mật khẩu này cũng được sử dụng để mã hóa kho lưu trữ sao lưu."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Vui lòng nhập mật khẩu dùng để mã hóa toàn bộ dữ liệu sao lưu. Nếu trường này bị bỏ trống, mật khẩu sao lưu hiện tại của bạn sẽ được sử dụng:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Nếu bạn muốn mã hóa toàn bộ dữ liệu sao lưu, hãy nhập mật khẩu bên dưới:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Nếu dữ liệu khôi phục được mã hóa, vui lòng nhập mật khẩu bên dưới:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
index 40a1d1f..5f3ca05 100644
--- a/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"恢复我的数据"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"不恢复"</string>
<string name="current_password_text" msgid="8268189555578298067">"请在下方输入您的当前备份密码:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"请在下方输入您的设备加密密码。"</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"请在下方输入您的设备加密密码。此密码还会用于加密备份存档。"</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"请输入用于加密完整备份数据的密码。如果留空,系统将会使用您当前的备份密码:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想为整个备份数据加密,请在下方输入密码:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"如果恢复数据已加密,请在下方输入密码:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
index 00c24df..5afb226 100644
--- a/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"還原我的資料"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"不要還原"</string>
<string name="current_password_text" msgid="8268189555578298067">"請在下面輸入您目前的備份密碼:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"請在下方輸入您的裝置加密密碼。"</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"請在下方輸入您的裝置加密密碼,這也會用來加密備份封存檔。"</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"請輸入完整備份資料加密專用的密碼。如果您沒有輸入密碼,系統會使用您目前的備用密碼:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想要將完整備份資料進行加密,請在下面輸入一組密碼:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"如果還原的資料經過加密處理,請在下面輸入密碼:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
index 98e76cd..2fe0c0f 100644
--- a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
@@ -25,6 +25,8 @@
<string name="allow_restore_button_label" msgid="3081286752277127827">"Buyisela esimweni imininingo yami"</string>
<string name="deny_restore_button_label" msgid="1724367334453104378">"Ungabuyiseli esimweni"</string>
<string name="current_password_text" msgid="8268189555578298067">"Sicela ufake i-password yakho yamanje yokwenza isipele ngezansi:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Uyacelwa ukuba ufake ihasiwedi efakwe kudivayisi ngezansi."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Uyacelwa ukuba ufake iphasiwedi efakwe kudivayisi yakho ngezansi. lokhu kuzosetshenziswa ukufaka kusilondoloza sokusiza lapho kudingeka."</string>
<string name="backup_enc_password_text" msgid="4981585714795233099">"Sicela ufake i-password ezosetshenziselwa ukubhala ngokufihlekileyo imininingo eyesekwe ngokulondoloza. Uma lokhu kushiywe kungabhalwe lutho, kuzosetshenziswa i-password yokweseka ngokulondoloza yamanje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Uma ufuna ukufaka ikhowudi kwimininingo yonke eyesekelwe ngokulondoloza faka i-passowrd engezansi:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Uma insiza yokubuyiselwa esimweni kwmininingo ibhalwe ngokufihlekileyo, sicela ufake i-password ngezansi:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values/strings.xml b/packages/BackupRestoreConfirmation/res/values/strings.xml
index e91c6e2..5c90fd0 100644
--- a/packages/BackupRestoreConfirmation/res/values/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values/strings.xml
@@ -35,8 +35,12 @@
<!-- Text for message to user that they must enter their predefined backup password in order to perform this operation. -->
<string name="current_password_text">Please enter your current backup password below:</string>
+ <!-- Text for message to user that they must enter their device encryption password in order to perform this restore operation. -->
+ <string name="device_encryption_restore_text">Please enter your device encryption password below.</string>
+ <!-- Text for message to user that they must enter their device encryption password in order to perform this backup operation. -->
+ <string name="device_encryption_backup_text">Please enter your device encryption password below. This will also be used to encrypt the backup archive.</string>
- <!-- Text for message to user that they can must enter an encryption password to use for the full backup operation. -->
+ <!-- Text for message to user that they must enter an encryption password to use for the full backup operation. -->
<string name="backup_enc_password_text">Please enter a password to use for encrypting the full backup data. If this is left blank, your current backup password will be used:</string>
<!-- Text for message to user that they may optionally supply an encryption password to use for a full backup operation. -->
<string name="backup_enc_password_optional">If you wish to encrypt the full backup data, enter a password below:</string>
diff --git a/packages/BackupRestoreConfirmation/src/com/android/backupconfirm/BackupRestoreConfirmation.java b/packages/BackupRestoreConfirmation/src/com/android/backupconfirm/BackupRestoreConfirmation.java
index fbdf3cc..7f1d059 100644
--- a/packages/BackupRestoreConfirmation/src/com/android/backupconfirm/BackupRestoreConfirmation.java
+++ b/packages/BackupRestoreConfirmation/src/com/android/backupconfirm/BackupRestoreConfirmation.java
@@ -27,6 +27,8 @@
import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.storage.IMountService;
+import android.util.Log;
import android.util.Slog;
import android.view.View;
import android.widget.Button;
@@ -60,8 +62,10 @@
Handler mHandler;
IBackupManager mBackupManager;
+ IMountService mMountService;
FullObserver mObserver;
int mToken;
+ boolean mIsEncrypted;
boolean mDidAcknowledge;
TextView mStatusView;
@@ -152,6 +156,7 @@
}
mBackupManager = IBackupManager.Stub.asInterface(ServiceManager.getService(Context.BACKUP_SERVICE));
+ mMountService = IMountService.Stub.asInterface(ServiceManager.getService("mount"));
mHandler = new ObserverHandler(getApplicationContext());
final Object oldObserver = getLastNonConfigurationInstance();
@@ -174,8 +179,23 @@
mEncPassword = (TextView) findViewById(R.id.enc_password);
TextView curPwDesc = (TextView) findViewById(R.id.password_desc);
- // We vary the password prompt depending on whether one is predefined
- if (!haveBackupPassword()) {
+ // We vary the password prompt depending on whether one is predefined, and whether
+ // the device is encrypted.
+ mIsEncrypted = deviceIsEncrypted();
+ if (mIsEncrypted) {
+ Log.d(TAG, "Device is encrypted: requiring encryption pw");
+ TextView pwPrompt = (TextView) findViewById(R.id.password_desc);
+ // this password is mandatory; we hide the other options during backup
+ if (layoutId == R.layout.confirm_backup) {
+ pwPrompt.setText(R.string.device_encryption_backup_text);
+ TextView tv = (TextView) findViewById(R.id.enc_password);
+ tv.setVisibility(View.GONE);
+ tv = (TextView) findViewById(R.id.enc_password_desc);
+ tv.setVisibility(View.GONE);
+ } else {
+ pwPrompt.setText(R.string.device_encryption_restore_text);
+ }
+ } else if (!haveBackupPassword()) {
curPwDesc.setVisibility(View.GONE);
mCurPassword.setVisibility(View.GONE);
if (layoutId == R.layout.confirm_backup) {
@@ -226,10 +246,12 @@
mDidAcknowledge = true;
try {
+ CharSequence encPassword = (mIsEncrypted)
+ ? mCurPassword.getText() : mEncPassword.getText();
mBackupManager.acknowledgeFullBackupOrRestore(mToken,
allow,
String.valueOf(mCurPassword.getText()),
- String.valueOf(mEncPassword.getText()),
+ String.valueOf(encPassword),
mObserver);
} catch (RemoteException e) {
// TODO: bail gracefully if we can't contact the backup manager
@@ -237,6 +259,16 @@
}
}
+ boolean deviceIsEncrypted() {
+ try {
+ return (mMountService.getEncryptionState() != IMountService.ENCRYPTION_STATE_NONE);
+ } catch (Exception e) {
+ // If we can't talk to the mount service we have a serious problem; fail
+ // "secure" i.e. assuming that the device is encrypted.
+ return true;
+ }
+ }
+
boolean haveBackupPassword() {
try {
return mBackupManager.hasBackupPassword();
diff --git a/packages/DefaultContainerService/res/values-hi/strings.xml b/packages/DefaultContainerService/res/values-hi/strings.xml
new file mode 100644
index 0000000..ad85379
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-hi/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="service_name" msgid="4841491635055379553">"पैकेज पहुंच सहायक"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/drawable-hdpi/ic_launcher_settings.png b/packages/SettingsProvider/res/drawable-hdpi/ic_launcher_settings.png
index ff34a7f..8a5a2f7 100644
--- a/packages/SettingsProvider/res/drawable-hdpi/ic_launcher_settings.png
+++ b/packages/SettingsProvider/res/drawable-hdpi/ic_launcher_settings.png
Binary files differ
diff --git a/packages/SettingsProvider/res/drawable-mdpi/ic_launcher_settings.png b/packages/SettingsProvider/res/drawable-mdpi/ic_launcher_settings.png
index b08ad3b..803439f 100644
--- a/packages/SettingsProvider/res/drawable-mdpi/ic_launcher_settings.png
+++ b/packages/SettingsProvider/res/drawable-mdpi/ic_launcher_settings.png
Binary files differ
diff --git a/packages/SettingsProvider/res/drawable-xhdpi/ic_launcher_settings.png b/packages/SettingsProvider/res/drawable-xhdpi/ic_launcher_settings.png
new file mode 100644
index 0000000..ec3c8ea
--- /dev/null
+++ b/packages/SettingsProvider/res/drawable-xhdpi/ic_launcher_settings.png
Binary files differ
diff --git a/packages/SettingsProvider/res/values-hi/strings.xml b/packages/SettingsProvider/res/values-hi/strings.xml
new file mode 100644
index 0000000..0b0bd8a
--- /dev/null
+++ b/packages/SettingsProvider/res/values-hi/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="4567566098528588863">"सेटिंग संग्रहण"</string>
+</resources>
diff --git a/packages/SystemUI/res/drawable-hdpi/recents_callout_line.9.png b/packages/SystemUI/res/drawable-hdpi/recents_callout_line.9.png
deleted file mode 100644
index 335d5a8..0000000
--- a/packages/SystemUI/res/drawable-hdpi/recents_callout_line.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_normal.9.png b/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_normal.9.png
new file mode 100644
index 0000000..d000f7e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/recents_thumbnail_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/recents_callout_line.9.png b/packages/SystemUI/res/drawable-mdpi/recents_callout_line.9.png
deleted file mode 100644
index 724a5cd..0000000
--- a/packages/SystemUI/res/drawable-mdpi/recents_callout_line.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_normal.9.png b/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_normal.9.png
new file mode 100644
index 0000000..f19dc93
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/recents_thumbnail_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/recents_callout_line.9.png b/packages/SystemUI/res/drawable-xhdpi/recents_callout_line.9.png
deleted file mode 100644
index 1bd018a..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/recents_callout_line.9.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg_normal.9.png b/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg_normal.9.png
new file mode 100644
index 0000000..80fc849
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/recents_thumbnail_bg_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
index 58355bd..83c4faf 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
@@ -26,16 +26,17 @@
android:paddingRight="@dimen/status_bar_recents_item_padding">
<RelativeLayout android:id="@+id/recent_item"
- android:layout_gravity="bottom"
+ android:layout_gravity="center_vertical"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:paddingBottom="@*android:dimen/status_bar_height">
+ android:paddingTop="@*android:dimen/status_bar_height">
<FrameLayout android:id="@+id/app_thumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
+ android:layout_marginTop="@dimen/status_bar_recents_thumbnail_top_margin"
android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin"
android:background="@drawable/recents_thumbnail_bg"
android:foreground="@drawable/recents_thumbnail_fg">
@@ -44,19 +45,22 @@
android:layout_height="@dimen/status_bar_recents_thumbnail_height"
android:visibility="invisible"
/>
-
- <ImageView android:id="@+id/app_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
- android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
- android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
- android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
- android:adjustViewBounds="true"
- android:visibility="invisible"
- />
</FrameLayout>
+ <ImageView android:id="@+id/app_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
+ android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true"
+ android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
+ android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
+ android:scaleType="centerInside"
+ android:adjustViewBounds="true"
+ android:visibility="invisible"
+ />
+
<TextView android:id="@+id/app_label"
android:layout_width="@dimen/status_bar_recents_app_label_width"
android:layout_height="wrap_content"
@@ -67,6 +71,7 @@
android:layout_alignLeft="@id/app_thumbnail"
android:layout_below="@id/app_thumbnail"
android:layout_marginTop="@dimen/status_bar_recents_text_description_padding"
+ android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin"
android:singleLine="true"
android:ellipsize="marquee"
android:visibility="invisible"
diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
index 8c82eb1..3d8b9d6 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
@@ -26,32 +26,10 @@
android:paddingBottom="@dimen/status_bar_recents_item_padding">
<RelativeLayout android:id="@+id/recent_item"
+ android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"
- android:layout_width="match_parent">
+ android:layout_width="wrap_content">
- <FrameLayout android:id="@+id/app_thumbnail"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentTop="true"
- android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin"
- android:background="@drawable/recents_thumbnail_bg"
- android:foreground="@drawable/recents_thumbnail_fg">
- <ImageView android:id="@+id/app_thumbnail_image"
- android:layout_width="@dimen/status_bar_recents_thumbnail_width"
- android:layout_height="@dimen/status_bar_recents_thumbnail_height"
- android:visibility="invisible"
- />
- <ImageView android:id="@+id/app_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
- android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
- android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
- android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
- android:adjustViewBounds="true"
- />
- </FrameLayout>
<TextView android:id="@+id/app_label"
android:layout_width="@dimen/status_bar_recents_app_label_width"
android:layout_height="wrap_content"
@@ -61,12 +39,26 @@
android:scrollHorizontally="true"
android:layout_alignParentLeft="true"
android:layout_alignTop="@id/app_icon"
+ android:paddingTop="2dp"
android:layout_marginLeft="@dimen/status_bar_recents_app_label_left_margin"
android:singleLine="true"
android:ellipsize="marquee"
android:textColor="@color/status_bar_recents_app_label_color"
/>
-
+ <FrameLayout android:id="@+id/app_thumbnail"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_toRightOf="@id/app_label"
+ android:layout_marginLeft="@dimen/status_bar_recents_thumbnail_left_margin"
+ android:background="@drawable/recents_thumbnail_bg"
+ android:foreground="@drawable/recents_thumbnail_fg">
+ <ImageView android:id="@+id/app_thumbnail_image"
+ android:layout_width="@dimen/status_bar_recents_thumbnail_width"
+ android:layout_height="@dimen/status_bar_recents_thumbnail_height"
+ android:visibility="invisible"
+ />
+ </FrameLayout>
<View android:id="@+id/recents_callout_line"
android:layout_width="@dimen/status_bar_recents_app_label_width"
android:layout_height="1dip"
@@ -79,6 +71,18 @@
android:background="@drawable/recents_callout_line"
/>
+ <ImageView android:id="@+id/app_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/app_label"
+ android:layout_marginLeft="@dimen/status_bar_recents_app_icon_left_margin"
+ android:layout_marginTop="@dimen/status_bar_recents_app_icon_top_margin"
+ android:maxWidth="@dimen/status_bar_recents_app_icon_max_width"
+ android:maxHeight="@dimen/status_bar_recents_app_icon_max_height"
+ android:scaleType="centerInside"
+ android:adjustViewBounds="true"
+ />
+
<TextView android:id="@+id/app_description"
android:layout_width="@dimen/status_bar_recents_app_label_width"
android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res/layout/global_screenshot.xml b/packages/SystemUI/res/layout/global_screenshot.xml
index 6cb8799..6d70135 100644
--- a/packages/SystemUI/res/layout/global_screenshot.xml
+++ b/packages/SystemUI/res/layout/global_screenshot.xml
@@ -25,6 +25,7 @@
android:id="@+id/global_screenshot_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_gravity="center"
android:background="@drawable/global_screenshot_background"
android:visibility="gone">
<ImageView android:id="@+id/global_screenshot"
@@ -32,9 +33,4 @@
android:layout_height="wrap_content"
android:adjustViewBounds="true" />
</FrameLayout>
- <ImageView android:id="@+id/global_screenshot_flash"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#FFFFFFFF"
- android:visibility="gone" />
</FrameLayout>
diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index a63893e..af2c93c 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -77,7 +77,6 @@
android:layout_height="match_parent"
android:singleLine="true"
android:paddingRight="6dip"
- android:textSize="16sp"
android:gravity="center_vertical|left"
/>
</LinearLayout>
@@ -89,17 +88,19 @@
android:animationCache="false"
android:orientation="horizontal" >
<ImageSwitcher android:id="@+id/tickerIcon"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginRight="8dip"
+ android:layout_width="@dimen/status_bar_icon_size"
+ android:layout_height="@dimen/status_bar_icon_size"
+ android:layout_marginRight="4dip"
>
<com.android.systemui.statusbar.AnimatedImageView
- android:layout_width="25dip"
- android:layout_height="25dip"
+ android:layout_width="@dimen/status_bar_icon_size"
+ android:layout_height="@dimen/status_bar_icon_size"
+ android:scaleType="center"
/>
<com.android.systemui.statusbar.AnimatedImageView
- android:layout_width="25dip"
- android:layout_height="25dip"
+ android:layout_width="@dimen/status_bar_icon_size"
+ android:layout_height="@dimen/status_bar_icon_size"
+ android:scaleType="center"
/>
</ImageSwitcher>
<com.android.systemui.statusbar.phone.TickerView android:id="@+id/tickerText"
@@ -109,13 +110,13 @@
android:paddingTop="2dip"
android:paddingRight="10dip">
<TextView
- android:textAppearance="@*android:style/TextAppearance.StatusBar.Ticker"
+ android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
/>
<TextView
- android:textAppearance="@*android:style/TextAppearance.StatusBar.Ticker"
+ android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index 3e2def5..cd4e37c 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -35,7 +35,7 @@
android:background="@drawable/notification_header_bg"
>
<com.android.systemui.statusbar.policy.DateView android:id="@+id/date"
- android:textAppearance="@style/TextAppearance.StatusBar.Clock"
+ android:textAppearance="@style/TextAppearance.StatusBar.Date"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
diff --git a/packages/SystemUI/res/layout/status_bar_no_recent_apps.xml b/packages/SystemUI/res/layout/status_bar_no_recent_apps.xml
index 47ffb83..1675773 100644
--- a/packages/SystemUI/res/layout/status_bar_no_recent_apps.xml
+++ b/packages/SystemUI/res/layout/status_bar_no_recent_apps.xml
@@ -27,8 +27,8 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textSize="24dp"
- android:textColor="#ffffffff"
+ android:textSize="20dp"
+ android:textColor="@android:color/holo_blue_light"
android:text="@string/status_bar_no_recent_apps"
android:gravity="center_horizontal"
android:layout_gravity="center"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 05d27cf..cde7613 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Strek om skerm te vul"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Versoenbaarheid-zoem"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"As \'n program vir \'n kleiner skerm ontwerp is, sal \'n zoemkontrole naby die horlosie verskyn"</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Skermkiekie in galery gestoor"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kon nie skermkiekie stoor nie. Eksterne geheue kan dalk in gebruik wees."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB-lêeroordrag-opsies"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Heg as \'n mediaspeler (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Heg as \'n kamera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter geaktiveer."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Luitoestel-vibreer."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Luitoestel stil."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data gedeaktiveer"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data gedeaktiveer"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobieldata gedeaktiveer"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 6090664..e7a19cc 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"ማያ ለመሙለት ሳብ"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"የተኳኋኝነት አጉላ"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"ትግበራ ለትንሽ ማያ ሲነደፍ፣ የአጉላ መቆመጣጠሪያ በሰዓት በኩል ብቅ ይላል።"</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"የማያፎቶዎችወደ ማዕከለ ስዕላት ተቀምጠዋል"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"የማያ ፎቶማስቀመጥ አልተቻለም። ውጫዊ ማከማቻም አገልግሎት ላይ ሊሆን ይችላል።"</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"የUSB ፋይል ሰደዳ አማራጮች"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"እንደ ማህደረ አጫዋች (MTP) ሰካ"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"እንደ ካሜራ (PTP) ሰካ"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ነቅቷል።"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"የስልክ ጥሪ ይንዘር።"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"የስልክ ጥሪ ፀጥታ።"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G ውሂብ ቦዝኗል"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G ውሂብ ቦዝኗል"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"የተንቀሳቃሽ ውሂብ ቦዝኗል"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index dd10e29..8c35ba7 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"توسيع بملء الشاشة"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"تكبير/تصغير التوافق"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"عند تصميم تطبيق لشاشة أصغر، سيظهر عنصر تحكم في التكبير/التصغير بجوار الساعة."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"تم حفظ لقطة الشاشة في معرض الصور."</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"تعذر حفظ لقطة الشاشة. قد يكون التخزين الخارجي قيد الاستخدام."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"خيارات نقل الملفات عبر USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"تحميل كمشغل وسائط (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"تحميل ككاميرا (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"تم تمكين المبرقة الكاتبة."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"رنين مع الاهتزاز."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"رنين صامت."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"تم تعطيل بيانات شبكات الجيل الثاني والجيل الثالث"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"تم تعطيل بيانات شبكة الجيل الرابع"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"تم تعطيل بيانات الجوال"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 033f563..1b5244e 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Разпъване – запълва екрана"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Промяна на мащаба за съвместимост"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Когато дадено приложение е създадено за по-малък екран, до часовника ще се покаже управление за промяна на мащаба."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Екранната снимка е запазена в галерията"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Екранната снимка не можа да бъде запазена. Възможно е външното хранилище да се използва."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Опции за пренос на файлове чрез USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Свързване като медиен плейър (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Свързване като камера (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter бе активиран."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Вибрира при звънене."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Звънът е заглушен."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G данните са деактивирани"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G данните са деактивирани"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Мобилните данни са деактивирани"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 8cf6b0d..c9bda33 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Estira per omplir pant."</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilitat"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Quan una aplicació s\'hagi dissenyat per a una pantalla més petita, apareixerà un control de zoom al costat del rellotge."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla desada a la galeria"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"No s\'ha pogut desar la captura de pantalla. És possible que l\'emmagatzematge extern estigui en ús."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opcions transf. fitxers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Munta com a reproductor multimèdia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Munta com a càmera (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletip activat."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Mode vibració."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mode silenci."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dades 2G-3G desactivades"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dades 4G desactivades"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Dades mòbils desactivades"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index b069de4..1ae0071 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Na celou obrazovku"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilní přiblížení"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Pokud je aplikace navržena pro menší obrazovku, zobrazí se vedle hodin ovládací prvek přiblížení."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Snímek obrazovky byl uložen do Galerie"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Snímek obrazovky se nepodařilo uložit. Je možné, že se externí úložiště právě používá."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti přenosu souborů pomocí rozhraní USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Připojit jako přehrávač médií (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Připojit jako fotoaparát (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Rozhraní TeleTypewriter zapnuto."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrační vyzvánění."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tiché vyzvánění."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datové přenosy 2G a 3G jsou zakázány"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datové přenosy 4G jsou zakázány"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilní data jsou zakázána"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index b770bb1..f1704b1 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Stræk til fuld skærm"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitetszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Når en app er udviklet til en mindre skærm, vises der en zoomfunktion ved uret."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Skærmbilledet gemmes i Galleri"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kunne ikke gemme skærmbillede. Ekstern lagring kan være i brug."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Muligheder for USB-filoverførsel"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Isæt som en medieafspiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Isæt som et kamera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktiveret."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringervibration."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Lydløs."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data er deaktiveret"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktiveret"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobildata er deaktiveret"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 33ea24f..e5d23ad 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -26,10 +26,10 @@
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Aus Liste entfernen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-Info"</string>
<string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Keine neuen Apps"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zuletzt verwendete Apps schließen"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Kürzlich verwendete Apps schließen"</string>
<plurals name="status_bar_accessibility_recent_apps">
- <item quantity="one" msgid="5854176083865845541">"1 zuletzt verwendete App"</item>
- <item quantity="other" msgid="1040784359794890744">"%d zuletzt verwendete Apps"</item>
+ <item quantity="one" msgid="5854176083865845541">"1 kürzlich verwendete App"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d kürzlich verwendete Apps"</item>
</plurals>
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Keine Benachrichtigungen"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktuell"</string>
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Auf Bildschirmgröße anpassen"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitätszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Wenn eine App für einen kleineren Bildschirm ausgelegt ist, wird ein Zoom-Steuerelement neben der Uhr angezeigt."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Screenshot in Galerie gespeichert"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Screenshot konnte nicht gespeichert werden. Möglicherweise wird der externe Speicher gerade verwendet."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB-Dateiübertragungsoptionen"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Als Medienplayer (MTP) bereitstellen"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Als Kamera (PTP) bereitstellen"</string>
@@ -71,7 +83,7 @@
<string name="accessibility_back" msgid="567011538994429120">"Zurück"</string>
<string name="accessibility_home" msgid="8217216074895377641">"Startbildschirm"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
- <string name="accessibility_recent" msgid="8571350598987952883">"Zuletzt verwendete Apps"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"Kürzlich verwendete Apps"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Schaltfläche zum Ändern der Eingabemethode"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Schaltfläche für Kompatibilitätszoom"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom auf einen größeren Bildschirm"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Schreibtelefonie aktiviert"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Klingeltonmodus \"Vibration\""</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Klingelton lautlos"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-/3G-Daten deaktiviert"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-Daten deaktiviert"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobile Daten deaktiviert"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index b02f731..aca9004 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Προβoλή σε πλήρη οθ."</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Ζουμ για συμβατότητα"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Όταν μια εφαρμογή έχει σχεδιαστεί για προβολή σε μικρότερη οθόνη, δίπλα από το ρολόι θα εμφανιστεί ένα στοιχείο ελέγχου ζουμ."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Το στιγμιότυπο οθόνης αποθηκεύτηκε στη συλλογή"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Δεν ήταν δυνατή η αποθήκευση στιγμιότυπου οθόνης. Μπορεί να χρησιμοποιείται εξωτερικός χώρος αποθήκευσης."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Επιλογές μεταφοράς αρχείων μέσω USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Προσάρτηση ως μονάδας αναπαραγωγής μέσων (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Προσάρτηση ως κάμερας (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Το TeleTypewriter ενεργοποιήθηκε."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Δόνηση ειδοποίησης ήχου."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ειδοποίηση ήχου στο αθόρυβο."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Τα δεδομένα 2G-3G απενεργοποιήθηκαν"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Τα δεδομένα 4G απενεργοποιήθηκαν"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Τα δεδομένα κινητής τηλεφωνίας απενεργοποιήθηκαν"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 9b102a9..d8b0408 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibility Zoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"When an app was designed for a smaller screen, a zoom control will appear by the clock."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Screenshot saved to Gallery"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Could not save screenshot. External storage may be in use."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter enabled."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringer vibrate."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G data disabled"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data disabled"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobile data disabled"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index c122f7f..b21a1c7 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Estirar p/ ocupar la pantalla"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilidad"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Cuando una aplicación fue diseñada para una pantalla más pequeña, aparece un control de zoom junto al reloj."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla guardada en la Galería"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"No se pudo guardar la captura de pantalla. Es posible que el almacenamiento externo esté en uso."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opciones de transferencia de archivos por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Activar como reproductor de medios (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Activar como cámara (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter habilitado"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Timbre en vibración"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Timbre en silencio"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos de 2G-3G inhabilitados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datos de 4G inhabilitados"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Se inhabilitaron los datos móviles"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index d413623..367791a 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Expandir para ajustar"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilidad"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Si la aplicación se ha diseñado para una pantalla más pequeña, aparecerá un control de zoom junto al reloj."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de pantalla guardada en la galería"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"No se ha podido guardar la captura de pantalla. Es posible que el almacenamiento externo esté en uso."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opciones de transferencia de archivos por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Activar como reproductor de medios (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Activar como cámara (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletipo habilitado"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Modo vibración"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Modo silencio"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos 2G-3G inhabilitados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datos 4G inhabilitados"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Datos móviles inhabilitados"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index b54e962..ef1bf8e 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"گسترده کردن برای پر کردن صفحه"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"بزرگنمایی سازگاری"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"اگر یک برنامه برای صفحه کوچک تری طراحی شده باشد، یک کنترل بزرگنمایی توسط ساعت نشان داده می شود."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"تصویر از صفحه در گالری ذخیره شد"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"نمیتواند عکس صفحه را ذخیره کند. ممکن است محل ذخیره خارجی در حال استفاده باشد."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"گزینه های انتقال فایل USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"نصب به عنوان دستگاه پخش رسانه (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"تصب به عنوان دوربین (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter فعال شد."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"زنگ لرزشی."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"زنگ بیصدا."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"داده 2G-3G غیرفعال شد"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"داده 4G غیر فعال شد"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"دادههای تلفن همراه غیرفعال است"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 1ae591d..5ffa449 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Venytä koko näyttöön"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Yhteensopivuustilan zoomaus"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Jos sovellus on suunniteltu pienemmälle näytölle, kellon viereen tulee näkyviin zoomaussäädin."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Kuvakaappaus on tallennettu galleriaan"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kuvakaappauksen tallennus epäonnistui. Ulkoinen tallennustila voi olla käytössä."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB-tiedostonsiirtoasetukset"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Käytä mediasoittimena (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Käytä kamerana (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Tekstipuhelin käytössä."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Soittoääni: värinä."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Soittoääni: äänetön."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-tiedonsiirto pois käytöstä"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-tiedonsiirto pois käytöstä"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobiilitiedonsiirto pois käytöstä"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index d453bd2..29c608e 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Étirer pour remplir l\'écran"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilité"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Si une application a été conçue pour un écran plus petit, une commande de zoom s\'affiche à côté de l\'horloge."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Capture d\'écran enregistrée dans la galerie."</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Impossible d\'enregistrer la capture d\'écran. Il est possible que le périphérique de stockage externe soit en cours d\'utilisation."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Options transfert fichiers USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Installer en tant que lecteur multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Installer en tant qu\'appareil photo (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Téléscripteur activé"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Sonnerie en mode vibreur"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonnerie en mode silencieux"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Données 2G-3G désactivées"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Données 4G désactivées"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Données mobiles désactivées"</string>
diff --git a/packages/SystemUI/res/values-hi-land/strings.xml b/packages/SystemUI/res/values-hi-land/strings.xml
new file mode 100644
index 0000000..de6a6c9
--- /dev/null
+++ b/packages/SystemUI/res/values-hi-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="toast_rotation_locked" msgid="7609673011431556092">"स्क्रीन को अभी भूदृश्य अभिविन्यास में लॉक किया गया है."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hi-large/strings.xml b/packages/SystemUI/res/values-hi-large/strings.xml
new file mode 100644
index 0000000..7bcfcdd
--- /dev/null
+++ b/packages/SystemUI/res/values-hi-large/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="status_bar_clear_all_button" msgid="4661583896803349732">"सभी साफ़ करें"</string>
+ <string name="notifications_off_title" msgid="1860117696034775851">"सूचनाएं बंद"</string>
+ <string name="notifications_off_text" msgid="1439152806320786912">"सूचनाओं को पुन: चालू करने के लिए यहां टैप करें."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
new file mode 100644
index 0000000..688cc1b
--- /dev/null
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Copyright (c) 2009, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="7164937344850004466">"सिस्टम UI"</string>
+ <string name="status_bar_clear_all_button" msgid="7774721344716731603">"साफ़ करें"</string>
+ <string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"परेशान न करें"</string>
+ <string name="status_bar_please_disturb_button" msgid="3345398298841572813">"सूचनाएं दिखाएं"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"सूची से निकालें"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"एप्लिकेशन जानकारी"</string>
+ <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"कोई हाल ही के एप्लिकेशन नहीं"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"हाल ही के एप्लिकेशन ख़ारिज करें"</string>
+ <plurals name="status_bar_accessibility_recent_apps">
+ <item quantity="one" msgid="5854176083865845541">"1 हाल ही का एप्लिकेशन"</item>
+ <item quantity="other" msgid="1040784359794890744">"%d हाल ही के एप्लिकेशन"</item>
+ </plurals>
+ <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कोई सूचना नहीं"</string>
+ <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ऑनगोइंग"</string>
+ <string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाएं"</string>
+ <string name="battery_low_title" msgid="7923774589611311406">"कृपया चार्जर कनेक्ट करें"</string>
+ <string name="battery_low_subtitle" msgid="1752040062087829196">"बैटरी कम हो रही है."</string>
+ <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> शेष"</string>
+ <string name="invalid_charger" msgid="4549105996740522523">"USB चार्जिंग समर्थित नहीं है."\n"केवल आपूर्ति किए गए चार्जर का उपयोग करें."</string>
+ <string name="battery_low_why" msgid="7279169609518386372">"बैटरी उपयोग"</string>
+ <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"सेटिंग"</string>
+ <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+ <string name="status_bar_settings_airplane" msgid="4879879698500955300">"हवाई जहाज मोड"</string>
+ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"स्क्रीन स्वत: घुमाएं"</string>
+ <string name="status_bar_settings_mute_label" msgid="554682549917429396">"म्यूट करें"</string>
+ <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"स्वत:"</string>
+ <string name="status_bar_settings_notifications" msgid="397146176280905137">"सूचनाएं"</string>
+ <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth टीदर किया गया"</string>
+ <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"इनपुट पद्धतियां कॉन्फ़िगर करें"</string>
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"भौतिक कीबोर्ड का उपयोग करें"</string>
+ <string name="usb_device_permission_prompt" msgid="3816016361969816903">"एप्लिकेशन <xliff:g id="APPLICATION">%1$s</xliff:g> को USB उपकरण में पहुंच की अनुमति दें?"</string>
+ <string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"एप्लिकेशन <xliff:g id="APPLICATION">%1$s</xliff:g> को USB एसेसरी में पहुंच की अनुमति दें?"</string>
+ <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"जब यह USB उपकरण कनेक्ट किया जाए, तब <xliff:g id="ACTIVITY">%1$s</xliff:g> को खोलें?"</string>
+ <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"जब यह USB एसेसरी कनेक्ट की जाए, तब <xliff:g id="ACTIVITY">%1$s</xliff:g> को खोलें?"</string>
+ <string name="usb_accessory_uri_prompt" msgid="6332150684964235705">"इंस्टॉल की हुई एप्लिकेशन इस USB एसेसरी के साथ काम नहीं करती. <xliff:g id="URL">%1$s</xliff:g> पर इस एसेसरी के बारे में अधिक जानें"</string>
+ <string name="title_usb_accessory" msgid="4966265263465181372">"USB सहायक साधन"</string>
+ <string name="label_view" msgid="6304565553218192990">"देखें"</string>
+ <string name="always_use_device" msgid="1450287437017315906">"इस USB उपकरण के लिए डिफ़ॉल्ट रूप से उपयोग करें"</string>
+ <string name="always_use_accessory" msgid="1210954576979621596">"इस USB एसेसरी के लिए डिफ़ॉल्ट रूप से उपयोग करें"</string>
+ <string name="compat_mode_on" msgid="6623839244840638213">"स्क्रीन भरने हेतु ज़ूम करें"</string>
+ <string name="compat_mode_off" msgid="4434467572461327898">"स्क्रीन को भरने के लिए खींचें"</string>
+ <string name="compat_mode_help_header" msgid="7020175705401506719">"संगतता ज़ूम"</string>
+ <string name="compat_mode_help_body" msgid="4946726776359270040">"जब किसी छोटी स्क्रीन के लिए एप्लिकेशन को डिज़ाइन किया जाता है, तो ज़ूम नियंत्रण क्लॉक के पास दिखाई देगा."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
+ <string name="usb_preference_title" msgid="6551050377388882787">"USB फ़ाइल स्थानांतरण विकल्प"</string>
+ <string name="use_mtp_button_title" msgid="4333504413563023626">"मीडिया प्लेयर के रूप में माउंट करें (MTP)"</string>
+ <string name="use_ptp_button_title" msgid="7517127540301625751">"कैमरे के रूप में माउंट करें (PTP)"</string>
+ <string name="installer_cd_button_title" msgid="8485631662288445893">"Mac के लिए Android फ़ाइल स्थानां. एप्लि. इंस्टॉल करें"</string>
+ <string name="accessibility_back" msgid="567011538994429120">"वापस जाएं"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"होम"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"मेनू"</string>
+ <string name="accessibility_recent" msgid="8571350598987952883">"हाल ही के एप्लिकेशन"</string>
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट पद्धति बटन स्विच करें."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"संगतता ज़ूम बटन."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"छोटी से बड़ी स्क्रीन पर ज़ूम करें."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth कनेक्ट किया गया."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth डिस्कनेक्ट किया गया."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"कोई बैटरी नहीं."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"बैटरी एक बार."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"बैटरी दो बार."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"बैटरी तीन बार."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"बैटरी पूर्ण."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"कोई फ़ोन नहीं."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"फ़ोन एक बार."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"फ़ोन दो बार."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"फोन तीन बार."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"फ़ोन सिग्नल पूर्ण."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"कोई डेटा नहीं."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"डेटा एक बार."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"डेटा दो बार."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"डेटा तीन बार."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"पूर्ण डेटा सिग्नल."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"कोई WiFi नहीं."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"WiFi एक बार."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"WiFi दो बार."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"WiFi तीन बार."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"पूर्ण WiFi सिग्नल."</string>
+ <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+ <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+ <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+ <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+ <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+ <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"किनारा"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"कोई सिम नहीं."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth टेदरिंग."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"हवाई जहाज मोड."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> प्रतिशत बैटरी."</string>
+ <string name="accessibility_settings_button" msgid="799583911231893380">"सिस्टम सेटिंग."</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"सूचनाएं."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"सूचना साफ़ करें"</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS सक्षम."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त करना."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"टेलीटाइपराइटर सक्षम."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"रिंगर कंपन."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"रिंगर मौन."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G डेटा अक्षम"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G डेटा अक्षम"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"मोबाइल डेटा अक्षम"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"डेटा अक्षम"</string>
+ <string name="data_usage_disabled_dialog" msgid="6524467913290900042">"डेटा उपयोग की निर्दिष्ट सीमा पूरी हो गई है."\n\n"अतिरिक्त डेटा का उपयोग करने पर वाहक शुल्क लगाए जा सकते है."</string>
+ <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"डेटा पुन: सक्षम करें"</string>
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"कोई इंटरनेट कनेक्शन नहीं"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi कनेक्ट किया गया"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS को खोजा जा रहा है"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS द्वारा सेट किया गया स्थान"</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"सभी सूचनाएं साफ़ करें."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index be1133c..017c72f 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Rastegni i ispuni zaslon"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilni zum"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kada je aplikacija dizajnirana za manji zaslon, kontrole zumiranja prikazuju se pored sata."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Snimak zaslona spremljen u Galeriju"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Ne mogu spremiti snimak zaslona. Možda se upotrebljava vanjska pohrana."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opcije USB prijenosa datoteka"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Učitaj kao media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Učitaj kao fotoaparat (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter je omogućen."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibracija softvera zvona."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Softver zvona utišan."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Onemogućeni su 2G-3G podaci"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Onemogućeni su 4G podaci"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Onemogućeni su mobilni podaci"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 9cf5ea6..73ae3dc 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Nyújtás kitöltéshez"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitás -- nagyítás/kicsinyítés"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ha egy alkalmazást kisebb képernyőre terveztek, akkor a nagyítás/kicsinyítés vezérlője az óra mellett jelenik meg."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Képernyőkép mentve a galériába"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Nem lehet menteni a képernyőképet. Lehet, hogy a külső tároló használatban van."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB-fájlátvitel beállításai"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Csatlakoztatás médialejátszóként (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Csatlakoztatás kameraként (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter engedélyezve."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Csengő rezeg."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Csengő néma."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G adatforgalom letiltva"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G adatforgalom letiltva"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobil adatforgalom letiltva"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 203683f2..1f53b1b 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Rentangkn utk mngisi layar"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom Kompatibilitas"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Saat apl dirancang untuk layar yang lebih kecil, kontrol zoom akan tampil di dekat jam."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Tangkapan layar disimpan ke Galeri"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Tidak dapat menyimpan tangkapan layar. Penyimpan eksternal mungkin sedang digunakan."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opsi transfer berkas USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pasang sebagai pemutar media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pasang sebagai kamera (PTP)"</string>
@@ -110,12 +122,14 @@
<string name="accessibility_battery_level" msgid="7451474187113371965">"Baterai <xliff:g id="NUMBER">%d</xliff:g> persen."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Setelan sistem."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Pemberitahuan."</string>
- <string name="accessibility_remove_notification" msgid="3603099514902182350">"Mengapus pemberitahuan."</string>
+ <string name="accessibility_remove_notification" msgid="3603099514902182350">"Menghapus pemberitahuan."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS diaktifkan."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Memperoleh GPS."</string>
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter diaktifkan."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pendering bergetar."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dinonaktifkan"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dinonaktifkan"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Data seluler dinonaktifkan"</string>
@@ -126,5 +140,5 @@
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tersambung"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Menelusuri GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasi yang disetel oleh GPS"</string>
- <string name="accessibility_clear_all" msgid="5235938559247164925">"Mengapus semua pemberitahuan."</string>
+ <string name="accessibility_clear_all" msgid="5235938559247164925">"Menghapus semua pemberitahuan."</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index de38f8a..c2cb0e7 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Estendi per riemp. schermo"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom compatibilità"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Se un\'applicazione è stata progettata per uno schermo più piccolo, accanto all\'orologio viene visualizzato un controllo dello zoom."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Screenshot salvato nella galleria"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Impossibile salvare lo screenshot. L\'archivio esterno potrebbe essere in uso."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opzioni trasferimento file USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Monta come lettore multimediale (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Monta come videocamera (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Telescrivente abilitata."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Suoneria vibrazione."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Suoneria silenziosa."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dati 2G-3G disattivati"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dati 4G disattivati"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Dati mobili disattivati"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 7902159..cdd36a6 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"מתח כדי למלא את המסך"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"שינוי מרחק מתצוגה לתאימות"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"כאשר יישום מיועד למסך קטן יותר, פקד של מרחק מתצוגה יופיע ליד השעון."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"צילום המסך נשמר בגלריה"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"אין אפשרות לשמור את צילום המסך. ייתכן שנעשה שימוש באמצעי אחסון חיצוני."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"אפשרויות העברת קבצים ב-USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"טען כנגן מדיה (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"טען כמצלמה (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter מופעל"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"צלצול ורטט."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"צלצול שקט."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"נתוני 2G-3G מושבתים"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"נתוני 4G מושבתים"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"נתונים לנייד מושבתים"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 74f2c5a..47292fb 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"画面サイズに合わせて拡大"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"互換ズーム"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"より小型の画面向けのアプリの場合は、ズームコントロールが時計のそばに表示されます。"</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"スクリーンショットがギャラリーに保存されました"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"スクリーンショットを保存できませんでした。外部ストレージが使用中の可能性があります。"</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USBファイル転送オプション"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"メディアプレーヤー(MTP)としてマウント"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"カメラ(PTP)としてマウント"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"テレタイプライターが有効です。"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"バイブレーション着信。"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"マナーモード着信。"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G~3Gデータが無効になりました"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4Gデータが無効になりました"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"モバイルデータが無効になりました"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index b159c17..e0a0ecf 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"전체화면 모드로 확대"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"호환성 확대/축소"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"앱이 작은 화면에 맞도록 설계된 경우 시계 옆에 확대/축소 컨트롤이 표시됩니다."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"캡쳐화면이 갤러리에 저장되었습니다."</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"캡쳐 화면을 저장할 수 없습니다. 외부 저장소를 사용 중인 것 같습니다."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB 파일 전송 옵션"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"미디어 플레이어로 마운트(MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"카메라로 마운트(PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"전신 타자기(TTY)가 사용 설정되었습니다."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"벨소리가 진동입니다."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"벨소리가 무음입니다."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G 데이터 사용중지됨"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G 데이터 사용중지됨"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"모바일 데이터 사용중지됨"</string>
diff --git a/packages/SystemUI/res/values-land/dimens.xml b/packages/SystemUI/res/values-land/dimens.xml
index 32ebc80..e7c8b1f 100644
--- a/packages/SystemUI/res/values-land/dimens.xml
+++ b/packages/SystemUI/res/values-land/dimens.xml
@@ -23,15 +23,18 @@
<!-- How far the thumbnail for a recent app appears from left edge -->
<dimen name="status_bar_recents_thumbnail_left_margin">0dp</dimen>
<!-- How far the thumbnail for a recent app appears from top edge -->
- <dimen name="status_bar_recents_thumbnail_top_margin">12dp</dimen>
+ <dimen name="status_bar_recents_thumbnail_top_margin">28dp</dimen>
<!-- Padding for text descriptions -->
<dimen name="status_bar_recents_text_description_padding">8dp</dimen>
<!-- Width of application label text -->
<dimen name="status_bar_recents_app_label_width">156dip</dimen>
<!-- Left margin of application label text -->
- <dimen name="status_bar_recents_app_label_left_margin">16dip</dimen>
+ <dimen name="status_bar_recents_app_label_left_margin">12dip</dimen>
<!-- Margin between recents container and glow on the right -->
<dimen name="status_bar_recents_right_glow_margin">0dip</dimen>
<!-- Padding between recents items -->
<dimen name="status_bar_recents_item_padding">2dip</dimen>
+ <!-- Where to place the app icon over the thumbnail -->
+ <dimen name="status_bar_recents_app_icon_left_margin">8dp</dimen>
+ <dimen name="status_bar_recents_app_icon_top_margin">8dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 6a57589..b7f5aba 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Ištempti, kad atit. ekr."</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Suderinamumo mastelio keitimas"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kai programa bus pritaikyta mažesniam ekranui, mastelio keitimo valdiklis bus parodytas šalia laikrodžio."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekrano kopija išsaugota galerijoje"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Nepavyko išsaugoti ekrano kopijos. Gali būti naudojama išorinė atmintis."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB failo perdavimo parinktys"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Įmontuoti kaip medijos grotuvą (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Įmontuoti kaip fotoaparatą (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"„TeleTypewriter“ įgalinta."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibracija skambinant."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Skambutis tylus."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G duomenys neleidžiami"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G duomenys neleidžiami"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilieji duomenys neleidžiami"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index a3706ec..d6409c2 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Stiepiet, lai aizp. ekr."</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Saderības tālummaiņa"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ja lietotne ir paredzēta mazākam ekrānam, blakus pulkstenim tiks parādīta tālummaiņas vadīkla."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekrānuzņēmums ir saglabāts galerijā."</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Nevarēja saglabāt ekrānuzņēmumu. Iespējams, tiek izmantota ārējā atmiņa."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB failu pārsūtīšanas opcijas"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pievienot kā multivides atskaņotāju (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pievienot kā kameru (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletaips ir iespējots."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zvana signāls — vibrācija."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvana signāls — kluss."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G dati atspējoti"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G dati atspējoti"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilie dati atspējoti"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 9fdcd72..f84af39 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Regang utk memenuhi skrin"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Keserasian Zum"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Apabila apl direka untuk skrin yang lebih kecil, kawalan zum akan muncul di tepi jam."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Tangkapan skrin disimpan ke Galeri"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Tidak boleh menyimpan tangkapan skrin. Storan luaran mungkin sedang digunakan."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Pilihan pemindahan fail USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Lekapkan sebagai pemain media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Lekapkan sebagai kamera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Mesin Teletaip didayakan."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pendering bergetar."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dilumpuhkan"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dilumpuhkan"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Data mudah alih dilumpuhkan"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 85d2ca2..4db2e07 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Strekk for å fylle skjerm"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilitets-zooming"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Når en app er utformet for en mindre skjerm, vises det en zoomkontroll ved klokken."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Skjermdump ble lagret i galleriet"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kunne ikke lagre skjermdump. Det kan hende at ekstern lagring er i bruk."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Altern. for USB-filoverføring"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Sett inn som mediespiller (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Sett inn som kamera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter er aktivert."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibreringsmodus."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Stille modus."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data er deaktivert"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktivert"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobildata er deaktivert"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index badf128..2a5cc66 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Rek uit v. schermvulling"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibiliteitszoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Wanneer een app is ontworpen voor een kleiner scherm, wordt naast de klok een zoomknop weergegeven."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Schermafbeelding is opgeslagen in de galerij"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kan schermafbeelding niet opslaan. Mogelijk is de externe opslag in gebruik."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opties voor USB-bestandsoverdracht"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Koppelen als mediaspeler (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Koppelen als camera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ingeschakeld."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Belsoftware trilt."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Belsoftware stil."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-/3G-gegevens uitgeschakeld"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-gegevens uitgeschakeld"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobiele gegevens uitgeschakeld"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 85a75a6..00cbf95 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Rozciągnij, aby wypełnić ekran"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Powiększenie w trybie zgodności"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Jeśli aplikacja została przystosowana do mniejszego ekranu, obok zegara zostanie wyświetlony element sterujący powiększeniem."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Zrzut ekranu został zapisany w galerii."</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Nie można zapisać zrzutu ekranu. Pamięć zewnętrzna może być używana."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB – opcje przesyłania plików"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Podłącz jako odtwarzacz multimedialny (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Podłącz jako aparat (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Dalekopis (TTY) włączony."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Dzwonek z wibracjami."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Dzwonek wyciszony."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Wyłączono transmisję danych 2G/3G"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Wyłączono transmisję danych 4G"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Wyłączono komórkową transmisję danych"</string>
diff --git a/packages/SystemUI/res/values-port/dimens.xml b/packages/SystemUI/res/values-port/dimens.xml
index 2bafd30..de7b836 100644
--- a/packages/SystemUI/res/values-port/dimens.xml
+++ b/packages/SystemUI/res/values-port/dimens.xml
@@ -18,15 +18,18 @@
<resources>
<!-- Recent Applications parameters -->
<!-- How far the thumbnail for a recent app appears from left edge -->
- <dimen name="status_bar_recents_thumbnail_left_margin">110dp</dimen>
+ <dimen name="status_bar_recents_thumbnail_left_margin">20dp</dimen>
<!-- Padding for text descriptions -->
<dimen name="status_bar_recents_text_description_padding">8dp</dimen>
<!-- Width of application label text -->
<dimen name="status_bar_recents_app_label_width">88dip</dimen>
<!-- Left margin of application label text -->
- <dimen name="status_bar_recents_app_label_left_margin">16dip</dimen>
+ <dimen name="status_bar_recents_app_label_left_margin">0dip</dimen>
<!-- Margin between recents container and glow on the right -->
<dimen name="status_bar_recents_right_glow_margin">100dip</dimen>
<!-- Padding between recents items -->
<dimen name="status_bar_recents_item_padding">0dip</dimen>
+ <!-- Where to place the app icon over the thumbnail -->
+ <dimen name="status_bar_recents_app_icon_left_margin">0dp</dimen>
+ <dimen name="status_bar_recents_app_icon_top_margin">8dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index aa2ac40..c65ad95 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Esticar p. caber em ec. int."</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Compatibilidade de zoom"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Sempre que uma aplicação tiver sido concebida para ecrãs mais pequenos, aparecerá um controlo de zoom junto ao relógio."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de ecrã guardada na Galeria"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Não foi possível guardar a captura de ecrã. O armazenamento externo poderá estar a ser utilizado."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opções de transm. de fich. USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montar como leitor de multimédia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como câmara (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Teletipo ativado."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Campainha em vibração."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Campainha em silêncio."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Os dados 2G-3G estão desativados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Os dados 4G estão desativados"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Os dados móveis estão desativados"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index d845012..a37fdca 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Ampliar p/ preencher tela"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom em modo de compatibilidade"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Quando um aplicativo é desenvolvido para uma tela menor, um controle de zoom é exibido perto do relógio."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"A captura de tela foi salva na Galeria"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Não foi possível salvar a captura de tela. Armazenamento externo pode estar em uso."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opções transf. arq. por USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Conectar como media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como uma câmera (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTYpewriter ativado."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibração da campainha."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Campainha silenciosa."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dados 2G e 3G desativados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dados 4G desativados"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Dados móveis desativados"</string>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index 5e5c374..90271a3 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -92,9 +92,19 @@
<skip />
<!-- no translation found for compat_mode_help_body (4946726776359270040) -->
<skip />
- <!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
<skip />
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
<skip />
<!-- no translation found for usb_preference_title (6551050377388882787) -->
<skip />
@@ -200,6 +210,8 @@
<skip />
<!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
<skip />
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
<skip />
<!-- no translation found for data_usage_disabled_dialog_4g_title (4789143363492682629) -->
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index bf10f04..084993b 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Înt. pt. a umple ecranul"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom de compatibilitate"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Atunci când o aplicaţie a fost concepută pentru un ecran mai mic, o comandă pentru mărire/micşorare va apărea alături de ceas."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Captura de ecran a fost salvată în Galerie"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Captura de ecran nu a putut fi salvată. Este posibil să fie utilizată stocarea externă."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opţiuni pentru transferul de fişiere prin USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montaţi ca player media (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montaţi drept cameră foto (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter activat."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrare sonerie."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonerie silenţioasă."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datele 2G-3G au fost dezactivate"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datele 4G au fost dezactivate"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Datele mobile au fost dezactivate"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 09f6e6a..c23d82b 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -23,8 +23,8 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Очистить"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Не беспокоить"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показать уведомления"</string>
- <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Удаление приложения из списка"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Сведения о приложении"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Удаление из списка"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"О приложении"</string>
<string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Нет данных"</string>
<string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Закрыть недавние приложения"</string>
<plurals name="status_bar_accessibility_recent_apps">
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Растянуть на весь экран"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Масштаб и совместимость"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Если приложение рассчитано на экран меньших размеров, рядом с часами появятся средства масштабирования."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Скриншот сохранен в галерее"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Не удается сохранить скриншот. Возможно, внешние накопители используются."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Параметры передачи через USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Подключить как мультимедийный проигрыватель (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Установить как камеру (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Телетайп включен."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Вибровызов."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Беззвучный режим."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Передача данных по каналам 2G и 3G отключена"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Передача данных по каналу 4G отключена"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Мобильный Интернет отключен"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 3e99a59..af3ed00 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Na celú obrazovku"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kompatibilné priblíženie"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Ak je aplikácia navrhnutá pre menšiu obrazovku, zobrazí sa vedľa hodín ovládací prvok priblíženia."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Snímka obrazovky bola uložená do Galérie"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Snímku obrazovky sa nepodarilo uložiť. Externý ukladací priestor sa možno práve používa."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti prenosu súborov USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Pripojiť ako prehrávač médií (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Pripojiť ako fotoaparát (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Rozhranie TeleTypewriter je povolené."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibračné zvonenie."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tiché zvonenie."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dátové prenosy 2G a 3G sú zakázané"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dátové prenosy 4G sú zakázané"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilné dátové prenosy sú zakázané"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 312d49b..34c5e0b1 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Raztegnitev čez zaslon"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Povečava združljivosti"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Če je program izdelan za manjše zaslone, se ob uri pokaže kontrolnik za povečavo."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Posnetek zaslona je shranjen v galerijo"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Posnetka zaslona ni mogoče shraniti. Zunanja shramba je morda v uporabi."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Možnosti prenosa datotek prek USB-ja"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Vpni kot predvajalnik (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Vpni kot fotoaparat (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter omogočen."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zvonjenje z vibriranjem."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvonjenje izklopljeno."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Podatki 2G-3G so onemogočeni"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Podatki 4G so onemogočeni"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobilni podatki so onemogočeni"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 7644d2f..d0f24b2 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Развуци на цео екран"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Компатибилно зумирање"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Када је апликација намењена мањем екрану, контрола зумирања приказује се поред сата."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Снимак екрана је сачуван у Галерији"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Није могуће сачувати снимак екрана. Могуће је да је спољно складиште у употреби."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Опције USB преноса датотека"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Прикључи као медија плејер (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Прикључи као камеру (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter је омогућен."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Вибрација звона."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Нечујно звоно."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G подаци су онемогућени"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G подаци су онемогућени"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Подаци мобилне мреже су онемогућени"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 9bfd79b..ab438e8 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Dra för att fylla skärmen"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom i kompatibilitetsläge"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"När en app är anpassad för en mindre skärm visas ett zoomreglage vid klockan."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Skärmdumpen sparades i galleriet"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Det gick inte att spara skärmdumpen. Extern lagring kanske används."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Överföringsalternativ"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Montera som mediaspelare (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Montera som kamera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktiverad."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrerande ringsignal."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tyst ringsignal."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data via 2G-3G har inaktiverats"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data via 4G har inaktiverats"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobildata har inaktiverats"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 4c66a87..98e2310 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -60,8 +60,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Tanua ili kujaza skrini"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Kukuza kwa Utangamanifu"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Wakati programu ilibuniwa kwa skrini ndogo, kidhibiti cha kukuza kitaonekana kwa saa."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Taswira za skrini zimehifadhiwa kwenye Kichanja"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Haikuweza kuhifadhi taswira za skrini. Hifadhi ya nje huenda inatumika."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Machaguo ya uhamisho wa faili la USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Angika kama kichezeshi cha midia (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Angika kama kamera (PTP)"</string>
@@ -114,6 +126,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Kichapishaji cha Tele kimewezeshwa."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Mtetemo wa mlio"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mlio wa simu uko kimya."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data ya 2G-3G imelemazwa"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data ya 4G imelemazwa"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Data ya kifaa cha mkononi imelemazwa"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 412629a..ee2af5d 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"ยืดจนเต็มหน้าจอ"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"ความเข้ากันได้ของการย่อ/ขยาย"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"สำหรับแอปพลิเคชันที่ออกแบบมาสำหรับหน้าจอขนาดเล็ก ตัวควบคุมการย่อ/ขยายจะปรากฏขึ้นข้างนาฬิกา"</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"บันทึกภาพหน้าจอในแกลเลอรีแล้ว"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"ไม่สามารถบันทึกภาพหน้าจอ ที่จัดเก็บข้อมูลภายนอกอาจมีการใช้งานอยู่"</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"ตัวเลือกการถ่ายโอนไฟล์ USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"ต่อเชื่อมเป็นโปรแกรมเล่นสื่อ (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"ต่อเชื่อมเป็นกล้องถ่ายรูป (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"เปิดใช้งาน TeleTypewriter อยู่"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"เสียงเรียกเข้าแบบสั่น"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"เสียงเรียกเข้าแบบปิดเสียง"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"ปิดใช้งานข้อมูล 2G-3G แล้ว"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"ปิดใช้งานข้อมูล 4G แล้ว"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"ปิดใช้งานข้อมูลมือถือแล้ว"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 6dac32c..8cff0b3 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"I-stretch upang mapuno screen"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Zoom sa Pagiging Tugma"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Kapag nakadisenyo ang isang app para sa mas maliit na screen, isang kontrol ng zoom ang lalabas sa may orasan."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Na-save ang screenshot sa Gallery"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Hindi ma-save ang screenshot. Maaaring ginagamit ang panlabas na storage."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Opsyon paglipat ng USB file"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"I-mount bilang isang media player (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"I-mount bilang camera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Pinapagana ang TeleTypewriter."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pag-vibrate ng ringer."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Naka-silent ang ringer."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Di pinapagana ang 2G-3G na data"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Hindi pinapagana ang 4G na data"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Hindi pinapagana ang data ng mobile"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index a79eeb0..7fd5c61 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Genişlet (ekran kapansın)"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Uyumluluk Zum\'u"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Uygulama küçük bir ekran için tasarlanmışsa saatin yanında bir yakınlaştırma denetimi görünür."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Ekran görüntüsü Galeri\'ye kaydedildi"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Ekran görüntüsü kaydedilemedi. Harici depolama birimi kullanımda olabilir."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB dosya aktarım seçenekleri"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Medya oynatıcı olarak ekle (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Kamera olarak ekle (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter etkin."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Telefon zili titreşim."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Telefon zili sessiz."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G verileri devre dışı bırakıldı"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G verileri devre dışı"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobil veriler devre dışı"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index dd11225..5b92cc0 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Розтягнути на весь екран"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Елемент керування масштабом для сумісності"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Якщо програму призначено для менших екранів, елемент керування масштабом буде відображатися біля годинника."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Знімок екрана збережено в Галереї"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Не вдалося зберегти знімок екрана. Можливо, зовнішня пам’ять використовується."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Парам.передав.файлів через USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Підключити як медіапрогравач (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Підключити як камеру (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Телетайп увімкнено."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Дзвінок на вібросигналі."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Дзвінок беззвучний."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Дані 2G–3G вимкнено"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Дані 4G вимкнено"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Мобільне передавання даних вимкнено"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 9282342..d1158e4 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -47,7 +47,7 @@
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"TỰ ĐỘNG"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Thông báo"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth được dùng làm điểm truy cập Internet"</string>
- <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Định cấu hình phương pháp nhập liệu"</string>
+ <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Định cấu hình phương thức nhập liệu"</string>
<string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Sử dụng bàn phím vật lý"</string>
<string name="usb_device_permission_prompt" msgid="3816016361969816903">"Cho phép ứng dụng <xliff:g id="APPLICATION">%1$s</xliff:g> truy cập thiết bị USB?"</string>
<string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"Cho phép ứng dụng <xliff:g id="APPLICATION">%1$s</xliff:g> truy cập phụ kiện USB?"</string>
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Giãn ra để lấp đầy m.hình"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Thu phóng tương thích"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Khi ứng dụng được thiết kế cho một màn hình nhỏ hơn, điều khiển thu phóng sẽ xuất hiện bên cạnh đồng hồ."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Đã lưu ảnh chụp màn hình vào Thư viện"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Không thể lưu ảnh chụp màn hình. Bộ nhớ ngoài có thể đang được sử dụng."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Tùy chọn truyền tệp USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Gắn như một trình phát đa phương tiện (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Gắn như một máy ảnh (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"Đã bật TeleTypewriter."</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Chuông rung."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Chuông im lặng."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Đã tắt dữ liệu 2G-3G"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Đã tắt dữ liệu 4G"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Dữ liệu di động bị vô hiệu hóa"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 5cad35a..2b1bfd6 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"拉伸以填满屏幕"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"兼容性缩放"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"如果应用程序是针对较小屏幕设计的,则时钟旁会显示缩放控件。"</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"屏幕截图已保存到“图库”"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"无法保存屏幕截图。外部存储设备可能在使用中。"</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB 文件传输选项"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"作为媒体播放器 (MTP) 装载"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"作为摄像头 (PTP) 装载"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"电传打字机已启用。"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"振铃器振动。"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"振铃器静音。"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G 数据网络已停用"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G 数据网络已停用"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"移动数据已停用"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 19a6acc..2ffca64 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"放大為全螢幕"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"相容性縮放"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"執行專為較小螢幕設計的應用程式時,系統會在時鐘旁顯示縮放控制項。"</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"螢幕擷取畫面已儲存至圖片庫"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"無法儲存螢幕擷取畫面,外部儲存裝置可能正在使用中。"</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"USB 檔案傳輸選項"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"掛接為媒體播放器 (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"掛接為相機 (PTP)"</string>
@@ -118,6 +130,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter (TTY) 已啟用。"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"鈴聲震動。"</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"鈴聲靜音。"</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"已停用 2G-3G 數據"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"已停用 4G 數據"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"已停用行動數據"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 44f9fd1..5ef5152 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -62,8 +62,20 @@
<string name="compat_mode_off" msgid="4434467572461327898">"Nweba ukugcwalisa isikrini"</string>
<string name="compat_mode_help_header" msgid="7020175705401506719">"Ukuhambelana Kokusondeza"</string>
<string name="compat_mode_help_body" msgid="4946726776359270040">"Uma uhlelo lokusebenza lwenzelwe isikrini ezincane, isilawuli sokusondeza sizovela ngakuyiwashi."</string>
- <string name="screenshot_saving_toast" msgid="8592630119048713208">"Isithombe-skrini silondiwe Kugalari"</string>
- <string name="screenshot_failed_toast" msgid="1990979819772906912">"Ayikwazanga ukulondoloza isithombe-skrini. Ukugcina kwangaphandle kungenzeka kuyasetshenziswa."</string>
+ <!-- no translation found for screenshot_saving_ticker (3808900131607378535) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_title (7158814134399651627) -->
+ <skip />
+ <!-- no translation found for screenshot_saving_text (7138808001579871654) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_title (1656379291643543172) -->
+ <skip />
+ <!-- no translation found for screenshot_saved_text (5040360894749163221) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_title (1140968728869009679) -->
+ <skip />
+ <!-- no translation found for screenshot_failed_text (9163506496592455352) -->
+ <skip />
<string name="usb_preference_title" msgid="6551050377388882787">"Okukhethwa kokudluliswa kwefayela ye-USB"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"Lengisa njengesidlali semediya (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"Lengisa ikhamera (PTP)"</string>
@@ -116,6 +128,8 @@
<string name="accessibility_tty_enabled" msgid="4613200365379426561">"i-TeleTypewriter inikwe amandla"</string>
<string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ukudlidliza kweringa."</string>
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Isikhali sithulile."</string>
+ <!-- no translation found for accessibility_recents_item_dismissed (6803574935084867070) -->
+ <skip />
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"idatha ye-2G-3G ivimbelwe"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Idatha ye-4G ivimbelwe"</string>
<string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Idatha yefoni ivimbelwe"</string>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 3141020..bce0bc4 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -29,4 +29,5 @@
<drawable name="notification_header_bg">#d8000000</drawable>
<drawable name="notification_tracking_bg">#d8000000</drawable>
<color name="notification_list_shadow_top">#80000000</color>
+ <drawable name="recents_callout_line">#66ffffff</drawable>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 830506c..bf19286 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -21,21 +21,18 @@
<!-- Recent Applications parameters -->
<!-- Upper width limit for application icon -->
- <dimen name="status_bar_recents_app_icon_max_width">64dp</dimen>
+ <dimen name="status_bar_recents_app_icon_max_width">48dp</dimen>
<!-- Upper height limit for application icon -->
- <dimen name="status_bar_recents_app_icon_max_height">64dp</dimen>
- <!-- Where to place the app icon over the thumbnail -->
- <dimen name="status_bar_recents_app_icon_left_margin">13dp</dimen>
- <dimen name="status_bar_recents_app_icon_top_margin">13dp</dimen>
+ <dimen name="status_bar_recents_app_icon_max_height">48dp</dimen>
<!-- Size of application thumbnail -->
<dimen name="status_bar_recents_thumbnail_width">164dp</dimen>
<dimen name="status_bar_recents_thumbnail_height">145dp</dimen>
<!-- Size of application label text -->
- <dimen name="status_bar_recents_app_label_text_size">16dip</dimen>
+ <dimen name="status_bar_recents_app_label_text_size">14dip</dimen>
<!-- Size of application description text -->
- <dimen name="status_bar_recents_app_description_text_size">16dip</dimen>
+ <dimen name="status_bar_recents_app_description_text_size">14dip</dimen>
<!-- Size of fading edge for scroll effect -->
<dimen name="status_bar_recents_fading_edge_length">20dip</dimen>
<!-- Margin between recents container and glow on the right -->
@@ -91,4 +88,10 @@
<!-- Initial acceleration of an collapse animation after fling -->
<dimen name="collapse_accel">2000dp</dimen>
+ <!-- The padding on the global screenshot background image -->
+ <dimen name="global_screenshot_bg_padding">0dp</dimen>
+ <!-- The top-left offset for the screenshot drop animation target bounds -->
+ <dimen name="global_screenshot_drop_offset_x">6dp</dimen>
+ <dimen name="global_screenshot_drop_offset_y">0dp</dimen>
+
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 65d5138..a717b57 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -168,10 +168,20 @@
<!-- Compatibility mode help screen: body text. [CHAR LIMIT=150] -->
<string name="compat_mode_help_body">When an app was designed for a smaller screen, a zoom control will appear by the clock.</string>
- <!-- toast message displayed when a screenshot is saved to the Gallery. -->
- <string name="screenshot_saving_toast">Screenshot saved to Gallery</string>
- <!-- toast message displayed when we fail to take a screenshot. -->
- <string name="screenshot_failed_toast">Could not save screenshot. External storage may be in use.</string>
+ <!-- Notification ticker displayed when a screenshot is being saved to the Gallery. [CHAR LIMIT=30] -->
+ <string name="screenshot_saving_ticker">Saving...</string>
+ <!-- Notification title displayed when a screenshot is being saved to the Gallery. [CHAR LIMIT=50] -->
+ <string name="screenshot_saving_title">Saving screenshot...</string>
+ <!-- Notification text displayed when a screenshot is being saved to the Gallery. [CHAR LIMIT=100] -->
+ <string name="screenshot_saving_text">Please wait for screenshot to be saved</string>
+ <!-- Notification title displayed when a screenshot is saved to the Gallery. [CHAR LIMIT=50] -->
+ <string name="screenshot_saved_title">Screenshot captured</string>
+ <!-- Notification text displayed when a screenshot is saved to the Gallery. [CHAR LIMIT=100] -->
+ <string name="screenshot_saved_text">Touch to view your screenshot</string>
+ <!-- Notification title displayed when we fail to take a screenshot. [CHAR LIMIT=50] -->
+ <string name="screenshot_failed_title">Screenshot failed</string>
+ <!-- Notification text displayed when we fail to take a screenshot. [CHAR LIMIT=100] -->
+ <string name="screenshot_failed_text">Failed to save screenshot. External storage may be in use.</string>
<!-- Title for the USB function chooser in UsbPreferenceActivity. [CHAR LIMIT=30] -->
<string name="usb_preference_title">USB file transfer options</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 3d49cd1..dc5c540 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -41,6 +41,13 @@
</style>
<style name="TextAppearance.StatusBar.Clock" parent="@*android:style/TextAppearance.StatusBar.Icon">
+ <!-- Note: must be dp to fit in status bar -->
+ <item name="android:textSize">16dp</item>
+ <item name="android:textStyle">normal</item>
+ <item name="android:textColor">@android:color/holo_blue_light</item>
+ </style>
+
+ <style name="TextAppearance.StatusBar.Date" parent="@*android:style/TextAppearance.StatusBar.Icon">
<item name="android:textSize">16sp</item>
<item name="android:textStyle">normal</item>
<item name="android:textColor">@android:color/holo_blue_light</item>
@@ -69,4 +76,10 @@
<item name="android:windowExitAnimation">@anim/priority_alert_exit</item>
</style>
+ <style name="TextAppearance.StatusBar.PhoneTicker"
+ parent="@*android:style/TextAppearance.StatusBar.Ticker">
+ <!-- Note: must be dp to fit in status bar -->
+ <item name="android:textSize">14dp</item>
+ </style>
+
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 3fa3078..181cc98 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -19,27 +19,28 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
-import android.media.MediaScannerConnection;
+import android.graphics.PointF;
+import android.graphics.RectF;
import android.net.Uri;
import android.os.AsyncTask;
-import android.os.Binder;
import android.os.Environment;
import android.os.ServiceManager;
import android.provider.MediaStore;
import android.util.DisplayMetrics;
-import android.util.Log;
import android.view.Display;
import android.view.IWindowManager;
import android.view.LayoutInflater;
@@ -48,18 +49,16 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
-import android.widget.TextView;
-import android.widget.Toast;
+import com.android.server.wm.WindowManagerService;
import com.android.systemui.R;
import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
import java.io.OutputStream;
-import java.lang.Thread;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -70,6 +69,7 @@
Context context;
Bitmap image;
Runnable finisher;
+ int iconSize;
int result;
}
@@ -83,6 +83,71 @@
private static final String SCREENSHOT_FILE_NAME_TEMPLATE = "Screenshot_%s.png";
private static final String SCREENSHOT_FILE_PATH_TEMPLATE = "%s/%s/%s";
+ private int mNotificationId;
+ private NotificationManager mNotificationManager;
+ private Notification.Builder mNotificationBuilder;
+ private Intent mLaunchIntent;
+ private String mImageDir;
+ private String mImageFileName;
+ private String mImageFilePath;
+ private String mImageDate;
+ private long mImageTime;
+
+ // WORKAROUND: We want the same notification across screenshots that we update so that we don't
+ // spam a user's notification drawer. However, we only show the ticker for the saving state
+ // and if the ticker text is the same as the previous notification, then it will not show. So
+ // for now, we just add and remove a space from the ticker text to trigger the animation when
+ // necessary.
+ private static boolean mTickerAddSpace;
+
+ SaveImageInBackgroundTask(Context context, SaveImageInBackgroundData data,
+ NotificationManager nManager, int nId) {
+ Resources r = context.getResources();
+
+ // Prepare all the output metadata
+ mImageTime = System.currentTimeMillis();
+ mImageDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date(mImageTime));
+ mImageDir = Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_PICTURES).getAbsolutePath();
+ mImageFileName = String.format(SCREENSHOT_FILE_NAME_TEMPLATE, mImageDate);
+ mImageFilePath = String.format(SCREENSHOT_FILE_PATH_TEMPLATE, mImageDir,
+ SCREENSHOTS_DIR_NAME, mImageFileName);
+
+ // Create the large notification icon
+ int imageWidth = data.image.getWidth();
+ int imageHeight = data.image.getHeight();
+ int iconWidth = data.iconSize;
+ int iconHeight = data.iconSize;
+ if (imageWidth > imageHeight) {
+ iconWidth = (int) (((float) iconHeight / imageHeight) * imageWidth);
+ } else {
+ iconHeight = (int) (((float) iconWidth / imageWidth) * imageHeight);
+ }
+ Bitmap rawIcon = Bitmap.createScaledBitmap(data.image, iconWidth, iconHeight, true);
+ Bitmap croppedIcon = Bitmap.createBitmap(rawIcon, (iconWidth - data.iconSize) / 2,
+ (iconHeight - data.iconSize) / 2, data.iconSize, data.iconSize);
+
+ // Show the intermediate notification
+ mLaunchIntent = new Intent(Intent.ACTION_VIEW);
+ mLaunchIntent.setDataAndType(Uri.fromFile(new File(mImageFilePath)), "image/png");
+ mLaunchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ mTickerAddSpace = !mTickerAddSpace;
+ mNotificationId = nId;
+ mNotificationBuilder = new Notification.Builder(context)
+ .setLargeIcon(croppedIcon)
+ .setTicker(r.getString(R.string.screenshot_saving_ticker)
+ + (mTickerAddSpace ? " " : ""))
+ .setContentTitle(r.getString(R.string.screenshot_saving_title))
+ .setContentText(r.getString(R.string.screenshot_saving_text))
+ .setSmallIcon(android.R.drawable.ic_menu_gallery)
+ .setWhen(System.currentTimeMillis());
+ Notification n = mNotificationBuilder.getNotification();
+ n.flags |= Notification.FLAG_NO_CLEAR;
+
+ mNotificationManager = nManager;
+ mNotificationManager.notify(nId, n);
+ }
+
@Override
protected SaveImageInBackgroundData doInBackground(SaveImageInBackgroundData... params) {
if (params.length != 1) return null;
@@ -91,23 +156,15 @@
Bitmap image = params[0].image;
try {
- long currentTime = System.currentTimeMillis();
- String date = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date(currentTime));
- String imageDir = Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_PICTURES).getAbsolutePath();
- String imageFileName = String.format(SCREENSHOT_FILE_NAME_TEMPLATE, date);
- String imageFilePath = String.format(SCREENSHOT_FILE_PATH_TEMPLATE, imageDir,
- SCREENSHOTS_DIR_NAME, imageFileName);
-
// Save the screenshot to the MediaStore
ContentValues values = new ContentValues();
ContentResolver resolver = context.getContentResolver();
- values.put(MediaStore.Images.ImageColumns.DATA, imageFilePath);
- values.put(MediaStore.Images.ImageColumns.TITLE, imageFileName);
- values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, imageFileName);
- values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, currentTime);
- values.put(MediaStore.Images.ImageColumns.DATE_ADDED, currentTime);
- values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, currentTime);
+ values.put(MediaStore.Images.ImageColumns.DATA, mImageFilePath);
+ values.put(MediaStore.Images.ImageColumns.TITLE, mImageFileName);
+ values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, mImageFileName);
+ values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, mImageTime);
+ values.put(MediaStore.Images.ImageColumns.DATE_ADDED, mImageTime);
+ values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, mImageTime);
values.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/png");
Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
@@ -118,7 +175,7 @@
// update file size in the database
values.clear();
- values.put(MediaStore.Images.ImageColumns.SIZE, new File(imageFilePath).length());
+ values.put(MediaStore.Images.ImageColumns.SIZE, new File(mImageFilePath).length());
resolver.update(uri, values, null, null);
params[0].result = 0;
@@ -135,12 +192,21 @@
protected void onPostExecute(SaveImageInBackgroundData params) {
if (params.result > 0) {
// Show a message that we've failed to save the image to disk
- Toast.makeText(params.context, R.string.screenshot_failed_toast,
- Toast.LENGTH_SHORT).show();
+ GlobalScreenshot.notifyScreenshotError(params.context, mNotificationManager);
} else {
- // Show a message that we've saved the screenshot to disk
- Toast.makeText(params.context, R.string.screenshot_saving_toast,
- Toast.LENGTH_SHORT).show();
+ // Show the final notification to indicate screenshot saved
+ Resources r = params.context.getResources();
+
+ mNotificationBuilder
+ .setContentTitle(r.getString(R.string.screenshot_saved_title))
+ .setContentText(r.getString(R.string.screenshot_saved_text))
+ .setContentIntent(PendingIntent.getActivity(params.context, 0, mLaunchIntent, 0))
+ .setWhen(System.currentTimeMillis())
+ .setAutoCancel(true);
+
+ Notification n = mNotificationBuilder.getNotification();
+ n.flags &= ~Notification.FLAG_NO_CLEAR;
+ mNotificationManager.notify(mNotificationId, n);
}
params.finisher.run();
};
@@ -154,22 +220,23 @@
*/
class GlobalScreenshot {
private static final String TAG = "GlobalScreenshot";
- private static final int SCREENSHOT_FADE_IN_DURATION = 900;
- private static final int SCREENSHOT_FADE_OUT_DELAY = 1000;
- private static final int SCREENSHOT_FADE_OUT_DURATION = 450;
- private static final int TOAST_FADE_IN_DURATION = 500;
- private static final int TOAST_FADE_OUT_DELAY = 1000;
- private static final int TOAST_FADE_OUT_DURATION = 500;
+ private static final int SCREENSHOT_NOTIFICATION_ID = 789;
+ private static final int SCREENSHOT_FADE_IN_DURATION = 250;
+ private static final int SCREENSHOT_FADE_OUT_DELAY = 750;
+ private static final int SCREENSHOT_FADE_OUT_DURATION = 500;
+ private static final int SCREENSHOT_FAST_FADE_OUT_DURATION = 350;
private static final float BACKGROUND_ALPHA = 0.65f;
- private static final float SCREENSHOT_SCALE = 0.85f;
- private static final float SCREENSHOT_MIN_SCALE = 0.7f;
- private static final float SCREENSHOT_ROTATION = -6.75f; // -12.5f;
+ private static final float SCREENSHOT_SCALE_FUDGE = 0.075f; // To account for the border padding
+ private static final float SCREENSHOT_SCALE = 0.55f;
+ private static final float SCREENSHOT_FADE_IN_MIN_SCALE = SCREENSHOT_SCALE * 0.975f;
+ private static final float SCREENSHOT_FADE_OUT_MIN_SCALE = SCREENSHOT_SCALE * 0.925f;
private Context mContext;
private LayoutInflater mLayoutInflater;
private IWindowManager mIWindowManager;
private WindowManager mWindowManager;
private WindowManager.LayoutParams mWindowLayoutParams;
+ private NotificationManager mNotificationManager;
private Display mDisplay;
private DisplayMetrics mDisplayMetrics;
private Matrix mDisplayMatrix;
@@ -182,34 +249,24 @@
private AnimatorSet mScreenshotAnimation;
- // General use cubic interpolator
- final TimeInterpolator mCubicInterpolator = new TimeInterpolator() {
- public float getInterpolation(float t) {
- return t*t*t;
- }
- };
- // The interpolator used to control the background alpha at the start of the animation
- final TimeInterpolator mBackgroundViewAlphaInterpolator = new TimeInterpolator() {
- public float getInterpolation(float t) {
- float tStep = 0.35f;
- if (t < tStep) {
- return t * (1f / tStep);
- } else {
- return 1f;
- }
- }
- };
+ private int mStatusBarIconSize;
+ private int mNotificationIconSize;
+ private float mDropOffsetX;
+ private float mDropOffsetY;
+ private float mBgPadding;
+ private float mBgPaddingScale;
+
/**
* @param context everything needs a context :(
*/
public GlobalScreenshot(Context context) {
+ Resources r = context.getResources();
mContext = context;
mLayoutInflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Inflate the screenshot layout
- mDisplayMetrics = new DisplayMetrics();
mDisplayMatrix = new Matrix();
mScreenshotLayout = mLayoutInflater.inflate(R.layout.global_screenshot, null);
mBackgroundView = (ImageView) mScreenshotLayout.findViewById(R.id.global_screenshot_background);
@@ -237,7 +294,23 @@
PixelFormat.TRANSLUCENT);
mWindowLayoutParams.setTitle("ScreenshotAnimation");
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ mNotificationManager =
+ (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mDisplay = mWindowManager.getDefaultDisplay();
+ mDisplayMetrics = new DisplayMetrics();
+ mDisplay.getRealMetrics(mDisplayMetrics);
+
+ // Get the various target sizes
+ mStatusBarIconSize =
+ r.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size);
+ mNotificationIconSize =
+ r.getDimensionPixelSize(android.R.dimen.notification_large_icon_height);
+ mDropOffsetX = r.getDimensionPixelSize(R.dimen.global_screenshot_drop_offset_x);
+ mDropOffsetY = r.getDimensionPixelSize(R.dimen.global_screenshot_drop_offset_y);
+
+ // Scale has to account for both sides of the bg
+ mBgPadding = (float) r.getDimensionPixelSize(R.dimen.global_screenshot_bg_padding);
+ mBgPaddingScale = (2f * mBgPadding) / mDisplayMetrics.widthPixels;
}
/**
@@ -247,8 +320,10 @@
SaveImageInBackgroundData data = new SaveImageInBackgroundData();
data.context = mContext;
data.image = mScreenBitmap;
+ data.iconSize = mNotificationIconSize;
data.finisher = finisher;
- new SaveImageInBackgroundTask().execute(data);
+ new SaveImageInBackgroundTask(mContext, data, mNotificationManager,
+ SCREENSHOT_NOTIFICATION_ID).execute(data);
}
/**
@@ -257,11 +332,11 @@
private float getDegreesForRotation(int value) {
switch (value) {
case Surface.ROTATION_90:
- return 90f;
+ return 360f - 90f;
case Surface.ROTATION_180:
- return 180f;
+ return 360f - 180f;
case Surface.ROTATION_270:
- return 270f;
+ return 360f - 270f;
}
return 0f;
}
@@ -269,7 +344,7 @@
/**
* Takes a screenshot of the current display and shows an animation.
*/
- void takeScreenshot(Runnable finisher) {
+ void takeScreenshot(Runnable finisher, boolean statusBarVisible, boolean navBarVisible) {
// We need to orient the screenshot correctly (and the Surface api seems to take screenshots
// only in the natural orientation of the device :!)
mDisplay.getRealMetrics(mDisplayMetrics);
@@ -291,7 +366,7 @@
mDisplayMetrics.heightPixels, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(ss);
c.translate(ss.getWidth() / 2, ss.getHeight() / 2);
- c.rotate(360f - degrees);
+ c.rotate(degrees);
c.translate(-dims[0] / 2, -dims[1] / 2);
c.drawBitmap(mScreenBitmap, 0, 0, null);
c.setBitmap(null);
@@ -300,21 +375,26 @@
// If we couldn't take the screenshot, notify the user
if (mScreenBitmap == null) {
- Toast.makeText(mContext, R.string.screenshot_failed_toast,
- Toast.LENGTH_SHORT).show();
+ notifyScreenshotError(mContext, mNotificationManager);
finisher.run();
return;
}
+ // Optimizations
+ mScreenBitmap.setHasAlpha(false);
+ mScreenBitmap.prepareToDraw();
+
// Start the post-screenshot animation
- startAnimation(finisher);
+ startAnimation(finisher, mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels,
+ statusBarVisible, navBarVisible);
}
/**
* Starts the animation after taking the screenshot
*/
- private void startAnimation(final Runnable finisher) {
+ private void startAnimation(final Runnable finisher, int w, int h, boolean statusBarVisible,
+ boolean navBarVisible) {
// Add the view for the animation
mScreenshotView.setImageBitmap(mScreenBitmap);
mScreenshotLayout.requestFocus();
@@ -326,7 +406,8 @@
mWindowManager.addView(mScreenshotLayout, mWindowLayoutParams);
ValueAnimator screenshotFadeInAnim = createScreenshotFadeInAnimation();
- ValueAnimator screenshotFadeOutAnim = createScreenshotFadeOutAnimation();
+ ValueAnimator screenshotFadeOutAnim = createScreenshotFadeOutAnimation(w, h,
+ statusBarVisible, navBarVisible);
mScreenshotAnimation = new AnimatorSet();
mScreenshotAnimation.play(screenshotFadeInAnim).before(screenshotFadeOutAnim);
mScreenshotAnimation.addListener(new AnimatorListenerAdapter() {
@@ -337,16 +418,29 @@
mWindowManager.removeView(mScreenshotLayout);
}
});
- mScreenshotAnimation.start();
+ mScreenshotLayout.post(new Runnable() {
+ @Override
+ public void run() {
+ mScreenshotContainerView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+ mScreenshotContainerView.buildLayer();
+ mScreenshotAnimation.start();
+ }
+ });
}
private ValueAnimator createScreenshotFadeInAnimation() {
ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
- anim.setInterpolator(mCubicInterpolator);
+ anim.setInterpolator(new AccelerateInterpolator(1.5f));
anim.setDuration(SCREENSHOT_FADE_IN_DURATION);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
+ mBackgroundView.setAlpha(0f);
mBackgroundView.setVisibility(View.VISIBLE);
+ mScreenshotContainerView.setTranslationX(0f);
+ mScreenshotContainerView.setTranslationY(0f);
+ mScreenshotContainerView.setScaleX(SCREENSHOT_FADE_IN_MIN_SCALE);
+ mScreenshotContainerView.setScaleY(SCREENSHOT_FADE_IN_MIN_SCALE);
+ mScreenshotContainerView.setAlpha(0f);
mScreenshotContainerView.setVisibility(View.VISIBLE);
}
});
@@ -354,41 +448,98 @@
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float t = ((Float) animation.getAnimatedValue()).floatValue();
- mBackgroundView.setAlpha(mBackgroundViewAlphaInterpolator.getInterpolation(t) *
- BACKGROUND_ALPHA);
- float scaleT = SCREENSHOT_SCALE + (1f - t) * SCREENSHOT_SCALE;
- mScreenshotContainerView.setAlpha(t*t*t*t);
+ float scaleT = (SCREENSHOT_FADE_IN_MIN_SCALE)
+ + (float) t * (SCREENSHOT_SCALE - SCREENSHOT_FADE_IN_MIN_SCALE);
+ mBackgroundView.setAlpha(t * BACKGROUND_ALPHA);
mScreenshotContainerView.setScaleX(scaleT);
mScreenshotContainerView.setScaleY(scaleT);
- mScreenshotContainerView.setRotation(t * SCREENSHOT_ROTATION);
+ mScreenshotContainerView.setAlpha(t);
}
});
return anim;
}
- private ValueAnimator createScreenshotFadeOutAnimation() {
- ValueAnimator anim = ValueAnimator.ofFloat(1f, 0f);
- anim.setInterpolator(mCubicInterpolator);
+ private ValueAnimator createScreenshotFadeOutAnimation(int w, int h, boolean statusBarVisible,
+ boolean navBarVisible) {
+ ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
+ anim.setInterpolator(new DecelerateInterpolator(0.5f));
anim.setStartDelay(SCREENSHOT_FADE_OUT_DELAY);
- anim.setDuration(SCREENSHOT_FADE_OUT_DURATION);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mBackgroundView.setVisibility(View.GONE);
mScreenshotContainerView.setVisibility(View.GONE);
+ mScreenshotContainerView.setLayerType(View.LAYER_TYPE_NONE, null);
}
});
- anim.addUpdateListener(new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- float t = ((Float) animation.getAnimatedValue()).floatValue();
- float scaleT = SCREENSHOT_MIN_SCALE +
- t*(SCREENSHOT_SCALE - SCREENSHOT_MIN_SCALE);
- mScreenshotContainerView.setAlpha(t);
- mScreenshotContainerView.setScaleX(scaleT);
- mScreenshotContainerView.setScaleY(scaleT);
- mBackgroundView.setAlpha(t * t * BACKGROUND_ALPHA);
+
+ if (!statusBarVisible || !navBarVisible) {
+ // There is no status bar/nav bar, so just fade the screenshot away in place
+ anim.setDuration(SCREENSHOT_FAST_FADE_OUT_DURATION);
+ anim.addUpdateListener(new AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ float t = ((Float) animation.getAnimatedValue()).floatValue();
+ float scaleT = (SCREENSHOT_FADE_OUT_MIN_SCALE)
+ + (float) (1f - t) * (SCREENSHOT_SCALE - SCREENSHOT_FADE_OUT_MIN_SCALE);
+ mBackgroundView.setAlpha((1f - t) * BACKGROUND_ALPHA);
+ mScreenshotContainerView.setAlpha((1f - t) * BACKGROUND_ALPHA);
+ mScreenshotContainerView.setScaleX(scaleT);
+ mScreenshotContainerView.setScaleY(scaleT);
+ }
+ });
+ } else {
+ // Determine the bounds of how to scale
+ float halfScreenWidth = (w - 2f * mBgPadding) / 2f;
+ float halfScreenHeight = (h - 2f * mBgPadding) / 2f;
+ final RectF finalBounds = new RectF(mDropOffsetX, mDropOffsetY,
+ mDropOffsetX + mStatusBarIconSize,
+ mDropOffsetY + mStatusBarIconSize);
+ final PointF currentPos = new PointF(0f, 0f);
+ final PointF finalPos = new PointF(-halfScreenWidth + finalBounds.centerX(),
+ -halfScreenHeight + finalBounds.centerY());
+ final DecelerateInterpolator d = new DecelerateInterpolator(2f);
+ // Note: since the scale origin is in the center of the view, divide difference by 2
+ float tmpMinScale = 0f;
+ if (w > h) {
+ tmpMinScale = finalBounds.width() / (2f * w);
+ } else {
+ tmpMinScale = finalBounds.height() / (2f * h);
}
- });
+ final float minScale = tmpMinScale;
+
+ // Animate the screenshot to the status bar
+ anim.setDuration(SCREENSHOT_FADE_OUT_DURATION);
+ anim.addUpdateListener(new AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ float t = ((Float) animation.getAnimatedValue()).floatValue();
+ float scaleT = minScale
+ + (float) (1f - t) * (SCREENSHOT_SCALE - minScale - mBgPaddingScale)
+ + mBgPaddingScale;
+ mScreenshotContainerView.setAlpha(d.getInterpolation(1f - t));
+ mScreenshotContainerView.setTranslationX(d.getInterpolation(t) * finalPos.x);
+ mScreenshotContainerView.setTranslationY(d.getInterpolation(t) * finalPos.y);
+ mScreenshotContainerView.setScaleX(scaleT);
+ mScreenshotContainerView.setScaleY(scaleT);
+ mBackgroundView.setAlpha((1f - t) * BACKGROUND_ALPHA);
+ }
+ });
+ }
return anim;
}
+
+ static void notifyScreenshotError(Context context, NotificationManager nManager) {
+ Resources r = context.getResources();
+
+ // Clear all existing notification, compose the new notification and show it
+ Notification n = new Notification.Builder(context)
+ .setTicker(r.getString(R.string.screenshot_failed_title))
+ .setContentTitle(r.getString(R.string.screenshot_failed_title))
+ .setContentText(r.getString(R.string.screenshot_failed_text))
+ .setSmallIcon(android.R.drawable.ic_menu_report_image)
+ .setWhen(System.currentTimeMillis())
+ .setAutoCancel(true)
+ .getNotification();
+ nManager.notify(SCREENSHOT_NOTIFICATION_ID, n);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
index 05ff8be..456b5fa 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
@@ -17,26 +17,12 @@
package com.android.systemui.screenshot;
import android.app.Service;
-import android.app.AlertDialog;
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
-import android.net.Uri;
-import android.hardware.usb.UsbAccessory;
-import android.hardware.usb.UsbManager;
-import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
-import android.util.Log;
-
-import com.android.internal.app.AlertActivity;
-import com.android.internal.app.AlertController;
-
-import com.android.systemui.R;
public class TakeScreenshotService extends Service {
private static final String TAG = "TakeScreenshotService";
@@ -60,7 +46,7 @@
} catch (RemoteException e) {
}
}
- });
+ }, msg.arg1 > 0, msg.arg2 > 0);
}
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
index 5959537..2e1803e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
@@ -146,4 +146,26 @@
mDoNotDisturb = new DoNotDisturb(mContext);
}
+
+ protected View updateNotificationVetoButton(View row, StatusBarNotification n) {
+ View vetoButton = row.findViewById(R.id.veto);
+ if (n.isClearable()) {
+ final String _pkg = n.pkg;
+ final String _tag = n.tag;
+ final int _id = n.id;
+ vetoButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ try {
+ mBarService.onNotificationClear(_pkg, _tag, _id);
+ } catch (RemoteException ex) {
+ // system process is dead if we're here.
+ }
+ }
+ });
+ vetoButton.setVisibility(View.VISIBLE);
+ } else {
+ vetoButton.setVisibility(View.GONE);
+ }
+ return vetoButton;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 9c8c229..4e9b411 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -94,7 +94,7 @@
public static final boolean DUMPTRUCK = true; // extra dumpsys info
// additional instrumentation for testing purposes; intended to be left on during development
- public static final boolean CHATTY = DEBUG || true;
+ public static final boolean CHATTY = DEBUG;
public static final String ACTION_STATUSBAR_START
= "com.android.internal.policy.statusbar.START";
@@ -618,6 +618,10 @@
boolean orderUnchanged = notification.notification.when==oldNotification.notification.when
&& notification.priority == oldNotification.priority;
// priority now encompasses isOngoing()
+
+ boolean updateTicker = notification.notification.tickerText != null
+ && !TextUtils.equals(notification.notification.tickerText,
+ oldEntry.notification.notification.tickerText);
boolean isFirstAnyway = rowParent.indexOfChild(oldEntry.row) == 0;
if (contentsUnchanged && (orderUnchanged || isFirstAnyway)) {
if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key);
@@ -665,10 +669,13 @@
addNotificationViews(key, notification);
}
+ // Update the veto button accordingly (and as a result, whether this row is
+ // swipe-dismissable)
+ updateNotificationVetoButton(oldEntry.row, notification);
+
// Restart the ticker if it's still running
- if (notification.notification.tickerText != null
- && !TextUtils.equals(notification.notification.tickerText,
- oldEntry.notification.notification.tickerText)) {
+ if (updateTicker) {
+ mTicker.halt();
tick(notification);
}
@@ -711,23 +718,7 @@
View row = inflater.inflate(R.layout.status_bar_notification_row, parent, false);
// wire up the veto button
- View vetoButton = row.findViewById(R.id.veto);
- if (notification.isClearable()) {
- final String _pkg = notification.pkg;
- final String _tag = notification.tag;
- final int _id = notification.id;
- vetoButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- try {
- mBarService.onNotificationClear(_pkg, _tag, _id);
- } catch (RemoteException ex) {
- // system process is dead if we're here.
- }
- }
- });
- } else {
- vetoButton.setVisibility(View.GONE);
- }
+ View vetoButton = updateNotificationVetoButton(row, notification);
vetoButton.setContentDescription(mContext.getString(
R.string.accessibility_remove_notification));
@@ -897,23 +888,7 @@
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.status_bar_notification_row, parent, false);
- View vetoButton = row.findViewById(R.id.veto);
- if (entry.notification.isClearable()) {
- final String _pkg = sbn.pkg;
- final String _tag = sbn.tag;
- final int _id = sbn.id;
- vetoButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- try {
- mBarService.onNotificationClear(_pkg, _tag, _id);
- } catch (RemoteException ex) {
- // system process is dead if we're here.
- }
- }
- });
- } else {
- vetoButton.setVisibility(View.GONE);
- }
+ View vetoButton = updateNotificationVetoButton(row, sbn);
vetoButton.setContentDescription(mContext.getString(
R.string.accessibility_remove_notification));
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/Ticker.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/Ticker.java
index e76fe51..f5ceed0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/Ticker.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/Ticker.java
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.phone;
import android.content.Context;
+import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.text.StaticLayout;
@@ -50,6 +51,7 @@
private View mTickerView;
private ImageSwitcher mIconSwitcher;
private TextSwitcher mTextSwitcher;
+ private float mIconScale;
private final class Segment {
StatusBarNotification notification;
@@ -145,6 +147,11 @@
public Ticker(Context context, View sb) {
mContext = context;
+ final Resources res = context.getResources();
+ final int outerBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_size);
+ final int imageBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size);
+ mIconScale = (float)imageBounds / (float)outerBounds;
+
mTickerView = sb.findViewById(R.id.ticker);
mIconSwitcher = (ImageSwitcher)sb.findViewById(R.id.tickerIcon);
@@ -152,6 +159,8 @@
AnimationUtils.loadAnimation(context, com.android.internal.R.anim.push_up_in));
mIconSwitcher.setOutAnimation(
AnimationUtils.loadAnimation(context, com.android.internal.R.anim.push_up_out));
+ mIconSwitcher.setScaleX(mIconScale);
+ mIconSwitcher.setScaleY(mIconScale);
mTextSwitcher = (TextSwitcher)sb.findViewById(R.id.tickerText);
mTextSwitcher.setInAnimation(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 8d964e3..4f9eb38 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -61,7 +61,7 @@
// debug
static final String TAG = "StatusBar.NetworkController";
static final boolean DEBUG = false;
- static final boolean CHATTY = true; // additional diagnostics, but not logspew
+ static final boolean CHATTY = false; // additional diagnostics, but not logspew
// telephony
boolean mHspaDataDistinguishable;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index 415a9a4..f0a10f3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -840,6 +840,9 @@
boolean orderUnchanged = notification.notification.when==oldNotification.notification.when
&& notification.priority == oldNotification.priority;
// priority now encompasses isOngoing()
+ boolean updateTicker = notification.notification.tickerText != null
+ && !TextUtils.equals(notification.notification.tickerText,
+ oldEntry.notification.notification.tickerText);
boolean isLastAnyway = rowParent.indexOfChild(oldEntry.row) == rowParent.getChildCount()-1;
if (contentsUnchanged && (orderUnchanged || isLastAnyway)) {
if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key);
@@ -896,9 +899,8 @@
}
// Restart the ticker if it's still running
- if (notification.notification.tickerText != null
- && !TextUtils.equals(notification.notification.tickerText,
- oldEntry.notification.notification.tickerText)) {
+ if (updateTicker) {
+ mTicker.halt();
tick(key, notification, false);
}
@@ -1736,23 +1738,7 @@
Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.status_bar_notification_row, parent, false);
workAroundBadLayerDrawableOpacity(row);
- View vetoButton = row.findViewById(R.id.veto);
- if (entry.notification.isClearable()) {
- final String _pkg = sbn.pkg;
- final String _tag = sbn.tag;
- final int _id = sbn.id;
- vetoButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- try {
- mBarService.onNotificationClear(_pkg, _tag, _id);
- } catch (RemoteException ex) {
- // system process is dead if we're here.
- }
- }
- });
- } else {
- vetoButton.setVisibility(View.GONE);
- }
+ View vetoButton = updateNotificationVetoButton(row, entry.notification);
vetoButton.setContentDescription(mContext.getString(
R.string.accessibility_remove_notification));
diff --git a/packages/VpnDialogs/res/values-hi/strings.xml b/packages/VpnDialogs/res/values-hi/strings.xml
new file mode 100644
index 0000000..7166877
--- /dev/null
+++ b/packages/VpnDialogs/res/values-hi/strings.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> एक VPN कनेक्शन बनाने का प्रयास करता है."</string>
+ <string name="warning" msgid="5470743576660160079">"जारी रखकर, आप एप्लिकेशन को सभी नेटवर्क ट्रैफ़िक अवरोधित करने की अनुमति देते हैं. "<b>"जब तक आपको एप्लिकेशन पर विश्वास न हो स्वीकार न करें."</b>" अन्यथा, आपको अपने डेटा के साथ किसी दुर्भावनापूर्ण सॉफ़्टवेयर द्वारा छेड़छाड़ किए जाने का जोखिम हो सकता है."</string>
+ <string name="accept" msgid="2889226408765810173">"मुझे इस एप्लिकेशन पर विश्वास है."</string>
+ <string name="legacy_title" msgid="192936250066580964">"VPN कनेक्ट है"</string>
+ <string name="configure" msgid="4905518375574791375">"कॉन्फ़िगर करें"</string>
+ <string name="disconnect" msgid="971412338304200056">"डिस्कनेक्ट करें"</string>
+ <string name="session" msgid="6470628549473641030">"सत्र:"</string>
+ <string name="duration" msgid="3584782459928719435">"अवधि:"</string>
+ <string name="data_transmitted" msgid="7988167672982199061">"भेजे गए:"</string>
+ <string name="data_received" msgid="4062776929376067820">"प्राप्त:"</string>
+ <string name="blank_value" msgid="6278484582661984635">"--"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> बाइट / <xliff:g id="NUMBER_1">%2$s</xliff:g> पैकेट"</string>
+</resources>
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
index 2d8185b..008f5d8 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
@@ -524,6 +524,7 @@
callback.onRingerModeChanged(mRingMode);
callback.onPhoneStateChanged(mPhoneState);
callback.onRefreshCarrierInfo(mTelephonyPlmn, mTelephonySpn);
+ callback.onClockVisibilityChanged();
} else {
if (DEBUG) Log.e(TAG, "Object tried to add another INFO callback",
new Exception("Whoops"));
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
index 2fd165a..0499cfa 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
@@ -178,7 +178,6 @@
int visFlags =
( View.STATUS_BAR_DISABLE_BACK
| View.STATUS_BAR_DISABLE_HOME
- | View.STATUS_BAR_DISABLE_CLOCK
);
mKeyguardHost.setSystemUiVisibility(visFlags);
diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
index 80275b1..96998af 100644
--- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
+++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
@@ -49,6 +49,7 @@
import android.os.Handler;
import android.os.Message;
import android.os.IBinder;
+import android.os.Parcelable;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
@@ -129,6 +130,10 @@
// So the user has a consistent amount of time when brought to the backup method from FaceLock
private final int BACKUP_LOCK_TIMEOUT = 5000;
+ // Needed to keep track of failed FaceUnlock attempts
+ private int mFailedFaceUnlockAttempts = 0;
+ private static final int FAILED_FACE_UNLOCK_ATTEMPTS_BEFORE_BACKUP = 15;
+
/**
* The current {@link KeyguardScreen} will use this to communicate back to us.
*/
@@ -221,6 +226,7 @@
private Runnable mRecreateRunnable = new Runnable() {
public void run() {
updateScreen(mMode, true);
+ restoreWidgetState();
}
};
@@ -244,8 +250,20 @@
// TODO: examine all widgets to derive clock status
mUpdateMonitor.reportClockVisible(true);
}
+
+ public boolean isVisible(View self) {
+ // TODO: this should be up to the lockscreen to determine if the view
+ // is currently showing. The idea is it can be used for the widget to
+ // avoid doing work if it's not visible. For now just returns the view's
+ // actual visibility.
+ return self.getVisibility() == View.VISIBLE;
+ }
};
+ private TransportControlView mTransportControlView;
+
+ private Parcelable mSavedState;
+
/**
* @return Whether we are stuck on the lock screen because the sim is
* missing.
@@ -365,6 +383,7 @@
public void keyguardDone(boolean authenticated) {
getCallback().keyguardDone(authenticated);
+ mSavedState = null; // clear state so we re-establish when locked again
}
public void keyguardDoneDrawing() {
@@ -424,6 +443,7 @@
}
public void reportSuccessfulUnlockAttempt() {
+ mFailedFaceUnlockAttempts = 0;
mLockPatternUtils.reportSuccessfulPasswordAttempt();
}
};
@@ -528,6 +548,8 @@
((KeyguardScreen) mUnlockScreen).onPause();
}
+ saveWidgetState();
+
// When screen is turned off, need to unbind from FaceLock service if using FaceLock
stopAndUnbindFromFaceLock();
}
@@ -536,7 +558,16 @@
* FaceLock, but only if we're not dealing with a call
*/
private void activateFaceLockIfAble() {
- if (mUpdateMonitor.getPhoneState() == TelephonyManager.CALL_STATE_IDLE && !mHasOverlay) {
+ final boolean tooManyFaceUnlockTries =
+ (mFailedFaceUnlockAttempts >= FAILED_FACE_UNLOCK_ATTEMPTS_BEFORE_BACKUP);
+ final int failedBackupAttempts = mUpdateMonitor.getFailedAttempts();
+ final boolean backupIsTimedOut =
+ (failedBackupAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT);
+ if (tooManyFaceUnlockTries) Log.i(TAG, "tooManyFaceUnlockTries: " + tooManyFaceUnlockTries);
+ if (mUpdateMonitor.getPhoneState() == TelephonyManager.CALL_STATE_IDLE
+ && !mHasOverlay
+ && !tooManyFaceUnlockTries
+ && !backupIsTimedOut) {
bindToFaceLock();
// Show FaceLock area, but only for a little bit so lockpattern will become visible if
// FaceLock fails to start or crashes
@@ -558,8 +589,28 @@
mScreenOn = true;
runFaceLock = mWindowFocused;
}
+
show();
- if(runFaceLock) activateFaceLockIfAble();
+
+ restoreWidgetState();
+
+ if (runFaceLock) activateFaceLockIfAble();
+ }
+
+ private void saveWidgetState() {
+ if (mTransportControlView != null) {
+ if (DEBUG) Log.v(TAG, "Saving widget state");
+ mSavedState = mTransportControlView.onSaveInstanceState();
+ }
+ }
+
+ private void restoreWidgetState() {
+ if (mTransportControlView != null) {
+ if (DEBUG) Log.v(TAG, "Restoring widget state");
+ if (mSavedState != null) {
+ mTransportControlView.onRestoreInstanceState(mSavedState);
+ }
+ }
}
/** Unbind from facelock if something covers this window (such as an alarm)
@@ -643,6 +694,7 @@
mShowLockBeforeUnlock = resources.getBoolean(R.bool.config_enableLockBeforeUnlockScreen);
mConfiguration = newConfig;
if (DEBUG_CONFIGURATION) Log.v(TAG, "**** re-creating lock screen since config changed");
+ saveWidgetState();
removeCallbacks(mRecreateRunnable);
post(mRecreateRunnable);
}
@@ -657,8 +709,14 @@
public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) {}
@Override
public void onRingerModeChanged(int state) {}
+
@Override
- public void onClockVisibilityChanged() {}
+ public void onClockVisibilityChanged() {
+ int visFlags = getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_CLOCK;
+ setSystemUiVisibility(visFlags
+ | (mUpdateMonitor.isClockVisible() ? View.STATUS_BAR_DISABLE_CLOCK : 0));
+ }
+
@Override
public void onDeviceProvisioned() {}
@@ -729,6 +787,16 @@
this.removeView(mUnlockScreen);
mUnlockScreen = null;
}
+ mUpdateMonitor.removeCallback(this);
+ if (mFaceLockService != null) {
+ try {
+ mFaceLockService.unregisterCallback(mFaceLockCallback);
+ } catch (RemoteException e) {
+ // Not much we can do
+ }
+ stopFaceLock();
+ mFaceLockService = null;
+ }
}
private boolean isSecure() {
@@ -895,13 +963,13 @@
}
private void initializeTransportControlView(View view) {
- TransportControlView tcv = (TransportControlView) view.findViewById(R.id.transport);
- if (tcv == null) {
+ mTransportControlView = (TransportControlView) view.findViewById(R.id.transport);
+ if (mTransportControlView == null) {
if (DEBUG) Log.w(TAG, "Couldn't find transport control widget");
} else {
mUpdateMonitor.reportClockVisible(true);
- tcv.setVisibility(View.GONE); // hide until it requests being shown.
- tcv.setCallback(mWidgetCallback);
+ mTransportControlView.setVisibility(View.GONE); // hide until it requests being shown.
+ mTransportControlView.setCallback(mWidgetCallback);
}
}
@@ -1153,6 +1221,13 @@
if (mBoundToFaceLockService) {
if (DEBUG) Log.d(TAG, "before unbind from FaceLock service");
+ if (mFaceLockService != null) {
+ try {
+ mFaceLockService.unregisterCallback(mFaceLockCallback);
+ } catch (RemoteException e) {
+ // Not much we can do
+ }
+ }
mContext.unbindService(mFaceLockConnection);
if (DEBUG) Log.d(TAG, "after unbind from FaceLock service");
mBoundToFaceLockService = false;
@@ -1257,7 +1332,7 @@
}
// Stops the FaceLock UI and exposes the backup method without unlocking
- // This means either the user has cancelled out or FaceLock failed to recognize them
+ // This means the user has cancelled out
@Override
public void cancel() {
if (DEBUG) Log.d(TAG, "FaceLock cancel()");
@@ -1266,6 +1341,17 @@
mKeyguardScreenCallback.pokeWakelock(BACKUP_LOCK_TIMEOUT);
}
+ // Stops the FaceLock UI and exposes the backup method without unlocking
+ // This means FaceLock failed to recognize them
+ @Override
+ public void reportFailedAttempt() {
+ if (DEBUG) Log.d(TAG, "FaceLock reportFailedAttempt()");
+ mFailedFaceUnlockAttempts++;
+ hideFaceLockArea(); // Expose fallback
+ stopFaceLock();
+ mKeyguardScreenCallback.pokeWakelock(BACKUP_LOCK_TIMEOUT);
+ }
+
// Allows the Face Unlock service to poke the wake lock to keep the lockscreen alive
@Override
public void pokeWakelock() {
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index aac3209..b9fe182 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -353,8 +353,13 @@
int mDockLeft, mDockTop, mDockRight, mDockBottom;
// During layout, the layer at which the doc window is placed.
int mDockLayer;
- int mLastSystemUiVisibility;
- int mForceClearingStatusBarVisibility = 0;
+ int mLastSystemUiFlags;
+ // Bits that we are in the process of clearing, so we want to prevent
+ // them from being set by applications until everything has been updated
+ // to have them clear.
+ int mResettingSystemUiFlags = 0;
+ // Bits that we are currently always keeping cleared.
+ int mForceClearedSystemUiFlags = 0;
FakeWindow mHideNavFakeWindow = null;
@@ -1719,6 +1724,21 @@
}
}
+ /**
+ * A delayed callback use to determine when it is okay to re-allow applications
+ * to use certain system UI flags. This is used to prevent applications from
+ * spamming system UI changes that prevent the navigation bar from being shown.
+ */
+ final Runnable mAllowSystemUiDelay = new Runnable() {
+ @Override public void run() {
+ }
+ };
+
+ /**
+ * Input handler used while nav bar is hidden. Captures any touch on the screen,
+ * to determine when the nav bar should be shown and prevent applications from
+ * receiving those touches.
+ */
final InputHandler mHideNavInputHandler = new BaseInputHandler() {
@Override
public void handleMotion(MotionEvent event, InputQueue.FinishedCallback finishedCallback) {
@@ -1731,12 +1751,30 @@
synchronized (mLock) {
// Any user activity always causes us to show the navigation controls,
// if they had been hidden.
- int newVal = mForceClearingStatusBarVisibility
+ int newVal = mResettingSystemUiFlags
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
- if (mForceClearingStatusBarVisibility != newVal) {
- mForceClearingStatusBarVisibility = newVal;
+ if (mResettingSystemUiFlags != newVal) {
+ mResettingSystemUiFlags = newVal;
changed = true;
}
+ // We don't allow the system's nav bar to be hidden
+ // again for 1 second, to prevent applications from
+ // spamming us and keeping it from being shown.
+ newVal = mForceClearedSystemUiFlags
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ if (mForceClearedSystemUiFlags != newVal) {
+ mForceClearedSystemUiFlags = newVal;
+ changed = true;
+ mHandler.postDelayed(new Runnable() {
+ @Override public void run() {
+ synchronized (mLock) {
+ mForceClearedSystemUiFlags &=
+ ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ }
+ mWindowManagerFuncs.reevaluateStatusBarVisibility();
+ }
+ }, 1000);
+ }
}
if (changed) {
mWindowManagerFuncs.reevaluateStatusBarVisibility();
@@ -1753,10 +1791,11 @@
public int adjustSystemUiVisibilityLw(int visibility) {
// Reset any bits in mForceClearingStatusBarVisibility that
// are now clear.
- mForceClearingStatusBarVisibility &= visibility;
+ mResettingSystemUiFlags &= visibility;
// Clear any bits in the new visibility that are currently being
// force cleared, before reporting it.
- return visibility & ~mForceClearingStatusBarVisibility;
+ return visibility & ~mResettingSystemUiFlags
+ & ~mForceClearedSystemUiFlags;
}
public void getContentInsetHintLw(WindowManager.LayoutParams attrs, Rect contentInset) {
@@ -1795,11 +1834,28 @@
pf.right = df.right = vf.right = mDockRight;
pf.bottom = df.bottom = vf.bottom = mDockBottom;
+ final boolean navVisible = (mNavigationBar == null || mNavigationBar.isVisibleLw()) &&
+ (mLastSystemUiFlags&View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
+
+ // When the navigation bar isn't visible, we put up a fake
+ // input window to catch all touch events. This way we can
+ // detect when the user presses anywhere to bring back the nav
+ // bar and ensure the application doesn't see the event.
+ if (navVisible) {
+ if (mHideNavFakeWindow != null) {
+ mHideNavFakeWindow.dismiss();
+ mHideNavFakeWindow = null;
+ }
+ } else if (mHideNavFakeWindow == null) {
+ mHideNavFakeWindow = mWindowManagerFuncs.addFakeWindow(
+ mHandler.getLooper(), mHideNavInputHandler,
+ "hidden nav", WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER,
+ 0, false, false, true);
+ }
+
// decide where the status bar goes ahead of time
if (mStatusBar != null) {
if (mNavigationBar != null) {
- final boolean navVisible = mNavigationBar.isVisibleLw() &&
- (mLastSystemUiVisibility&View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
// Force the navigation bar to its appropriate place and
// size. We need to do this directly, instead of relying on
// it to bubble up from the nav bar, because this needs to
@@ -1831,21 +1887,6 @@
mTmpNavigationFrame.offset(mNavigationBarWidth, 0);
}
}
- // When the navigation bar isn't visible, we put up a fake
- // input window to catch all touch events. This way we can
- // detect when the user presses anywhere to bring back the nav
- // bar and ensure the application doesn't see the event.
- if (navVisible) {
- if (mHideNavFakeWindow != null) {
- mHideNavFakeWindow.dismiss();
- mHideNavFakeWindow = null;
- }
- } else if (mHideNavFakeWindow == null) {
- mHideNavFakeWindow = mWindowManagerFuncs.addFakeWindow(
- mHandler.getLooper(), mHideNavInputHandler,
- "hidden nav", WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER,
- 0, false, false, true);
- }
// And compute the final frame.
mNavigationBar.computeFrameLw(mTmpNavigationFrame, mTmpNavigationFrame,
mTmpNavigationFrame, mTmpNavigationFrame);
@@ -2573,6 +2614,11 @@
}
};
msg.replyTo = new Messenger(h);
+ msg.arg1 = msg.arg2 = 0;
+ if (mStatusBar != null && mStatusBar.isVisibleLw())
+ msg.arg1 = 1;
+ if (mNavigationBar != null && mNavigationBar.isVisibleLw())
+ msg.arg2 = 1;
try {
messenger.send(msg);
} catch (RemoteException e) {
@@ -3653,12 +3699,13 @@
return 0;
}
final int visibility = mFocusedWindow.getSystemUiVisibility()
- & ~mForceClearingStatusBarVisibility;
- int diff = visibility ^ mLastSystemUiVisibility;
+ & ~mResettingSystemUiFlags
+ & ~mForceClearedSystemUiFlags;
+ int diff = visibility ^ mLastSystemUiFlags;
if (diff == 0) {
return 0;
}
- mLastSystemUiVisibility = visibility;
+ mLastSystemUiFlags = visibility;
mHandler.post(new Runnable() {
public void run() {
if (mStatusBarService == null) {
@@ -3685,11 +3732,14 @@
pw.print(prefix); pw.print("mLidOpen="); pw.print(mLidOpen);
pw.print(" mLidOpenRotation="); pw.print(mLidOpenRotation);
pw.print(" mHdmiPlugged="); pw.println(mHdmiPlugged);
- if (mLastSystemUiVisibility != 0 || mForceClearingStatusBarVisibility != 0) {
- pw.print(prefix); pw.print("mLastSystemUiVisibility=0x");
- pw.println(Integer.toHexString(mLastSystemUiVisibility));
- pw.print(" mForceClearingStatusBarVisibility=0x");
- pw.println(Integer.toHexString(mForceClearingStatusBarVisibility));
+ if (mLastSystemUiFlags != 0 || mResettingSystemUiFlags != 0
+ || mForceClearedSystemUiFlags != 0) {
+ pw.print(prefix); pw.print("mLastSystemUiFlags=0x");
+ pw.print(Integer.toHexString(mLastSystemUiFlags));
+ pw.print(" mResettingSystemUiFlags=0x");
+ pw.print(Integer.toHexString(mResettingSystemUiFlags));
+ pw.print(" mForceClearedSystemUiFlags=0x");
+ pw.println(Integer.toHexString(mForceClearedSystemUiFlags));
}
pw.print(prefix); pw.print("mUiMode="); pw.print(mUiMode);
pw.print(" mDockMode="); pw.print(mDockMode);
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index f306e4a..171710a 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -97,6 +97,16 @@
setCameraFree(i);
}
}
+
+ // Read the system property to determine if we have to use the
+ // AUDIO_STREAM_ENFORCED_AUDIBLE type.
+ char value[PROPERTY_VALUE_MAX];
+ property_get("ro.camera.sound.forced", value, "0");
+ if (strcmp(value, "0") != 0) {
+ mAudioStreamType = AUDIO_STREAM_ENFORCED_AUDIBLE;
+ } else {
+ mAudioStreamType = AUDIO_STREAM_MUSIC;
+ }
}
CameraService::~CameraService() {
@@ -282,21 +292,10 @@
// A reference count is kept to determine when we will actually release the
// media players.
-static MediaPlayer* newMediaPlayer(const char *file) {
- // Read the system property to determine if we have need to use the
- // AUDIO_STREAM_ENFORCED_AUDIBLE type.
- char value[PROPERTY_VALUE_MAX];
- property_get("ro.camera.sound.forced", value, "0");
- int audioStreamType;
- if (strcmp(value, "0") != 0) {
- audioStreamType = AUDIO_STREAM_ENFORCED_AUDIBLE;
- } else {
- audioStreamType = AUDIO_STREAM_MUSIC;
- }
-
+MediaPlayer* CameraService::newMediaPlayer(const char *file) {
MediaPlayer* mp = new MediaPlayer();
if (mp->setDataSource(file, NULL) == NO_ERROR) {
- mp->setAudioStreamType(audioStreamType);
+ mp->setAudioStreamType(mAudioStreamType);
mp->prepare();
} else {
LOGE("Failed to load CameraService sounds: %s", file);
@@ -335,7 +334,7 @@
// do not play the sound if stream volume is 0
// (typically because ringer mode is silent).
int index;
- AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index);
+ AudioSystem::getStreamVolumeIndex(mAudioStreamType, &index);
if (index != 0) {
player->seekTo(0);
player->start();
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
index 57abf83..cdfbc56 100644
--- a/services/camera/libcameraservice/CameraService.h
+++ b/services/camera/libcameraservice/CameraService.h
@@ -76,6 +76,9 @@
void setCameraFree(int cameraId);
// sounds
+ audio_stream_type_t mAudioStreamType;
+ MediaPlayer* newMediaPlayer(const char *file);
+
Mutex mSoundLock;
sp<MediaPlayer> mSoundPlayer[NUM_SOUNDS];
int mSoundRef; // reference count (release all MediaPlayer when 0)
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index f9f5458..4ef8837 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -62,14 +62,15 @@
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.WorkSource;
+import android.os.storage.IMountService;
import android.provider.Settings;
import android.util.EventLog;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
-import android.util.SparseIntArray;
import android.util.StringBuilderPrinter;
import com.android.internal.backup.BackupConstants;
@@ -187,6 +188,7 @@
private IActivityManager mActivityManager;
private PowerManager mPowerManager;
private AlarmManager mAlarmManager;
+ private IMountService mMountService;
IBackupManager mBackupManagerBinder;
boolean mEnabled; // access to this is synchronized on 'this'
@@ -660,6 +662,7 @@
mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ mMountService = IMountService.Stub.asInterface(ServiceManager.getService("mount"));
mBackupManagerBinder = asInterface(asBinder());
@@ -1037,6 +1040,40 @@
// Backup password management
boolean passwordMatchesSaved(String candidatePw, int rounds) {
+ // First, on an encrypted device we require matching the device pw
+ final boolean isEncrypted;
+ try {
+ isEncrypted = (mMountService.getEncryptionState() != MountService.ENCRYPTION_STATE_NONE);
+ if (isEncrypted) {
+ if (DEBUG) {
+ Slog.i(TAG, "Device encrypted; verifying against device data pw");
+ }
+ // 0 means the password validated
+ // -2 means device not encrypted
+ // Any other result is either password failure or an error condition,
+ // so we refuse the match
+ final int result = mMountService.verifyEncryptionPassword(candidatePw);
+ if (result == 0) {
+ if (MORE_DEBUG) Slog.d(TAG, "Pw verifies");
+ return true;
+ } else if (result != -2) {
+ if (MORE_DEBUG) Slog.d(TAG, "Pw mismatch");
+ return false;
+ } else {
+ // ...else the device is supposedly not encrypted. HOWEVER, the
+ // query about the encryption state said that the device *is*
+ // encrypted, so ... we may have a problem. Log it and refuse
+ // the backup.
+ Slog.e(TAG, "verified encryption state mismatch against query; no match allowed");
+ return false;
+ }
+ }
+ } catch (Exception e) {
+ // Something went wrong talking to the mount service. This is very bad;
+ // assume that we fail password validation.
+ return false;
+ }
+
if (mPasswordHash == null) {
// no current password case -- require that 'currentPw' be null or empty
if (candidatePw == null || "".equals(candidatePw)) {
@@ -1114,7 +1151,15 @@
public boolean hasBackupPassword() {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
"hasBackupPassword");
- return (mPasswordHash != null && mPasswordHash.length() > 0);
+
+ try {
+ return (mMountService.getEncryptionState() != IMountService.ENCRYPTION_STATE_NONE)
+ || (mPasswordHash != null && mPasswordHash.length() > 0);
+ } catch (Exception e) {
+ // If we can't talk to the mount service we have a serious problem; fail
+ // "secure" i.e. assuming that we require a password
+ return true;
+ }
}
// Maintain persistent state around whether need to do an initialize operation.
@@ -5007,7 +5052,17 @@
params.observer = observer;
params.curPassword = curPassword;
- params.encryptPassword = encPpassword;
+
+ boolean isEncrypted;
+ try {
+ isEncrypted = (mMountService.getEncryptionState() != MountService.ENCRYPTION_STATE_NONE);
+ if (isEncrypted) Slog.w(TAG, "Device is encrypted; forcing enc password");
+ } catch (RemoteException e) {
+ // couldn't contact the mount service; fail "safe" and assume encryption
+ Slog.e(TAG, "Unable to contact mount service!");
+ isEncrypted = true;
+ }
+ params.encryptPassword = (isEncrypted) ? curPassword : encPpassword;
if (DEBUG) Slog.d(TAG, "Sending conf message with verb " + verb);
mWakelock.acquire();
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 582f0ed..5425813 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -1897,6 +1897,53 @@
}
}
+ /**
+ * Validate a user-supplied password string with cryptfs
+ */
+ @Override
+ public int verifyEncryptionPassword(String password) throws RemoteException {
+ // Only the system process is permitted to validate passwords
+ if (Binder.getCallingUid() != android.os.Process.SYSTEM_UID) {
+ throw new SecurityException("no permission to access the crypt keeper");
+ }
+
+ mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
+ "no permission to access the crypt keeper");
+
+ if (TextUtils.isEmpty(password)) {
+ throw new IllegalArgumentException("password cannot be empty");
+ }
+
+ waitForReady();
+
+ if (DEBUG_EVENTS) {
+ Slog.i(TAG, "validating encryption password...");
+ }
+
+ try {
+ ArrayList<String> response = mConnector.doCommand("cryptfs verifypw " + password);
+ String[] tokens = response.get(0).split(" ");
+
+ if (tokens == null || tokens.length != 2) {
+ String msg = "Unexpected result from cryptfs verifypw: {";
+ if (tokens == null) msg += "null";
+ else for (int i = 0; i < tokens.length; i++) {
+ if (i != 0) msg += ',';
+ msg += tokens[i];
+ }
+ msg += '}';
+ Slog.e(TAG, msg);
+ return -1;
+ }
+
+ Slog.i(TAG, "cryptfs verifypw => " + tokens[1]);
+ return Integer.parseInt(tokens[1]);
+ } catch (NativeDaemonConnectorException e) {
+ // Encryption failed
+ return e.getCode();
+ }
+ }
+
public Parcelable[] getVolumeList() {
synchronized(mVolumes) {
int size = mVolumes.size();
diff --git a/services/java/com/android/server/NativeDaemonConnector.java b/services/java/com/android/server/NativeDaemonConnector.java
index 43d938c..28013bd 100644
--- a/services/java/com/android/server/NativeDaemonConnector.java
+++ b/services/java/com/android/server/NativeDaemonConnector.java
@@ -207,6 +207,13 @@
*/
private void sendCommandLocked(String command, String argument)
throws NativeDaemonConnectorException {
+ if (command != null && command.indexOf('\0') >= 0) {
+ throw new IllegalArgumentException("unexpected command: " + command);
+ }
+ if (argument != null && argument.indexOf('\0') >= 0) {
+ throw new IllegalArgumentException("unexpected argument: " + argument);
+ }
+
if (LOCAL_LOGD) Slog.d(TAG, String.format("SND -> {%s} {%s}", command, argument));
if (mOutputStream == null) {
Slog.e(TAG, "No connection to daemon", new IllegalStateException());
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index b05705e..fb13b75 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -16,6 +16,8 @@
package com.android.server;
+import static android.Manifest.permission.ACCESS_NETWORK_STATE;
+import static android.Manifest.permission.CHANGE_NETWORK_STATE;
import static android.Manifest.permission.DUMP;
import static android.Manifest.permission.MANAGE_NETWORK_POLICY;
import static android.net.NetworkStats.SET_DEFAULT;
@@ -350,6 +352,7 @@
}
public InterfaceConfiguration getInterfaceConfig(String iface) throws IllegalStateException {
+ mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG);
String rsp;
try {
rsp = mConnector.doCommand("interface getcfg " + iface).get(0);
@@ -404,6 +407,7 @@
public void setInterfaceConfig(
String iface, InterfaceConfiguration cfg) throws IllegalStateException {
+ mContext.enforceCallingOrSelfPermission(CHANGE_NETWORK_STATE, TAG);
LinkAddress linkAddr = cfg.addr;
if (linkAddr == null || linkAddr.getAddress() == null) {
throw new IllegalStateException("Null LinkAddress given");
@@ -421,6 +425,7 @@
}
public void setInterfaceDown(String iface) throws IllegalStateException {
+ mContext.enforceCallingOrSelfPermission(CHANGE_NETWORK_STATE, TAG);
try {
InterfaceConfiguration ifcg = getInterfaceConfig(iface);
ifcg.interfaceFlags = ifcg.interfaceFlags.replace("up", "down");
@@ -432,6 +437,7 @@
}
public void setInterfaceUp(String iface) throws IllegalStateException {
+ mContext.enforceCallingOrSelfPermission(CHANGE_NETWORK_STATE, TAG);
try {
InterfaceConfiguration ifcg = getInterfaceConfig(iface);
ifcg.interfaceFlags = ifcg.interfaceFlags.replace("down", "up");
@@ -444,6 +450,7 @@
public void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable)
throws IllegalStateException {
+ mContext.enforceCallingOrSelfPermission(CHANGE_NETWORK_STATE, TAG);
String cmd = String.format("interface ipv6privacyextensions %s %s", iface,
enable ? "enable" : "disable");
try {
@@ -459,7 +466,8 @@
/* TODO: This is right now a IPv4 only function. Works for wifi which loses its
IPv6 addresses on interface down, but we need to do full clean up here */
public void clearInterfaceAddresses(String iface) throws IllegalStateException {
- String cmd = String.format("interface clearaddrs %s", iface);
+ mContext.enforceCallingOrSelfPermission(CHANGE_NETWORK_STATE, TAG);
+ String cmd = String.format("interface clearaddrs %s", iface);
try {
mConnector.doCommand(cmd);
} catch (NativeDaemonConnectorException e) {
@@ -491,10 +499,12 @@
}
public void addRoute(String interfaceName, RouteInfo route) {
+ mContext.enforceCallingOrSelfPermission(CHANGE_NETWORK_STATE, TAG);
modifyRoute(interfaceName, ADD, route);
}
public void removeRoute(String interfaceName, RouteInfo route) {
+ mContext.enforceCallingOrSelfPermission(CHANGE_NETWORK_STATE, TAG);
modifyRoute(interfaceName, REMOVE, route);
}
@@ -578,6 +588,7 @@
}
public RouteInfo[] getRoutes(String interfaceName) {
+ mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG);
ArrayList<RouteInfo> routes = new ArrayList<RouteInfo>();
// v4 routes listed as:
diff --git a/services/java/com/android/server/TextServicesManagerService.java b/services/java/com/android/server/TextServicesManagerService.java
index ef48b9e..788ecda 100644
--- a/services/java/com/android/server/TextServicesManagerService.java
+++ b/services/java/com/android/server/TextServicesManagerService.java
@@ -43,10 +43,13 @@
import android.view.textservice.SpellCheckerInfo;
import android.view.textservice.SpellCheckerSubtype;
+import java.io.FileDescriptor;
import java.io.IOException;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class TextServicesManagerService extends ITextServicesManager.Stub {
private static final String TAG = TextServicesManagerService.class.getSimpleName();
@@ -480,6 +483,66 @@
}
}
+ @Override
+ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+
+ pw.println("Permission Denial: can't dump TextServicesManagerService from from pid="
+ + Binder.getCallingPid()
+ + ", uid=" + Binder.getCallingUid());
+ return;
+ }
+
+ synchronized(mSpellCheckerMap) {
+ pw.println("Current Text Services Manager state:");
+ pw.println(" Spell Checker Map:");
+ for (Map.Entry<String, SpellCheckerInfo> ent : mSpellCheckerMap.entrySet()) {
+ pw.print(" "); pw.print(ent.getKey()); pw.println(":");
+ SpellCheckerInfo info = ent.getValue();
+ pw.print(" "); pw.print("id="); pw.println(info.getId());
+ pw.print(" "); pw.print("comp=");
+ pw.println(info.getComponent().toShortString());
+ int NS = info.getSubtypeCount();
+ for (int i=0; i<NS; i++) {
+ SpellCheckerSubtype st = info.getSubtypeAt(i);
+ pw.print(" "); pw.print("Subtype #"); pw.print(i); pw.println(":");
+ pw.print(" "); pw.print("locale="); pw.println(st.getLocale());
+ pw.print(" "); pw.print("extraValue=");
+ pw.println(st.getExtraValue());
+ }
+ }
+ pw.println("");
+ pw.println(" Spell Checker Bind Groups:");
+ for (Map.Entry<String, SpellCheckerBindGroup> ent
+ : mSpellCheckerBindGroups.entrySet()) {
+ SpellCheckerBindGroup grp = ent.getValue();
+ pw.print(" "); pw.print(ent.getKey()); pw.print(" ");
+ pw.print(grp); pw.println(":");
+ pw.print(" "); pw.print("mInternalConnection=");
+ pw.println(grp.mInternalConnection);
+ pw.print(" "); pw.print("mSpellChecker=");
+ pw.println(grp.mSpellChecker);
+ pw.print(" "); pw.print("mBound="); pw.print(grp.mBound);
+ pw.print(" mConnected="); pw.println(grp.mConnected);
+ int NL = grp.mListeners.size();
+ for (int i=0; i<NL; i++) {
+ InternalDeathRecipient listener = grp.mListeners.get(i);
+ pw.print(" "); pw.print("Listener #"); pw.print(i); pw.println(":");
+ pw.print(" "); pw.print("mTsListener=");
+ pw.println(listener.mTsListener);
+ pw.print(" "); pw.print("mScListener=");
+ pw.println(listener.mScListener);
+ pw.print(" "); pw.print("mGroup=");
+ pw.println(listener.mGroup);
+ pw.print(" "); pw.print("mScLocale=");
+ pw.print(listener.mScLocale);
+ pw.print(" mUid="); pw.println(listener.mUid);
+ }
+ }
+ }
+ }
+
// SpellCheckerBindGroup contains active text service session listeners.
// If there are no listeners anymore, the SpellCheckerBindGroup instance will be removed from
// mSpellCheckerBindGroups
@@ -488,6 +551,7 @@
private final InternalServiceConnection mInternalConnection;
private final ArrayList<InternalDeathRecipient> mListeners =
new ArrayList<InternalDeathRecipient>();
+ public boolean mBound;
public ISpellCheckerService mSpellChecker;
public boolean mConnected;
@@ -495,6 +559,7 @@
ITextServicesSessionListener listener, String locale,
ISpellCheckerSessionListener scListener, int uid, Bundle bundle) {
mInternalConnection = connection;
+ mBound = true;
mConnected = false;
addListener(listener, locale, scListener, uid, bundle);
}
@@ -580,15 +645,18 @@
if (DBG) {
Slog.d(TAG, "cleanLocked");
}
- if (mListeners.isEmpty()) {
+ // If there are no more active listeners, clean up. Only do this
+ // once.
+ if (mBound && mListeners.isEmpty()) {
+ mBound = false;
final String sciId = mInternalConnection.mSciId;
- if (mSpellCheckerBindGroups.containsKey(sciId)) {
+ SpellCheckerBindGroup cur = mSpellCheckerBindGroups.get(sciId);
+ if (cur == this) {
if (DBG) {
Slog.d(TAG, "Remove bind group.");
}
mSpellCheckerBindGroups.remove(sciId);
}
- // Unbind service when there is no active clients.
mContext.unbindService(mInternalConnection);
}
}
@@ -623,7 +691,7 @@
}
ISpellCheckerService spellChecker = ISpellCheckerService.Stub.asInterface(service);
final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId);
- if (group != null) {
+ if (this == group.mInternalConnection) {
group.onServiceConnected(spellChecker);
}
}
@@ -631,7 +699,12 @@
@Override
public void onServiceDisconnected(ComponentName name) {
- mSpellCheckerBindGroups.remove(mSciId);
+ synchronized(mSpellCheckerMap) {
+ final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId);
+ if (this == group.mInternalConnection) {
+ mSpellCheckerBindGroups.remove(mSciId);
+ }
+ }
}
}
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 1441a54..7c0cd9b 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -451,7 +451,7 @@
}
const DisplayHardware& hw(graphicPlane(0).displayHardware());
- if (LIKELY(hw.canDraw() && !isFrozen())) {
+ if (LIKELY(hw.canDraw())) {
// repaint the framebuffer (if needed)
const int index = hw.getCurrentBufferIndex();
@@ -478,15 +478,13 @@
void SurfaceFlinger::postFramebuffer()
{
- if (!mSwapRegion.isEmpty()) {
- const DisplayHardware& hw(graphicPlane(0).displayHardware());
- const nsecs_t now = systemTime();
- mDebugInSwapBuffers = now;
- hw.flip(mSwapRegion);
- mLastSwapBufferTime = systemTime() - now;
- mDebugInSwapBuffers = 0;
- mSwapRegion.clear();
- }
+ const DisplayHardware& hw(graphicPlane(0).displayHardware());
+ const nsecs_t now = systemTime();
+ mDebugInSwapBuffers = now;
+ hw.flip(mSwapRegion);
+ mLastSwapBufferTime = systemTime() - now;
+ mDebugInSwapBuffers = 0;
+ mSwapRegion.clear();
}
void SurfaceFlinger::handleConsoleEvents()
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index ae152fb..759a84b 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -254,9 +254,6 @@
/** CID of active data connection */
protected int mCidActive;
- /** indication of our availability (preconditions to trysetupData are met) **/
- protected boolean mAvailability = false;
-
// When false we will not auto attach and manually attaching is required.
protected boolean mAutoAttachOnCreation = false;
@@ -755,7 +752,7 @@
mPhone.notifyDataConnection(reason, apnIdToType(id));
}
}
- notifyDataAvailability(reason);
+ notifyOffApnsOfAvailability(reason);
}
// a new APN has gone active and needs to send events to catch up with the
@@ -783,15 +780,8 @@
}
// disabled apn's still need avail/unavail notificiations - send them out
- protected void notifyOffApnsOfAvailability(String reason, boolean availability) {
- if (mAvailability == availability) {
- if (DBG) {
- log("notifyOffApnsOfAvailability: no change in availability, " +
- "not nofitying about reason='" + reason + "' availability=" + availability);
- }
- return;
- }
- mAvailability = availability;
+ protected void notifyOffApnsOfAvailability(String reason) {
+ if (DBG) log("notifyOffApnsOfAvailability - reason= " + reason);
for (int id = 0; id < APN_NUM_TYPES; id++) {
if (!isApnIdEnabled(id)) {
notifyApnIdDisconnected(reason, id);
@@ -799,13 +789,6 @@
}
}
- // we had an availability change - tell the listeners
- protected void notifyDataAvailability(String reason) {
- // note that we either just turned all off because we lost availability
- // or all were off and could now go on, so only have off apns to worry about
- notifyOffApnsOfAvailability(reason, isDataPossible(Phone.APN_TYPE_DEFAULT));
- }
-
public boolean isApnTypeEnabled(String apnType) {
if (apnType == null) {
return false;
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index 4dace82..3c7ff05 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -237,7 +237,7 @@
// FIXME this can be improved
setState(State.CONNECTED);
notifyDataConnection(reason);
- notifyOffApnsOfAvailability(reason, true);
+ notifyOffApnsOfAvailability(reason);
log("(fix?) We're on the simulator; assuming data is connected");
return true;
@@ -250,10 +250,10 @@
if ((mState == State.IDLE || mState == State.SCANNING) &&
isDataAllowed() && getAnyDataEnabled()) {
boolean retValue = setupData(reason);
- notifyOffApnsOfAvailability(reason, retValue);
+ notifyOffApnsOfAvailability(reason);
return retValue;
} else {
- notifyOffApnsOfAvailability(reason, false);
+ notifyOffApnsOfAvailability(reason);
return false;
}
}
@@ -276,7 +276,7 @@
}
setState(State.DISCONNECTING);
- notifyDataAvailability(reason);
+ notifyOffApnsOfAvailability(reason);
boolean notificationDeferred = false;
for (DataConnection conn : mDataConnections.values()) {
@@ -536,7 +536,7 @@
private void notifyNoData(FailCause lastFailCauseCode) {
setState(State.FAILED);
- notifyDataAvailability(null);
+ notifyOffApnsOfAvailability(null);
}
protected void gotoIdleAndNotifyDataConnection(String reason) {
@@ -583,7 +583,7 @@
@Override
protected void onRoamingOff() {
if (getDataOnRoamingEnabled() == false) {
- notifyDataAvailability(Phone.REASON_ROAMING_OFF);
+ notifyOffApnsOfAvailability(Phone.REASON_ROAMING_OFF);
trySetupData(Phone.REASON_ROAMING_OFF);
} else {
notifyDataConnection(Phone.REASON_ROAMING_OFF);
@@ -601,7 +601,7 @@
} else {
if (DBG) log("Tear down data connection on roaming.");
cleanUpAllConnections(null);
- notifyDataAvailability(Phone.REASON_ROAMING_ON);
+ notifyOffApnsOfAvailability(Phone.REASON_ROAMING_ON);
}
}
@@ -619,7 +619,7 @@
log("We're on the simulator; assuming data is connected");
}
- notifyDataAvailability(null);
+ notifyOffApnsOfAvailability(null);
if (mState != State.IDLE) {
cleanUpAllConnections(null);
@@ -710,7 +710,7 @@
if (mState == State.CONNECTED && !mCdmaPhone.mSST.isConcurrentVoiceAndDataAllowed()) {
stopNetStatPoll();
notifyDataConnection(Phone.REASON_VOICE_CALL_STARTED);
- notifyDataAvailability(Phone.REASON_VOICE_CALL_STARTED);
+ notifyOffApnsOfAvailability(Phone.REASON_VOICE_CALL_STARTED);
}
}
@@ -727,7 +727,7 @@
// clean slate after call end.
resetPollStats();
}
- notifyDataAvailability(Phone.REASON_VOICE_CALL_ENDED);
+ notifyOffApnsOfAvailability(Phone.REASON_VOICE_CALL_ENDED);
} else {
mDataConnections.get(0).resetRetryCount();
// in case data setup was attempted when we were on a voice call
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 78ba7dd..5497b7f 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -556,7 +556,7 @@
notifyDataConnection(Phone.REASON_DATA_ATTACHED);
} else {
// update APN availability so that APN can be enabled.
- notifyDataAvailability(Phone.REASON_DATA_ATTACHED);
+ notifyOffApnsOfAvailability(Phone.REASON_DATA_ATTACHED);
}
setupDataOnReadyApns(Phone.REASON_DATA_ATTACHED);
@@ -693,7 +693,7 @@
if (waitingApns.isEmpty()) {
if (DBG) log("trySetupData: No APN found");
notifyNoData(GsmDataConnection.FailCause.MISSING_UNKNOWN_APN, apnContext);
- notifyOffApnsOfAvailability(apnContext.getReason(), false);
+ notifyOffApnsOfAvailability(apnContext.getReason());
return false;
} else {
apnContext.setWaitingApns(waitingApns);
@@ -708,7 +708,7 @@
}
// apnContext.setReason(apnContext.getReason());
boolean retValue = setupData(apnContext);
- notifyOffApnsOfAvailability(apnContext.getReason(), retValue);
+ notifyOffApnsOfAvailability(apnContext.getReason());
return retValue;
} else {
// TODO: check the condition.
@@ -716,23 +716,25 @@
&& (apnContext.getState() == State.IDLE
|| apnContext.getState() == State.SCANNING))
mPhone.notifyDataConnectionFailed(apnContext.getReason(), apnContext.getApnType());
- notifyOffApnsOfAvailability(apnContext.getReason(), false);
+ notifyOffApnsOfAvailability(apnContext.getReason());
return false;
}
}
@Override
// Disabled apn's still need avail/unavail notificiations - send them out
- protected void notifyOffApnsOfAvailability(String reason, boolean availability) {
- if (mAvailability == availability) return;
- mAvailability = availability;
-
+ protected void notifyOffApnsOfAvailability(String reason) {
for (ApnContext apnContext : mApnContexts.values()) {
if (!apnContext.isReady()) {
if (DBG) log("notifyOffApnOfAvailability type:" + apnContext.getApnType());
mPhone.notifyDataConnection(reason != null ? reason : apnContext.getReason(),
apnContext.getApnType(),
Phone.DataState.DISCONNECTED);
+ } else {
+ if (DBG) {
+ log("notifyOffApnsOfAvailability skipped apn due to isReady==false: " +
+ apnContext.toString());
+ }
}
}
}
@@ -1572,7 +1574,7 @@
createAllApnList();
if (mPhone.mCM.getRadioState().isOn()) {
if (DBG) log("onRecordsLoaded: notifying data availability");
- notifyDataAvailability(Phone.REASON_SIM_LOADED);
+ notifyOffApnsOfAvailability(Phone.REASON_SIM_LOADED);
}
setupDataOnReadyApns(Phone.REASON_SIM_LOADED);
}
@@ -1681,7 +1683,7 @@
if (DBG) log("onRoamingOff");
if (getDataOnRoamingEnabled() == false) {
- notifyDataAvailability(Phone.REASON_ROAMING_OFF);
+ notifyOffApnsOfAvailability(Phone.REASON_ROAMING_OFF);
setupDataOnReadyApns(Phone.REASON_ROAMING_OFF);
} else {
notifyDataConnection(Phone.REASON_ROAMING_OFF);
@@ -1697,7 +1699,7 @@
} else {
if (DBG) log("onRoamingOn: Tear down data connection on roaming.");
cleanUpAllConnections(true, Phone.REASON_ROAMING_ON);
- notifyDataAvailability(Phone.REASON_ROAMING_ON);
+ notifyOffApnsOfAvailability(Phone.REASON_ROAMING_ON);
}
}
@@ -1714,7 +1716,7 @@
}
if (mPhone.mIccRecords.getRecordsLoaded()) {
- notifyDataAvailability(null);
+ notifyOffApnsOfAvailability(null);
}
if (getOverallState() != State.IDLE) {
@@ -1740,7 +1742,7 @@
if (DBG) log("onRadioOffOrNotAvailable: is off and clean up all connections");
cleanUpAllConnections(false, Phone.REASON_RADIO_TURNED_OFF);
}
- notifyDataAvailability(null);
+ notifyOffApnsOfAvailability(null);
}
@Override
@@ -1985,7 +1987,7 @@
apnContext.getApnType());
}
}
- notifyDataAvailability(reason);
+ notifyOffApnsOfAvailability(reason);
}
/**
diff --git a/tools/aapt/AaptAssets.cpp b/tools/aapt/AaptAssets.cpp
index d66cdf0..3d6537a 100644
--- a/tools/aapt/AaptAssets.cpp
+++ b/tools/aapt/AaptAssets.cpp
@@ -3,6 +3,7 @@
//
#include "AaptAssets.h"
+#include "ResourceFilter.h"
#include "Main.h"
#include <utils/misc.h>
@@ -16,6 +17,8 @@
static const char* kWildcardName = "any";
static const char* kAssetDir = "assets";
static const char* kResourceDir = "res";
+static const char* kValuesDir = "values";
+static const char* kMipmapDir = "mipmap";
static const char* kInvalidChars = "/\\:";
static const size_t kMaxAssetFileName = 100;
@@ -257,9 +260,69 @@
return 1;
}
+uint32_t
+AaptGroupEntry::getConfigValueForAxis(const ResTable_config& config, int axis)
+{
+ switch (axis) {
+ case AXIS_MCC:
+ return config.mcc;
+ case AXIS_MNC:
+ return config.mnc;
+ case AXIS_LANGUAGE:
+ return (((uint32_t)config.country[1]) << 24) | (((uint32_t)config.country[0]) << 16)
+ | (((uint32_t)config.language[1]) << 8) | (config.language[0]);
+ case AXIS_SCREENLAYOUTSIZE:
+ return config.screenLayout&ResTable_config::MASK_SCREENSIZE;
+ case AXIS_ORIENTATION:
+ return config.orientation;
+ case AXIS_UIMODETYPE:
+ return (config.uiMode&ResTable_config::MASK_UI_MODE_TYPE);
+ case AXIS_UIMODENIGHT:
+ return (config.uiMode&ResTable_config::MASK_UI_MODE_NIGHT);
+ case AXIS_DENSITY:
+ return config.density;
+ case AXIS_TOUCHSCREEN:
+ return config.touchscreen;
+ case AXIS_KEYSHIDDEN:
+ return config.inputFlags;
+ case AXIS_KEYBOARD:
+ return config.keyboard;
+ case AXIS_NAVIGATION:
+ return config.navigation;
+ case AXIS_SCREENSIZE:
+ return config.screenSize;
+ case AXIS_SMALLESTSCREENWIDTHDP:
+ return config.smallestScreenWidthDp;
+ case AXIS_SCREENWIDTHDP:
+ return config.screenWidthDp;
+ case AXIS_SCREENHEIGHTDP:
+ return config.screenHeightDp;
+ case AXIS_VERSION:
+ return config.version;
+ }
+ return 0;
+}
+
+bool
+AaptGroupEntry::configSameExcept(const ResTable_config& config,
+ const ResTable_config& otherConfig, int axis)
+{
+ for (int i=AXIS_START; i<=AXIS_END; i++) {
+ if (i == axis) {
+ continue;
+ }
+ if (getConfigValueForAxis(config, i) != getConfigValueForAxis(otherConfig, i)) {
+ return false;
+ }
+ }
+ return true;
+}
+
bool
AaptGroupEntry::initFromDirName(const char* dir, String8* resType)
{
+ mParamsChanged = true;
+
Vector<String8> parts;
String8 mcc, mnc, loc, layoutsize, layoutlong, orient, den;
@@ -629,79 +692,117 @@
{
String8 s = resType;
if (this->mcc != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += mcc;
}
if (this->mnc != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += mnc;
}
if (this->locale != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += locale;
}
if (this->smallestScreenWidthDp != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += smallestScreenWidthDp;
}
if (this->screenWidthDp != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += screenWidthDp;
}
if (this->screenHeightDp != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += screenHeightDp;
}
if (this->screenLayoutSize != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += screenLayoutSize;
}
if (this->screenLayoutLong != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += screenLayoutLong;
}
if (this->orientation != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += orientation;
}
if (this->uiModeType != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += uiModeType;
}
if (this->uiModeNight != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += uiModeNight;
}
if (this->density != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += density;
}
if (this->touchscreen != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += touchscreen;
}
if (this->keysHidden != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += keysHidden;
}
if (this->keyboard != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += keyboard;
}
if (this->navHidden != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += navHidden;
}
if (this->navigation != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += navigation;
}
if (this->screenSize != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += screenSize;
}
if (this->version != "") {
- s += "-";
+ if (s.length() > 0) {
+ s += "-";
+ }
s += version;
}
@@ -1286,9 +1387,14 @@
return v;
}
-ResTable_config AaptGroupEntry::toParams() const
+const ResTable_config& AaptGroupEntry::toParams() const
{
- ResTable_config params;
+ if (!mParamsChanged) {
+ return mParams;
+ }
+
+ mParamsChanged = false;
+ ResTable_config& params(mParams);
memset(¶ms, 0, sizeof(params));
getMccName(mcc.string(), ¶ms);
getMncName(mnc.string(), ¶ms);
@@ -1403,8 +1509,7 @@
String8 AaptFile::getPrintableSource() const
{
if (hasData()) {
- String8 name(mGroupEntry.locale.string());
- name.appendPath(mGroupEntry.vendor.string());
+ String8 name(mGroupEntry.toDirName(String8()));
name.appendPath(mPath);
name.append(" #generated");
return name;
@@ -1424,6 +1529,13 @@
return NO_ERROR;
}
+#if 0
+ printf("Error adding file %s: group %s already exists in leaf=%s path=%s\n",
+ file->getSourceFile().string(),
+ file->getGroupEntry().toDirName(String8()).string(),
+ mLeaf.string(), mPath.string());
+#endif
+
SourcePos(file->getSourceFile(), -1).error("Duplicate file.\n%s: Original is here.",
getPrintableSource().string());
return UNKNOWN_ERROR;
@@ -1434,20 +1546,23 @@
mFiles.removeItemsAt(index);
}
-void AaptGroup::print() const
+void AaptGroup::print(const String8& prefix) const
{
- printf(" %s\n", getPath().string());
+ printf("%s%s\n", prefix.string(), getPath().string());
const size_t N=mFiles.size();
size_t i;
for (i=0; i<N; i++) {
sp<AaptFile> file = mFiles.valueAt(i);
const AaptGroupEntry& e = file->getGroupEntry();
if (file->hasData()) {
- printf(" Gen: (%s) %d bytes\n", e.toString().string(),
+ printf("%s Gen: (%s) %d bytes\n", prefix.string(), e.toDirName(String8()).string(),
(int)file->getSize());
} else {
- printf(" Src: %s\n", file->getPrintableSource().string());
+ printf("%s Src: (%s) %s\n", prefix.string(), e.toDirName(String8()).string(),
+ file->getPrintableSource().string());
}
+ //printf("%s File Group Entry: %s\n", prefix.string(),
+ // file->getGroupEntry().toDirName(String8()).string());
}
}
@@ -1514,38 +1629,6 @@
mDirs.removeItem(name);
}
-status_t AaptDir::renameFile(const sp<AaptFile>& file, const String8& newName)
-{
- sp<AaptGroup> origGroup;
-
- // Find and remove the given file with shear, brute force!
- const size_t NG = mFiles.size();
- size_t i;
- for (i=0; origGroup == NULL && i<NG; i++) {
- sp<AaptGroup> g = mFiles.valueAt(i);
- const size_t NF = g->getFiles().size();
- for (size_t j=0; j<NF; j++) {
- if (g->getFiles().valueAt(j) == file) {
- origGroup = g;
- g->removeFile(j);
- if (NF == 1) {
- mFiles.removeItemsAt(i);
- }
- break;
- }
- }
- }
-
- //printf("Renaming %s to %s\n", file->getPath().getPathName(), newName.string());
-
- // Place the file under its new name.
- if (origGroup != NULL) {
- return addLeafFile(newName, file);
- }
-
- return NO_ERROR;
-}
-
status_t AaptDir::addLeafFile(const String8& leafName, const sp<AaptFile>& file)
{
sp<AaptGroup> group;
@@ -1710,17 +1793,17 @@
return NO_ERROR;
}
-void AaptDir::print() const
+void AaptDir::print(const String8& prefix) const
{
const size_t ND=getDirs().size();
size_t i;
for (i=0; i<ND; i++) {
- getDirs().valueAt(i)->print();
+ getDirs().valueAt(i)->print(prefix);
}
const size_t NF=getFiles().size();
for (i=0; i<NF; i++) {
- getFiles().valueAt(i)->print();
+ getFiles().valueAt(i)->print(prefix);
}
}
@@ -1744,6 +1827,24 @@
// =========================================================================
// =========================================================================
+AaptAssets::AaptAssets()
+ : AaptDir(String8(), String8()),
+ mChanged(false), mHaveIncludedAssets(false), mRes(NULL)
+{
+}
+
+const SortedVector<AaptGroupEntry>& AaptAssets::getGroupEntries() const {
+ if (mChanged) {
+ }
+ return mGroupEntries;
+}
+
+status_t AaptAssets::addFile(const String8& name, const sp<AaptGroup>& file)
+{
+ mChanged = true;
+ return AaptDir::addFile(name, file);
+}
+
sp<AaptFile> AaptAssets::addFile(
const String8& filePath, const AaptGroupEntry& entry,
const String8& srcDir, sp<AaptGroup>* outGroup,
@@ -1945,6 +2046,11 @@
goto bail;
}
+ count = filter(bundle);
+ if (count != NO_ERROR) {
+ totalCount = count;
+ goto bail;
+ }
bail:
return totalCount;
@@ -2002,9 +2108,9 @@
continue;
}
- if (bundle->getMaxResVersion() != NULL && group.version.length() != 0) {
+ if (bundle->getMaxResVersion() != NULL && group.getVersionString().length() != 0) {
int maxResInt = atoi(bundle->getMaxResVersion());
- const char *verString = group.version.string();
+ const char *verString = group.getVersionString().string();
int dirVersionInt = atoi(verString + 1); // skip 'v' in version name
if (dirVersionInt > maxResInt) {
fprintf(stderr, "max res %d, skipping %s\n", maxResInt, entry->d_name);
@@ -2015,7 +2121,7 @@
FileType type = getFileType(subdirName.string());
if (type == kFileTypeDirectory) {
- sp<AaptDir> dir = makeDir(String8(entry->d_name));
+ sp<AaptDir> dir = makeDir(resType);
ssize_t res = dir->slurpFullTree(bundle, subdirName, group,
resType, mFullResPaths);
if (res < 0) {
@@ -2027,7 +2133,13 @@
count += res;
}
- mDirs.add(dir);
+ // Only add this directory if we don't already have a resource dir
+ // for the current type. This ensures that we only add the dir once
+ // for all configs.
+ sp<AaptDir> rdir = resDir(resType);
+ if (rdir == NULL) {
+ mResDirs.add(dir);
+ }
} else {
if (bundle->getVerbose()) {
fprintf(stderr, " (ignoring file '%s')\n", subdirName.string());
@@ -2136,6 +2248,142 @@
return count;
}
+status_t AaptAssets::filter(Bundle* bundle)
+{
+ ResourceFilter reqFilter;
+ status_t err = reqFilter.parse(bundle->getConfigurations());
+ if (err != NO_ERROR) {
+ return err;
+ }
+
+ ResourceFilter prefFilter;
+ err = prefFilter.parse(bundle->getPreferredConfigurations());
+ if (err != NO_ERROR) {
+ return err;
+ }
+
+ if (reqFilter.isEmpty() && prefFilter.isEmpty()) {
+ return NO_ERROR;
+ }
+
+ if (bundle->getVerbose()) {
+ if (!reqFilter.isEmpty()) {
+ printf("Applying required filter: %s\n",
+ bundle->getConfigurations());
+ }
+ if (!prefFilter.isEmpty()) {
+ printf("Applying preferred filter: %s\n",
+ bundle->getPreferredConfigurations());
+ }
+ }
+
+ const Vector<sp<AaptDir> >& resdirs = mResDirs;
+ const size_t ND = resdirs.size();
+ for (size_t i=0; i<ND; i++) {
+ const sp<AaptDir>& dir = resdirs.itemAt(i);
+ if (dir->getLeaf() == kValuesDir) {
+ // The "value" dir is special since a single file defines
+ // multiple resources, so we can not do filtering on the
+ // files themselves.
+ continue;
+ }
+ if (dir->getLeaf() == kMipmapDir) {
+ // We also skip the "mipmap" directory, since the point of this
+ // is to include all densities without stripping. If you put
+ // other configurations in here as well they won't be stripped
+ // either... So don't do that. Seriously. What is wrong with you?
+ continue;
+ }
+
+ const size_t NG = dir->getFiles().size();
+ for (size_t j=0; j<NG; j++) {
+ sp<AaptGroup> grp = dir->getFiles().valueAt(j);
+
+ // First remove any configurations we know we don't need.
+ for (size_t k=0; k<grp->getFiles().size(); k++) {
+ sp<AaptFile> file = grp->getFiles().valueAt(k);
+ if (k == 0 && grp->getFiles().size() == 1) {
+ // If this is the only file left, we need to keep it.
+ // Otherwise the resource IDs we are using will be inconsistent
+ // with what we get when not stripping. Sucky, but at least
+ // for now we can rely on the back-end doing another filtering
+ // pass to take this out and leave us with this resource name
+ // containing no entries.
+ continue;
+ }
+ if (file->getPath().getPathExtension() == ".xml") {
+ // We can't remove .xml files at this point, because when
+ // we parse them they may add identifier resources, so
+ // removing them can cause our resource identifiers to
+ // become inconsistent.
+ continue;
+ }
+ const ResTable_config& config(file->getGroupEntry().toParams());
+ if (!reqFilter.match(config)) {
+ if (bundle->getVerbose()) {
+ printf("Pruning unneeded resource: %s\n",
+ file->getPrintableSource().string());
+ }
+ grp->removeFile(k);
+ k--;
+ }
+ }
+
+ // Quick check: no preferred filters, nothing more to do.
+ if (prefFilter.isEmpty()) {
+ continue;
+ }
+
+ // Now deal with preferred configurations.
+ for (int axis=AXIS_START; axis<=AXIS_END; axis++) {
+ for (size_t k=0; k<grp->getFiles().size(); k++) {
+ sp<AaptFile> file = grp->getFiles().valueAt(k);
+ if (k == 0 && grp->getFiles().size() == 1) {
+ // If this is the only file left, we need to keep it.
+ // Otherwise the resource IDs we are using will be inconsistent
+ // with what we get when not stripping. Sucky, but at least
+ // for now we can rely on the back-end doing another filtering
+ // pass to take this out and leave us with this resource name
+ // containing no entries.
+ continue;
+ }
+ if (file->getPath().getPathExtension() == ".xml") {
+ // We can't remove .xml files at this point, because when
+ // we parse them they may add identifier resources, so
+ // removing them can cause our resource identifiers to
+ // become inconsistent.
+ continue;
+ }
+ const ResTable_config& config(file->getGroupEntry().toParams());
+ if (!prefFilter.match(axis, config)) {
+ // This is a resource we would prefer not to have. Check
+ // to see if have a similar variation that we would like
+ // to have and, if so, we can drop it.
+ for (size_t m=0; m<grp->getFiles().size(); m++) {
+ if (m == k) continue;
+ sp<AaptFile> mfile = grp->getFiles().valueAt(m);
+ const ResTable_config& mconfig(mfile->getGroupEntry().toParams());
+ if (AaptGroupEntry::configSameExcept(config, mconfig, axis)) {
+ if (prefFilter.match(axis, mconfig)) {
+ if (bundle->getVerbose()) {
+ printf("Pruning unneeded resource: %s\n",
+ file->getPrintableSource().string());
+ }
+ grp->removeFile(k);
+ k--;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return NO_ERROR;
+}
+
sp<AaptSymbols> AaptAssets::getSymbolsFor(const String8& name)
{
sp<AaptSymbols> sym = mSymbols.valueFor(name);
@@ -2179,26 +2427,39 @@
return mIncludedAssets.getResources(false);
}
-void AaptAssets::print() const
+void AaptAssets::print(const String8& prefix) const
{
- printf("Locale/Vendor pairs:\n");
+ String8 innerPrefix(prefix);
+ innerPrefix.append(" ");
+ String8 innerInnerPrefix(innerPrefix);
+ innerInnerPrefix.append(" ");
+ printf("%sConfigurations:\n", prefix.string());
const size_t N=mGroupEntries.size();
for (size_t i=0; i<N; i++) {
- printf(" %s/%s\n",
- mGroupEntries.itemAt(i).locale.string(),
- mGroupEntries.itemAt(i).vendor.string());
+ String8 cname = mGroupEntries.itemAt(i).toDirName(String8());
+ printf("%s %s\n", prefix.string(),
+ cname != "" ? cname.string() : "(default)");
}
- printf("\nFiles:\n");
- AaptDir::print();
+ printf("\n%sFiles:\n", prefix.string());
+ AaptDir::print(innerPrefix);
+
+ printf("\n%sResource Dirs:\n", prefix.string());
+ const Vector<sp<AaptDir> >& resdirs = mResDirs;
+ const size_t NR = resdirs.size();
+ for (size_t i=0; i<NR; i++) {
+ const sp<AaptDir>& d = resdirs.itemAt(i);
+ printf("%s Type %s\n", prefix.string(), d->getLeaf().string());
+ d->print(innerInnerPrefix);
+ }
}
-sp<AaptDir> AaptAssets::resDir(const String8& name)
+sp<AaptDir> AaptAssets::resDir(const String8& name) const
{
- const Vector<sp<AaptDir> >& dirs = mDirs;
- const size_t N = dirs.size();
+ const Vector<sp<AaptDir> >& resdirs = mResDirs;
+ const size_t N = resdirs.size();
for (size_t i=0; i<N; i++) {
- const sp<AaptDir>& d = dirs.itemAt(i);
+ const sp<AaptDir>& d = resdirs.itemAt(i);
if (d->getLeaf() == name) {
return d;
}
diff --git a/tools/aapt/AaptAssets.h b/tools/aapt/AaptAssets.h
index 82dfd71..d5345b2 100644
--- a/tools/aapt/AaptAssets.h
+++ b/tools/aapt/AaptAssets.h
@@ -24,6 +24,8 @@
bool valid_symbol_name(const String8& str);
+class AaptAssets;
+
enum {
AXIS_NONE = 0,
AXIS_MCC = 1,
@@ -45,7 +47,10 @@
AXIS_SMALLESTSCREENWIDTHDP,
AXIS_SCREENWIDTHDP,
AXIS_SCREENHEIGHTDP,
- AXIS_VERSION
+ AXIS_VERSION,
+
+ AXIS_START = AXIS_MCC,
+ AXIS_END = AXIS_VERSION,
};
enum {
@@ -56,6 +61,7 @@
SDK_MR1 = 7,
SDK_FROYO = 8,
SDK_HONEYCOMB_MR2 = 13,
+ SDK_ICE_CREAM_SANDWICH = 14,
};
/**
@@ -65,35 +71,19 @@
struct AaptGroupEntry
{
public:
- AaptGroupEntry() { }
+ AaptGroupEntry() : mParamsChanged(true) { }
AaptGroupEntry(const String8& _locale, const String8& _vendor)
- : locale(_locale), vendor(_vendor) { }
-
- String8 mcc;
- String8 mnc;
- String8 locale;
- String8 vendor;
- String8 smallestScreenWidthDp;
- String8 screenWidthDp;
- String8 screenHeightDp;
- String8 screenLayoutSize;
- String8 screenLayoutLong;
- String8 orientation;
- String8 uiModeType;
- String8 uiModeNight;
- String8 density;
- String8 touchscreen;
- String8 keysHidden;
- String8 keyboard;
- String8 navHidden;
- String8 navigation;
- String8 screenSize;
- String8 version;
+ : locale(_locale), vendor(_vendor), mParamsChanged(true) { }
bool initFromDirName(const char* dir, String8* resType);
static status_t parseNamePart(const String8& part, int* axis, uint32_t* value);
-
+
+ static uint32_t getConfigValueForAxis(const ResTable_config& config, int axis);
+
+ static bool configSameExcept(const ResTable_config& config,
+ const ResTable_config& otherConfig, int axis);
+
static bool getMccName(const char* name, ResTable_config* out = NULL);
static bool getMncName(const char* name, ResTable_config* out = NULL);
static bool getLocaleName(const char* name, ResTable_config* out = NULL);
@@ -116,7 +106,7 @@
int compare(const AaptGroupEntry& o) const;
- ResTable_config toParams() const;
+ const ResTable_config& toParams() const;
inline bool operator<(const AaptGroupEntry& o) const { return compare(o) < 0; }
inline bool operator<=(const AaptGroupEntry& o) const { return compare(o) <= 0; }
@@ -127,6 +117,33 @@
String8 toString() const;
String8 toDirName(const String8& resType) const;
+
+ const String8& getVersionString() const { return version; }
+
+private:
+ String8 mcc;
+ String8 mnc;
+ String8 locale;
+ String8 vendor;
+ String8 smallestScreenWidthDp;
+ String8 screenWidthDp;
+ String8 screenHeightDp;
+ String8 screenLayoutSize;
+ String8 screenLayoutLong;
+ String8 orientation;
+ String8 uiModeType;
+ String8 uiModeNight;
+ String8 density;
+ String8 touchscreen;
+ String8 keysHidden;
+ String8 keyboard;
+ String8 navHidden;
+ String8 navigation;
+ String8 screenSize;
+ String8 version;
+
+ mutable bool mParamsChanged;
+ mutable ResTable_config mParams;
};
inline int compare_type(const AaptGroupEntry& lhs, const AaptGroupEntry& rhs)
@@ -225,7 +242,7 @@
status_t addFile(const sp<AaptFile>& file);
void removeFile(size_t index);
- void print() const;
+ void print(const String8& prefix) const;
String8 getPrintableSource() const;
@@ -237,7 +254,7 @@
};
/**
- * A single directory of assets, which can contain for files and other
+ * A single directory of assets, which can contain files and other
* sub-directories.
*/
class AaptDir : public RefBase
@@ -254,25 +271,11 @@
const DefaultKeyedVector<String8, sp<AaptGroup> >& getFiles() const { return mFiles; }
const DefaultKeyedVector<String8, sp<AaptDir> >& getDirs() const { return mDirs; }
- status_t addFile(const String8& name, const sp<AaptGroup>& file);
- status_t addDir(const String8& name, const sp<AaptDir>& dir);
-
- sp<AaptDir> makeDir(const String8& name);
+ virtual status_t addFile(const String8& name, const sp<AaptGroup>& file);
void removeFile(const String8& name);
void removeDir(const String8& name);
- status_t renameFile(const sp<AaptFile>& file, const String8& newName);
-
- status_t addLeafFile(const String8& leafName,
- const sp<AaptFile>& file);
-
- virtual ssize_t slurpFullTree(Bundle* bundle,
- const String8& srcDir,
- const AaptGroupEntry& kind,
- const String8& resType,
- sp<FilePathStore>& fullResPaths);
-
/*
* Perform some sanity checks on the names of files and directories here.
* In particular:
@@ -292,11 +295,23 @@
*/
status_t validate() const;
- void print() const;
+ void print(const String8& prefix) const;
String8 getPrintableSource() const;
private:
+ friend class AaptAssets;
+
+ status_t addDir(const String8& name, const sp<AaptDir>& dir);
+ sp<AaptDir> makeDir(const String8& name);
+ status_t addLeafFile(const String8& leafName,
+ const sp<AaptFile>& file);
+ virtual ssize_t slurpFullTree(Bundle* bundle,
+ const String8& srcDir,
+ const AaptGroupEntry& kind,
+ const String8& resType,
+ sp<FilePathStore>& fullResPaths);
+
String8 mLeaf;
String8 mPath;
@@ -501,13 +516,15 @@
class AaptAssets : public AaptDir
{
public:
- AaptAssets() : AaptDir(String8(), String8()), mHaveIncludedAssets(false), mRes(NULL) { }
+ AaptAssets();
virtual ~AaptAssets() { delete mRes; }
const String8& getPackage() const { return mPackage; }
void setPackage(const String8& package) { mPackage = package; mSymbolsPrivatePackage = package; }
- const SortedVector<AaptGroupEntry>& getGroupEntries() const { return mGroupEntries; }
+ const SortedVector<AaptGroupEntry>& getGroupEntries() const;
+
+ virtual status_t addFile(const String8& name, const sp<AaptGroup>& file);
sp<AaptFile> addFile(const String8& filePath,
const AaptGroupEntry& entry,
@@ -524,15 +541,6 @@
ssize_t slurpFromArgs(Bundle* bundle);
- virtual ssize_t slurpFullTree(Bundle* bundle,
- const String8& srcDir,
- const AaptGroupEntry& kind,
- const String8& resType,
- sp<FilePathStore>& fullResPaths);
-
- ssize_t slurpResourceTree(Bundle* bundle, const String8& srcDir);
- ssize_t slurpResourceZip(Bundle* bundle, const char* filename);
-
sp<AaptSymbols> getSymbolsFor(const String8& name);
const DefaultKeyedVector<String8, sp<AaptSymbols> >& getSymbols() const { return mSymbols; }
@@ -544,10 +552,10 @@
status_t addIncludedResources(const sp<AaptFile>& file);
const ResTable& getIncludedResources() const;
- void print() const;
+ void print(const String8& prefix) const;
- inline const Vector<sp<AaptDir> >& resDirs() { return mDirs; }
- sp<AaptDir> resDir(const String8& name);
+ inline const Vector<sp<AaptDir> >& resDirs() const { return mResDirs; }
+ sp<AaptDir> resDir(const String8& name) const;
inline sp<AaptAssets> getOverlay() { return mOverlay; }
inline void setOverlay(sp<AaptAssets>& overlay) { mOverlay = overlay; }
@@ -565,12 +573,25 @@
setFullAssetPaths(sp<FilePathStore>& res) { mFullAssetPaths = res; }
private:
+ virtual ssize_t slurpFullTree(Bundle* bundle,
+ const String8& srcDir,
+ const AaptGroupEntry& kind,
+ const String8& resType,
+ sp<FilePathStore>& fullResPaths);
+
+ ssize_t slurpResourceTree(Bundle* bundle, const String8& srcDir);
+ ssize_t slurpResourceZip(Bundle* bundle, const char* filename);
+
+ status_t filter(Bundle* bundle);
+
String8 mPackage;
SortedVector<AaptGroupEntry> mGroupEntries;
DefaultKeyedVector<String8, sp<AaptSymbols> > mSymbols;
String8 mSymbolsPrivatePackage;
- Vector<sp<AaptDir> > mDirs;
+ Vector<sp<AaptDir> > mResDirs;
+
+ bool mChanged;
bool mHaveIncludedAssets;
AssetManager mIncludedAssets;
diff --git a/tools/aapt/Android.mk b/tools/aapt/Android.mk
index e507fb9..a3e5d9a 100644
--- a/tools/aapt/Android.mk
+++ b/tools/aapt/Android.mk
@@ -19,6 +19,7 @@
Package.cpp \
StringPool.cpp \
XMLNode.cpp \
+ ResourceFilter.cpp \
ResourceTable.cpp \
Images.cpp \
Resource.cpp \
diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h
index 539c312..2d1060b 100644
--- a/tools/aapt/Bundle.h
+++ b/tools/aapt/Bundle.h
@@ -122,6 +122,8 @@
void setRClassDir(const char* dir) { mRClassDir = dir; }
const char* getConfigurations() const { return mConfigurations.size() > 0 ? mConfigurations.string() : NULL; }
void addConfigurations(const char* val) { if (mConfigurations.size() > 0) { mConfigurations.append(","); mConfigurations.append(val); } else { mConfigurations = val; } }
+ const char* getPreferredConfigurations() const { return mPreferredConfigurations.size() > 0 ? mPreferredConfigurations.string() : NULL; }
+ void addPreferredConfigurations(const char* val) { if (mPreferredConfigurations.size() > 0) { mPreferredConfigurations.append(","); mPreferredConfigurations.append(val); } else { mPreferredConfigurations = val; } }
const char* getResourceIntermediatesDir() const { return mResourceIntermediatesDir; }
void setResourceIntermediatesDir(const char* dir) { mResourceIntermediatesDir = dir; }
const android::Vector<const char*>& getPackageIncludes() const { return mPackageIncludes; }
@@ -244,6 +246,7 @@
const char* mRClassDir;
const char* mResourceIntermediatesDir;
android::String8 mConfigurations;
+ android::String8 mPreferredConfigurations;
android::Vector<const char*> mPackageIncludes;
android::Vector<const char*> mJarFiles;
android::Vector<const char*> mNoCompressExtensions;
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index 413a2dc..637c27d 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -5,6 +5,7 @@
//
#include "Main.h"
#include "Bundle.h"
+#include "ResourceFilter.h"
#include "ResourceTable.h"
#include "XMLNode.h"
@@ -1572,7 +1573,7 @@
}
if (bundle->getVerbose()) {
- assets->print();
+ assets->print(String8());
}
// If they asked for any fileAs that need to be compiled, do so.
diff --git a/tools/aapt/Images.cpp b/tools/aapt/Images.cpp
index 311ceea..ffbe875 100644
--- a/tools/aapt/Images.cpp
+++ b/tools/aapt/Images.cpp
@@ -980,6 +980,10 @@
String8 printableName(file->getPrintableSource());
+ if (bundle->getVerbose()) {
+ printf("Processing image: %s\n", printableName.string());
+ }
+
png_structp read_ptr = NULL;
png_infop read_info = NULL;
FILE* fp;
@@ -1094,6 +1098,10 @@
status_t error = UNKNOWN_ERROR;
+ if (bundle->getVerbose()) {
+ printf("Processing image to cache: %s => %s\n", source.string(), dest.string());
+ }
+
// Get a file handler to read from
fp = fopen(source.string(),"rb");
if (fp == NULL) {
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index 5135787..50c828d 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -65,9 +65,10 @@
" [--max-res-version VAL] \\\n"
" [-I base-package [-I base-package ...]] \\\n"
" [-A asset-source-dir] [-G class-list-file] [-P public-definitions-file] \\\n"
- " [-S resource-sources [-S resource-sources ...]] "
+ " [-S resource-sources [-S resource-sources ...]] \\\n"
" [-F apk-file] [-J R-file-dir] \\\n"
" [--product product1,product2,...] \\\n"
+ " [-c CONFIGS] [--preferred-configurations CONFIGS] \\\n"
" [-o] \\\n"
" [raw-files-dir [raw-files-dir] ...]\n"
"\n"
@@ -154,6 +155,10 @@
" generate dependency files in the same directories for R.java and resource package\n"
" --auto-add-overlay\n"
" Automatically add resources that are only in overlays.\n"
+ " --preferred-configurations\n"
+ " Like the -c option for filtering out unneeded configurations, but\n"
+ " only expresses a preference. If there is no resource available with\n"
+ " the preferred configuration then it will not be stripped.\n"
" --rename-manifest-package\n"
" Rewrite the manifest so that its package name is the package name\n"
" given here. Relative class names (for example .Foo) will be\n"
@@ -509,6 +514,15 @@
bundle.setGenDependencies(true);
} else if (strcmp(cp, "-utf16") == 0) {
bundle.setWantUTF16(true);
+ } else if (strcmp(cp, "-preferred-configurations") == 0) {
+ argc--;
+ argv++;
+ if (!argc) {
+ fprintf(stderr, "ERROR: No argument supplied for '--preferred-configurations' option\n");
+ wantUsage = true;
+ goto bail;
+ }
+ bundle.addPreferredConfigurations(argv[0]);
} else if (strcmp(cp, "-rename-manifest-package") == 0) {
argc--;
argv++;
diff --git a/tools/aapt/Package.cpp b/tools/aapt/Package.cpp
index 1e3efde..3930117 100644
--- a/tools/aapt/Package.cpp
+++ b/tools/aapt/Package.cpp
@@ -6,6 +6,7 @@
#include "Main.h"
#include "AaptAssets.h"
#include "ResourceTable.h"
+#include "ResourceFilter.h"
#include <utils/Log.h>
#include <utils/threads.h>
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index 2e796a2..887fa74 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -352,18 +352,27 @@
if (index < 0) {
sp<ResourceTypeSet> set = new ResourceTypeSet();
+ NOISY(printf("Creating new resource type set for leaf %s with group %s (%p)\n",
+ leafName.string(), group->getPath().string(), group.get()));
set->add(leafName, group);
resources->add(resType, set);
} else {
sp<ResourceTypeSet> set = resources->valueAt(index);
index = set->indexOfKey(leafName);
if (index < 0) {
+ NOISY(printf("Adding to resource type set for leaf %s group %s (%p)\n",
+ leafName.string(), group->getPath().string(), group.get()));
set->add(leafName, group);
} else {
sp<AaptGroup> existingGroup = set->valueAt(index);
- int M = files.size();
- for (int j=0; j<M; j++) {
- existingGroup->addFile(files.valueAt(j));
+ NOISY(printf("Extending to resource type set for leaf %s group %s (%p)\n",
+ leafName.string(), group->getPath().string(), group.get()));
+ for (size_t j=0; j<files.size(); j++) {
+ NOISY(printf("Adding file %s in group %s resType %s\n",
+ files.valueAt(j)->getSourceFile().string(),
+ files.keyAt(j).toDirName(String8()).string(),
+ resType.string()));
+ status_t err = existingGroup->addFile(files.valueAt(j));
}
}
}
@@ -378,9 +387,12 @@
for (int i=0; i<N; i++) {
sp<AaptDir> d = dirs.itemAt(i);
+ NOISY(printf("Collecting dir #%d %p: %s, leaf %s\n", i, d.get(), d->getPath().string(),
+ d->getLeaf().string()));
collect_files(d, resources);
// don't try to include the res dir
+ NOISY(printf("Removing dir leaf %s\n", d->getLeaf().string()));
ass->removeDir(d->getLeaf());
}
}
@@ -570,7 +582,7 @@
size_t baseFileIndex =
baseGroup->getFiles().indexOfKey(overlayFiles.
keyAt(overlayGroupIndex));
- if(baseFileIndex < UNKNOWN_ERROR) {
+ if (baseFileIndex < UNKNOWN_ERROR) {
if (bundle->getVerbose()) {
printf("found a match (%zd) for overlay file %s, for flavor %s\n",
baseFileIndex,
@@ -580,6 +592,11 @@
baseGroup->removeFile(baseFileIndex);
} else {
// didn't find a match fall through and add it..
+ if (true || bundle->getVerbose()) {
+ printf("nothing matches overlay file %s, for flavor %s\n",
+ overlayGroup->getLeaf().string(),
+ overlayFiles.keyAt(overlayGroupIndex).toString().string());
+ }
}
baseGroup->addFile(overlayFiles.valueAt(overlayGroupIndex));
assets->addGroupEntry(overlayFiles.keyAt(overlayGroupIndex));
diff --git a/tools/aapt/ResourceFilter.cpp b/tools/aapt/ResourceFilter.cpp
new file mode 100644
index 0000000..8cfd2a5
--- /dev/null
+++ b/tools/aapt/ResourceFilter.cpp
@@ -0,0 +1,112 @@
+//
+// Copyright 2011 The Android Open Source Project
+//
+// Build resource files from raw assets.
+//
+
+#include "ResourceFilter.h"
+
+status_t
+ResourceFilter::parse(const char* arg)
+{
+ if (arg == NULL) {
+ return 0;
+ }
+
+ const char* p = arg;
+ const char* q;
+
+ while (true) {
+ q = strchr(p, ',');
+ if (q == NULL) {
+ q = p + strlen(p);
+ }
+
+ String8 part(p, q-p);
+
+ if (part == "zz_ZZ") {
+ mContainsPseudo = true;
+ }
+ int axis;
+ uint32_t value;
+ if (AaptGroupEntry::parseNamePart(part, &axis, &value)) {
+ fprintf(stderr, "Invalid configuration: %s\n", arg);
+ fprintf(stderr, " ");
+ for (int i=0; i<p-arg; i++) {
+ fprintf(stderr, " ");
+ }
+ for (int i=0; i<q-p; i++) {
+ fprintf(stderr, "^");
+ }
+ fprintf(stderr, "\n");
+ return 1;
+ }
+
+ ssize_t index = mData.indexOfKey(axis);
+ if (index < 0) {
+ mData.add(axis, SortedVector<uint32_t>());
+ }
+ SortedVector<uint32_t>& sv = mData.editValueFor(axis);
+ sv.add(value);
+ // if it's a locale with a region, also match an unmodified locale of the
+ // same language
+ if (axis == AXIS_LANGUAGE) {
+ if (value & 0xffff0000) {
+ sv.add(value & 0x0000ffff);
+ }
+ }
+ p = q;
+ if (!*p) break;
+ p++;
+ }
+
+ return NO_ERROR;
+}
+
+bool
+ResourceFilter::isEmpty() const
+{
+ return mData.size() == 0;
+}
+
+bool
+ResourceFilter::match(int axis, uint32_t value) const
+{
+ if (value == 0) {
+ // they didn't specify anything so take everything
+ return true;
+ }
+ ssize_t index = mData.indexOfKey(axis);
+ if (index < 0) {
+ // we didn't request anything on this axis so take everything
+ return true;
+ }
+ const SortedVector<uint32_t>& sv = mData.valueAt(index);
+ return sv.indexOf(value) >= 0;
+}
+
+bool
+ResourceFilter::match(int axis, const ResTable_config& config) const
+{
+ return match(axis, AaptGroupEntry::getConfigValueForAxis(config, axis));
+}
+
+bool
+ResourceFilter::match(const ResTable_config& config) const
+{
+ for (int i=AXIS_START; i<=AXIS_END; i++) {
+ if (!match(i, AaptGroupEntry::getConfigValueForAxis(config, i))) {
+ return false;
+ }
+ }
+ return true;
+}
+
+const SortedVector<uint32_t>* ResourceFilter::configsForAxis(int axis) const
+{
+ ssize_t index = mData.indexOfKey(axis);
+ if (index < 0) {
+ return NULL;
+ }
+ return &mData.valueAt(index);
+}
diff --git a/tools/aapt/ResourceFilter.h b/tools/aapt/ResourceFilter.h
new file mode 100644
index 0000000..647b7bb
--- /dev/null
+++ b/tools/aapt/ResourceFilter.h
@@ -0,0 +1,33 @@
+//
+// Copyright 2011 The Android Open Source Project
+//
+// Build resource files from raw assets.
+//
+
+#ifndef RESOURCE_FILTER_H
+#define RESOURCE_FILTER_H
+
+#include "AaptAssets.h"
+
+/**
+ * Implements logic for parsing and handling "-c" and "--preferred-configurations"
+ * options.
+ */
+class ResourceFilter
+{
+public:
+ ResourceFilter() : mData(), mContainsPseudo(false) {}
+ status_t parse(const char* arg);
+ bool isEmpty() const;
+ bool match(int axis, uint32_t value) const;
+ bool match(int axis, const ResTable_config& config) const;
+ bool match(const ResTable_config& config) const;
+ const SortedVector<uint32_t>* configsForAxis(int axis) const;
+ inline bool containsPseudo() const { return mContainsPseudo; }
+
+private:
+ KeyedVector<int,SortedVector<uint32_t> > mData;
+ bool mContainsPseudo;
+};
+
+#endif
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 99f74c6..fdb39ca 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -7,6 +7,7 @@
#include "ResourceTable.h"
#include "XMLNode.h"
+#include "ResourceFilter.h"
#include <utils/ByteOrder.h>
#include <utils/ResourceTypes.h>
@@ -2528,135 +2529,6 @@
return err;
}
-
-status_t
-ResourceFilter::parse(const char* arg)
-{
- if (arg == NULL) {
- return 0;
- }
-
- const char* p = arg;
- const char* q;
-
- while (true) {
- q = strchr(p, ',');
- if (q == NULL) {
- q = p + strlen(p);
- }
-
- String8 part(p, q-p);
-
- if (part == "zz_ZZ") {
- mContainsPseudo = true;
- }
- int axis;
- uint32_t value;
- if (AaptGroupEntry::parseNamePart(part, &axis, &value)) {
- fprintf(stderr, "Invalid configuration: %s\n", arg);
- fprintf(stderr, " ");
- for (int i=0; i<p-arg; i++) {
- fprintf(stderr, " ");
- }
- for (int i=0; i<q-p; i++) {
- fprintf(stderr, "^");
- }
- fprintf(stderr, "\n");
- return 1;
- }
-
- ssize_t index = mData.indexOfKey(axis);
- if (index < 0) {
- mData.add(axis, SortedVector<uint32_t>());
- }
- SortedVector<uint32_t>& sv = mData.editValueFor(axis);
- sv.add(value);
- // if it's a locale with a region, also match an unmodified locale of the
- // same language
- if (axis == AXIS_LANGUAGE) {
- if (value & 0xffff0000) {
- sv.add(value & 0x0000ffff);
- }
- }
- p = q;
- if (!*p) break;
- p++;
- }
-
- return NO_ERROR;
-}
-
-bool
-ResourceFilter::match(int axis, uint32_t value) const
-{
- if (value == 0) {
- // they didn't specify anything so take everything
- return true;
- }
- ssize_t index = mData.indexOfKey(axis);
- if (index < 0) {
- // we didn't request anything on this axis so take everything
- return true;
- }
- const SortedVector<uint32_t>& sv = mData.valueAt(index);
- return sv.indexOf(value) >= 0;
-}
-
-bool
-ResourceFilter::match(const ResTable_config& config) const
-{
- if (config.locale) {
- uint32_t locale = (config.country[1] << 24) | (config.country[0] << 16)
- | (config.language[1] << 8) | (config.language[0]);
- if (!match(AXIS_LANGUAGE, locale)) {
- return false;
- }
- }
- if (!match(AXIS_ORIENTATION, config.orientation)) {
- return false;
- }
- if (!match(AXIS_UIMODETYPE, (config.uiMode&ResTable_config::MASK_UI_MODE_TYPE))) {
- return false;
- }
- if (!match(AXIS_UIMODENIGHT, (config.uiMode&ResTable_config::MASK_UI_MODE_NIGHT))) {
- return false;
- }
- if (!match(AXIS_DENSITY, config.density)) {
- return false;
- }
- if (!match(AXIS_TOUCHSCREEN, config.touchscreen)) {
- return false;
- }
- if (!match(AXIS_KEYSHIDDEN, config.inputFlags)) {
- return false;
- }
- if (!match(AXIS_KEYBOARD, config.keyboard)) {
- return false;
- }
- if (!match(AXIS_NAVIGATION, config.navigation)) {
- return false;
- }
- if (!match(AXIS_SCREENSIZE, config.screenSize)) {
- return false;
- }
- if (!match(AXIS_SMALLESTSCREENWIDTHDP, config.smallestScreenWidthDp)) {
- return false;
- }
- if (!match(AXIS_SCREENWIDTHDP, config.screenWidthDp)) {
- return false;
- }
- if (!match(AXIS_SCREENHEIGHTDP, config.screenHeightDp)) {
- return false;
- }
- if (!match(AXIS_SCREENLAYOUTSIZE, config.screenLayout&ResTable_config::MASK_SCREENSIZE)) {
- return false;
- }
- if (!match(AXIS_VERSION, config.version)) {
- return false;
- }
- return true;
-}
-
status_t ResourceTable::flatten(Bundle* bundle, const sp<AaptFile>& dest)
{
ResourceFilter filter;
diff --git a/tools/aapt/ResourceTable.h b/tools/aapt/ResourceTable.h
index 80f2192..8123bb3 100644
--- a/tools/aapt/ResourceTable.h
+++ b/tools/aapt/ResourceTable.h
@@ -549,19 +549,4 @@
map<String16, set<String8> > mLocalizations;
};
-class ResourceFilter
-{
-public:
- ResourceFilter() : mData(), mContainsPseudo(false) {}
- status_t parse(const char* arg);
- bool match(int axis, uint32_t value) const;
- bool match(const ResTable_config& config) const;
- inline bool containsPseudo() const { return mContainsPseudo; }
-
-private:
- KeyedVector<int,SortedVector<uint32_t> > mData;
- bool mContainsPseudo;
-};
-
-
#endif
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 55e9587..b76f8b9 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -2698,6 +2698,19 @@
handleNetworkDisconnect();
}
transitionTo(mDriverStoppedState);
+ break;
+ }
+
+ // Supplicant can fail to report a NETWORK_DISCONNECTION_EVENT
+ // when authentication times out after a successful connection,
+ // we can figure this from the supplicant state. If supplicant
+ // state is DISCONNECTED, but the mNetworkInfo says we are not
+ // disconnected, we need to handle a disconnection
+ if (state == SupplicantState.DISCONNECTED &&
+ mNetworkInfo.getState() != NetworkInfo.State.DISCONNECTED) {
+ if (DBG) log("Missed CTRL-EVENT-DISCONNECTED, disconnect");
+ handleNetworkDisconnect();
+ transitionTo(mDisconnectedState);
}
break;
/* Do a redundant disconnect without transition */