Merge "Print UI tweaks as per UX request." into klp-dev
diff --git a/api/current.txt b/api/current.txt
index 2ed9c58..ed0d154 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3178,7 +3178,7 @@
method public int noteOpNoThrow(java.lang.String, int, java.lang.String);
method public int startOp(java.lang.String, int, java.lang.String);
method public int startOpNoThrow(java.lang.String, int, java.lang.String);
- method public void startWatchingMode(int, java.lang.String, android.app.AppOpsManager.OnOpChangedListener);
+ method public void startWatchingMode(java.lang.String, java.lang.String, android.app.AppOpsManager.OnOpChangedListener);
method public void stopWatchingMode(android.app.AppOpsManager.OnOpChangedListener);
field public static final int MODE_ALLOWED = 0; // 0x0
field public static final int MODE_ERRORED = 2; // 0x2
@@ -13356,6 +13356,7 @@
ctor public RemoteController(android.content.Context, android.os.Looper) throws java.lang.IllegalArgumentException;
method public int clearArtworkConfiguration();
method public android.media.RemoteController.MetadataEditor editMetadata();
+ method public long getEstimatedMediaPosition();
method public int seekTo(long);
method public int sendMediaKeyEvent(android.view.KeyEvent);
method public int setArtworkConfiguration(int, int);
@@ -17849,7 +17850,7 @@
field public static final int JELLY_BEAN = 16; // 0x10
field public static final int JELLY_BEAN_MR1 = 17; // 0x11
field public static final int JELLY_BEAN_MR2 = 18; // 0x12
- field public static final int KITKAT = 10000; // 0x2710
+ field public static final int KITKAT = 19; // 0x13
}
public final class Bundle implements java.lang.Cloneable android.os.Parcelable {
@@ -23773,6 +23774,8 @@
method public java.lang.String getDeviceSoftwareVersion();
method public java.lang.String getGroupIdLevel1();
method public java.lang.String getLine1Number();
+ method public java.lang.String getMmsUAProfUrl();
+ method public java.lang.String getMmsUserAgent();
method public java.util.List<android.telephony.NeighboringCellInfo> getNeighboringCellInfo();
method public java.lang.String getNetworkCountryIso();
method public java.lang.String getNetworkOperator();
@@ -28337,6 +28340,7 @@
field public static final int HAPTIC_FEEDBACK_ENABLED = 268435456; // 0x10000000
field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+ field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
field public static final int INVISIBLE = 4; // 0x4
field public static final int KEEP_SCREEN_ON = 67108864; // 0x4000000
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 059945f..bdc4fdde 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -178,12 +178,13 @@
* If this flag is set the system will regard views that are not important
* for accessibility in addition to the ones that are important for accessibility.
* That is, views that are marked as not important for accessibility via
- * {@link View#IMPORTANT_FOR_ACCESSIBILITY_NO} and views that are marked as
- * potentially important for accessibility via
+ * {@link View#IMPORTANT_FOR_ACCESSIBILITY_NO} or
+ * {@link View#IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS} and views that are
+ * marked as potentially important for accessibility via
* {@link View#IMPORTANT_FOR_ACCESSIBILITY_AUTO} for which the system has determined
- * that are not important for accessibility, are both reported while querying the
- * window content and also the accessibility service will receive accessibility events
- * from them.
+ * that are not important for accessibility, are reported while querying the window
+ * content and also the accessibility service will receive accessibility events from
+ * them.
* <p>
* <strong>Note:</strong> For accessibility services targeting API version
* {@link Build.VERSION_CODES#JELLY_BEAN} or higher this flag has to be explicitly
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 02faeac..b364af7 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -533,8 +533,10 @@
private native void dumpGraphicsInfo(FileDescriptor fd);
private class ApplicationThread extends ApplicationThreadNative {
- private static final String HEAP_FULL_COLUMN = "%13s %8s %8s %8s %8s %8s %8s %8s %8s %8s";
- private static final String HEAP_COLUMN = "%13s %8s %8s %8s %8s %8s %8s %8s";
+ private static final String HEAP_FULL_COLUMN
+ = "%13s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s";
+ private static final String HEAP_COLUMN
+ = "%13s %8s %8s %8s %8s %8s %8s %8s";
private static final String ONE_COUNT_COLUMN = "%21s %8d";
private static final String TWO_COUNT_COLUMNS = "%21s %8d %21s %8d";
private static final String DB_INFO_FORMAT = " %8s %8s %14s %14s %s";
@@ -1039,34 +1041,36 @@
// otherwise, show human-readable format
if (dumpFullInfo) {
printRow(pw, HEAP_FULL_COLUMN, "", "Pss", "Pss", "Shared", "Private",
- "Shared", "Private", "Heap", "Heap", "Heap");
+ "Shared", "Private", "Swapped", "Heap", "Heap", "Heap");
printRow(pw, HEAP_FULL_COLUMN, "", "Total", "Clean", "Dirty", "Dirty",
- "Clean", "Clean", "Size", "Alloc", "Free");
+ "Clean", "Clean", "Dirty", "Size", "Alloc", "Free");
printRow(pw, HEAP_FULL_COLUMN, "", "------", "------", "------", "------",
- "------", "------", "------", "------", "------");
+ "------", "------", "------", "------", "------", "------");
printRow(pw, HEAP_FULL_COLUMN, "Native Heap", memInfo.nativePss,
memInfo.nativeSwappablePss, memInfo.nativeSharedDirty,
memInfo.nativePrivateDirty, memInfo.nativeSharedClean,
- memInfo.nativePrivateClean, nativeMax, nativeAllocated, nativeFree);
+ memInfo.nativePrivateClean, memInfo.nativeSwappedOut,
+ nativeMax, nativeAllocated, nativeFree);
printRow(pw, HEAP_FULL_COLUMN, "Dalvik Heap", memInfo.dalvikPss,
memInfo.dalvikSwappablePss, memInfo.dalvikSharedDirty,
memInfo.dalvikPrivateDirty, memInfo.dalvikSharedClean,
- memInfo.dalvikPrivateClean, dalvikMax, dalvikAllocated, dalvikFree);
+ memInfo.dalvikPrivateClean, memInfo.dalvikSwappedOut,
+ dalvikMax, dalvikAllocated, dalvikFree);
} else {
- printRow(pw, HEAP_COLUMN, "", "Pss", "Pss", "Private",
- "Private", "Heap", "Heap", "Heap");
- printRow(pw, HEAP_COLUMN, "", "Total", "Clean", "Dirty",
- "Clean", "Size", "Alloc", "Free");
+ printRow(pw, HEAP_COLUMN, "", "Pss", "Private",
+ "Private", "Swapped", "Heap", "Heap", "Heap");
+ printRow(pw, HEAP_COLUMN, "", "Total", "Dirty",
+ "Clean", "Dirty", "Size", "Alloc", "Free");
printRow(pw, HEAP_COLUMN, "", "------", "------", "------",
- "------", "------", "------", "------");
+ "------", "------", "------", "------", "------");
printRow(pw, HEAP_COLUMN, "Native Heap", memInfo.nativePss,
- memInfo.nativeSwappablePss,
memInfo.nativePrivateDirty,
- memInfo.nativePrivateClean, nativeMax, nativeAllocated, nativeFree);
+ memInfo.nativePrivateClean, memInfo.nativeSwappedOut,
+ nativeMax, nativeAllocated, nativeFree);
printRow(pw, HEAP_COLUMN, "Dalvik Heap", memInfo.dalvikPss,
- memInfo.dalvikSwappablePss,
memInfo.dalvikPrivateDirty,
- memInfo.dalvikPrivateClean, dalvikMax, dalvikAllocated, dalvikFree);
+ memInfo.dalvikPrivateClean, memInfo.dalvikSwappedOut,
+ dalvikMax, dalvikAllocated, dalvikFree);
}
int otherPss = memInfo.otherPss;
@@ -1075,6 +1079,7 @@
int otherPrivateDirty = memInfo.otherPrivateDirty;
int otherSharedClean = memInfo.otherSharedClean;
int otherPrivateClean = memInfo.otherPrivateClean;
+ int otherSwappedOut = memInfo.otherSwappedOut;
for (int i=0; i<Debug.MemoryInfo.NUM_OTHER_STATS; i++) {
final int myPss = memInfo.getOtherPss(i);
@@ -1083,16 +1088,17 @@
final int myPrivateDirty = memInfo.getOtherPrivateDirty(i);
final int mySharedClean = memInfo.getOtherSharedClean(i);
final int myPrivateClean = memInfo.getOtherPrivateClean(i);
+ final int mySwappedOut = memInfo.getOtherSwappedOut(i);
if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
- || mySharedClean != 0 || myPrivateClean != 0) {
+ || mySharedClean != 0 || myPrivateClean != 0 || mySwappedOut != 0) {
if (dumpFullInfo) {
printRow(pw, HEAP_FULL_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
- mySharedClean, myPrivateClean, "", "", "");
+ mySharedClean, myPrivateClean, mySwappedOut, "", "", "");
} else {
printRow(pw, HEAP_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
- myPss, mySwappablePss, myPrivateDirty,
- myPrivateClean, "", "", "");
+ myPss, myPrivateDirty,
+ myPrivateClean, mySwappedOut, "", "", "");
}
otherPss -= myPss;
otherSwappablePss -= mySwappablePss;
@@ -1100,27 +1106,28 @@
otherPrivateDirty -= myPrivateDirty;
otherSharedClean -= mySharedClean;
otherPrivateClean -= myPrivateClean;
+ otherSwappedOut -= mySwappedOut;
}
}
if (dumpFullInfo) {
printRow(pw, HEAP_FULL_COLUMN, "Unknown", otherPss, otherSwappablePss,
otherSharedDirty, otherPrivateDirty, otherSharedClean, otherPrivateClean,
- "", "", "");
+ otherSwappedOut, "", "", "");
printRow(pw, HEAP_FULL_COLUMN, "TOTAL", memInfo.getTotalPss(),
memInfo.getTotalSwappablePss(),
memInfo.getTotalSharedDirty(), memInfo.getTotalPrivateDirty(),
memInfo.getTotalSharedClean(), memInfo.getTotalPrivateClean(),
- nativeMax+dalvikMax,
+ memInfo.getTotalSwappedOut(), nativeMax+dalvikMax,
nativeAllocated+dalvikAllocated, nativeFree+dalvikFree);
} else {
- printRow(pw, HEAP_COLUMN, "Unknown", otherPss, otherSwappablePss,
- otherPrivateDirty, otherPrivateClean,
+ printRow(pw, HEAP_COLUMN, "Unknown", otherPss,
+ otherPrivateDirty, otherPrivateClean, otherSwappedOut,
"", "", "");
printRow(pw, HEAP_COLUMN, "TOTAL", memInfo.getTotalPss(),
- memInfo.getTotalSwappablePss(),
memInfo.getTotalPrivateDirty(),
memInfo.getTotalPrivateClean(),
+ memInfo.getTotalSwappedOut(),
nativeMax+dalvikMax,
nativeAllocated+dalvikAllocated, nativeFree+dalvikFree);
}
@@ -1137,16 +1144,17 @@
final int myPrivateDirty = memInfo.getOtherPrivateDirty(i);
final int mySharedClean = memInfo.getOtherSharedClean(i);
final int myPrivateClean = memInfo.getOtherPrivateClean(i);
+ final int mySwappedOut = memInfo.getOtherSwappedOut(i);
if (myPss != 0 || mySharedDirty != 0 || myPrivateDirty != 0
|| mySharedClean != 0 || myPrivateClean != 0) {
if (dumpFullInfo) {
printRow(pw, HEAP_FULL_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
myPss, mySwappablePss, mySharedDirty, myPrivateDirty,
- mySharedClean, myPrivateClean, "", "", "");
+ mySharedClean, myPrivateClean, mySwappedOut, "", "", "");
} else {
printRow(pw, HEAP_COLUMN, Debug.MemoryInfo.getOtherLabel(i),
- myPss, mySwappablePss, myPrivateDirty,
- myPrivateClean, "", "", "");
+ myPss, myPrivateDirty,
+ myPrivateClean, mySwappedOut, "", "", "");
}
}
}
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index dce8cab..183927b 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -790,9 +790,21 @@
/**
* Monitor for changes to the operating mode for the given op in the given app package.
+ * @param op The operation to monitor, one of OPSTR_*.
+ * @param packageName The name of the application to monitor.
+ * @param callback Where to report changes.
+ */
+ public void startWatchingMode(String op, String packageName,
+ final OnOpChangedListener callback) {
+ startWatchingMode(strOpToOp(op), packageName, callback);
+ }
+
+ /**
+ * Monitor for changes to the operating mode for the given op in the given app package.
* @param op The operation to monitor, one of OP_*.
* @param packageName The name of the application to monitor.
* @param callback Where to report changes.
+ * @hide
*/
public void startWatchingMode(int op, String packageName, final OnOpChangedListener callback) {
synchronized (mModeWatchers) {
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 300424c..190ddb4 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -817,6 +817,10 @@
}
if (!mFilesDir.exists()) {
if(!mFilesDir.mkdirs()) {
+ if (mFilesDir.exists()) {
+ // spurious failure; probably racing with another process for this app
+ return mFilesDir;
+ }
Log.w(TAG, "Unable to create files directory " + mFilesDir.getPath());
return null;
}
@@ -879,6 +883,10 @@
}
if (!mCacheDir.exists()) {
if(!mCacheDir.mkdirs()) {
+ if (mCacheDir.exists()) {
+ // spurious failure; probably racing with another process for this app
+ return mCacheDir;
+ }
Log.w(TAG, "Unable to create cache directory " + mCacheDir.getAbsolutePath());
return null;
}
@@ -1453,29 +1461,39 @@
}
}
+ private void validateServiceIntent(Intent service) {
+ if (service.getComponent() == null && service.getPackage() == null) {
+ if (true || getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
+ Log.w(TAG, "Implicit intents with startService are not safe: " + service
+ + " " + Debug.getCallers(2, 3));
+ //IllegalArgumentException ex = new IllegalArgumentException(
+ // "Service Intent must be explicit: " + service);
+ //Log.e(TAG, "This will become an error", ex);
+ //throw ex;
+ }
+ }
+ }
+
@Override
public ComponentName startService(Intent service) {
warnIfCallingFromSystemProcess();
- return startServiceAsUser(service, mUser);
+ return startServiceCommon(service, mUser);
}
@Override
public boolean stopService(Intent service) {
warnIfCallingFromSystemProcess();
- return stopServiceAsUser(service, mUser);
+ return stopServiceCommon(service, mUser);
}
@Override
public ComponentName startServiceAsUser(Intent service, UserHandle user) {
+ return startServiceCommon(service, user);
+ }
+
+ private ComponentName startServiceCommon(Intent service, UserHandle user) {
try {
- if (service.getComponent() == null && service.getPackage() == null) {
- if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
- IllegalArgumentException ex = new IllegalArgumentException(
- "Service Intent must be explicit: " + service);
- Log.e(TAG, "This will become an error", ex);
- //throw ex;
- }
- }
+ validateServiceIntent(service);
service.prepareToLeaveProcess();
ComponentName cn = ActivityManagerNative.getDefault().startService(
mMainThread.getApplicationThread(), service,
@@ -1499,15 +1517,12 @@
@Override
public boolean stopServiceAsUser(Intent service, UserHandle user) {
+ return stopServiceCommon(service, user);
+ }
+
+ private boolean stopServiceCommon(Intent service, UserHandle user) {
try {
- if (service.getComponent() == null && service.getPackage() == null) {
- if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
- IllegalArgumentException ex = new IllegalArgumentException(
- "Service Intent must be explicit: " + service);
- Log.e(TAG, "This will become an error", ex);
- //throw ex;
- }
- }
+ validateServiceIntent(service);
service.prepareToLeaveProcess();
int res = ActivityManagerNative.getDefault().stopService(
mMainThread.getApplicationThread(), service,
@@ -1526,13 +1541,18 @@
public boolean bindService(Intent service, ServiceConnection conn,
int flags) {
warnIfCallingFromSystemProcess();
- return bindServiceAsUser(service, conn, flags, Process.myUserHandle());
+ return bindServiceCommon(service, conn, flags, Process.myUserHandle());
}
/** @hide */
@Override
public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags,
UserHandle user) {
+ return bindServiceCommon(service, conn, flags, user);
+ }
+
+ private boolean bindServiceCommon(Intent service, ServiceConnection conn, int flags,
+ UserHandle user) {
IServiceConnection sd;
if (conn == null) {
throw new IllegalArgumentException("connection is null");
@@ -1543,14 +1563,7 @@
} else {
throw new RuntimeException("Not supported in system context");
}
- if (service.getComponent() == null && service.getPackage() == null) {
- if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
- IllegalArgumentException ex = new IllegalArgumentException(
- "Service Intent must be explicit: " + service);
- Log.e(TAG, "This will become an error", ex);
- //throw ex;
- }
- }
+ validateServiceIntent(service);
try {
IBinder token = getActivityToken();
if (token == null && (flags&BIND_AUTO_CREATE) == 0 && mPackageInfo != null
@@ -2136,18 +2149,21 @@
File dir = dirs[i];
if (!dir.exists()) {
if (!dir.mkdirs()) {
- // Failing to mkdir() may be okay, since we might not have
- // enough permissions; ask vold to create on our behalf.
- final IMountService mount = IMountService.Stub.asInterface(
- ServiceManager.getService("mount"));
- int res = -1;
- try {
- res = mount.mkdirs(getPackageName(), dir.getAbsolutePath());
- } catch (RemoteException e) {
- }
- if (res != 0) {
- Log.w(TAG, "Failed to ensure directory: " + dir);
- dir = null;
+ // recheck existence in case of cross-process race
+ if (!dir.exists()) {
+ // Failing to mkdir() may be okay, since we might not have
+ // enough permissions; ask vold to create on our behalf.
+ final IMountService mount = IMountService.Stub.asInterface(
+ ServiceManager.getService("mount"));
+ int res = -1;
+ try {
+ res = mount.mkdirs(getPackageName(), dir.getAbsolutePath());
+ } catch (RemoteException e) {
+ }
+ if (res != 0) {
+ Log.w(TAG, "Failed to ensure directory: " + dir);
+ dir = null;
+ }
}
}
}
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 02ccaa5..50401bd 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -1657,9 +1657,8 @@
* Request that a given application service be started. The Intent
* should contain either contain the complete class name of a specific service
* implementation to start or a specific package name to target. If the
- * Intent is less specified, it will either throw an {@link IllegalArgumentException}
- * (if the caller targets {@link android.os.Build.VERSION_CODES#KITKAT} or later),
- * or which of multiple matching services it finds and uses will be undefined. If this service
+ * Intent is less specified, it log a warning about this and which of the
+ * multiple matching services it finds and uses will be undefined. If this service
* is not already running, it will be instantiated and started (creating a
* process for it if needed); if it is running then it remains running.
*
diff --git a/core/java/android/hardware/camera2/ICameraDeviceCallbacks.aidl b/core/java/android/hardware/camera2/ICameraDeviceCallbacks.aidl
index 4054a92..02a73d66 100644
--- a/core/java/android/hardware/camera2/ICameraDeviceCallbacks.aidl
+++ b/core/java/android/hardware/camera2/ICameraDeviceCallbacks.aidl
@@ -25,6 +25,8 @@
* Keep up-to-date with frameworks/av/include/camera/camera2/ICameraDeviceCallbacks.h
*/
- oneway void notifyCallback(int msgType, int ext1, int ext2);
- oneway void onResultReceived(int frameId, in CameraMetadataNative result);
+ oneway void onCameraError(int errorCode);
+ oneway void onCameraIdle();
+ oneway void onCaptureStarted(int requestId, long timestamp);
+ oneway void onResultReceived(int requestId, in CameraMetadataNative result);
}
diff --git a/core/java/android/hardware/camera2/impl/CameraDevice.java b/core/java/android/hardware/camera2/impl/CameraDevice.java
index 70a6f44..463063c 100644
--- a/core/java/android/hardware/camera2/impl/CameraDevice.java
+++ b/core/java/android/hardware/camera2/impl/CameraDevice.java
@@ -183,13 +183,8 @@
// Need a valid handler, or current thread needs to have a looper, if
// listener is valid
- if (handler == null && listener != null) {
- Looper looper = Looper.myLooper();
- if (looper == null) {
- throw new IllegalArgumentException(
- "No handler given, and current thread has no looper!");
- }
- handler = new Handler(looper);
+ if (listener != null) {
+ handler = checkHandler(handler);
}
synchronized (mLock) {
@@ -271,12 +266,16 @@
// impossible
return;
}
- }
+ }
}
@Override
public void setDeviceListener(StateListener listener, Handler handler) {
synchronized (mLock) {
+ if (listener != null) {
+ handler = checkHandler(handler);
+ }
+
mDeviceListener = listener;
mDeviceHandler = handler;
}
@@ -365,21 +364,113 @@
}
- // TODO: unit tests
public class CameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub {
+ //
+ // Constants below need to be kept up-to-date with
+ // frameworks/av/include/camera/camera2/ICameraDeviceCallbacks.h
+ //
+
+ //
+ // Error codes for onCameraError
+ //
+
+ /**
+ * Camera has been disconnected
+ */
+ static final int ERROR_CAMERA_DISCONNECTED = 0;
+
+ /**
+ * Camera has encountered a device-level error
+ * Matches CameraDevice.StateListener#ERROR_CAMERA_DEVICE
+ */
+ static final int ERROR_CAMERA_DEVICE = 1;
+
+ /**
+ * Camera has encountered a service-level error
+ * Matches CameraDevice.StateListener#ERROR_CAMERA_SERVICE
+ */
+ static final int ERROR_CAMERA_SERVICE = 2;
+
@Override
public IBinder asBinder() {
return this;
}
- // TODO: consider rename to onMessageReceived
@Override
- public void notifyCallback(int msgType, int ext1, int ext2) throws RemoteException {
- if (DEBUG) {
- Log.d(TAG, "Got message " + msgType + " ext1: " + ext1 + " , ext2: " + ext2);
+ public void onCameraError(final int errorCode) {
+ synchronized (mLock) {
+ if (CameraDevice.this.mDeviceListener == null) return;
+ final StateListener listener = CameraDevice.this.mDeviceListener;
+ Runnable r = null;
+ switch (errorCode) {
+ case ERROR_CAMERA_DISCONNECTED:
+ r = new Runnable() {
+ public void run() {
+ listener.onDisconnected(CameraDevice.this);
+ }
+ };
+ break;
+ case ERROR_CAMERA_DEVICE:
+ case ERROR_CAMERA_SERVICE:
+ r = new Runnable() {
+ public void run() {
+ listener.onError(CameraDevice.this, errorCode);
+ }
+ };
+ break;
+ default:
+ Log.e(TAG, "Unknown error from camera device: " + errorCode);
+ }
+ if (r != null) {
+ CameraDevice.this.mDeviceHandler.post(r);
+ }
}
- // TODO implement rest
+ }
+
+ @Override
+ public void onCameraIdle() {
+ if (DEBUG) {
+ Log.d(TAG, "Camera now idle");
+ }
+ synchronized (mLock) {
+ if (CameraDevice.this.mDeviceListener == null) return;
+ final StateListener listener = CameraDevice.this.mDeviceListener;
+ Runnable r = new Runnable() {
+ public void run() {
+ listener.onIdle(CameraDevice.this);
+ }
+ };
+ CameraDevice.this.mDeviceHandler.post(r);
+ }
+ }
+
+ @Override
+ public void onCaptureStarted(int requestId, final long timestamp) {
+ if (DEBUG) {
+ Log.d(TAG, "Capture started for id " + requestId);
+ }
+ final CaptureListenerHolder holder;
+
+ // Get the listener for this frame ID, if there is one
+ synchronized (mLock) {
+ holder = CameraDevice.this.mCaptureListenerMap.get(requestId);
+ }
+
+ if (holder == null) {
+ return;
+ }
+
+ // Dispatch capture start notice
+ holder.getHandler().post(
+ new Runnable() {
+ public void run() {
+ holder.getListener().onCaptureStarted(
+ CameraDevice.this,
+ holder.getRequest(),
+ timestamp);
+ }
+ });
}
@Override
@@ -429,6 +520,22 @@
}
+ /**
+ * Default handler management. If handler is null, get the current thread's
+ * Looper to create a Handler with. If no looper exists, throw exception.
+ */
+ private Handler checkHandler(Handler handler) {
+ if (handler == null) {
+ Looper looper = Looper.myLooper();
+ if (looper == null) {
+ throw new IllegalArgumentException(
+ "No handler given, and current thread has no looper!");
+ }
+ handler = new Handler(looper);
+ }
+ return handler;
+ }
+
private void checkIfCameraClosed() {
if (mRemoteDevice == null) {
throw new IllegalStateException("CameraDevice was already closed");
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
index 6d7b03e..6d04bf8 100644
--- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
+++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
@@ -652,7 +652,6 @@
* We use a class initializer to allow the native code to cache some field offsets
*/
static {
- System.loadLibrary("media_jni");
nativeClassInit();
Log.v(TAG, "Shall register metadata marshalers");
diff --git a/core/java/android/net/CaptivePortalTracker.java b/core/java/android/net/CaptivePortalTracker.java
index 01977cd..d678f1e 100644
--- a/core/java/android/net/CaptivePortalTracker.java
+++ b/core/java/android/net/CaptivePortalTracker.java
@@ -179,10 +179,6 @@
}
private class DefaultState extends State {
- @Override
- public void enter() {
- setNotificationOff();
- }
@Override
public boolean processMessage(Message message) {
@@ -208,6 +204,7 @@
private class NoActiveNetworkState extends State {
@Override
public void enter() {
+ setNotificationOff();
mNetworkInfo = null;
}
@@ -237,11 +234,6 @@
private class ActiveNetworkState extends State {
@Override
- public void enter() {
- setNotificationOff();
- }
-
- @Override
public boolean processMessage(Message message) {
NetworkInfo info;
switch (message.what) {
@@ -284,6 +276,8 @@
if (DBG) log(getName() + message.toString());
switch (message.what) {
case CMD_DELAYED_CAPTIVE_CHECK:
+ setNotificationOff();
+
if (message.arg1 == mDelayedCheckToken) {
InetAddress server = lookupHost(mServer);
boolean captive = server != null && isCaptivePortal(server);
@@ -362,8 +356,10 @@
private void setNotificationOff() {
try {
- mConnService.setProvisioningNotificationVisible(false, ConnectivityManager.TYPE_NONE,
+ if (mNetworkInfo != null) {
+ mConnService.setProvisioningNotificationVisible(false, mNetworkInfo.getType(),
null, null);
+ }
} catch (RemoteException e) {
log("setNotificationOff: " + e);
}
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 88eb280..114a1ea 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -438,17 +438,28 @@
public static final int JELLY_BEAN_MR2 = 18;
/**
- * Android X.X: KitKat, another tasty treat.
+ * Android 4.4: KitKat, another tasty treat.
*
* <p>Applications targeting this or a later release will get these
* new changes in behavior:</p>
* <ul>
- * <li>It is no longer allowed to use implicit intents with
- * {@link android.content.Context#startService} or
- * {@link android.content.Context#bindService}.
+ * <li> The default result of {android.preference.PreferenceActivity#isValidFragment
+ * PreferenceActivity.isValueFragment} becomes false instead of true.</li>
+ * <li> In {@link android.webkit.WebView}, apps targeting earlier versions will have
+ * JS URLs evaluated directly and any result of the evaluation will not replace
+ * the current page content. Apps targetting KITKAT or later that load a JS URL will
+ * have the result of that URL replace the content of the current page</li>
+ * <li> {@link android.app.AlarmManager#set AlarmManager.set} becomes interpreted as
+ * an inexact value, to give the system more flexibility in scheduling alarms.</li>
+ * <li> {@link android.content.Context#getSharedPreferences(String, int)
+ * Context.getSharedPreferences} no longer allows a null name.</li>
+ * <li> {@link android.widget.RelativeLayout} changes to compute wrapped content
+ * margins correctly.</li>
+ * <li> {@link android.app.ActionBar}'s window content overlay is allowed to be
+ * drawn.</li>
* </ul>
*/
- public static final int KITKAT = CUR_DEVELOPMENT;
+ public static final int KITKAT = 19;
}
/** The type of build, like "user" or "eng". */
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index f47ac4e..5a919fb 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -30,7 +30,8 @@
*
*/
public final class Bundle implements Parcelable, Cloneable {
- private static final String LOG_TAG = "Bundle";
+ private static final String TAG = "Bundle";
+ static final boolean DEBUG = false;
public static final Bundle EMPTY;
static final int BUNDLE_MAGIC = 0x4C444E42; // 'B' 'N' 'D' 'L'
@@ -157,7 +158,7 @@
unparcel();
int size = mMap.size();
if (size > 1) {
- Log.w(LOG_TAG, "getPairValue() used on Bundle with multiple pairs.");
+ Log.w(TAG, "getPairValue() used on Bundle with multiple pairs.");
}
if (size == 0) {
return null;
@@ -210,10 +211,14 @@
*/
/* package */ synchronized void unparcel() {
if (mParcelledData == null) {
+ if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+ + ": no parcelled data");
return;
}
int N = mParcelledData.readInt();
+ if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+ + ": reading " + N + " maps");
if (N < 0) {
return;
}
@@ -226,6 +231,8 @@
mParcelledData.readArrayMapInternal(mMap, N, mClassLoader);
mParcelledData.recycle();
mParcelledData = null;
+ if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+ + " final map: " + mMap);
}
/**
@@ -794,6 +801,8 @@
*/
public boolean getBoolean(String key) {
unparcel();
+ if (DEBUG) Log.d(TAG, "Getting boolean in "
+ + Integer.toHexString(System.identityHashCode(this)));
return getBoolean(key, false);
}
@@ -810,8 +819,8 @@
sb.append(". The default value ");
sb.append(defaultValue);
sb.append(" was returned.");
- Log.w(LOG_TAG, sb.toString());
- Log.w(LOG_TAG, "Attempt to cast generated internal exception:", e);
+ Log.w(TAG, sb.toString());
+ Log.w(TAG, "Attempt to cast generated internal exception:", e);
}
private void typeWarning(String key, Object value, String className,
@@ -1648,18 +1657,19 @@
parcel.writeInt(BUNDLE_MAGIC);
parcel.appendFrom(mParcelledData, 0, length);
} else {
+ int lengthPos = parcel.dataPosition();
parcel.writeInt(-1); // dummy, will hold length
parcel.writeInt(BUNDLE_MAGIC);
- int oldPos = parcel.dataPosition();
+ int startPos = parcel.dataPosition();
parcel.writeArrayMapInternal(mMap);
- int newPos = parcel.dataPosition();
+ int endPos = parcel.dataPosition();
// Backpatch length
- parcel.setDataPosition(oldPos - 8);
- int length = newPos - oldPos;
+ parcel.setDataPosition(lengthPos);
+ int length = endPos - startPos;
parcel.writeInt(length);
- parcel.setDataPosition(newPos);
+ parcel.setDataPosition(endPos);
}
} finally {
parcel.restoreAllowFds(oldAllowFds);
@@ -1694,24 +1704,13 @@
Parcel p = Parcel.obtain();
p.setDataPosition(0);
p.appendFrom(parcel, offset, length);
+ if (DEBUG) Log.d(TAG, "Retrieving " + Integer.toHexString(System.identityHashCode(this))
+ + ": " + length + " bundle bytes starting at " + offset);
p.setDataPosition(0);
- if (mMap != null) {
- // It is not allowed to have a Bundle with both a map and a parcel, so if we
- // already have a map then we need to immediately unparcel into it. This also
- // lets us know we need to go through the slow path of unparceling, since the
- // map may already contains some data so the two need to be merged.
- if (mFdsKnown) {
- mHasFds |= p.hasFileDescriptors();
- }
- int N = p.readInt();
- p.readArrayMapSafelyInternal(mMap, N, mClassLoader);
- p.recycle();
- } else {
- mParcelledData = p;
- mHasFds = p.hasFileDescriptors();
- mFdsKnown = true;
- }
+ mParcelledData = p;
+ mHasFds = p.hasFileDescriptors();
+ mFdsKnown = true;
}
@Override
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index ea9fd06..974bf8d 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -124,6 +124,9 @@
/** The shared clean pages used by dalvik heap. */
/** @hide We may want to expose this, eventually. */
public int dalvikSharedClean;
+ /** The dirty dalvik pages that have been swapped out. */
+ /** @hide We may want to expose this, eventually. */
+ public int dalvikSwappedOut;
/** The proportional set size for the native heap. */
public int nativePss;
@@ -140,6 +143,9 @@
/** The shared clean pages used by the native heap. */
/** @hide We may want to expose this, eventually. */
public int nativeSharedClean;
+ /** The dirty native pages that have been swapped out. */
+ /** @hide We may want to expose this, eventually. */
+ public int nativeSwappedOut;
/** The proportional set size for everything else. */
public int otherPss;
@@ -156,6 +162,9 @@
/** The shared clean pages used by everything else. */
/** @hide We may want to expose this, eventually. */
public int otherSharedClean;
+ /** The dirty pages used by anyting else that have been swapped out. */
+ /** @hide We may want to expose this, eventually. */
+ public int otherSwappedOut;
/** @hide */
public static final int NUM_OTHER_STATS = 16;
@@ -164,7 +173,7 @@
public static final int NUM_DVK_STATS = 5;
/** @hide */
- public static final int NUM_CATEGORIES = 6;
+ public static final int NUM_CATEGORIES = 7;
/** @hide */
public static final int offsetPss = 0;
@@ -178,7 +187,8 @@
public static final int offsetPrivateClean = 4;
/** @hide */
public static final int offsetSharedClean = 5;
-
+ /** @hide */
+ public static final int offsetSwappedOut = 6;
private int[] otherStats = new int[(NUM_OTHER_STATS+NUM_DVK_STATS)*NUM_CATEGORIES];
@@ -236,6 +246,14 @@
return dalvikSharedClean + nativeSharedClean + otherSharedClean;
}
+ /**
+ * Return total swapped out memory in kB.
+ * @hide
+ */
+ public int getTotalSwappedOut() {
+ return dalvikSwappedOut + nativeSwappedOut + otherSwappedOut;
+ }
+
/** @hide */
public int getOtherPss(int which) {
return otherStats[which*NUM_CATEGORIES + offsetPss];
@@ -263,13 +281,17 @@
return otherStats[which*NUM_CATEGORIES + offsetPrivateClean];
}
-
/** @hide */
public int getOtherSharedClean(int which) {
return otherStats[which*NUM_CATEGORIES + offsetSharedClean];
}
/** @hide */
+ public int getOtherSwappedOut(int which) {
+ return otherStats[which*NUM_CATEGORIES + offsetSwappedOut];
+ }
+
+ /** @hide */
public static String getOtherLabel(int which) {
switch (which) {
case 0: return "Dalvik Other";
@@ -287,7 +309,7 @@
case 12: return "Other mmap";
case 13: return "Graphics";
case 14: return "GL";
- case 15: return "Other memtrack";
+ case 15: return "Memtrack";
case 16: return ".Heap";
case 17: return ".LOS";
case 18: return ".LinearAlloc";
@@ -308,18 +330,21 @@
dest.writeInt(dalvikSharedDirty);
dest.writeInt(dalvikPrivateClean);
dest.writeInt(dalvikSharedClean);
+ dest.writeInt(dalvikSwappedOut);
dest.writeInt(nativePss);
dest.writeInt(nativeSwappablePss);
dest.writeInt(nativePrivateDirty);
dest.writeInt(nativeSharedDirty);
dest.writeInt(nativePrivateClean);
dest.writeInt(nativeSharedClean);
+ dest.writeInt(nativeSwappedOut);
dest.writeInt(otherPss);
dest.writeInt(otherSwappablePss);
dest.writeInt(otherPrivateDirty);
dest.writeInt(otherSharedDirty);
dest.writeInt(otherPrivateClean);
dest.writeInt(otherSharedClean);
+ dest.writeInt(otherSwappedOut);
dest.writeIntArray(otherStats);
}
@@ -330,18 +355,21 @@
dalvikSharedDirty = source.readInt();
dalvikPrivateClean = source.readInt();
dalvikSharedClean = source.readInt();
+ dalvikSwappedOut = source.readInt();
nativePss = source.readInt();
nativeSwappablePss = source.readInt();
nativePrivateDirty = source.readInt();
nativeSharedDirty = source.readInt();
nativePrivateClean = source.readInt();
nativeSharedClean = source.readInt();
+ nativeSwappedOut = source.readInt();
otherPss = source.readInt();
otherSwappablePss = source.readInt();
otherPrivateDirty = source.readInt();
otherSharedDirty = source.readInt();
otherPrivateClean = source.readInt();
otherSharedClean = source.readInt();
+ otherSwappedOut = source.readInt();
otherStats = source.createIntArray();
}
@@ -1582,6 +1610,22 @@
}
/**
+ * Return a string consisting of methods and locations at multiple call stack levels.
+ * @param depth the number of levels to return, starting with the immediate caller.
+ * @return a string describing the call stack.
+ * {@hide}
+ */
+ public static String getCallers(final int start, int depth) {
+ final StackTraceElement[] callStack = Thread.currentThread().getStackTrace();
+ StringBuffer sb = new StringBuffer();
+ depth += start;
+ for (int i = start; i < depth; i++) {
+ sb.append(getCaller(callStack, i)).append(" ");
+ }
+ return sb.toString();
+ }
+
+ /**
* Like {@link #getCallers(int)}, but each location is append to the string
* as a new line with <var>linePrefix</var> in front of it.
* @param depth the number of levels to return, starting with the immediate caller.
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 23492ff..4c7bbb4 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -23,9 +23,10 @@
interface IPowerManager
{
- // WARNING: The first two methods must remain the first two methods because their
+ // WARNING: The first three methods must remain the first three methods because their
// transaction numbers must not change unless IPowerManager.cpp is also updated.
void acquireWakeLock(IBinder lock, int flags, String tag, String packageName, in WorkSource ws);
+ void acquireWakeLockWithUid(IBinder lock, int flags, String tag, String packageName, int uidtoblame);
void releaseWakeLock(IBinder lock, int flags);
void updateWakeLockWorkSource(IBinder lock, in WorkSource ws);
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index 5f3a81c..02b1998 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -1610,6 +1610,7 @@
public final Bundle readBundle(ClassLoader loader) {
int length = readInt();
if (length < 0) {
+ if (Bundle.DEBUG) Log.d(TAG, "null bundle: length=" + length);
return null;
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 3769e1e..631a38f 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2407,6 +2407,15 @@
public static final String POINTER_SPEED = "pointer_speed";
/**
+ * I am the lolrus.
+ * <p>
+ * Nonzero values indicate that the user has a bukkit.
+ * Backward-compatible with <code>PrefGetPreference(prefAllowEasterEggs)</code>.
+ * @hide
+ */
+ public static final String EGG_MODE = "egg_mode";
+
+ /**
* Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update.
*
diff --git a/core/java/android/util/ArrayMap.java b/core/java/android/util/ArrayMap.java
index fa534cc..df1d4cd 100644
--- a/core/java/android/util/ArrayMap.java
+++ b/core/java/android/util/ArrayMap.java
@@ -292,6 +292,7 @@
for (int i=0; i<N; i++) {
array[i] = null;
}
+ mSize = 0;
}
}
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 4366fb7..22d4c9b 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -478,7 +478,8 @@
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
;
if (!getContext().getResources().getCompatibilityInfo().supportsScreen()) {
- mLayout.flags |= WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+ mLayout.privateFlags |=
+ WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
}
mLayout.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 06f00f7..f763d19 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -2121,6 +2121,12 @@
public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 0x00000002;
/**
+ * The view is not important for accessibility, nor are any of its
+ * descendant views.
+ */
+ public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 0x00000004;
+
+ /**
* The default whether the view is important for accessibility.
*/
static final int IMPORTANT_FOR_ACCESSIBILITY_DEFAULT = IMPORTANT_FOR_ACCESSIBILITY_AUTO;
@@ -2130,14 +2136,15 @@
* whether a view is important for accessibility.
*/
static final int PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK = (IMPORTANT_FOR_ACCESSIBILITY_AUTO
- | IMPORTANT_FOR_ACCESSIBILITY_YES | IMPORTANT_FOR_ACCESSIBILITY_NO)
+ | IMPORTANT_FOR_ACCESSIBILITY_YES | IMPORTANT_FOR_ACCESSIBILITY_NO
+ | IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS)
<< PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT;
/**
* Shift for the bits in {@link #mPrivateFlags2} related to the
* "accessibilityLiveRegion" attribute.
*/
- static final int PFLAG2_ACCESSIBILITY_LIVE_REGION_SHIFT = 22;
+ static final int PFLAG2_ACCESSIBILITY_LIVE_REGION_SHIFT = 23;
/**
* Live region mode specifying that accessibility services should not
@@ -6999,12 +7006,15 @@
*
* @see #IMPORTANT_FOR_ACCESSIBILITY_YES
* @see #IMPORTANT_FOR_ACCESSIBILITY_NO
+ * @see #IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
* @see #IMPORTANT_FOR_ACCESSIBILITY_AUTO
*/
@ViewDebug.ExportedProperty(category = "accessibility", mapping = {
@ViewDebug.IntToString(from = IMPORTANT_FOR_ACCESSIBILITY_AUTO, to = "auto"),
@ViewDebug.IntToString(from = IMPORTANT_FOR_ACCESSIBILITY_YES, to = "yes"),
- @ViewDebug.IntToString(from = IMPORTANT_FOR_ACCESSIBILITY_NO, to = "no")
+ @ViewDebug.IntToString(from = IMPORTANT_FOR_ACCESSIBILITY_NO, to = "no"),
+ @ViewDebug.IntToString(from = IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
+ to = "noHideDescendants")
})
public int getImportantForAccessibility() {
return (mPrivateFlags2 & PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK)
@@ -7074,6 +7084,7 @@
*
* @see #IMPORTANT_FOR_ACCESSIBILITY_YES
* @see #IMPORTANT_FOR_ACCESSIBILITY_NO
+ * @see #IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
* @see #IMPORTANT_FOR_ACCESSIBILITY_AUTO
*/
public void setImportantForAccessibility(int mode) {
@@ -7101,19 +7112,24 @@
public boolean isImportantForAccessibility() {
final int mode = (mPrivateFlags2 & PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK)
>> PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT;
- switch (mode) {
- case IMPORTANT_FOR_ACCESSIBILITY_YES:
- return true;
- case IMPORTANT_FOR_ACCESSIBILITY_NO:
- return false;
- case IMPORTANT_FOR_ACCESSIBILITY_AUTO:
- return isActionableForAccessibility() || hasListenersForAccessibility()
- || getAccessibilityNodeProvider() != null
- || getAccessibilityLiveRegion() != ACCESSIBILITY_LIVE_REGION_NONE;
- default:
- throw new IllegalArgumentException("Unknow important for accessibility mode: "
- + mode);
+ if (mode == IMPORTANT_FOR_ACCESSIBILITY_NO
+ || mode == IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS) {
+ return false;
}
+
+ // Check parent mode to ensure we're not hidden.
+ ViewParent parent = mParent;
+ while (parent instanceof View) {
+ if (((View) parent).getImportantForAccessibility()
+ == IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS) {
+ return false;
+ }
+ parent = parent.getParent();
+ }
+
+ return mode == IMPORTANT_FOR_ACCESSIBILITY_YES || isActionableForAccessibility()
+ || hasListenersForAccessibility() || getAccessibilityNodeProvider() != null
+ || getAccessibilityLiveRegion() != ACCESSIBILITY_LIVE_REGION_NONE;
}
/**
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 89c74f1..7e3ee5f 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -467,7 +467,7 @@
if (DEBUG_LAYOUT) Log.d(TAG, "WindowLayout in setView:" + attrs);
if (!compatibilityInfo.supportsScreen()) {
- attrs.flags |= WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+ attrs.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
mLastInCompatMode = true;
}
@@ -748,8 +748,8 @@
// Keep track of the actual window flags supplied by the client.
mClientWindowLayoutFlags = attrs.flags;
// preserve compatible window flag if exists.
- int compatibleWindowFlag =
- mWindowAttributes.flags & WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+ int compatibleWindowFlag = mWindowAttributes.privateFlags
+ & WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
// transfer over system UI visibility values as they carry current state.
attrs.systemUiVisibility = mWindowAttributes.systemUiVisibility;
attrs.subtreeSystemUiVisibility = mWindowAttributes.subtreeSystemUiVisibility;
@@ -757,7 +757,7 @@
if (mWindowAttributes.packageName == null) {
mWindowAttributes.packageName = mBasePackageName;
}
- mWindowAttributes.flags |= compatibleWindowFlag;
+ mWindowAttributes.privateFlags |= compatibleWindowFlag;
applyKeepScreenOnFlag(mWindowAttributes);
@@ -1146,10 +1146,10 @@
mFullRedrawNeeded = true;
mLayoutRequested = true;
if (mLastInCompatMode) {
- params.flags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+ params.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
mLastInCompatMode = false;
} else {
- params.flags |= WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+ params.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
mLastInCompatMode = true;
}
}
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 7a24243..b3a0699 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -708,6 +708,11 @@
public void addFlags(int flags) {
setFlags(flags, flags);
}
+
+ /** @hide */
+ public void addPrivateFlags(int flags) {
+ setPrivateFlags(flags, flags);
+ }
/**
* Convenience function to clear the flag bits as specified in flags, as
@@ -751,6 +756,14 @@
}
}
+ private void setPrivateFlags(int flags, int mask) {
+ final WindowManager.LayoutParams attrs = getAttributes();
+ attrs.privateFlags = (attrs.privateFlags & ~mask) | (flags & mask);
+ if (mCallback != null) {
+ mCallback.onWindowAttributesChanged(attrs);
+ }
+ }
+
/**
* Set the amount of dim behind the window when using
* {@link WindowManager.LayoutParams#FLAG_DIM_BEHIND}. This overrides
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 53f4d77..815b97c 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -1754,6 +1754,9 @@
sb.append(" fl=#");
sb.append(Integer.toHexString(flags));
if (privateFlags != 0) {
+ if ((privateFlags & PRIVATE_FLAG_COMPATIBLE_WINDOW) != 0) {
+ sb.append(" compatible=true");
+ }
sb.append(" pfl=0x").append(Integer.toHexString(privateFlags));
}
if (format != PixelFormat.OPAQUE) {
@@ -1784,9 +1787,6 @@
sb.append(" rotAnim=");
sb.append(rotationAnimation);
}
- if ((flags & PRIVATE_FLAG_COMPATIBLE_WINDOW) != 0) {
- sb.append(" compatible=true");
- }
if (systemUiVisibility != 0) {
sb.append(" sysui=0x");
sb.append(Integer.toHexString(systemUiVisibility));
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 79c0b3c..79aec90 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -165,9 +165,11 @@
* This can be used as a hint for scrolling (avoiding resizing)
* the window to make certain that parts of its content
* are visible.
+ * @param decorFrame The decor frame specified by policy specific to this window,
+ * to use for proper cropping during animation.
*/
public void computeFrameLw(Rect parentFrame, Rect displayFrame,
- Rect overlayFrame, Rect contentFrame, Rect visibleFrame);
+ Rect overlayFrame, Rect contentFrame, Rect visibleFrame, Rect decorFrame);
/**
* Retrieve the current frame of the window that has been assigned by
@@ -399,8 +401,8 @@
*/
public FakeWindow addFakeWindow(Looper looper,
InputEventReceiver.Factory inputEventReceiverFactory,
- String name, int windowType, int layoutParamsFlags, boolean canReceiveKeys,
- boolean hasFocus, boolean touchFullscreen);
+ String name, int windowType, int layoutParamsFlags, int layoutParamsPrivateFlags,
+ boolean canReceiveKeys, boolean hasFocus, boolean touchFullscreen);
/**
* Returns a code that describes the current state of the lid switch.
@@ -815,19 +817,10 @@
int displayRotation);
/**
- * Return the rectangle of the screen currently covered by system decorations.
- * This will be called immediately after {@link #layoutWindowLw}. It can
- * fill in the rectangle to indicate any part of the screen that it knows
- * for sure is covered by system decor such as the status bar. The rectangle
- * is initially set to the actual size of the screen, indicating nothing is
- * covered.
- *
- * @param systemRect The rectangle of the screen that is not covered by
- * system decoration.
- * @return Returns the layer above which the system rectangle should
- * not be applied.
+ * Returns the bottom-most layer of the system decor, above which no policy decor should
+ * be applied.
*/
- public int getSystemDecorRectLw(Rect systemRect);
+ public int getSystemDecorLayerLw();
/**
* Return the rectangle of the screen that is available for applications to run in.
diff --git a/core/java/android/webkit/CookieSyncManager.java b/core/java/android/webkit/CookieSyncManager.java
index 276bcae..154a290 100644
--- a/core/java/android/webkit/CookieSyncManager.java
+++ b/core/java/android/webkit/CookieSyncManager.java
@@ -59,8 +59,10 @@
private static CookieSyncManager sRef;
- private CookieSyncManager(Context context) {
- super(context, "CookieSyncManager");
+ private static boolean sGetInstanceAllowed = false;
+
+ private CookieSyncManager() {
+ super("CookieSyncManager");
}
/**
@@ -71,7 +73,10 @@
* @return CookieSyncManager
*/
public static synchronized CookieSyncManager getInstance() {
- checkInstanceIsCreated();
+ checkInstanceIsAllowed();
+ if (sRef == null) {
+ sRef = new CookieSyncManager();
+ }
return sRef;
}
@@ -80,16 +85,17 @@
* @param context
* @return CookieSyncManager
*/
- public static synchronized CookieSyncManager createInstance(
- Context context) {
+ public static synchronized CookieSyncManager createInstance(Context context) {
if (context == null) {
throw new IllegalArgumentException("Invalid context argument");
}
-
- if (sRef == null) {
- sRef = new CookieSyncManager(context);
+ // TODO: Remove this workaround after webview classic is no longer supported.
+ if (WebViewFactory.getProvider().getClass().getName().contains("WebViewClassic")) {
+ WebViewDatabase.getInstance(context);
}
- return sRef;
+
+ setGetInstanceIsAllowed();
+ return getInstance();
}
protected void syncFromRamToFlash() {
@@ -110,8 +116,15 @@
}
}
- private static void checkInstanceIsCreated() {
- if (sRef == null) {
+ static void setGetInstanceIsAllowed() {
+ sGetInstanceAllowed = true;
+ }
+
+ private static void checkInstanceIsAllowed() {
+ // Prior to Android KK, calling createInstance() or constructing a WebView is
+ // a hard pre-condition for calling getInstance(). We retain that contract to aid
+ // developers targeting a range of SDK levels.
+ if (!sGetInstanceAllowed) {
throw new IllegalStateException(
"CookieSyncManager::createInstance() needs to be called "
+ "before CookieSyncManager::getInstance()");
diff --git a/core/java/android/webkit/WebSyncManager.java b/core/java/android/webkit/WebSyncManager.java
index d3ec603..c600a7e 100644
--- a/core/java/android/webkit/WebSyncManager.java
+++ b/core/java/android/webkit/WebSyncManager.java
@@ -36,7 +36,7 @@
private String mThreadName;
// handler of the sync thread
protected Handler mHandler;
- // database for the persistent storage
+ // database for the persistent storage. Always null.
protected WebViewDatabase mDataBase;
// Ref count for calls to start/stop sync
private int mStartSyncRefCount;
@@ -60,16 +60,15 @@
}
protected WebSyncManager(Context context, String name) {
+ this(name);
+ }
+
+ /** @hide */
+ WebSyncManager(String name) {
mThreadName = name;
- if (context != null) {
- mDataBase = WebViewDatabase.getInstance(context);
- mSyncThread = new Thread(this);
- mSyncThread.setName(mThreadName);
- mSyncThread.start();
- } else {
- throw new IllegalStateException(
- "WebSyncManager can't be created without context");
- }
+ mSyncThread = new Thread(this);
+ mSyncThread.setName(mThreadName);
+ mSyncThread.start();
}
protected Object clone() throws CloneNotSupportedException {
@@ -82,7 +81,7 @@
mHandler = new SyncHandler();
onSyncInit();
// lower the priority after onSyncInit() is done
- Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+ Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
Message msg = mHandler.obtainMessage(SYNC_MESSAGE);
mHandler.sendMessageDelayed(msg, SYNC_LATER_INTERVAL);
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 90cc72e..2cbe0e2 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -506,8 +506,8 @@
ensureProviderCreated();
mProvider.init(javaScriptInterfaces, privateBrowsing);
- // Post condition of creating a webview is the CookieSyncManager instance exists.
- CookieSyncManager.createInstance(getContext());
+ // Post condition of creating a webview is the CookieSyncManager.getInstance() is allowed.
+ CookieSyncManager.setGetInstanceIsAllowed();
}
/**
diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java
index 76b8579..43bd735 100644
--- a/core/java/com/android/internal/app/PlatLogoActivity.java
+++ b/core/java/com/android/internal/app/PlatLogoActivity.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
+import android.provider.Settings;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@@ -151,6 +152,13 @@
logo.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
+ if (Settings.System.getLong(getContentResolver(), Settings.System.EGG_MODE, 0)
+ == 0) {
+ // For posterity: the moment this user unlocked the easter egg
+ Settings.System.putLong(getContentResolver(),
+ Settings.System.EGG_MODE,
+ System.currentTimeMillis());
+ }
try {
startActivity(new Intent(Intent.ACTION_MAIN)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
@@ -158,7 +166,7 @@
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
.addCategory("com.android.internal.category.PLATLOGO"));
} catch (ActivityNotFoundException ex) {
- android.util.Log.e("PlatLogoActivity", "Couldn't find a piece of pie.");
+ android.util.Log.e("PlatLogoActivity", "Couldn't catch a break.");
}
finish();
return true;
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
index 6471e14..23ed019 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -216,6 +216,8 @@
}
super.updateMenuView(cleared);
+ ((View) mMenuView).requestLayout();
+
if (mMenu != null) {
final ArrayList<MenuItemImpl> actionItems = mMenu.getActionItems();
final int count = actionItems.size();
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index 34ade74..16a2031 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -15,8 +15,6 @@
*/
package com.android.internal.view.menu;
-import com.android.internal.R;
-
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
@@ -27,6 +25,7 @@
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
+import com.android.internal.R;
/**
* @hide
@@ -101,7 +100,7 @@
// Special formatting can change whether items can fit as action buttons.
// Kick the menu and update presenters when this changes.
- final int widthSize = MeasureSpec.getMode(widthMeasureSpec);
+ final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
if (mFormatItems && mMenu != null && widthSize != mFormatItemsWidth) {
mFormatItemsWidth = widthSize;
mMenu.onItemsChanged(true);
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index 458ea2f..aff697a 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -1034,6 +1034,10 @@
* to avoid inadvertent reordering that may break the app's intended design.
*/
public void flagActionItems() {
+ // Important side effect: if getVisibleItems is stale it may refresh,
+ // which can affect action items staleness.
+ final ArrayList<MenuItemImpl> visibleItems = getVisibleItems();
+
if (!mIsActionItemsStale) {
return;
}
@@ -1052,7 +1056,6 @@
if (flagged) {
mActionItems.clear();
mNonActionItems.clear();
- ArrayList<MenuItemImpl> visibleItems = getVisibleItems();
final int itemsSize = visibleItems.size();
for (int i = 0; i < itemsSize; i++) {
MenuItemImpl item = visibleItems.get(i);
diff --git a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java
index aad285a..cd1ccd3 100644
--- a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java
+++ b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java
@@ -76,7 +76,7 @@
}
// Tuneable parameters for animation
- private static final int WAVE_ANIMATION_DURATION = 1350;
+ private static final int WAVE_ANIMATION_DURATION = 1000;
private static final int RETURN_TO_HOME_DELAY = 1200;
private static final int RETURN_TO_HOME_DURATION = 200;
private static final int HIDE_ANIMATION_DELAY = 200;
diff --git a/core/java/com/android/internal/widget/multiwaveview/PointCloud.java b/core/java/com/android/internal/widget/multiwaveview/PointCloud.java
index bbd1276..f299935 100644
--- a/core/java/com/android/internal/widget/multiwaveview/PointCloud.java
+++ b/core/java/com/android/internal/widget/multiwaveview/PointCloud.java
@@ -45,8 +45,8 @@
public class WaveManager {
private float radius = 50;
- private float width = 200.0f; // TODO: Make configurable
private float alpha = 0.0f;
+
public void setRadius(float r) {
radius = r;
}
@@ -186,13 +186,12 @@
// Compute contribution from Wave
float radius = hypot(point.x, point.y);
- float distanceToWaveRing = (radius - waveManager.radius);
float waveAlpha = 0.0f;
- if (distanceToWaveRing < waveManager.width * 0.5f && distanceToWaveRing < 0.0f) {
- float cosf = FloatMath.cos(PI * 0.25f * distanceToWaveRing / waveManager.width);
- waveAlpha = waveManager.alpha * max(0.0f, (float) Math.pow(cosf, 20.0f));
+ if (radius < waveManager.radius * 2) {
+ float distanceToWaveRing = (radius - waveManager.radius);
+ float cosf = FloatMath.cos(PI * 0.5f * distanceToWaveRing / waveManager.radius);
+ waveAlpha = waveManager.alpha * max(0.0f, (float) Math.pow(cosf, 6.0f));
}
-
return (int) (max(glowAlpha, waveAlpha) * 255);
}
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 62f057f..054ee4f6 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -80,6 +80,7 @@
jfieldID sharedDirty_field;
jfieldID privateClean_field;
jfieldID sharedClean_field;
+ jfieldID swappedOut_field;
};
struct stat_field_names {
@@ -89,14 +90,18 @@
const char* sharedDirty_name;
const char* privateClean_name;
const char* sharedClean_name;
+ const char* swappedOut_name;
};
static stat_fields stat_fields[_NUM_CORE_HEAP];
static stat_field_names stat_field_names[_NUM_CORE_HEAP] = {
- { "otherPss", "otherSwappablePss", "otherPrivateDirty", "otherSharedDirty", "otherPrivateClean", "otherSharedClean" },
- { "dalvikPss", "dalvikSwappablePss", "dalvikPrivateDirty", "dalvikSharedDirty", "dalvikPrivateClean", "dalvikSharedClean" },
- { "nativePss", "nativeSwappablePss", "nativePrivateDirty", "nativeSharedDirty", "nativePrivateClean", "nativeSharedClean" }
+ { "otherPss", "otherSwappablePss", "otherPrivateDirty", "otherSharedDirty",
+ "otherPrivateClean", "otherSharedClean", "otherSwappedOut" },
+ { "dalvikPss", "dalvikSwappablePss", "dalvikPrivateDirty", "dalvikSharedDirty",
+ "dalvikPrivateClean", "dalvikSharedClean", "dalvikSwappedOut" },
+ { "nativePss", "nativeSwappablePss", "nativePrivateDirty", "nativeSharedDirty",
+ "nativePrivateClean", "nativeSharedClean", "nativeSwappedOut" }
};
jfieldID otherStats_field;
@@ -110,6 +115,7 @@
int sharedDirty;
int privateClean;
int sharedClean;
+ int swappedOut;
};
#define BINDER_STATS "/proc/binder/stats"
@@ -219,6 +225,7 @@
float sharing_proportion = 0.0;
unsigned shared_clean = 0, shared_dirty = 0;
unsigned private_clean = 0, private_dirty = 0;
+ unsigned swapped_out = 0;
bool is_swappable = false;
unsigned referenced = 0;
unsigned temp;
@@ -333,28 +340,36 @@
//ALOGI("native=%d dalvik=%d sqlite=%d: %s\n", isNativeHeap, isDalvikHeap,
// isSqliteHeap, line);
+ shared_clean = 0;
+ shared_dirty = 0;
+ private_clean = 0;
+ private_dirty = 0;
+ swapped_out = 0;
+
while (true) {
if (fgets(line, 1024, fp) == 0) {
done = true;
break;
}
- if (sscanf(line, "Size: %d kB", &temp) == 1) {
+ if (line[0] == 'S' && sscanf(line, "Size: %d kB", &temp) == 1) {
size = temp;
- } else if (sscanf(line, "Rss: %d kB", &temp) == 1) {
+ } else if (line[0] == 'R' && sscanf(line, "Rss: %d kB", &temp) == 1) {
resident = temp;
- } else if (sscanf(line, "Pss: %d kB", &temp) == 1) {
+ } else if (line[0] == 'P' && sscanf(line, "Pss: %d kB", &temp) == 1) {
pss = temp;
- } else if (sscanf(line, "Shared_Clean: %d kB", &temp) == 1) {
+ } else if (line[0] == 'S' && sscanf(line, "Shared_Clean: %d kB", &temp) == 1) {
shared_clean = temp;
- } else if (sscanf(line, "Shared_Dirty: %d kB", &temp) == 1) {
+ } else if (line[0] == 'S' && sscanf(line, "Shared_Dirty: %d kB", &temp) == 1) {
shared_dirty = temp;
- } else if (sscanf(line, "Private_Clean: %d kB", &temp) == 1) {
+ } else if (line[0] == 'P' && sscanf(line, "Private_Clean: %d kB", &temp) == 1) {
private_clean = temp;
- } else if (sscanf(line, "Private_Dirty: %d kB", &temp) == 1) {
+ } else if (line[0] == 'P' && sscanf(line, "Private_Dirty: %d kB", &temp) == 1) {
private_dirty = temp;
- } else if (sscanf(line, "Referenced: %d kB", &temp) == 1) {
+ } else if (line[0] == 'R' && sscanf(line, "Referenced: %d kB", &temp) == 1) {
referenced = temp;
+ } else if (line[0] == 'S' && sscanf(line, "Swap: %d kB", &temp) == 1) {
+ swapped_out = temp;
} else if (strlen(line) > 30 && line[8] == '-' && line[17] == ' ') {
// looks like a new mapping
// example: "10000000-10001000 ---p 10000000 00:00 0"
@@ -366,7 +381,8 @@
if (is_swappable && (pss > 0)) {
sharing_proportion = 0.0;
if ((shared_clean > 0) || (shared_dirty > 0)) {
- sharing_proportion = (pss - private_clean - private_dirty)/(shared_clean+shared_dirty);
+ sharing_proportion = (pss - private_clean
+ - private_dirty)/(shared_clean+shared_dirty);
}
swappable_pss = (sharing_proportion*shared_clean) + private_clean;
} else
@@ -378,6 +394,7 @@
stats[whichHeap].sharedDirty += shared_dirty;
stats[whichHeap].privateClean += private_clean;
stats[whichHeap].sharedClean += shared_clean;
+ stats[whichHeap].swappedOut += swapped_out;
if (whichHeap == HEAP_DALVIK || whichHeap == HEAP_DALVIK_OTHER) {
stats[subHeap].pss += pss;
stats[subHeap].swappablePss += swappable_pss;
@@ -385,6 +402,7 @@
stats[subHeap].sharedDirty += shared_dirty;
stats[subHeap].privateClean += private_clean;
stats[subHeap].sharedClean += shared_clean;
+ stats[subHeap].swappedOut += swapped_out;
}
}
}
@@ -428,6 +446,7 @@
stats[HEAP_UNKNOWN].sharedDirty += stats[i].sharedDirty;
stats[HEAP_UNKNOWN].privateClean += stats[i].privateClean;
stats[HEAP_UNKNOWN].sharedClean += stats[i].sharedClean;
+ stats[HEAP_UNKNOWN].swappedOut += stats[i].swappedOut;
}
for (int i=0; i<_NUM_CORE_HEAP; i++) {
@@ -437,6 +456,7 @@
env->SetIntField(object, stat_fields[i].sharedDirty_field, stats[i].sharedDirty);
env->SetIntField(object, stat_fields[i].privateClean_field, stats[i].privateClean);
env->SetIntField(object, stat_fields[i].sharedClean_field, stats[i].sharedClean);
+ env->SetIntField(object, stat_fields[i].swappedOut_field, stats[i].swappedOut);
}
@@ -455,6 +475,7 @@
otherArray[j++] = stats[i].sharedDirty;
otherArray[j++] = stats[i].privateClean;
otherArray[j++] = stats[i].sharedClean;
+ otherArray[j++] = stats[i].swappedOut;
}
env->ReleasePrimitiveArrayCritical(otherIntArray, otherArray, 0);
@@ -971,6 +992,8 @@
env->GetFieldID(clazz, stat_field_names[i].privateClean_name, "I");
stat_fields[i].sharedClean_field =
env->GetFieldID(clazz, stat_field_names[i].sharedClean_name, "I");
+ stat_fields[i].swappedOut_field =
+ env->GetFieldID(clazz, stat_field_names[i].swappedOut_name, "I");
}
return jniRegisterNativeMethods(env, "android/os/Debug", gMethods, NELEM(gMethods));
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index da2ada6..1dfb176 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"gaan in by Bluetooth-instellings"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Laat die program toe om die plaaslike Bluetooth-tablet op te stel, en om met afstandbeheer toestelle saam te bind."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Laat die program toe om die plaaslike Bluetooth-foon op te stel en te ontdek en met afgeleë toestelle saam te bind."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"laat program saambind deur Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Laat die program sonder gebruikerinteraksie met afgeleë toestelle saambind."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Laat die program sonder gebruikerinteraksie met afgeleë toestelle saambind."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"koppel aan en ontkoppel van WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Laat die program toe om te bepaal of WiMAX geaktiveer is en of enige WiMAX-netwerke gekoppel is."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Verander WiMAX-status"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"AAN"</string>
<string name="capital_off" msgid="6815870386972805832">"AF"</string>
<string name="whichApplication" msgid="4533185947064773386">"Voltooi handeling met"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Kies \'n tuisprogram"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Gebruik hierdie aksie by verstek."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Vee die verstek instelling uit in Stelselinstellings > Programme > Afgelaai."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Kies \'n handeling"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Gekanselleer"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Kon nie inhoud skryf nie"</string>
<string name="reason_unknown" msgid="6048913880184628119">"onbekend"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Drukdiens nie geaktiveer nie"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g>-diens geïnstalleer"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tik om te aktiveer"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Voer administrateur-PIN in"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 18a1492..76f8174 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"የብሉቱዝ ቅንብሮችን ድረስባቸው"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"የአካባቢውን ብሉቱዝ ጡባዊ ለማዋቀር እና አግኝቶ ከሩቅ መሣሪያዎች ጋር ለማጣመር ለመተግበሪያው ይፈቅዳሉ።"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"የአካባቢውን ብሉቱዝ ጡባዊ ለማዋቀር እና አግኝቶ ከሩቅ መሣሪያዎች ጋር ለማጣመር ለመተግበሪያው ይፈቅዳሉ።"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"በመተግበሪያ የብሉቱዝ ማጣመር ይፍቀዱ"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"መተግበሪያው ያለተጠቃሚ ጣልቃ-ገብነት ከርቀት መሣሪያዎች ጋር እንዲጣመር ያስችለዋል።"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"መተግበሪያው ያለተጠቃሚ ጣልቃ-ገብነት ከርቀት መሣሪያዎች ጋር እንዲጣመር ያስችለዋል።"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"ከWiMAX ጋር ይገናኙ እና ያላቅቁ"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"መተግበሪያው WiMAX እንደነቃ እና ስለማናቸውም የተገናኙ የWiMAX አውታረ መረቦች መረጃ እንዲወስን ይፈቅድለታል።"</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"የWiMAX ሁኔታ ለውጥ"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"በ"</string>
<string name="capital_off" msgid="6815870386972805832">"ውጪ"</string>
<string name="whichApplication" msgid="4533185947064773386">"... በመጠቀም ድርጊቱን አጠናቅ"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"የመነሻ መተግበሪያ ይምረጡ"</string>
<string name="alwaysUse" msgid="4583018368000610438">"ለዕርምጃ ነባሪ ተጠቀም።"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"ነባሪ አጽዳ በስርዓት ቅንብሮች ውስጥ > Apps &gt፤ወርዷል፡፡"</string>
<string name="chooseActivity" msgid="7486876147751803333">"ድርጊት ምረጥ"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"ተትቷል"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"ይዘት መጻፍ ላይ ስህተት"</string>
<string name="reason_unknown" msgid="6048913880184628119">"አይታወቅም"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"የህትመት አገልግሎት አልነቃም"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"የ<xliff:g id="NAME">%s</xliff:g> አገልግሎት ተጭኗል"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"ለማንቃት መታ ያድርጉ"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"የአስተዳዳሪ ፒን ያስገቡ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 144a675..43f7783 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"الدخول إلى إعدادات بلوتوث"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"للسماح للتطبيق بتهيئة لوحة البلوتوث المحلي، واكتشاف أجهزة التحكم عن بعد والاقتران بها."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"للسماح للتطبيق بتهيئة هاتف البلوتوث المحلي، واكتشاف أجهزة التحكم عن بعد والاقتران بها."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"السماح بإقران البلوتوث مع التطبيق"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"للسماح بإقران لتطبيق مع الأجهزة البعيدة بدون تدخل المستخدم."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"للسماح بإقران لتطبيق مع الأجهزة البعيدة بدون تدخل المستخدم."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"الاتصال بـشبكة WiMAX وقطع الاتصال بها"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"للسماح للتطبيق بتحديد ما إذا تم تمكين WiMAX وتحديد معلومات حول أية شبكات WiMAX متصلة."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"تغيير حالة WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"تشغيل"</string>
<string name="capital_off" msgid="6815870386972805832">"إيقاف"</string>
<string name="whichApplication" msgid="4533185947064773386">"إكمال الإجراء باستخدام"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"تحديد تطبيق الشاشة الرئيسية"</string>
<string name="alwaysUse" msgid="4583018368000610438">"الاستخدام بشكل افتراضي لهذا الإجراء."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"يمكنك محو الإعدادات الافتراضية في إعدادات النظام > التطبيقات > ما تم تنزيله."</string>
<string name="chooseActivity" msgid="7486876147751803333">"اختيار إجراء"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"ملغاة"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"حدث خطأ أثناء كتابة المحتوى"</string>
<string name="reason_unknown" msgid="6048913880184628119">"غير معروف"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"خدمة الطباعة ليست ممكّنة"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"تم تثبيت خدمة <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"انقر للتمكين."</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"أدخل رقم التعريف الشخصي للمشرف"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 61a07b7..e59c612 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -641,6 +641,12 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"атрыманне доступу да налад прылады Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Дазваляе прыкладанням наладжваць лакальны планшэт Bluetooth, выяўляць і падлучаць выдаленыя прылады."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Дазваляе прыкладанням наладжваць лакальны тэлефон Bluetooth, а таксама знаходзіць выдаленыя прылады i падлучацца да ix."</string>
+ <!-- no translation found for permlab_bluetoothPriv (4009494246009513828) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothPriv (8045735193417468857) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothPriv (8045735193417468857) -->
+ <skip />
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"падключаць да WiMAX i адключаць ад яго"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Дазваляе прыкладанню вызначаць, ці ўключаны WiMAX, і інфармацыю пра любую сетку WiMAX, якая спалучана з iншымi."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Змяніць стан WiMAX"</string>
@@ -1155,6 +1161,8 @@
<string name="capital_on" msgid="1544682755514494298">"Уключыць"</string>
<string name="capital_off" msgid="6815870386972805832">"Адключана"</string>
<string name="whichApplication" msgid="4533185947064773386">"Завяршыць дзеянне з дапамогай"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Выкарыстоўваць па змаўчанні для гэтага дзеяння."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Ачысціць па змаўчанні ў раздзеле \"Налады сістэмы > Прыкладанні > Спампаваныя\"."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Выберыце дзеянне"</string>
@@ -1759,6 +1767,8 @@
<skip />
<!-- no translation found for reason_unknown (6048913880184628119) -->
<skip />
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<!-- no translation found for print_service_installed_title (2246317169444081628) -->
<skip />
<!-- no translation found for print_service_installed_message (5897362931070459152) -->
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index fcd0590..ab62c62 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"достъп до настройките за Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Разрешава на приложението да конфигурира локалния таблет с Bluetooth, както и да открива и да се сдвоява с отдалечени устройства."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Разрешава на приложението да конфигурира локалния телефон с Bluetooth, както и да открива и да се сдвоява с отдалечени устройства."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"разрешаване на сдвояване чрез Bluetooth от приложението"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Разрешава на приложението да се сдвоява с отдалечени устройства без потребителско взаимодействие."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Разрешава на приложението да се сдвоява с отдалечени устройства без потребителско взаимодействие."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"установяване и прекратяване на връзката с WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Разрешава на приложението да определя дали WiMAX мрежата е активирана, както и информация за всички такива мрежи, които са свързани."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Промяна на състоянието на WiMAX мрежата"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"ВКЛ"</string>
<string name="capital_off" msgid="6815870386972805832">"ИЗКЛ"</string>
<string name="whichApplication" msgid="4533185947064773386">"Изпълняване на действието чрез"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Използване по подразбиране за това действие."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Изчистване на стандартната настройка в „Системни настройки“ > „Приложения“ > „Изтеглени“."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Избиране на действие"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Анулирано"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Грешка при записване на съдържанието"</string>
<string name="reason_unknown" msgid="6048913880184628119">"неизвестно"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Услугата <xliff:g id="NAME">%s</xliff:g> е инсталирана"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Докоснете за активиране"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Въведете ПИН кода на администратор"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 4f49401..80fbe75 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -249,7 +249,7 @@
<string name="permlab_install_shortcut" msgid="4279070216371564234">"instal·la dreceres"</string>
<string name="permdesc_install_shortcut" msgid="8341295916286736996">"Permet que una aplicació afegeixi dreceres a la pantalla d\'inici sense la intervenció de l\'usuari."</string>
<string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"desinstal·la dreceres"</string>
- <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permet que l\'aplicació suprimeixi les dreceres a la pantalla d\'inici sense la intervenció de l\'usuari."</string>
+ <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permet que l\'aplicació suprimeixi les dreceres de la pantalla d\'inici sense la intervenció de l\'usuari."</string>
<string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"desviació de les trucades sortints"</string>
<string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permet que l\'aplicació processi les trucades sortints i que canviï el número que es marcarà. Aquest permís permet que l\'aplicació supervisi, redirigeixi o bloquegi les trucades sortints."</string>
<string name="permlab_receiveSms" msgid="8673471768947895082">"recepció de missatges de text (SMS)"</string>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"accés a la configuració de Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permet que l\'aplicació configuri la tauleta Bluetooth local i que detecti i emparelli dispositius remots."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permet que l\'aplicació configuri el telèfon Bluetooth local i que detecti i emparelli dispositius remots."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"permet l\'emparellament de l\'aplicació mitjançant Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Permet que l\'aplicació s\'emparelli amb dispositius remots sense la interacció de l\'usuari."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Permet que l\'aplicació s\'emparelli amb dispositius remots sense la interacció de l\'usuari."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"connecta i desconnecta de WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permet que l\'aplicació determini si WiMAX està activat i que vegi la informació sobre totes les xarxes WiMAX que estan connectades."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Canvia l\'estat de WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"SÍ"</string>
<string name="capital_off" msgid="6815870386972805832">"NO"</string>
<string name="whichApplication" msgid="4533185947064773386">"Completa l\'acció mitjançant"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Selecciona una aplicació d\'inici"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Utilitza-ho de manera predeterminada per a aquesta acció."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Esborra els paràmetres predeterminats a Configuració del sistema > Aplicacions > Baixades."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Tria una acció"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancel·lada"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error en escriure el contingut"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconegut"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"El servei d\'impressió no està activat."</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"S\'ha instal·lat el servei <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Toca per activar-lo"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Introdueix el PIN d\'administrador"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index d637980..e432afe 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"přístup do nastavení Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Umožňuje aplikaci konfigurovat místní tablet s rozhraním Bluetooth a vyhledávat a párovat vzdálená zařízení."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Umožňuje aplikaci konfigurovat místní telefon s rozhraním Bluetooth a vyhledávat a párovat vzdálená zařízení."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"povolit párování Bluetooth prostřednictvím aplikace"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Povoluje aplikaci provést be zásahu uživatele spárování se vzdálenými zařízeními."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Povoluje aplikaci provést be zásahu uživatele spárování se vzdálenými zařízeními."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"připojení a odpojení od sítě WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Umožňuje aplikaci zjistit, zda je povoleno připojení WiMAX, a také získat informace o všech připojených sítích WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Změnit stav připojení WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"I"</string>
<string name="capital_off" msgid="6815870386972805832">"O"</string>
<string name="whichApplication" msgid="4533185947064773386">"Dokončit akci pomocí aplikace"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Vyberte domovskou aplikaci"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Použít jako výchozí nastavení pro tuto činnost."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Výchozí nastavení vymažete v sekci Nastavení systému > Aplikace > Stažené."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Vyberte akci"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Zrušeno"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Při zápisu obsahu došlo k chybě"</string>
<string name="reason_unknown" msgid="6048913880184628119">"neznámé"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Tisková služba není povolena"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Služba <xliff:g id="NAME">%s</xliff:g> byla nainstalována"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Klepnutím povolíte"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Zadejte PIN administrátora"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 43125c3..355b0b7 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"få adgang til Bluetooth-indstillinger"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Tillader, at appen kan konfigurere den lokale Bluetooth-tablet samt finde og parre med fjerne enheder."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Tillader, at appen kan konfigurere den lokale Bluetooth-telefon samt finde og parre med eksterne enheder."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"tillader Bluetooth-parring efter applikation"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Tillader, at appen parrer med eksterne enheder uden brugerinteraktion."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Tillader, at appen parrer med eksterne enheder uden brugerinteraktion."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"tilslut og afbryd fra WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Tillader, at appen kan bestemme, hvorvidt WiMAX er aktiveret, og oplysninger om eventuelle WiMAX-netværk, der er forbundet."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Skift WiMAX-tilstand"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"TIL"</string>
<string name="capital_off" msgid="6815870386972805832">"FRA"</string>
<string name="whichApplication" msgid="4533185947064773386">"Fuldfør handling ved hjælp af"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Vælg en startsideapp"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Brug som standard til denne handling."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Ryd standard i Systemindstillinger > Apps > Downloadet."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Vælg en handling"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Annulleret"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Fejl ved skrivning af indhold"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ukendt"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Udskriftstjenesten er ikke aktiveret"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Tjenesten <xliff:g id="NAME">%s</xliff:g> er installeret"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tryk for at aktivere"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Indtast administratorpinkoden"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 5e17c80..ddb620a 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Auf Bluetooth-Einstellungen zugreifen"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Ermöglicht der App, das lokale Bluetooth-Tablet zu konfigurieren, Remote-Geräte zu erkennen und eine Verbindung zu diesen herzustellen"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Ermöglicht der App, das lokale Bluetooth-Telefon zu konfigurieren, Remote-Geräte zu erkennen und eine Verbindung zu diesen herzustellen"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"Bluetooth-Pairing nach App ermöglichen"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Ermöglicht der App, Pairing mit Remote-Geräten ohne Eingriff des Nutzers durchzuführen"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Ermöglicht der App, Pairing mit Remote-Geräten ohne Eingriff des Nutzers durchzuführen"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX-Verbindungen herstellen und trennen"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Ermöglicht der App festzustellen, ob WiMAX aktiviert ist. Zudem kann sie Informationen zu verbundenen WiMAX-Netzwerken abrufen."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-Status ändern"</string>
@@ -1112,6 +1115,7 @@
<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="whichHomeApplication" msgid="4616420172727326782">"Start-App auswählen"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Immer für diese Aktion verwenden"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Das Löschen der Standardeinstellungen ist in den Systemeinstellungen unter \"Apps > Heruntergeladen\" möglich."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Aktion auswählen"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Abgebrochen"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Fehler beim Schreiben von Inhalten"</string>
<string name="reason_unknown" msgid="6048913880184628119">"Unbekannt"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Druckdienst nicht aktiviert"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Dienst <xliff:g id="NAME">%s</xliff:g> installiert"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Zum Aktivieren tippen"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administrator-PIN eingeben"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index e3e2ff7..6f07768 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"πρόσβαση στις ρυθμίσεις Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Επιτρέπει στην εφαρμογή τη διαμόρφωση του τοπικού tablet Bluetooth, τον εντοπισμό και τη σύζευξη με απομακρυσμένες συσκευές."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Επιτρέπει στην εφαρμογή τη διαμόρφωση του τοπικού tablet Bluetooth, τον εντοπισμό και τη σύζευξη με απομακρυσμένες συσκευές."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"να επιτρέπεται η σύζευξη Bluetooth ανά εφαρμογή"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Επιτρέπει στην εφαρμογή τη σύζευξη με απομακρυσμένες συσκευές χωρίς αλληλεπίδραση του χρήστη."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Επιτρέπει στην εφαρμογή τη σύζευξη με απομακρυσμένες συσκευές χωρίς αλληλεπίδραση του χρήστη."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"σύνδεση και αποσύνδεση από το WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Επιτρέπει στην εφαρμογή να προσδιορίζει εάν το WiMAX είναι ενεργοποιημένο και πληροφορίες σχετικά με τυχόν δίκτυα WiMAX που είναι συνδεδεμένα."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Αλλαγή κατάστασης WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"Ενεργό"</string>
<string name="capital_off" msgid="6815870386972805832">"Ανενεργό"</string>
<string name="whichApplication" msgid="4533185947064773386">"Ολοκλήρωση ενέργειας με τη χρήση"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Επιλέξτε μια εφαρμογή από την αρχική οθόνη"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Χρήση από προεπιλογή για αυτήν την ενέργεια."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Εκκθάριση προεπιλογής στις Ρυθμίσεις συστήματος > Εφαρμογές > Ληφθείσες."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Επιλέξτε μια ενέργεια"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Ακυρώθηκε"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Σφάλμα κατά την εγγραφή περιεχομένου"</string>
<string name="reason_unknown" msgid="6048913880184628119">"άγνωστο"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Η υπηρεσία εκτύπωσης δεν είναι ενεργοποιημένη"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Εγκαταστάθηκε η υπηρεσία <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"πατήστε για ενεργοποίηση"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Εισαγάγετε κωδικό PIN διαχειριστή"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 205bc40..98db3f8 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"access Bluetooth settings"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Allows the app to configure the local Bluetooth tablet and to discover and pair with remote devices."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Allows the app to configure the local Bluetooth phone and to discover and pair with remote devices."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"allow Bluetooth pairing by Application"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Allows the app to pair with remote devices without user interaction."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Allows the app to pair with remote devices without user interaction."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"connect and disconnect from WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Allows the app to determine whether WiMAX is enabled and information about any WiMAX networks that are connected."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"change WiMAX state"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"ON"</string>
<string name="capital_off" msgid="6815870386972805832">"OFF"</string>
<string name="whichApplication" msgid="4533185947064773386">"Complete action using"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Select a home app"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Use by default for this action."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Clear default in System settings > Apps > Downloaded."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Choose an action"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelled"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error writing content"</string>
<string name="reason_unknown" msgid="6048913880184628119">"unknown"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Print service not enabled"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> service installed"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tap to enable"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Enter administrator PIN"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 205bc40..98db3f8 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"access Bluetooth settings"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Allows the app to configure the local Bluetooth tablet and to discover and pair with remote devices."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Allows the app to configure the local Bluetooth phone and to discover and pair with remote devices."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"allow Bluetooth pairing by Application"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Allows the app to pair with remote devices without user interaction."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Allows the app to pair with remote devices without user interaction."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"connect and disconnect from WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Allows the app to determine whether WiMAX is enabled and information about any WiMAX networks that are connected."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"change WiMAX state"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"ON"</string>
<string name="capital_off" msgid="6815870386972805832">"OFF"</string>
<string name="whichApplication" msgid="4533185947064773386">"Complete action using"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Select a home app"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Use by default for this action."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Clear default in System settings > Apps > Downloaded."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Choose an action"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelled"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error writing content"</string>
<string name="reason_unknown" msgid="6048913880184628119">"unknown"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Print service not enabled"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> service installed"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tap to enable"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Enter administrator PIN"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 34684dd..fa69958 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"acceder a la configuración de Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permite que la aplicación configure la tablet Bluetooth local y descubra y se sincronice con dispositivos remotos."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permite que la aplicación configure el dispositivo Bluetooth local y descubra y se sincronice con dispositivos remotos."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"permitir que la aplicación realice la sincronización por Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Permite que la aplicación se sincronice con dispositivos remotos sin la interacción del usuario."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Permite que la aplicación se sincronice con dispositivos remotos sin la interacción del usuario."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"conectarse y desconectarse de WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permite que la aplicación determine si está activada la conexión WiMAX y que obtenga información sobre las redes WiMAX que están conectadas."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Cambiar el estado de WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"Sí"</string>
<string name="capital_off" msgid="6815870386972805832">"No"</string>
<string name="whichApplication" msgid="4533185947064773386">"Completar la acción mediante"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Utilizar de manera predeterminada en esta acción."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Eliminar valores predeterminados en Configuración del sistema > Aplicaciones > Descargas."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Seleccionar una acción"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelada"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error al escribir contenido"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconocido"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Servicio de <xliff:g id="NAME">%s</xliff:g> instalado"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Presionar para habilitar"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Ingresar PIN de administrador"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index f4425f6..afaceb2 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -132,8 +132,8 @@
<string name="low_memory" product="tablet" msgid="6494019234102154896">"Se ha agotado el espacio de almacenamiento del tablet. Elimina algunos archivos para liberar espacio."</string>
<string name="low_memory" product="default" msgid="3475999286680000541">"Se ha agotado el espacio de almacenamiento del teléfono. Elimina algunos archivos para liberar espacio."</string>
<string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Es posible que la red esté supervisada"</string>
- <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"De un tercero desconocido"</string>
- <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"De <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
+ <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Por un tercero desconocido"</string>
+ <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"Por <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
<string name="me" msgid="6545696007631404292">"Yo"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"Opciones del tablet"</string>
<string name="power_dialog" product="default" msgid="1319919075463988638">"Opciones del teléfono"</string>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"acceder a los ajustes de Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permite que la aplicación configure el tablet Bluetooth local y que detecte dispositivos remotos y se vincule con ellos."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permite que la aplicación configure el teléfono Bluetooth local y que detecte dispositivos remotos y se vincule con ellos."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"Permitir que la aplicación sincronice el Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Permite que la aplicación se sincronice con dispositivos remotos sin la interacción del usuario."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Permite que la aplicación se sincronice con dispositivos remotos sin la interacción del usuario."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"conectarse a WiMAX y desconectarse de esta red"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permite que la aplicación determine si está habilitada la conexión WiMAX y obtenga información sobre las redes WiMAX que están conectadas."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Cambiar estado de WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"SÍ"</string>
<string name="capital_off" msgid="6815870386972805832">"NO"</string>
<string name="whichApplication" msgid="4533185947064773386">"Completar acción utilizando"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Seleccionar una aplicación de la pantalla principal"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Usar siempre para esta acción"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Para borrar los valores predeterminados, accede a Ajustes del sistema > Aplicaciones > Descargadas."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Selecciona una acción"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelado"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Error al escribir contenido"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconocido"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Servicio de impresión no habilitado"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"El servicio <xliff:g id="NAME">%s</xliff:g> se ha instalado"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tocar para habilitar"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Introduce el PIN del administrador"</string>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index 11e985b..e08dd4a 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"juurdepääs Bluetoothi seadetele"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Võimaldab rakendusel seadistada kohalikku Bluetooth-tahvelarvutit ning leida ja siduda seda kaugseadmetega."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Võimaldab rakendusel seadistada kohalikku Bluetooth-telefoni ning leida ja siduda seda kaugseadmetega."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"luba Bluetoothi sidumist rakendusega"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Lubab rakendusel siduda ennast kaugseadmetega kasutaja sekkumiseta."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Lubab rakendusel siduda ennast kaugseadmetega kasutaja sekkumiseta."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX-iga ühenduse loomine ja ühenduse katkestamine"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Võimaldab rakendusel määrata, kas WiMAX on lubatud, ja vaadata teavet kõikide ühendatud WiMAX-võrkude kohta."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-i oleku muutmine"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"SEES"</string>
<string name="capital_off" msgid="6815870386972805832">"VÄLJAS"</string>
<string name="whichApplication" msgid="4533185947064773386">"Lõpetage toiming rakendusega"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Avalehe rakenduse valimine"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Kasuta vaikimisi selleks toiminguks."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Tühjendage vaikeandmed valikutes Süsteemiseaded > Rakendused > Allalaaditud."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Toimingu valimine"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Tühistatud"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Viga sisu kirjutamisel"</string>
<string name="reason_unknown" msgid="6048913880184628119">"teadmata"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Printimisteenus pole lubatud"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Teenus <xliff:g id="NAME">%s</xliff:g> on installitud"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Lubamiseks puudutage"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administraatori PIN-koodi sisestamine"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index bba5e96..54a860f 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"دسترسی به تنظیمات بلوتوث"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"به برنامه اجازه میدهد تا رایانهٔ لوحی بلوتوث محلی را پیکربندی کرده، دستگاههای راه دور را شناسایی کرده و با آنها جفت شود."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"به برنامه اجازه میدهد تا تلفن بلوتوث محلی را پیکربندی کند و دستگاههای راه دور را پیدا کند و با آنها جفت شود."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"امکان جفتسازی بلوتوث از طریق برنامه"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"به برنامه امکان میدهد بدون تعامل کاربر با دستگاههای راه دور جفت شود."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"به برنامه امکان میدهد بدون تعامل کاربر با دستگاههای راه دور جفت شود."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"اتصال و قطع اتصال از WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"به برنامه امکان میدهد فعال بودن وایمکس و اطلاعات مربوط به هر یک از شبکههای وایمکس متصل را مشخص کند."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"تغییر وضعیت WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"روشن"</string>
<string name="capital_off" msgid="6815870386972805832">"خاموش"</string>
<string name="whichApplication" msgid="4533185947064773386">"تکمیل عملکرد با استفاده از"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"انتخاب یک برنامه صفحه اصلی"</string>
<string name="alwaysUse" msgid="4583018368000610438">"استفاده به صورت پیشفرض برای این عملکرد."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"پیشفرض را در تنظیمات سیستم> برنامهها> مورد دانلود شده پاک کنید."</string>
<string name="chooseActivity" msgid="7486876147751803333">"انتخاب عملکرد"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"لغو شد"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"خطا هنگام نوشتن محتوا"</string>
<string name="reason_unknown" msgid="6048913880184628119">"نامعلوم"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"سرویس چاپ فعال نشده است"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"سرویس <xliff:g id="NAME">%s</xliff:g> نصب شد"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"برای فعال کردن ضربه بزنید"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"پین سرپرست را وارد کنید"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 659a252..c258cbb 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"käytä Bluetooth-asetuksia"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Antaa sovelluksen määrittää paikallisen Bluetooth-tabletin asetukset sekä tunnistaa muita laitteita ja muodostaa niiden kanssa laitepareja."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Antaa sovelluksen määrittää paikallisen Bluetooth-puhelimen asetukset sekä tunnistaa muita laitteita ja muodostaa niiden kanssa laitepareja."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"anna sovelluksen muodostaa Bluetooth-laitepari"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Antaa sovelluksen muodostaa laiteparin etälaitteiden kanssa ilman käyttäjän toimia."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Antaa sovelluksen muodostaa laiteparin etälaitteiden kanssa ilman käyttäjän toimia."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"muodosta yhteys WiMAXiin ja katkaise yhteys"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Antaa sovelluksen määrittää, onko WiMAX käytössä, sekä saada selville tietoja WiMAX-verkoista, joihin on muodostettu yhteys."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Vaihda WiMAX-verkon tilaa"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"PÄÄLLÄ"</string>
<string name="capital_off" msgid="6815870386972805832">"POIS"</string>
<string name="whichApplication" msgid="4533185947064773386">"Tee toiminto käyttäen sovellusta"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Valitse aloitusruutusovellus"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Käytä oletuksena tälle toiminnolle."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Poista oletusasetus kohdassa Järjestelmäasetukset > Sovellukset > Ladattu."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Valitse toiminto"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Peruutettu"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Sisällön kirjoittamisessa tapahtui virhe"</string>
<string name="reason_unknown" msgid="6048913880184628119">"tuntematon"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Tulostuspalvelu ei ole käytössä"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Palvelu <xliff:g id="NAME">%s</xliff:g> asennettu"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Ota käyttöön napauttamalla"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Anna järjestelmänvalvojan PIN-koodi"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index da93bc4..d61ec5a 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"accéder aux paramètres Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permet à l\'application de configurer la tablette Bluetooth locale, d\'identifier des appareils distants et de les associer à la tablette."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permet à l\'application de configurer le téléphone Bluetooth local, d\'identifier des appareils distants et de les associer au téléphone."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"autoriser l\'application à s\'associer par Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Permet à l\'application de s\'associer aux appareils à distance sans interaction avec l\'utilisateur."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Permet à l\'application de s\'associer aux appareils à distance sans interaction avec l\'utilisateur."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"se connecter au réseau WiMAX et s\'en déconnecter"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permet à l\'application de déterminer si le WiMAX est activé et d\'obtenir des détails sur tous les réseaux WiMAX connectés."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Modifier l\'état du WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"ACTIVÉE"</string>
<string name="capital_off" msgid="6815870386972805832">"DÉSACTIVÉE"</string>
<string name="whichApplication" msgid="4533185947064773386">"Continuer avec"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Utiliser cette application par défaut pour cette action"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Pour supprimer les valeurs par défaut, accédez à Paramètres système > Applications > Téléchargements."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Sélectionnez une action"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Annulé"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Erreur lors de l\'écriture du contenu"</string>
<string name="reason_unknown" msgid="6048913880184628119">"inconnu"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Le service « <xliff:g id="NAME">%s</xliff:g> » a bien été installé"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Toucher pour activer"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Entrez le NIP d\'administrateur"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 208e329..684bb81 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"accéder aux paramètres Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permet à l\'application de configurer la tablette Bluetooth locale, d\'identifier des appareils distants et de les associer à la tablette."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permet à l\'application de configurer le téléphone Bluetooth local, d\'identifier des appareils distants et de les associer au téléphone."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"autoriser l\'application à s\'associer via le Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Permettre à l\'application de s\'associer aux appareils à distance sans intervention de l\'utilisateur"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Permettre à l\'application de s\'associer aux appareils à distance sans intervention de l\'utilisateur"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"se connecter au réseau WiMAX et s\'en déconnecter"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permet à l\'application de déterminer si le WiMAX est activé et d\'obtenir des informations sur tous les réseaux WiMAX connectés."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Modifier l\'état du WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"OUI"</string>
<string name="capital_off" msgid="6815870386972805832">"NON"</string>
<string name="whichApplication" msgid="4533185947064773386">"Continuer avec"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Utiliser cette application par défaut pour cette action"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Pour supprimer les valeurs par défaut, accédez à Paramètres système > Applications > Téléchargements."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Sélectionnez une action"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Tâche annulée."</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Erreur lors de la modification du contenu."</string>
<string name="reason_unknown" msgid="6048913880184628119">"inconnu"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Service \"<xliff:g id="NAME">%s</xliff:g>\" installé"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Appuyer pour activer"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Saisir le code PIN d\'administrateur"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 3dde0dc..55f1b8a 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth सेटिंग पर पहुंचें"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"किसी एप्स को स्थानीय Bluetooth टेबलेट कॉन्फ़िगर करने की और रिमोट उपकरणों के साथ खोजने और युग्मित करने देता है."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"एप्स को स्थानीय Bluetooth फ़ोन कॉन्फ़िगर करने देता है, और रिमोट उपकरणों के साथ खोजने और युग्मित करने देता है."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"एप्लिकेशन के द्वारा Bluetooth युग्मन करने देती है"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"एप्लिकेशन को उपयोगकर्ता के इंटरैक्शन के बिना दूरस्थ उपकरणों के साथ युग्मित करने देती है."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"एप्लिकेशन को उपयोगकर्ता के इंटरैक्शन के बिना दूरस्थ उपकरणों के साथ युग्मित करने देती है."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX से कनेक्ट और डिस्कनेक्ट करें"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"एप्स को WiMAX सक्षम है या नहीं और कनेक्ट किए गए किसी WiMAX नेटवर्क के बारे में जानकारी निर्धारित करने देता है."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX स्थिति बदलें"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"चालू"</string>
<string name="capital_off" msgid="6815870386972805832">"बंद"</string>
<string name="whichApplication" msgid="4533185947064773386">"इसका उपयोग करके क्रिया पूर्ण करें"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"होम एप्लिकेशन चुनें"</string>
<string name="alwaysUse" msgid="4583018368000610438">"इस क्रिया के लिए डिफ़ॉल्ट रूप से उपयोग करें."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"सिस्टम सेटिंग > Apps > डाउनलोड किए गए में डिफ़ॉल्ट साफ करें."</string>
<string name="chooseActivity" msgid="7486876147751803333">"कोई क्रिया चुनें"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"रद्द कर दी गई"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"सामग्री लिखने में त्रुटि"</string>
<string name="reason_unknown" msgid="6048913880184628119">"अज्ञात"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"प्रिंट सेवा सक्षम नहीं है"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> सेवा इंस्टॉल की गई"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"सक्षम करने के लिए टैप करें"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"व्यवस्थापक पिन डालें"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 83d132a..653cc67 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"pristupanje postavkama Bluetootha"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Aplikaciji omogućuje konfiguraciju lokalnog tabletnog računala s Bluetoothom te otkrivanje i uparivanje s udaljenim uređajima."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Aplikaciji omogućuje konfiguraciju lokalnog Bluetooth telefona i otkrivanje i uparivanje s udaljenim uređajima."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"omogući aplikaciji uparivanje putem Bluetootha"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Aplikaciji se omogućuje uparivanje s udaljenim uređajima bez interakcije korisnika."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Aplikaciji se omogućuje uparivanje s udaljenim uređajima bez interakcije korisnika."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"uspostavljanje i prekidanje veze s WiMAX-om"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Aplikaciji omogućuje utvrđivanje omogućenosti WiMAX mreže te daje informaciju o tome je li spojena neka WiMAX mreža."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Promjena stanja WiMAX mreže"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"Uklj."</string>
<string name="capital_off" msgid="6815870386972805832">"Isklj."</string>
<string name="whichApplication" msgid="4533185947064773386">"Radnju dovrši pomoću stavke"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Odaberite aplikaciju na početnom zaslonu"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Koristi se kao zadana postavka za ovu lokaciju."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Izbrisati zadano u Postavkama sustava > Aplikacije > Preuzimanja."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Odaberi radnju"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Otkazano"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Pogreška prilikom pisanja sadržaja"</string>
<string name="reason_unknown" msgid="6048913880184628119">"nepoznato"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Usluga ispisa nije omogućena"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Instalirana je usluga <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Dotaknite za omogućivanje"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Unesite PIN administratora"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index bbfc717..4b4bbaf 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth-beállítások elérése"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Lehetővé teszi az alkalmazás számára, hogy konfigurálja a helyi Bluetooth-t, valamint hogy távoli eszközöket fedezzen fel és párosítson."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Lehetővé teszi az alkalmazás számára, hogy konfigurálja a helyi Bluetooth telefont, valamint hogy távoli eszközöket fedezzen fel és párosítson."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"Bluetooth-párosítás engedélyezése az alkalmazás számára"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Lehetővé teszi az alkalmazás számára a távoli eszközök párosítását felhasználói beavatkozás nélkül."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Lehetővé teszi az alkalmazás számára a távoli eszközök párosítását felhasználói beavatkozás nélkül."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX-kapcsolódás és a kapcsolat bontása"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Lehetővé teszi az alkalmazás számára, hogy ellenőrizze, a WiMax engedélyezve van-e, valamint hogy információt gyűjtsön a csatlakoztatott WiMax-hálózatokról."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-állapot módosítása"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"Be"</string>
<string name="capital_off" msgid="6815870386972805832">"Ki"</string>
<string name="whichApplication" msgid="4533185947064773386">"Művelet végrehajtása a következővel:"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"A kezdőalkalmazás kiválasztása"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Ez legyen az alapértelmezett program ehhez a művelethez."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Alapértelmezés törlése itt: Rendszerbeállítások > Alkalmazások > Letöltve."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Válasszon egy műveletet"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Törölve"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Hiba történt a tartalomírás közben"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ismeretlen"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"A nyomtatási szolgáltatás nincs bekapcsolva"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"A(z) <xliff:g id="NAME">%s</xliff:g> szolgáltatás telepítve"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Koppintson az engedélyezéshez"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Rendszergazdai PIN kód megadása"</string>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index 8c89e70..5a984f6 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"մուտք գործել Bluetooth-ի կարգավորումներ"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Թույլ է տալիս հավելվածին կարգավորել տեղային Bluetooth գրասալիկը և հայտնաբերել ու զուգակցվել հեռակա սարքերի հետ:"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Թույլ է տալիս հավելվածին կարգավորել տեղային Bluetooth հեռախոսը և հայտնաբերել ու զուգակցվել հեռակա սարքերի հետ:"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"թույլ տալ Bluetooth զուգավորումը՝ հավելվածի միջոցով"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Թույլ է տալիս, որ հավելվածը զուգավորվի հեռավոր սարքերի հետ՝ առանց օգտվողի փոխազդեցության:"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Թույլ է տալիս, որ հավելվածը զուգավորվի հեռավոր սարքերի հետ՝ առանց օգտվողի փոխազդեցության:"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"միանալ WiMAX-ին և անջատվել դրանից"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Թույլ է տալիս հավելվածին պարզել, արդյոք WiMAX-ը միացված է և ցանկացած միացված WiMAX ցանցի մասին տեղեկություններ:"</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Փոխել WiMAX-ի կարգավիճակը"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"I"</string>
<string name="capital_off" msgid="6815870386972805832">"O"</string>
<string name="whichApplication" msgid="4533185947064773386">"ավարտել գործողությունը` օգտագործելով"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Օգտագործել լռելյայն այս գործողության համար:"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Մաքրել լռելյայնը Համակարգի կարգավորումներ > Ծրագրեր >Ներբեռնված էջից:"</string>
<string name="chooseActivity" msgid="7486876147751803333">"Ընտրել գործողություն"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Չեղարկված է"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Բովանդակության գրելու սխալ"</string>
<string name="reason_unknown" msgid="6048913880184628119">"անհայտ"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> ծառայությունը տեղադրվել է"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Հպեք` միացնելու համար"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Մուտքագրեք կառավարչի PIN-ը"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 21ebeb4..b9d4fda 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"akses setelan Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Mengizinkan apl mengonfigurasi tablet Bluetooth lokal, dan menemukan serta menyandingkan dengan perangkat jarak jauh."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Mengizinkan apl mengonfigurasi ponsel Bluetooth lokal, dan menemukan serta menyandingkan dengan perangkat jarak jauh."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"memungkinkan penyandingan Bluetooth oleh Aplikasi"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Memungkinkan aplikasi disandingkan dengan perangkat jarak jauh tanpa interaksi pengguna."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Memungkinkan aplikasi disandingkan dengan perangkat jarak jauh tanpa interaksi pengguna."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"sambungkan dan putuskan dari WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Memungkinkan aplikasi menentukan apakah WiMAX diaktifkan dan informasi tentang jaringan WiMAX apa saja yang tersambung."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Ubah status WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"AKTIF"</string>
<string name="capital_off" msgid="6815870386972805832">"MATI"</string>
<string name="whichApplication" msgid="4533185947064773386">"Tindakan lengkap menggunakan"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Gunakan secara default untuk tindakan ini."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Menghapus default di Setelan sistem > Apl > Terunduh."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Pilih tindakan"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Dibatalkan"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Terjadi kesalahan saat menulis konten"</string>
<string name="reason_unknown" msgid="6048913880184628119">"tak diketahui"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Layanan <xliff:g id="NAME">%s</xliff:g> telah terpasang"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Ketuk untuk mengaktifkan"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Masukkan PIN administrator"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index ae390f8..a662d9e 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"accesso alle impostazioni Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Consente all\'applicazione di configurare il tablet Bluetooth locale e di rilevare ed effettuare l\'accoppiamento con dispositivi remoti."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Consente all\'applicazione di configurare il telefono Bluetooth locale e di rilevare ed effettuare l\'accoppiamento con dispositivi remoti."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"accoppiamento Bluetooth dall\'applicazione"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Consente l\'accoppiamento dell\'app con dispositivi remoti senza l\'interazione dell\'utente."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Consente l\'accoppiamento dell\'app con dispositivi remoti senza l\'interazione dell\'utente."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"connessione e disconnessione da WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Consente all\'applicazione di determinare se WiMAX è abilitato e informazioni su eventuali reti WiMAX che sono connesse."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Modifica stato WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"ON"</string>
<string name="capital_off" msgid="6815870386972805832">"OFF"</string>
<string name="whichApplication" msgid="4533185947064773386">"Completa l\'azione con"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Seleziona un\'app home"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Usa come predefinita per questa azione."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Cancella l\'applicazione predefinita in Impostazioni di sistema > Applicazioni > Scaricate."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Scegli un\'azione"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Annullato"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Errore nella scrittura dei contenuti"</string>
<string name="reason_unknown" msgid="6048913880184628119">"sconosciuto"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Servizio di stampa non attivo"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Servizio <xliff:g id="NAME">%s</xliff:g> installato"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tocca per attivare"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Inserisci PIN amministratore"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index bf59e8e..76f20d2d 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"גישה להגדרות Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"מאפשר לאפליקציה להגדיר את תצורתו של הטאבלט המקומי מסוג Bluetooth וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"מאפשר לאפליקציה להגדיר את תצורתו של הטלפון המקומי מסוג Bluetooth וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"אפשר התאמת Bluetooth על ידי האפליקציה"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"מאפשרת לאפליקציה לבצע התאמה עם מכשירים מרוחקים ללא התערבות המשתמש."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"מאפשרת לאפליקציה לבצע התאמה עם מכשירים מרוחקים ללא התערבות המשתמש."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"התחברות והתנתקות מ-WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"מאפשר לאפליקציה לדעת האם WiNMAX מופעל, כמו גם לקבל מידע האם רשתות WiNMAX כלשהן מחוברות."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"שנה את מצב WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"מופעל"</string>
<string name="capital_off" msgid="6815870386972805832">"כבוי"</string>
<string name="whichApplication" msgid="4533185947064773386">"השלמת פעולה באמצעות"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"בחר אפליקציה לדף הבית"</string>
<string name="alwaysUse" msgid="4583018368000610438">"השתמש כברירת מחדל עבור פעולה זו."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"נקה את הגדרת המחדל ב\'הגדרות מערכת\' < Google Apps < \'הורדות\'."</string>
<string name="chooseActivity" msgid="7486876147751803333">"בחירת פעולה"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"בוטלה"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"שגיאה בכתיבת תוכן"</string>
<string name="reason_unknown" msgid="6048913880184628119">"לא ידוע"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"שירות ההדפסה לא הופעל"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"שירות <xliff:g id="NAME">%s</xliff:g> מותקן"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"הקש כדי להפעיל"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"הזן את מספר ה-PIN של מנהל המערכת"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 3811ede..a9da1fd 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -132,7 +132,7 @@
<string name="low_memory" product="tablet" msgid="6494019234102154896">"タブレットのストレージに空き領域がありません。ファイルを削除して空き領域を確保してください。"</string>
<string name="low_memory" product="default" msgid="3475999286680000541">"端末のストレージに空き領域がありません。ファイルを削除して空き領域を確保してください。"</string>
<string name="ssl_ca_cert_warning" msgid="5848402127455021714">"ネットワークが監視される場合があります"</string>
- <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"不明な第三者によって監視される場合があります"</string>
+ <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"不明な第三者"</string>
<string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"<xliff:g id="MANAGING_DOMAIN">%s</xliff:g>によって監視される場合があります"</string>
<string name="me" msgid="6545696007631404292">"自分"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"タブレットオプション"</string>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetoothの設定へのアクセス"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"ローカルのBluetoothタブレットを設定することと、リモート端末を検出してペアに設定することをアプリに許可します。"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"ローカルのBluetooth携帯端末を設定することと、リモート端末を検出してペアに設定することをアプリに許可します。"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"アプリによるBluetoothペア設定を許可"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"ユーザーの操作なしでリモート端末とペア設定することをアプリに許可します。"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"ユーザーの操作なしでリモート端末とペア設定することをアプリに許可します。"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAXへの接続と切断"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"WiMAXがONになっているかどうかを識別し、接続されているWiMAXネットワークの情報を表示することをアプリに許可します。"</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX状態の変更"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"ON"</string>
<string name="capital_off" msgid="6815870386972805832">"OFF"</string>
<string name="whichApplication" msgid="4533185947064773386">"アプリケーションを選択"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"常にこの操作で使用する"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"[システム設定]>[アプリ]>[ダウンロード済み]でデフォルト設定をクリアします。"</string>
<string name="chooseActivity" msgid="7486876147751803333">"操作の選択"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"キャンセルされました"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"コンテンツの書き込み中にエラーが発生しました"</string>
<string name="reason_unknown" msgid="6048913880184628119">"不明"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"「<xliff:g id="NAME">%s</xliff:g>」サービスがインストールされました"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"有効にするにはタップしてください"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"管理者PINを入力"</string>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index dd7a006..6988c69 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth-ის პარამეტრებზე წვდომა"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"აპს შეეძლება ადგილობრივი Bluetooth ტაბლეტის პარამეტრების დაყენება და დისტანციური მოწყობილობების აღმოჩენა და დაწყვილება."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"აპს შეეძლება ტელეფონის ადგილობრივი Bluetooth პარამეტრების დაყენება და დისტანციური მოწყობილობების აღმოჩენა და დაწყვილება."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"აპლიკაციის მიერ Bluetooth დაწყვილების განხორციელების ნების დართვა"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"უფლებას ანიჭებს აპს დააწყვილოს დისტანციური მოწყობილობები მომხმარებელთან ინტერაქციის გარეშე."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"უფლებას ანიჭებს აპს დააწყვილოს დისტანციური მოწყობილობები მომხმარებელთან ინტერაქციის გარეშე."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX-თან დაკავშირება და კავშირის გაწყვეტა"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"აპს შეეძლება განსაზღვროს, WiMAX არის თუ არა ჩართული და ასევე ინფორმაცია ნებისმიერი დაკავშირებული WiMAX ქსელის შესახებ."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX მდგომარეობის შეცვლა"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"ჩართ."</string>
<string name="capital_off" msgid="6815870386972805832">"გამორთ."</string>
<string name="whichApplication" msgid="4533185947064773386">"რა გამოვიყენოთ?"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"ამ ქმედებისთვის ნაგულისხმევად გამოყენება."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"ნაგულისხმევი პარამეტრების წაშლა სისტემის პარამეტრებში > აპებში > ჩამოტვირთულებში."</string>
<string name="chooseActivity" msgid="7486876147751803333">"აირჩიეთ მოქმედება"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"გაუქმებული"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"შეცდომა კონტენტის ჩაწერისას"</string>
<string name="reason_unknown" msgid="6048913880184628119">"უცნობი"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> სერვისი დაინსტალირდა"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"გასააქტიურებლად შეეხეთ"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"შეიყვანეთ ადმინისტრატორის PIN"</string>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index 01695d2..f1e9234 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -163,9 +163,9 @@
<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_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="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>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"ចូលដំណើរការការកំណត់ប៊្លូធូស"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"ឲ្យកម្មវិធីកំណត់រចនាសម្ព័ន្ធកុំព្យូទ័របន្ទះប៊្លូធូសមូលដ្ឋាន និងរកមើល ព្រមទាំងផ្គូផ្គងជាមួយឧបករណ៍ពីចម្ងាយ។"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"ឲ្យកម្មវិធីមើលការកំណត់រចនាសម្ព័ន្ធប៊្លូធូសក្នុងទូរស័ព្ទ ដើម្បីរកមើល និងផ្គូផ្គងជាមួយឧបករណ៍ពីចម្ងាយ។"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"ឲ្យប៊្លូធូសផ្គូផ្គងជាមួយកម្មវិធី"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"ឲ្យកម្មវិធីផ្គូផ្គងជាមួយឧបករណ៍ពីចម្ងាយដោយគ្មានអំពើពីអ្នកប្រើ។"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"ឲ្យកម្មវិធីផ្គូផ្គងជាមួយឧបករណ៍ពីចម្ងាយដោយគ្មានអំពើពីអ្នកប្រើ។"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"ភ្ជាប់ និងផ្ដាច់ពី WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"ឲ្យកម្មវិធីកំណត់ថាតើ WiMAX ត្រូវបានបើក និងព័ត៌មានអំពីបណ្ដាញ WiMAX ដែលត្រូវបានតភ្ជាប់។"</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"ប្ដូរស្ថានភាព WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"បើក"</string>
<string name="capital_off" msgid="6815870386972805832">"បិទ"</string>
<string name="whichApplication" msgid="4533185947064773386">"បញ្ចប់សកម្មភាពដោយប្រើ"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"ជ្រើសកម្មវិធីដើម"</string>
<string name="alwaysUse" msgid="4583018368000610438">"ប្រើតាមលំនាំដើមសម្រាប់សកម្មភាពនេះ។"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"សម្អាតលំនាំដើមក្នុងការកំណត់ប្រព័ន្ធ > កម្មវិធី > ទាញយក។"</string>
<string name="chooseActivity" msgid="7486876147751803333">"ជ្រើសសកម្មភាព"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"បានបោះបង់"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"កំហុសក្នុងការសរសេរមាតិកា"</string>
<string name="reason_unknown" msgid="6048913880184628119">"មិនស្គាល់"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"មិនបានបើកសេវាកម្មបោះពុម្ព"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"បានដំឡើងសេវាកម្ម <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"ប៉ះ ដើម្បីបើក"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"បញ្ចូលលេខកូដសម្ងាត់អ្នកគ្រប់គ្រង"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 9b2ff25..03f1c7d 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -132,7 +132,7 @@
<string name="low_memory" product="tablet" msgid="6494019234102154896">"태블릿 저장공간이 꽉 찼습니다. 일부 파일을 삭제하여 저장 여유 공간을 늘리세요."</string>
<string name="low_memory" product="default" msgid="3475999286680000541">"휴대전화 저장공간이 꽉 찼습니다. 일부 파일을 삭제하여 저장공간을 늘리세요."</string>
<string name="ssl_ca_cert_warning" msgid="5848402127455021714">"네트워크가 모니터링될 수 있음"</string>
- <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"알 수 없는 제3자가 모니터링"</string>
+ <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"알 수 없는 제3자의 모니터링"</string>
<string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"<xliff:g id="MANAGING_DOMAIN">%s</xliff:g>에서 모니터링"</string>
<string name="me" msgid="6545696007631404292">"나"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"태블릿 옵션"</string>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"블루투스 설정에 액세스"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"앱이 로컬 블루투스 태블릿을 설정한 다음 원격 기기를 검색하여 페어링할 수 있도록 허용합니다."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"앱이 로컬 블루투스 휴대전화를 설정한 다음 원격 기기를 검색하여 페어링할 수 있도록 허용합니다."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"애플리케이션에서 블루투스 페어링 허용"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"앱이 사용자 상호작용 없이 원격 기기와 페어링할 수 있도록 허용합니다."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"앱이 사용자 상호작용 없이 원격 기기와 페어링할 수 있도록 허용합니다."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX 연결 및 연결 해제"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"앱이 WiMAX를 사용하도록 설정했는지 여부와 연결된 WiMAX 네트워크에 대한 정보를 결정할 수 있도록 허용합니다."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX 상태 변경"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"ON"</string>
<string name="capital_off" msgid="6815870386972805832">"OFF"</string>
<string name="whichApplication" msgid="4533185947064773386">"작업을 수행할 때 사용하는 애플리케이션"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"이 작업에 대해 기본값으로 사용"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"시스템 설정 > 앱 > 다운로드로 이동하여 기본 설정을 지웁니다."</string>
<string name="chooseActivity" msgid="7486876147751803333">"작업 선택"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"취소됨"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"콘텐츠 작성 중 오류"</string>
<string name="reason_unknown" msgid="6048913880184628119">"알 수 없음"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> 서비스 설치됨"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"사용하려면 탭하세요."</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"관리자 PIN 입력"</string>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index 9bc891a..d54182c 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -145,7 +145,7 @@
<string name="silent_mode_silent" msgid="319298163018473078">"ປິດສຽງຣິງໂທນ"</string>
<string name="silent_mode_vibrate" msgid="7072043388581551395">"ສັ່ນພ້ອມສຽງຣິງໂທນ"</string>
<string name="silent_mode_ring" msgid="8592241816194074353">"ເປີດສຽງໂທເຂົ້າແລ້ວ"</string>
- <string name="shutdown_progress" msgid="2281079257329981203">"ກຳລັງປິດລົງ..."</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="2906544768881136183">"ທ່ານຕ້ອງການທີ່ຈະປິດບໍ່?"</string>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"ເຂົ້າເຖິງການຕັ້ງຄ່າ Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"ອະນຸຍາດໃຫ້ແອັບຯຕັ້ງຄ່າແທັບເລັດ Bluetooth ພາຍໃນ ແລະຊອກຫາ ແລະເຊື່ອມຕໍ່ໄວ້ກັບອຸປະກອນພາຍນອກ."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"ອະນຸຍາດໃຫ້ແອັບຯຕັ້ງຄ່າ Bluetooth ໃນໂທລະສັບ ເພື່ອຊອກຫາ ແລະການເຊື່ອມຕໍ່ກັບອຸປະກອນໄຮ້ສາຍພາຍນອກ."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນຈັບຄູ່ Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"ອະນຸຍາດໃຫ້ແອັບຯ ຈັບຄູ່ອຸປະກອນຈາກໄລຍະໄກ ໂດຍຜູ່ໃຊ້ບໍ່ຕ້ອງເຮັດຫຍັງ."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"ອະນຸຍາດໃຫ້ແອັບຯ ຈັບຄູ່ອຸປະກອນຈາກໄລຍະໄກ ໂດຍຜູ່ໃຊ້ບໍ່ຕ້ອງເຮັດຫຍັງ."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"ເຊື່ອມຕໍ່ ແລະຕັດການເຊື່ອມຕໍ່ຈາກ WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"ອະນຸຍາດໃຫ້ແອັບຯກວດເບິ່ງວ່າ WiMAX ຖືກເປີດນຳໃຊ້ຢູ່ບໍ່ ແລະຂໍ້ມູນກ່ຽວກັບເຄືອຂ່າຍ WiMAX ອື່ນໆທີ່ກຳລັງເຊື່ອມຕໍ່ຢູ່."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"ປ່ຽນສະຖານະ WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"ເປີດ"</string>
<string name="capital_off" msgid="6815870386972805832">"ປິດ"</string>
<string name="whichApplication" msgid="4533185947064773386">"ເຮັດວຽກໃຫ້ສຳເລັດໂດຍໃຊ້"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"ເລືອກແອັບຯ Home"</string>
<string name="alwaysUse" msgid="4583018368000610438">"ໃຊ້ໂດຍຄ່າເລີ່ມຕົນສຳລັບການເຮັດວຽກນີ້."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"ລຶບລ້າງຄ່າເລີ່ມຕົ້ນ ໃນ ການຕັ້ງຄ່າລະບົບ > ແອັບຯ > ດາວໂຫລດແລ້ວ."</string>
<string name="chooseActivity" msgid="7486876147751803333">"ເລືອກການເຮັດວຽກ"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"ຍົກເລີກແລ້ວ"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"ເນື້ອໃນການຂຽນຜິດພາດ"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ບໍ່ຮູ້ຈັກ"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"ບໍລິການການພິມບໍ່ຖືກເປີດນຳໃຊ້"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"ຕິດຕັ້ງບໍລິການ <xliff:g id="NAME">%s</xliff:g> ແລ້ວ"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"ແຕະເພື່ອເປີດໃຊ້"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"ໃສ່ PIN ຜູ່ເບິ່ງແຍງລະບົບ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 38f32ef..621dacb 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"pasiekti „Bluetooth“ nustatymus"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Leidžiama programai konfigūruoti vietinį „Bluetooth“ planšetinį kompiuterį ir atrasti nuotolinius įrenginius bei su jais susieti."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Leidžiama programai konfigūruoti vietinį „Bluetooth“ telefoną ir atrasti bei susieti su nuotoliniais įrenginiais."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"leisti „Bluetooth“ susiejimą naudojant programą"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Leidžiama programai susieti su nuotolinio valdymo įrenginiais be naudotojo įsikišimo."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Leidžiama programai susieti su nuotolinio valdymo įrenginiais be naudotojo įsikišimo."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"prisijungti prie WiMAX ir atsijungti nuo jo"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Leidžiama programai nustatyti, ar įgalintas „WiMAX“, ir informaciją apie visus prijungtus tinklus."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Keisti „WiMAX“ būseną"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"ĮJ."</string>
<string name="capital_off" msgid="6815870386972805832">"IŠJ."</string>
<string name="whichApplication" msgid="4533185947064773386">"Užbaigti veiksmą naudojant"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Šiam veiksmui tai naudoti pagal numatytuosius nustatymus."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Numatytuosius nustatymus išvalykite nuėję į „Sistemos nustatymai“ > „Programos“ > „Atsisiųsta“."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Pasirinkti veiksmą"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Atšaukta"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Klaida rašant turinį"</string>
<string name="reason_unknown" msgid="6048913880184628119">"nežinoma"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Paslauga „<xliff:g id="NAME">%s</xliff:g>“ įdiegta"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Palieskite, kad įgalintumėte"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Įveskite administratoriaus PIN kodą"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 3284ba4..df1cba5 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"piekļūt Bluetooth iestatījumiem"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Ļauj lietotnei konfigurēt vietējo Bluetooth planšetdatoru, kā arī atklāt attālas ierīces un savienot tās pārī."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Ļauj lietotnei konfigurēt vietējo Bluetooth tālruni, kā arī atklāt attālas ierīces un savienot tās pārī."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"Bluetooth ierīču savienošana pārī, izmantojot lietojumprogrammu"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Ļauj lietotnei izveidot savienojumu pārī ar tālvadības ierīcēm bez lietotāju mijiedarbības."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Ļauj lietotnei izveidot savienojumu pārī ar tālvadības ierīcēm bez lietotāju mijiedarbības."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX savienojuma izveide un pārtraukšana"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Ļauj lietotnei noteikt, vai WiMAX ir iespējots, un sniedz informāciju par visiem WiMAX tīkliem, ar kuriem ir izveidots savienojums."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX statusa mainīšana"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"IESLĒGT"</string>
<string name="capital_off" msgid="6815870386972805832">"IZSLĒGT"</string>
<string name="whichApplication" msgid="4533185947064773386">"Pabeigt darbību, izmantojot"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Sākuma ekrāna lietotnes atlase"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Pēc noklusējuma izmantot šai darbībai."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Notīriet noklusējuma iestatījumus šeit: Sistēmas iestatījumi > Lietotnes > Lejupielādētās."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Darbības izvēle"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Atcelts"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Rakstot saturu, radās kļūda."</string>
<string name="reason_unknown" msgid="6048913880184628119">"nezināms"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Drukas pakalpojums nav iespējots."</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Instalēts pakalpojums <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Pieskarieties, lai iespējotu"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administratora PIN ievadīšana"</string>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index 00b0dcb..995b4af 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Блютүүт тохиргоонд хандах"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Апп нь дотоод блютүүт таблетын тохиргоог харах боломжтой ба хос болох төхөөрөмжтэй холболтыг зөвшөөрөх болон хийх боломжтой"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Апп нь утасны дотоод блютүүтыг тохируулах боломжтой ба гадаад төхөөрөмжийг олох болон хос үүсгэх боломжтой."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"Аппликешнд Блютүүт хоallow Bluetooth pairing by Application"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Апп-д хэрэглэгчтэй харьцахгүйгээр зайны төхөөрөмжүүдтэй хослох боломж олгоно."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Апп-д хэрэглэгчтэй харьцахгүйгээр зайны төхөөрөмжүүдтэй хослох боломж олгоно."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX-д холбогдох болон салах"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Апп нь WiMAX идэвхтэй эсэх болон холбогдсон WiMAX сүлжээний талаар мэдээллийг тодорхойлох боломжтой."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX статусыг өөрчлөх"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"Идэвхтэй"</string>
<string name="capital_off" msgid="6815870386972805832">"Идэвхгүй"</string>
<string name="whichApplication" msgid="4533185947064773386">"Үйлдлийг дуусгах"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Нүүр апп-г сонгоно уу"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Энэ ажиллагааг үндсэн болгох."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Систем тохиргоо > Апп > Татаж авсан хэсгийн үндсэн утгуудыг цэвэрлэх"</string>
<string name="chooseActivity" msgid="7486876147751803333">"Үйлдэл сонгох"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Цуцлагдсан"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Контентыг бичих явцад алдаа гарсан"</string>
<string name="reason_unknown" msgid="6048913880184628119">"тодорхойгүй"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Хэвлэх үйлчилгээ идэвхжээгүй"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> үйлчилгээ суугдсан"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Идэвхжүүлэх бол товшино уу"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Админ PIN оруулна уу"</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index a8f5bb1..220d90a 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -249,7 +249,7 @@
<string name="permlab_install_shortcut" msgid="4279070216371564234">"pasang pintasan"</string>
<string name="permdesc_install_shortcut" msgid="8341295916286736996">"Membenarkan aplikasi menambah pintasan Skrin Laman Utama tanpa campur tangan pengguna."</string>
<string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"nyahpasang pintasan"</string>
- <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Membenarkan aplikasi memadam pintasan Skrin Laman Utama tanpa campur tangan pengguna."</string>
+ <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Membenarkan aplikasi mengalih keluar pintasan Skrin Laman Utama tanpa campur tangan pengguna."</string>
<string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"tukar laluan panggilan keluar"</string>
<string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Membenarkan apl memproses panggilan keluar dan menukar nombor yang perlu didail. Kebenaran ini membolehkan apl memantau, mengalih atau menghalang panggilan keluar."</string>
<string name="permlab_receiveSms" msgid="8673471768947895082">"terima mesej teks (SMS)"</string>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"akses tetapan Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Membenarkan apl mengkonfigurasikan tablet Bluetooth setempat dan menemui serta berpasangan dengan peranti jauh."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Membenarkan apl mengkonfigurasikan telefon Bluetooth setempat dan menemui serta berpasangan dengan peranti jauh."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"benarkan perpasangan Bluetooth oleh Aplikasi"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Membenarkan apl berpasangan dengan peranti jauh tanpa interaksi pengguna."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Membenarkan apl berpasangan dengan peranti jauh tanpa interaksi pengguna."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"sambung dan putuskan sambungan WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Membenarkan apl menentukan sama ada WiMaX didayakan dan maklumat tentang sebarang rangkaian WiMaX yang disambungkan."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Tukar keadaan WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"HIDUP"</string>
<string name="capital_off" msgid="6815870386972805832">"MATIKAN"</string>
<string name="whichApplication" msgid="4533185947064773386">"Selesaikan tindakan menggunakan"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Gunakannya secara lalai untuk tindakan ini."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Padam bersih lalai dalam tetapan Sistem > Apl > Dimuat turun."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Pilih tindakan"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Dibatalkan"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Ralat menulis kandungan"</string>
<string name="reason_unknown" msgid="6048913880184628119">"tidak diketahui"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Perkhidmatan <xliff:g id="NAME">%s</xliff:g> dipasang"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Ketik untuk mendayakan"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Masukkan PIN pentadbir"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 33c04ad..92abaf3 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"endre Bluetooth-innstillinger"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Lar appen konfigurere det lokale Bluetooth-nettbrettet, samt oppdage og koble sammen med eksterne enheter."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Lar appen konfigurere den lokale Bluetooth-telefonen, samt oppdage og koble sammen med eksterne enheter."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"tillate Bluetooth-sammenkobling av appen"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Lar appen koble til eksterne enheter uten medvirkning fra brukeren."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Lar appen koble til eksterne enheter uten medvirkning fra brukeren."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"koble til eller fra WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Lar appen avgjøre hvorvidt WiMAX er aktivert og finne informasjon om eventuelle tilkoblede WiMAX-nettverk."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Endre WiMAX-status"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"På"</string>
<string name="capital_off" msgid="6815870386972805832">"Av"</string>
<string name="whichApplication" msgid="4533185947064773386">"Fullfør med"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Bruk som standardvalg."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Fjern app angitt som standard i systeminnstillingene > Apper > Nedlastet."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Velg en handling"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Kansellert"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Feil under skriving av innhold"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ukjent"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g>-tjenesten er installert"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Trykk for å aktivere"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Skriv inn administrator-PIN-koden"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 81fa6f2..e74ef8a 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth-instellingen openen"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Hiermee kan de app de lokale Bluetooth-tablet configureren en externe apparaten zoeken en koppelen."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Hiermee kan de app de lokale Bluetooth-telefoon configureren en externe apparaten zoeken en koppelen."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"Bluetooth-koppeling door app toestaan"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"De app toestaan te koppelen met externe apparaten zonder tussenkomst van de gebruiker."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"De app toestaan te koppelen met externe apparaten zonder tussenkomst van de gebruiker."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX-verbinding maken en verbreken"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Hiermee kan de app bepalen of WiMAX is ingeschakeld en informatie bekijken over alle WiMAX-netwerken waarmee verbinding is gemaakt."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-status wijzigen"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"AAN"</string>
<string name="capital_off" msgid="6815870386972805832">"UIT"</string>
<string name="whichApplication" msgid="4533185947064773386">"Actie voltooien met"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Een startscherm-app selecteren"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Standaard gebruiken voor deze actie."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Standaardinstelling wissen via Systeeminstellingen > Apps > Gedownload."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Een actie selecteren"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Geannuleerd"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Fout bij schrijven van inhoud"</string>
<string name="reason_unknown" msgid="6048913880184628119">"onbekend"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Afdrukservice niet ingeschakeld"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g>-service geïnstalleerd"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tik om in te schakelen"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Pincode voor beheerder opgeven"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 4a0a208..6f10bd5 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"uzyskiwanie dostępu do ustawień Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Pozwala aplikacji na konfigurowanie lokalnego tabletu z funkcją Bluetooth oraz na wykrywanie urządzeń zdalnych i parowanie z nimi."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Pozwala aplikacji na konfigurowanie lokalnego telefonu z funkcją Bluetooth oraz na wykrywanie urządzeń zdalnych i parowanie z nimi."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"zezwól aplikacji na parowanie się przez Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Umożliwia aplikacji parowanie się z urządzeniami zdalnymi bez interakcji użytkownika."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Umożliwia aplikacji parowanie się z urządzeniami zdalnymi bez interakcji użytkownika."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"łączenie się i rozłączanie z siecią WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Pozawala aplikacji określić, czy obsługa WiMAX jest włączona, oraz uzyskać informacje o wszystkich podłączonych sieciach WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"zmienianie stanu WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"Wł"</string>
<string name="capital_off" msgid="6815870386972805832">"Wył"</string>
<string name="whichApplication" msgid="4533185947064773386">"Wykonaj czynność przez..."</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Domyślne dla tej czynności"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Wyczyść wartości domyślne w: Ustawienia systemu > Aplikacje > Pobrane."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Wybierz czynność"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Anulowane"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Błąd podczas zapisu treści"</string>
<string name="reason_unknown" msgid="6048913880184628119">"brak informacji"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Usługa <xliff:g id="NAME">%s</xliff:g> zainstalowana"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Dotknij, by włączyć"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Podaj PIN administratora"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 3150242..01b73ac2 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"aceder às definições de Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permite à aplicação configurar o tablet Bluetooth local, bem como descobrir e emparelhar com dispositivos remotos."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permite que a aplicação configure o telemóvel Bluetooth local, bem como descobrir e emparelhar com dispositivos remotos."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"permitir a sincronização Bluetooth por aplicação"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Permite que a aplicação seja sincronizada com dispositivos remotos sem interação do utilizador."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Permite que a aplicação seja sincronizada com dispositivos remotos sem interação do utilizador."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"ligar e desligar do WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permite que a aplicação determine se o WiMAX está ativado e aceda a informações acerca de qualquer rede WiMAX que esteja ligada."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Alterar estado do WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"Ativado"</string>
<string name="capital_off" msgid="6815870386972805832">"Desativado"</string>
<string name="whichApplication" msgid="4533185947064773386">"Concluir ação utilizando"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Selecionar uma aplicação para a página inicial"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Utilizar por predefinição para esta acção."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Limpar a predefinição nas Definições do Sistema > Aplicações > Transferidas."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Escolha uma ação"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelada"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Erro ao escrever conteúdo"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconhecido"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Serviço de impressão não ativado"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Serviço <xliff:g id="NAME">%s</xliff:g> instalado"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Toque para ativar"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Introduza o PIN de administrador"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 27b4c7b..c26b173 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"acessar configurações de Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permite que um aplicativo configure o tablet Bluetooth local, descubra dispositivos remotos e emparelhe com eles."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permite que um aplicativo configure o telefone Bluetooth local, descubra e emparelhe com dispositivos remotos."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"permitir pareamento via Bluetooth pelo aplicativo"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Permite que o aplicativo faça pareamento com dispositivos remotos sem interação com o usuário."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Permite que o aplicativo faça pareamento com dispositivos remotos sem interação com o usuário."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"conectar e desconectar do WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permite que o aplicativo determine se o WiMAX está ativado e acesse informações sobre as redes WiMAX conectadas."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Alterar estado do WiMAX"</string>
@@ -637,7 +640,7 @@
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permite que o aplicativo grave novas palavras no dicionário do usuário."</string>
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"ler conteúdo do armaz. USB"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"ler conteúdo do cartão SD"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Permite que o aplicativo leia o conteúdo do cartão SD."</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Perm. que app leia cartão SD."</string>
<string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Permite que o aplicativo leia o conteúdo do cartão SD."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modificar ou excluir conteúdo do armazenamento USB"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modificar ou excluir o conteúdo do cartão SD"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"LIG"</string>
<string name="capital_off" msgid="6815870386972805832">"DESL"</string>
<string name="whichApplication" msgid="4533185947064773386">"Complete a ação usando"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Usar como padrão para esta ação."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Padrão claro em Configurações do sistema > Aplicativos > Baixado."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Escolher uma ação"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Cancelado"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Erro ao gravar o conteúdo"</string>
<string name="reason_unknown" msgid="6048913880184628119">"desconhecido"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Serviço <xliff:g id="NAME">%s</xliff:g> instalado"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Toque para ativar"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Inserir PIN do administrador"</string>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 42a6ab4..a64f6d2b 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -1021,6 +1021,12 @@
<skip />
<!-- no translation found for permdesc_bluetoothAdmin (8931682159331542137) -->
<skip />
+ <!-- no translation found for permlab_bluetoothPriv (4009494246009513828) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothPriv (8045735193417468857) -->
+ <skip />
+ <!-- no translation found for permdesc_bluetoothPriv (8045735193417468857) -->
+ <skip />
<!-- no translation found for permlab_accessWimaxState (4195907010610205703) -->
<skip />
<!-- no translation found for permdesc_accessWimaxState (6360102877261978887) -->
@@ -1755,6 +1761,8 @@
<string name="capital_on" msgid="1544682755514494298">"ACTIVÀ"</string>
<string name="capital_off" msgid="6815870386972805832">"DEACTIVÀ"</string>
<string name="whichApplication" msgid="4533185947064773386">"Cumplettar l\'acziun cun"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Utilisar questa applicaziun sco standard per questa acziun."</string>
<!-- no translation found for clearDefaultHintMsg (3252584689512077257) -->
<skip />
@@ -2696,6 +2704,8 @@
<skip />
<!-- no translation found for reason_unknown (6048913880184628119) -->
<skip />
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<!-- no translation found for print_service_installed_title (2246317169444081628) -->
<skip />
<!-- no translation found for print_service_installed_message (5897362931070459152) -->
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 41f633b..fa9920e 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"accesează setările Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Permite aplicaţiei să configureze tableta Bluetooth locală, să descopere şi să se împerecheze cu dispozitive la distanţă."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permite aplicaţiei să configureze telefonul Bluetooth local, să descopere şi să se împerecheze cu dispozitive la distanţă."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"permiteți conectarea aplicației prin Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Permite aplicației să se conecteze la dispozitive de la distanță, fără intervenția utilizatorului."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Permite aplicației să se conecteze la dispozitive de la distanță, fără intervenția utilizatorului."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"se conectează şi se deconectează de la WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permite aplicaţiei să stabilească dacă o reţea WiMAX este activată şi să vadă informaţiile cu privire la toate reţelele WiMAX conectate."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Schimbaţi starea WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"DA"</string>
<string name="capital_off" msgid="6815870386972805832">"NU"</string>
<string name="whichApplication" msgid="4533185947064773386">"Finalizare acţiune utilizând"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Se utilizează în mod prestabilit pentru această acţiune."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Ștergeţi setările prestabilite din Setări de sistem > Aplicaţii > Descărcate."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Alegeţi o acţiune"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Anulat"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Eroare la scrierea conținutului"</string>
<string name="reason_unknown" msgid="6048913880184628119">"necunoscut"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Serviciul <xliff:g id="NAME">%s</xliff:g> a fost instalat"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Atingeți pentru a activa"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Introduceți codul PIN de administrator"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 18d9a15..4eec244 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Доступ к настройкам Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Приложение сможет настраивать параметры локального планшетного ПК с поддержкой Bluetooth, а также обнаруживать удаленные устройства и выполнять сопряжение с ними."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Приложение сможет настраивать параметры локального телефона с поддержкой Bluetooth, а также обнаруживать удаленные устройства и выполнять сопряжение с ними."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"Подключение устройств через Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Приложение сможет самостоятельно подключаться к удаленным устройствам."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Приложение сможет самостоятельно подключаться к удаленным устройствам."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"подключать/отключать сеть WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Приложение сможет определять, активирован ли WiMAX, а также получать информацию о подключенных сетях WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Изменение статуса WiMAX"</string>
@@ -637,8 +640,8 @@
<string name="permdesc_writeDictionary" msgid="8185385716255065291">"Приложение сможет добавлять слова в пользовательский словарь."</string>
<string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"Просмотр данных на USB-накопителе"</string>
<string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"Считывание содержимого SD-карты"</string>
- <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Приложение сможет считывать данные с USB-накопителя."</string>
- <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Приложение сможет считывать содержимое SD-карты."</string>
+ <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Приложение сможет считывать данные на USB-накопителе."</string>
+ <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Приложение сможет считывать данные на SD-карте."</string>
<string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"Изменение/удаление данных на USB-накопителе"</string>
<string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"Изменение или удаление содержимого SD-карты"</string>
<string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Приложение сможет записывать данные на USB-накопитель."</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"I"</string>
<string name="capital_off" msgid="6815870386972805832">"O"</string>
<string name="whichApplication" msgid="4533185947064773386">"Что использовать?"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"По умолчанию для этого действия"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Удаляет настройки по умолчанию в меню \"Настройки > Приложения > Загруженные\"."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Выберите действие"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Печать отменена"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Ошибка записи"</string>
<string name="reason_unknown" msgid="6048913880184628119">"неизвестно"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Служба <xliff:g id="NAME">%s</xliff:g> установлена"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Нажмите, чтобы снова включить."</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Введите PIN-код администратора"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 92b6bf4..a7f2631 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"pristupovať k nastaveniam Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Umožňuje aplikácii konfigurovať miestny tablet s rozhraním Bluetooth a vyhľadávať a spárovať vzdialené zariadenia."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Umožňuje aplikácii konfigurovať miestny telefón s rozhraním Bluetooth, vyhľadávať a spárovať vzdialené zariadenia."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"povoliť aplikácii párovanie prostredníctvom rozhrania Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Umožňuje aplikácii párovanie so vzdialenými zariadeniami bez zásahu používateľa."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Umožňuje aplikácii párovanie so vzdialenými zariadeniami bez zásahu používateľa."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"pripojiť a odpojiť od WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Umožňuje aplikácii určiť, či je povolený štandard WiMAX, a tiež informácie o všetkých pripojených sieťach WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Zmeniť stav siete WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"I"</string>
<string name="capital_off" msgid="6815870386972805832">"O"</string>
<string name="whichApplication" msgid="4533185947064773386">"Dokončiť akciu pomocou aplikácie"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Použiť ako predvolené nastavenie pre túto akciu."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Vymazať predvolené nastavenia v sekcii Nastavenia systému > Aplikácie > Prevzaté položky."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Zvoľte akciu"</string>
@@ -1256,7 +1261,7 @@
<string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Všetky súbory uložené v ukladacom priestore USB budú vymazané. Táto akcia sa nedá vrátiť späť!"</string>
<string name="extmedia_format_message" product="default" msgid="14131895027543830">"Všetky údaje na vašej karte budú stratené."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formát"</string>
- <string name="adb_active_notification_title" msgid="6729044778949189918">"Ladenie cez rozhranie USB pripojené"</string>
+ <string name="adb_active_notification_title" msgid="6729044778949189918">"Ladenie cez USB pripojené"</string>
<string name="adb_active_notification_message" msgid="1016654627626476142">"Dotknutím zakážete ladenie USB."</string>
<string name="select_input_method" msgid="4653387336791222978">"Zvoliť metódu vstupu"</string>
<string name="configure_input_methods" msgid="9091652157722495116">"Nastavenie metód vstupu"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Zrušené"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Pri zapisovaní obsahu došlo ku chybe"</string>
<string name="reason_unknown" msgid="6048913880184628119">"neznáme"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Nainštalovaná služba: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Povoľte klepnutím"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Zadajte kód PIN správcu"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 270f7f3..01ee3a9 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"dostop do nastavitev Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Programu omogoča konfiguriranje lokalnega tabličnega računalnika Bluetooth ter zaznavanje oddaljenih naprav in združevanje z njimi."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Programu omogoča konfiguriranje lokalnega telefona s tehnologijo Bluetooth ter odkrivanje oddaljenih naprav in povezovanje z njimi."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"aplikaciji dovoli seznanjanje prek povezave Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Aplikaciji dovoljuje seznanjanje z oddaljenimi napravami brez interakcije uporabnika."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Aplikaciji dovoljuje seznanjanje z oddaljenimi napravami brez interakcije uporabnika."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"vzpostavitev povezave z omrežjem WiMax in prekinitev povezave z njim"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Aplikaciji omogoča, da ugotovi, ali je WiMAX omogočen, in ogled podatkov o povezanih omrežjih WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Sprememba stanja omrežja WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"VKLOPLJENO"</string>
<string name="capital_off" msgid="6815870386972805832">"IZKLOPLJENO"</string>
<string name="whichApplication" msgid="4533185947064773386">"Dokončanje dejanja z"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Izberite aplikacijo za začetno stran"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Privzeta uporaba za to dejanje."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Izbrišite privzeti program v sistemskih nastavitvah > Programi > Preneseno."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Izberite dejanje"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Preklicano"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Napaka pri pisanju vsebine"</string>
<string name="reason_unknown" msgid="6048913880184628119">"neznano"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Tiskalna storitev ni omogočena"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Storitev <xliff:g id="NAME">%s</xliff:g> je nameščena"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Če želite omogočiti, se dotaknite"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Vnesite skrbniški PIN"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 8b2383c..78d9cec 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"приступ Bluetooth подешавањима"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Дозвољава апликацији да конфигурише локални Bluetooth таблет, као и да открије даљинске уређаје и упари се са њима."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Дозвољава апликацији да конфигурише локални Bluetooth телефон, као и да открије даљинске уређаје и упари се са њима."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"омогућавање упаривања апликације преко Bluetooth-а"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Омогућава апликацији да се упарује са удаљеним уређајима без интеракције корисника."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Омогућава апликацији да се упарује са удаљеним уређајима без интеракције корисника."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"повезивање и прекид везе са WiMAX-ом"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Дозвољава апликацији да утврди да ли је WiMAX омогућен, као и информације о било којим повезаним WiMAX мрежама."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Промени WiMAX статус"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"ДА"</string>
<string name="capital_off" msgid="6815870386972805832">"НЕ"</string>
<string name="whichApplication" msgid="4533185947064773386">"Довршавање радње помоћу"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Подразумевано користи за ову радњу."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Обришите подразумевано подешавање у менију Подешавања система > Апликације > Преузето."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Изаберите радњу"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Отказано је"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Грешка при исписивању садржаја"</string>
<string name="reason_unknown" msgid="6048913880184628119">"непознато"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Услуга <xliff:g id="NAME">%s</xliff:g> је инсталирана"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Додирните да бисте омогућили"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Унесите PIN администратора"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index e04ba0a..0fd3727 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"få åtkomst till Bluetooth-inställningar"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Tillåter att appen konfigurerar den lokala Bluetooth-surfplattan samt upptäcker och parkopplar den med fjärranslutna enheter."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Tillåter att appen konfigurerar den lokala Bluetooth-mobilen samt upptäcker och parkopplar den med fjärranslutna enheter."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"tillåt Bluetooth-koppling för appen"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Tillåter att appen kopplas till fjärrenheter utan interaktion med användare."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Tillåter att appen kopplas till fjärrenheter utan interaktion med användare."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"ansluta till och koppla från WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Tillåter att appen avgör om WiMAX är aktiverat och kommer åt information om eventuella anslutna WiMAX-nätverk."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"ändra WiMAX-status"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"PÅ"</string>
<string name="capital_off" msgid="6815870386972805832">"AV"</string>
<string name="whichApplication" msgid="4533185947064773386">"Slutför åtgärd genom att använda"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Välj en app på startskärmen"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Använd som standard för denna åtgärd."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Rensa standardinställningar i Systeminställningar > Appar > Hämtat."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Välj en åtgärd"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Inställd"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Det gick inte att skriva innehållet"</string>
<string name="reason_unknown" msgid="6048913880184628119">"okänt"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Utskriftstjänsten har inte aktiverats"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Tjänsten <xliff:g id="NAME">%s</xliff:g> har installerats"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tryck om du vill aktivera"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Ange administratörspinkod"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 7f0e9eb..5756c41 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -247,9 +247,9 @@
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"panua/kunja mwambaa hali"</string>
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Inaruhusu programu kupanua au kukunja upau wa hali."</string>
<string name="permlab_install_shortcut" msgid="4279070216371564234">"sakinisha njia za mkato"</string>
- <string name="permdesc_install_shortcut" msgid="8341295916286736996">"Huruhusu programu kuongeza njia za mkato za Skrini ya nyumbani bila mtumiaji kuhusika."</string>
+ <string name="permdesc_install_shortcut" msgid="8341295916286736996">"Huruhusu programu kuongeza njia za mkato za Skrini ya kwanza bila mtumiaji kuingilia."</string>
<string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"ondoa njia za mikato"</string>
- <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Huruhusu programu kuondoa njia za mkato za Skrini ya nyumbani bila mtumiaji kuhusika."</string>
+ <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Huruhusu programu kuondoa njia za mkato za Skrini ya kwanza bila mtumiaji kuingilia."</string>
<string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"panga upya simu zinazotoka"</string>
<string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Inaruhusu programu kuchakata simu zinazotoka nje na kubadilisha nambari ya kupigwa. Idhini hii inaruhusu programu kuchunguza, kuelekeza upya, au kuzuia simu zinazotoka nje."</string>
<string name="permlab_receiveSms" msgid="8673471768947895082">"pokea ujumbe wa maandishi wa SMS"</string>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"fikia mipangilio ya Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Inaruhusu programu kusanidi kompyuta kibao ya karibu ya Bluetooth na kutambua na kuoanisha na vifaa vya kudhibiti."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Inaruhusu programu kusanidi simu ya karibu ya Bluetooth, na kutambua na kuoanisha na vifaa vya mbali."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"ruhusu uoanishaji wa Bluetooth kwa Programu"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Inaruhusu programu kuoanisha na vifaa vya mbali bila mtumiaji kuingilia."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Inaruhusu programu kuoanisha na vifaa vya mbali bila mtumiaji kuingilia."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"unganisha na uukate muunaganisho kutoka kwenye WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Inaruhusu programu kuthibitisha ikiwa WiMAX imewezeshwa na taarifa kuhusu mitandao yoyote ya WiMAX ambayo imeunganishwa."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Badilisha hali ya WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"Washa"</string>
<string name="capital_off" msgid="6815870386972805832">"ZIMA"</string>
<string name="whichApplication" msgid="4533185947064773386">"Kamilisha kitendo ukitumia"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Tumia kama chaguo-msingi la kitendo hiki."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Futa chaguo-msingi katika mipangilio ya Mfumo > Apps > iliyopakuliwa."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Chagua kitendo"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Imeghairiwa"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Hitilafu katika kuandika maudhui"</string>
<string name="reason_unknown" msgid="6048913880184628119">"haijulikani"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Huduma ya <xliff:g id="NAME">%s</xliff:g> imesakinisha"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Gonga ili uwashe"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Ingiza PIN ya msimamizi"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 0c75ff6..ac3c332 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"เข้าถึงการตั้งค่าบลูทูธ"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"อนุญาตให้แอปพลิเคชันกำหนดค่าแท็บเล็ตบลูทูธในตัวเครื่อง รวมทั้งค้นหาและจับคู่กับอุปกรณ์ที่อยู่ระยะไกล"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"อนุญาตให้แอปพลิเคชันกำหนดค่าโทรศัพท์บลูทูธในตัวเครื่อง ตลอดจนค้นหาและจับคู่กับอุปกรณ์ที่อยู่ระยะไกล"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"อนุญาตให้แอปพลิเคชันจับคู่บลูทูธ"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"อนุญาตให้แอปจับคู่กับอุปกรณ์ระยะไกลโดยไม่ต้องมีการโต้ตอบของผู้ใช้"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"อนุญาตให้แอปจับคู่กับอุปกรณ์ระยะไกลโดยไม่ต้องมีการโต้ตอบของผู้ใช้"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"เชื่อมต่อและเลิกเชื่อมต่อจาก WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"อนุญาตให้แอปพลิเคชันตรวจสอบว่า WiMAX เปิดใช้งานอยู่หรือไม่และข้อมูลเกี่ยวกับเครือข่าย WiMAX ใดๆ ที่เชื่อมต่ออยู่"</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"เปลี่ยนสถานะของ WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"เปิด"</string>
<string name="capital_off" msgid="6815870386972805832">"ปิด"</string>
<string name="whichApplication" msgid="4533185947064773386">"ทำงานให้เสร็จโดยใช้"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"ใช้ค่าเริ่มต้นสำหรับการทำงานนี้"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"ล้างค่าเริ่มต้นในการตั้งค่าระบบ > แอปพลิเคชัน > ดาวน์โหลด"</string>
<string name="chooseActivity" msgid="7486876147751803333">"เลือกการทำงาน"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"ยกเลิก"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"ข้อผิดพลาดในการเขียนเนื้อหา"</string>
<string name="reason_unknown" msgid="6048913880184628119">"ไม่ทราบ"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"ติดตั้งบริการ <xliff:g id="NAME">%s</xliff:g> แล้ว"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"แตะเพื่อเปิดใช้งาน"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"ป้อน PIN ของผู้ดูแลระบบ"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index f8c922a..dff16dd 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"I-access ang mga setting ng Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Pinapayagan ang app na i-configure ang lokal na Bluetooth tablet, at tumuklas ng at ipares sa mga malayuang device."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Pinapayagan ang app na i-configure ang lokal na Bluetooth na telepono, at tumuklas ng at ipares sa mga malayuang device."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"payagan ang pagpapares ng Bluetooth sa pamamagitan ng Application"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Pinapayagan ang app na pumares sa mga malayuang device nang walang pakikipag-ugnay sa user."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Pinapayagan ang app na pumares sa mga malayuang device nang walang pakikipag-ugnay sa user."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"kumonekta at magdiskonekta mula sa WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Pinapayagan ang app na tukuyin kung pinapagana ang WiMAX at impormasyon tungkol sa anumang mga WiMAX network na nakakonekta."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Baguhin ang katayuan ng WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"I-ON"</string>
<string name="capital_off" msgid="6815870386972805832">"I-OFF"</string>
<string name="whichApplication" msgid="4533185947064773386">"Kumpletuhin ang pagkilos gamit ang"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Gamitin bilang default para sa pagkilos na ito."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"I-clear ang default sa mga setting ng System > Apps > Na-download."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Pumili ng pagkilos"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Kinansela"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"May error sa pagsusulat ng nilalaman"</string>
<string name="reason_unknown" msgid="6048913880184628119">"hindi alam"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Na-install ang serbisyo ng <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Tapikin upang i-enable"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Ilagay ang PIN ng administrator"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 884903e..43717e9 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -246,10 +246,10 @@
<string name="permdesc_statusBarService" msgid="716113660795976060">"Uygulamaya, durum çubuğu olma izni verir."</string>
<string name="permlab_expandStatusBar" msgid="1148198785937489264">"durum çubuğunu genişlet/daralt"</string>
<string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Uygulamaya, durum çubuğunu genişletip daraltma izni verir."</string>
- <string name="permlab_install_shortcut" msgid="4279070216371564234">"kısayolları yükle"</string>
- <string name="permdesc_install_shortcut" msgid="8341295916286736996">"Uygulamaya, kullanıcı müdahalesi olmadan kısayolları Ana ekrana ekleme izni verir."</string>
- <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"kısayolların yüklemesini kaldır"</string>
- <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Uygulamaya, kullanıcının müdahalesi olmadan kısayolları Ana ekrandan kaldırma izni verir."</string>
+ <string name="permlab_install_shortcut" msgid="4279070216371564234">"kısayolları yükleme"</string>
+ <string name="permdesc_install_shortcut" msgid="8341295916286736996">"Uygulamaya, kullanıcı müdahalesi olmadan kısayolları Ana Ekrana ekleme izni verir."</string>
+ <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"kısayolların yüklemesini kaldırma"</string>
+ <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Uygulamaya, kullanıcının müdahalesi olmadan kısayolları Ana Ekrandan kaldırma izni verir."</string>
<string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"giden çağrıları yeniden yönlendir"</string>
<string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Uygulamaya, yapılan çağrıları işleme ve aranacak numarayı değiştirme izni verir. Bu izin, uygulamanın yapılan çağrıları izlemesine, yönlendirmesine ve önlemesine olanak sağlar."</string>
<string name="permlab_receiveSms" msgid="8673471768947895082">"kısa mesajları al (SMS)"</string>
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth ayarlara eriş"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Uygulamaya, yerel Bluetooth tabletini yapılandırma ve uzak cihazları keşfedip bunlarla eşleşme izni verir."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Uygulamaya, yerel Bluetooth telefonunu yapılandırma ve uzak cihazları keşfedip bunlarla eşleşme izni verir."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"Uygulama tarafından yapılan Bluetooth eşleştirmelerine izin ver"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Uygulamaya, kullanıcının müdahalesi olmadan uzak cihazlarla eşleme izni verir."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Uygulamaya, kullanıcının müdahalesi olmadan uzak cihazlarla eşleme izni verir."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX\'e bağlan veya WiMAX bağlantısını kes"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Uygulamaya, WiMAX\'in etkin olup olmadığını belirleme ve bağlı tüm WiMAX ağlarıyla ilgili bilgilere erişme izni verir."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX durumunu değiştir"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"AÇIK"</string>
<string name="capital_off" msgid="6815870386972805832">"KAPALI"</string>
<string name="whichApplication" msgid="4533185947064773386">"İşlemi şunu kullanarak tamamla"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Varsayılan olarak bu işlem için kullan."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Sistem ayarları > Uygulamalar > İndirilen bölümünden varsayılanı temizleyin."</string>
<string name="chooseActivity" msgid="7486876147751803333">"İşlem seçin"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"İptal edildi"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"İçerik yazılırken hata oluştu"</string>
<string name="reason_unknown" msgid="6048913880184628119">"bilinmiyor"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> hizmeti yüklendi"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Etkinleştirmek için hafifçe vurun"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Yönetici PIN\'ini girin"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index e86a2c0..260b167 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"отримувати доступ до налаштувань Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Дозволяє програмі налаштовувати планшетний ПК із локальним Bluetooth, а також знаходити віддалені пристрої та створювати з ними пару."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Дозволяє програмі налаштовувати телефон із локальним Bluetooth, а також знаходити віддалені пристрої та створювати з ними пару."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"дозволити програмі створювати пару з Bluetooth"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Дозволяє програмі самостійно підключатись до віддалених пристроїв."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Дозволяє програмі самостійно підключатись до віддалених пристроїв."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"під’єднуватися та від’єднуватися від WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Дозволяє програмі визначати, чи ввімкнено WiMAX, а також переглядати інформацію про будь-які під’єднані мережі WiMAX."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Змінити стан WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"УВІМК"</string>
<string name="capital_off" msgid="6815870386972805832">"ВИМК"</string>
<string name="whichApplication" msgid="4533185947064773386">"Завершити дію за доп."</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Виберіть програму для головного екрана"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Використ. за умовч. для цієї дії."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Очистити налаштування за умовчанням у меню Налаштування системи > Програми > Завантажені."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Виберіть дію"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Скасовано"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Помилка записування вмісту"</string>
<string name="reason_unknown" msgid="6048913880184628119">"невідомо"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Службу друку не ввімкнено"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"Установлено службу <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Торкніться, щоб увімкнути"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Введіть PIN-код адміністратора"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 3953a31..d7aaa96 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"truy cập cài đặt Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Cho phép ứng dụng định cấu hình máy tính bảng Bluetooth cục bộ cũng như phát hiện và ghép nối với các thiết bị từ xa."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Cho phép ứng dụng định cấu hình điện thoại Bluetooth cục bộ cũng như phát hiện và ghép nối với các thiết bị từ xa."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"cho phép ghép nối Bluetooth theo ứng dụng"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Cho phép ứng dụng ghép nối với các thiết bị từ xa mà không cần tương tác của người dùng."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Cho phép ứng dụng ghép nối với các thiết bị từ xa mà không cần tương tác của người dùng."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"kết nối và ngắt kết nối khỏi WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Cho phép ứng dụng xác định liệu WiMAX đã được bật chưa và thông tin về bất kỳ mạng WiMAX nào được kết nối."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Thay đổi trạng thái WiMAX"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"BẬT"</string>
<string name="capital_off" msgid="6815870386972805832">"TẮT"</string>
<string name="whichApplication" msgid="4533185947064773386">"Hoàn tất tác vụ đang sử dụng"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"Sử dụng theo mặc định đối với tác vụ này."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Xóa mặc định trong Cài đặt hệ thống > Ứng dụng > Đã tải xuống."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Chọn một tác vụ"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Đã hủy"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Lỗi ghi nội dung"</string>
<string name="reason_unknown" msgid="6048913880184628119">"không xác định"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"Đã cài đặt dịch vụ <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Nhấn để bật"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Nhập mã PIN của quản trị viên"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 3766a99..e9b71ad 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"访问蓝牙设置"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"允许应用配置本地蓝牙平板电脑,以及发现远程设备并进行配对。"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"允许应用配置本地蓝牙手机,以及发现远程设备并进行配对。"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"允许应用进行蓝牙配对"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"允许应用自行与远程设备配对。"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"允许应用自行与远程设备配对。"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"建立或中断 WiMAX 网络连接"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"允许该应用确定是否启用了 WiMAX 以及连接的任何 WiMAX 网络的相关信息。"</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"更改 WiMAX 状态"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"打开"</string>
<string name="capital_off" msgid="6815870386972805832">"关闭"</string>
<string name="whichApplication" msgid="4533185947064773386">"选择要使用的应用:"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"设为默认选项。"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"在“系统设置”>“应用”>“已下载”中清除默认设置。"</string>
<string name="chooseActivity" msgid="7486876147751803333">"选择操作"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"已取消"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"写入内容时出错"</string>
<string name="reason_unknown" msgid="6048913880184628119">"未知"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"已安装“<xliff:g id="NAME">%s</xliff:g>”服务"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"点按即可启用"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"输入管理员 PIN 码"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 83bcff4..db3645b 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"存取藍牙設定"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"允許應用程式設定本機藍牙平板電腦,以及與偵測到的遠端裝置配對。"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"允許應用程式設定本機藍牙手機,以及與偵測到的遠端裝置配對。"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"允許應用程式執行藍牙配對"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"允許應用程式繞過用戶授權直接與遠端裝置配對。"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"允許應用程式繞過用戶授權直接與遠端裝置配對。"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"建立或中斷與 WiMAX 網絡的連線"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"允許應用程式確定是否已啟用 WiMAX,以及判斷任何已連接 WiMAX 網絡的相關資訊。"</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"更改 WiMAX 狀態"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"開啟"</string>
<string name="capital_off" msgid="6815870386972805832">"關"</string>
<string name="whichApplication" msgid="4533185947064773386">"完成操作需使用"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"設定用於執行這項操作。"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"前往 [系統設定] > [應用程式] > [已下載] 清除預設值。"</string>
<string name="chooseActivity" msgid="7486876147751803333">"選擇操作"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"已取消"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"寫入內容時發生錯誤"</string>
<string name="reason_unknown" msgid="6048913880184628119">"不明"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"已安裝「<xliff:g id="NAME">%s</xliff:g>」服務"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"輕按即可啟用"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"輸入管理員 PIN"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 3b14215..85b1980 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"存取藍牙設定"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"允許應用程式設定本機藍牙平板電腦,以及搜尋遠端裝置並配對連線。"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"允許應用程式設定本機藍牙手機,以及搜尋遠端裝置並配對連線。"</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"允許應用程式執行藍牙配對"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"允許應用程式自動與遠端裝置配對。"</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"允許應用程式自動與遠端裝置配對。"</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"建立或中斷與 WiMAX 網路的連線"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"允許應用程式判斷是否已啟用 WiMAX,以及判讀任何已連上 WiMAX 網路的相關資訊。"</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"變更 WiMAX 狀態"</string>
@@ -1112,6 +1115,8 @@
<string name="capital_on" msgid="1544682755514494298">"開啟"</string>
<string name="capital_off" msgid="6815870386972805832">"關閉"</string>
<string name="whichApplication" msgid="4533185947064773386">"選擇要使用的應用程式"</string>
+ <!-- no translation found for whichHomeApplication (4616420172727326782) -->
+ <skip />
<string name="alwaysUse" msgid="4583018368000610438">"設為預設應用程式。"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"前往 [系統設定] > [應用程式] > [下載] 清除預設值。"</string>
<string name="chooseActivity" msgid="7486876147751803333">"選擇一種動作"</string>
@@ -1628,6 +1633,8 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"已取消"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"寫入內容時發生錯誤"</string>
<string name="reason_unknown" msgid="6048913880184628119">"不明"</string>
+ <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
+ <skip />
<string name="print_service_installed_title" msgid="2246317169444081628">"已安裝「<xliff:g id="NAME">%s</xliff:g>」服務"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"輕按啟用"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"輸入管理員 PIN"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 51f5236..ae2b5f4 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -609,6 +609,9 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"finyelela kuzilungiselelo ze-Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Ivumela uhlelo lokusebenza ukumisa ithebhulethi ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Ivumela uhlelo lokusebenza ukumisa ifoni ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
+ <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"vumela ukumataniswa kwe-Bluetooth ngohlelo lokusebenza"</string>
+ <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"Ivumela uhlelo lokusebenza ukuthi lubhanqwe ngamadivayisi wesilawuli kude ngaphandle kokuhlanganyela nomsebenzisi."</string>
+ <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"Ivumela uhlelo lokusebenza ukuthi lubhanqwe ngamadivayisi wesilawuli kude ngaphandle kokuhlanganyela nomsebenzisi."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"xhuma futhi unqamule kusuka ku-WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Ivumela uhlelo lokusebenza ukucacisa ukuthi ingabe i-WiMAX inikwe amandla futhi ulwazi mayelana namanethiwekhi e-WiMAX axhunyiwe."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Shintsha isimo se-WiMAX"</string>
@@ -1112,6 +1115,7 @@
<string name="capital_on" msgid="1544682755514494298">"VULIWE"</string>
<string name="capital_off" msgid="6815870386972805832">"VALIWE"</string>
<string name="whichApplication" msgid="4533185947064773386">"Qedela isenzo usebenzisa"</string>
+ <string name="whichHomeApplication" msgid="4616420172727326782">"Khetha uhlelo lokusebenza lwasekhaya"</string>
<string name="alwaysUse" msgid="4583018368000610438">"Sebenzisa ngokuzenzakalelayo kulesenzo."</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Susa izilungiselelo zesistimu; Izinhlelo zokusebenza & Okulandiwe"</string>
<string name="chooseActivity" msgid="7486876147751803333">"Khetha okufanele kwenziwe"</string>
@@ -1628,6 +1632,7 @@
<string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Kukhanseliwe"</string>
<string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Iphutha ekubhaleni okuqukethwe"</string>
<string name="reason_unknown" msgid="6048913880184628119">"akwaziwa"</string>
+ <string name="reason_service_unavailable" msgid="7824008732243903268">"Isevisi yokuphrinta ayinikwanga amandla"</string>
<string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> isevisi ifakiwe"</string>
<string name="print_service_installed_message" msgid="5897362931070459152">"Thepha ukuze unike amandla"</string>
<string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Faka i-PIN yomlawuli"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 275afb8..c3dc4ff 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2182,6 +2182,9 @@
<enum name="yes" value="1" />
<!-- The view is not important for accessibility. -->
<enum name="no" value="2" />
+ <!-- The view is not important for accessibility, nor are any of its descendant
+ views. -->
+ <enum name="noHideDescendants" value="4" />
</attr>
<!-- Indicates to accessibility services whether the user should be notified when
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index e39fd2a..1ddf201 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -961,6 +961,12 @@
If false, Content-disposition fragments are ignored -->
<bool name="config_mms_content_disposition_support">true</bool>
+ <!-- MMS user agent string -->
+ <string name="config_mms_user_agent" translatable="false"></string>
+
+ <!-- MMS user agent prolfile url -->
+ <string name="config_mms_user_agent_profile_url" translatable="false"></string>
+
<!-- National Language Identifier codes for the following two config items.
(from 3GPP TS 23.038 V9.1.1 Table 6.2.1.2.4.1):
0 - reserved
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index ef7f2b7..431fe82 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2054,29 +2054,29 @@
<public type="style" name="Theme.DeviceDefault.Light.NoActionBar.Overscan" id="0x010301e0" />
<!-- ===============================================================
- Resources added in version 19 of the platform
+ Resources added in version 19 of the platform (KitKat)
=============================================================== -->
<eat-comment />
- <public type="attr" name="keySet" />
- <public type="attr" name="targetId" />
- <public type="attr" name="fromScene" />
- <public type="attr" name="toScene" />
- <public type="attr" name="transition" />
- <public type="attr" name="transitionOrdering" />
- <public type="attr" name="fadingMode" />
- <public type="attr" name="startDelay" />
- <public type="attr" name="ssp" />
- <public type="attr" name="sspPrefix" />
- <public type="attr" name="sspPattern" />
- <public type="attr" name="addPrintersActivity" />
- <public type="attr" name="vendor" />
- <public type="attr" name="category" />
- <public type="attr" name="isAsciiCapable" />
- <public type="attr" name="autoMirrored" />
- <public type="attr" name="supportsSwitchingToNextInputMethod" />
- <public type="attr" name="requireDeviceUnlock" />
- <public type="attr" name="apduServiceBanner" />
- <public type="attr" name="accessibilityLiveRegion" />
+ <public type="attr" name="keySet" id="0x010103db" />
+ <public type="attr" name="targetId" id="0x010103dc" />
+ <public type="attr" name="fromScene" id="0x010103dd" />
+ <public type="attr" name="toScene" id="0x010103de" />
+ <public type="attr" name="transition" id="0x010103df" />
+ <public type="attr" name="transitionOrdering" id="0x010103e0" />
+ <public type="attr" name="fadingMode" id="0x010103e1" />
+ <public type="attr" name="startDelay" id="0x010103e2" />
+ <public type="attr" name="ssp" id="0x010103e3" />
+ <public type="attr" name="sspPrefix" id="0x010103e4" />
+ <public type="attr" name="sspPattern" id="0x010103e5" />
+ <public type="attr" name="addPrintersActivity" id="0x010103e6" />
+ <public type="attr" name="vendor" id="0x010103e7" />
+ <public type="attr" name="category" id="0x010103e8" />
+ <public type="attr" name="isAsciiCapable" id="0x010103e9" />
+ <public type="attr" name="autoMirrored" id="0x010103ea" />
+ <public type="attr" name="supportsSwitchingToNextInputMethod" id="0x010103eb" />
+ <public type="attr" name="requireDeviceUnlock" id="0x010103ec" />
+ <public type="attr" name="apduServiceBanner" id="0x010103ed" />
+ <public type="attr" name="accessibilityLiveRegion" id="0x010103ee" />
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index d483fe0..a541995 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -469,6 +469,8 @@
<java-symbol type="string" name="chooseActivity" />
<java-symbol type="string" name="config_default_dns_server" />
<java-symbol type="string" name="config_ethernet_iface_regex" />
+ <java-symbol type="string" name="config_mms_user_agent" />
+ <java-symbol type="string" name="config_mms_user_agent_profile_url" />
<java-symbol type="string" name="config_ntpServer" />
<java-symbol type="string" name="config_tether_apndata" />
<java-symbol type="string" name="config_useragentprofile_url" />
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 89d102d..3857ec0 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -128,6 +128,7 @@
<assign-permission name="android.permission.MODIFY_AUDIO_SETTINGS" uid="media" />
<assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="media" />
<assign-permission name="android.permission.WAKE_LOCK" uid="media" />
+ <assign-permission name="android.permission.UPDATE_DEVICE_STATS" uid="media" />
<assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="media" />
<assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="graphics" />
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 84ea4c90..49c838c 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -217,7 +217,7 @@
* stream types that follow other stream behavior for volume settings
* NOTE: do not create loops in aliases!
* Some streams alias to different streams according to device category (phone or tablet) or
- * use case (in call s off call...).See updateStreamVolumeAlias() for more details
+ * use case (in call vs off call...). See updateStreamVolumeAlias() for more details.
* mStreamVolumeAlias contains the default aliases for a voice capable device (phone) and
* STREAM_VOLUME_ALIAS_NON_VOICE for a non voice capable device (tablet).*/
private final int[] STREAM_VOLUME_ALIAS = new int[] {
@@ -301,7 +301,7 @@
private int mRingerMode;
/** @see System#MODE_RINGER_STREAMS_AFFECTED */
- private int mRingerModeAffectedStreams;
+ private int mRingerModeAffectedStreams = 0;
// Streams currently muted by ringer mode
private int mRingerModeMutedStreams;
@@ -511,9 +511,11 @@
mUseFixedVolume = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_useFixedVolume);
+ // must be called before readPersistedSettings() which needs a valid mStreamVolumeAlias[]
+ // array initialized by updateStreamVolumeAlias()
+ updateStreamVolumeAlias(false /*updateVolumes*/);
readPersistedSettings();
mSettingsObserver = new SettingsObserver();
- updateStreamVolumeAlias(false /*updateVolumes*/);
createStreamStates();
readAndSetLowRamDevice();
@@ -632,10 +634,15 @@
}
if (isInCommunication()) {
dtmfStreamAlias = AudioSystem.STREAM_VOICE_CALL;
+ mRingerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_DTMF);
+ } else {
+ mRingerModeAffectedStreams |= (1 << AudioSystem.STREAM_DTMF);
}
mStreamVolumeAlias[AudioSystem.STREAM_DTMF] = dtmfStreamAlias;
if (updateVolumes) {
mStreamStates[AudioSystem.STREAM_DTMF].setAllIndexes(mStreamStates[dtmfStreamAlias]);
+ // apply stream mute states according to new value of mRingerModeAffectedStreams
+ setRingerModeInt(getRingerMode(), false);
sendMsg(mAudioHandler,
MSG_SET_ALL_VOLUMES,
SENDMSG_QUEUE,
@@ -702,37 +709,7 @@
mHasVibrator ? AudioManager.VIBRATE_SETTING_ONLY_SILENT
: AudioManager.VIBRATE_SETTING_OFF);
- // make sure settings for ringer mode are consistent with device type: non voice capable
- // devices (tablets) include media stream in silent mode whereas phones don't.
- mRingerModeAffectedStreams = Settings.System.getIntForUser(cr,
- Settings.System.MODE_RINGER_STREAMS_AFFECTED,
- ((1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_NOTIFICATION)|
- (1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)),
- UserHandle.USER_CURRENT);
-
- // ringtone, notification and system streams are always affected by ringer mode
- mRingerModeAffectedStreams |= (1 << AudioSystem.STREAM_RING)|
- (1 << AudioSystem.STREAM_NOTIFICATION)|
- (1 << AudioSystem.STREAM_SYSTEM);
-
- if (mVoiceCapable) {
- mRingerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_MUSIC);
- } else {
- mRingerModeAffectedStreams |= (1 << AudioSystem.STREAM_MUSIC);
- }
- synchronized (mCameraSoundForced) {
- if (mCameraSoundForced) {
- mRingerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_SYSTEM_ENFORCED);
- } else {
- mRingerModeAffectedStreams |= (1 << AudioSystem.STREAM_SYSTEM_ENFORCED);
- }
- }
-
- Settings.System.putIntForUser(cr,
- Settings.System.MODE_RINGER_STREAMS_AFFECTED,
- mRingerModeAffectedStreams,
- UserHandle.USER_CURRENT);
-
+ updateRingerModeAffectedStreams();
readDockAudioSettings(cr);
}
@@ -2553,6 +2530,50 @@
return (mRingerModeMutedStreams & (1 << streamType)) != 0;
}
+ boolean updateRingerModeAffectedStreams() {
+ int ringerModeAffectedStreams;
+ // make sure settings for ringer mode are consistent with device type: non voice capable
+ // devices (tablets) include media stream in silent mode whereas phones don't.
+ ringerModeAffectedStreams = Settings.System.getIntForUser(mContentResolver,
+ Settings.System.MODE_RINGER_STREAMS_AFFECTED,
+ ((1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_NOTIFICATION)|
+ (1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)),
+ UserHandle.USER_CURRENT);
+
+ // ringtone, notification and system streams are always affected by ringer mode
+ ringerModeAffectedStreams |= (1 << AudioSystem.STREAM_RING)|
+ (1 << AudioSystem.STREAM_NOTIFICATION)|
+ (1 << AudioSystem.STREAM_SYSTEM);
+
+ if (mVoiceCapable) {
+ ringerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_MUSIC);
+ } else {
+ ringerModeAffectedStreams |= (1 << AudioSystem.STREAM_MUSIC);
+ }
+ synchronized (mCameraSoundForced) {
+ if (mCameraSoundForced) {
+ ringerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_SYSTEM_ENFORCED);
+ } else {
+ ringerModeAffectedStreams |= (1 << AudioSystem.STREAM_SYSTEM_ENFORCED);
+ }
+ }
+ if (mStreamVolumeAlias[AudioSystem.STREAM_DTMF] == AudioSystem.STREAM_RING) {
+ ringerModeAffectedStreams |= (1 << AudioSystem.STREAM_DTMF);
+ } else {
+ ringerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_DTMF);
+ }
+
+ if (ringerModeAffectedStreams != mRingerModeAffectedStreams) {
+ Settings.System.putIntForUser(mContentResolver,
+ Settings.System.MODE_RINGER_STREAMS_AFFECTED,
+ ringerModeAffectedStreams,
+ UserHandle.USER_CURRENT);
+ mRingerModeAffectedStreams = ringerModeAffectedStreams;
+ return true;
+ }
+ return false;
+ }
+
public boolean isStreamAffectedByMute(int streamType) {
return (mMuteAffectedStreams & (1 << streamType)) != 0;
}
@@ -2948,13 +2969,25 @@
}
public synchronized void setAllIndexes(VolumeStreamState srcStream) {
- Set set = srcStream.mIndex.entrySet();
+ int srcStreamType = srcStream.getStreamType();
+ // apply default device volume from source stream to all devices first in case
+ // some devices are present in this stream state but not in source stream state
+ int index = srcStream.getIndex(AudioSystem.DEVICE_OUT_DEFAULT);
+ index = rescaleIndex(index, srcStreamType, mStreamType);
+ Set set = mIndex.entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
Map.Entry entry = (Map.Entry)i.next();
+ entry.setValue(index);
+ }
+ // Now apply actual volume for devices in source stream state
+ set = srcStream.mIndex.entrySet();
+ i = set.iterator();
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry)i.next();
int device = ((Integer)entry.getKey()).intValue();
- int index = ((Integer)entry.getValue()).intValue();
- index = rescaleIndex(index, srcStream.getStreamType(), mStreamType);
+ index = ((Integer)entry.getValue()).intValue();
+ index = rescaleIndex(index, srcStreamType, mStreamType);
setIndex(index, device);
}
@@ -3643,29 +3676,11 @@
// and mRingerModeAffectedStreams, so will leave this synchronized for now.
// mRingerModeMutedStreams and mMuteAffectedStreams are safe (only accessed once).
synchronized (mSettingsLock) {
- int ringerModeAffectedStreams = Settings.System.getIntForUser(mContentResolver,
- Settings.System.MODE_RINGER_STREAMS_AFFECTED,
- ((1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_NOTIFICATION)|
- (1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)),
- UserHandle.USER_CURRENT);
- if (mVoiceCapable) {
- ringerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_MUSIC);
- } else {
- ringerModeAffectedStreams |= (1 << AudioSystem.STREAM_MUSIC);
- }
- synchronized (mCameraSoundForced) {
- if (mCameraSoundForced) {
- ringerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_SYSTEM_ENFORCED);
- } else {
- ringerModeAffectedStreams |= (1 << AudioSystem.STREAM_SYSTEM_ENFORCED);
- }
- }
- if (ringerModeAffectedStreams != mRingerModeAffectedStreams) {
+ if (updateRingerModeAffectedStreams()) {
/*
* Ensure all stream types that should be affected by ringer mode
* are in the proper state.
*/
- mRingerModeAffectedStreams = ringerModeAffectedStreams;
setRingerModeInt(getRingerMode(), false);
}
readDockAudioSettings(mContentResolver);
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
index ab6bd70..497b8b3 100644
--- a/media/java/android/media/RemoteControlClient.java
+++ b/media/java/android/media/RemoteControlClient.java
@@ -1674,7 +1674,7 @@
* @return true during any form of playback, false if it's not playing anything while in this
* playback state
*/
- private static boolean playbackPositionShouldMove(int playstate) {
+ static boolean playbackPositionShouldMove(int playstate) {
switch(playstate) {
case PLAYSTATE_STOPPED:
case PLAYSTATE_PAUSED:
diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java
index 96f6a92..22f6343 100644
--- a/media/java/android/media/RemoteController.java
+++ b/media/java/android/media/RemoteController.java
@@ -17,6 +17,7 @@
package android.media;
import android.Manifest;
+import android.app.ActivityManager;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.content.Context;
@@ -30,6 +31,8 @@
import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.SystemClock;
+import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
@@ -59,6 +62,7 @@
private final RcDisplay mRcd;
private final Context mContext;
private final AudioManager mAudioManager;
+ private final int mMaxBitmapDimension;
private MetadataEditor mMetadataEditor;
/**
@@ -110,6 +114,13 @@
mContext = context;
mRcd = new RcDisplay();
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+
+ if (ActivityManager.isLowRamDeviceStatic()) {
+ mMaxBitmapDimension = MAX_BITMAP_DIMENSION;
+ } else {
+ final DisplayMetrics dm = context.getResources().getDisplayMetrics();
+ mMaxBitmapDimension = Math.max(dm.widthPixels, dm.heightPixels);
+ }
}
@@ -142,7 +153,7 @@
* @param state one of the playback states authorized
* in {@link RemoteControlClient#setPlaybackState(int)}.
* @param stateChangeTimeMs the system time at which the state change was reported,
- * expressed in ms.
+ * expressed in ms. Based on {@link android.os.SystemClock#elapsedRealtime()}.
* @param currentPosMs a positive value for the current media playback position expressed
* in ms, a negative value if the position is temporarily unknown.
* @param speed a value expressed as a ratio of 1x playback: 1.0f is normal playback,
@@ -200,6 +211,50 @@
}
}
+ /**
+ * @hide
+ */
+ public String getRemoteControlClientPackageName() {
+ return mClientPendingIntentCurrent != null ?
+ mClientPendingIntentCurrent.getCreatorPackage() : null;
+ }
+
+ /**
+ * Return the estimated playback position of the current media track or a negative value
+ * if not available.
+ *
+ * <p>The value returned is estimated by the current process and may not be perfect.
+ * The time returned by this method is calculated from the last state change time based
+ * on the current play position at that time and the last known playback speed.
+ * An application may call {@link #setSynchronizationMode(int)} to apply
+ * a synchronization policy that will periodically re-sync the estimated position
+ * with the RemoteControlClient.</p>
+ *
+ * @return the current estimated playback position in milliseconds or a negative value
+ * if not available
+ *
+ * @see OnClientUpdateListener#onClientPlaybackStateUpdate(int, long, long, float)
+ */
+ public long getEstimatedMediaPosition() {
+ if (mLastPlaybackInfo != null) {
+ if (!RemoteControlClient.playbackPositionShouldMove(mLastPlaybackInfo.mState)) {
+ return mLastPlaybackInfo.mCurrentPosMs;
+ }
+
+ // Take the current position at the time of state change and estimate.
+ final long thenPos = mLastPlaybackInfo.mCurrentPosMs;
+ if (thenPos < 0) {
+ return -1;
+ }
+
+ final long now = SystemClock.elapsedRealtime();
+ final long then = mLastPlaybackInfo.mStateChangeTimeMs;
+ final long sinceThen = now - then;
+ final long scaledSinceThen = (long) (sinceThen * mLastPlaybackInfo.mSpeed);
+ return thenPos + scaledSinceThen;
+ }
+ return -1;
+ }
/**
* Send a simulated key event for a media button to be received by the current client.
@@ -301,8 +356,8 @@
synchronized (mInfoLock) {
if (wantBitmap) {
if ((width > 0) && (height > 0)) {
- if (width > MAX_BITMAP_DIMENSION) { width = MAX_BITMAP_DIMENSION; }
- if (height > MAX_BITMAP_DIMENSION) { height = MAX_BITMAP_DIMENSION; }
+ if (width > mMaxBitmapDimension) { width = mMaxBitmapDimension; }
+ if (height > mMaxBitmapDimension) { height = mMaxBitmapDimension; }
mArtworkWidth = width;
mArtworkHeight = height;
} else {
@@ -415,7 +470,13 @@
protected MetadataEditor(Bundle metadata, long editableKeys) {
mEditorMetadata = metadata;
mEditableKeys = editableKeys;
- mEditorArtwork = null;
+
+ mEditorArtwork = (Bitmap) metadata.getParcelable(
+ String.valueOf(MediaMetadataEditor.BITMAP_KEY_ARTWORK));
+ if (mEditorArtwork != null) {
+ cleanupBitmapFromBundle(MediaMetadataEditor.BITMAP_KEY_ARTWORK);
+ }
+
mMetadataChanged = true;
mArtworkChanged = true;
mApplied = false;
@@ -706,6 +767,7 @@
// existing metadata, merge existing and new
mMetadataEditor.mEditorMetadata.putAll(metadata);
}
+
mMetadataEditor.putBitmap(MediaMetadataEditor.BITMAP_KEY_ARTWORK,
(Bitmap)metadata.getParcelable(
String.valueOf(MediaMetadataEditor.BITMAP_KEY_ARTWORK)));
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
index 1b7faec..d157478 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
@@ -152,11 +152,20 @@
static class DummyCameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub {
@Override
- public void notifyCallback(int msgType, int ext1, int ext2) throws RemoteException {
+ public void onCameraError(int errorCode) {
}
@Override
- public void onResultReceived(int frameId, CameraMetadataNative result) throws RemoteException {
+ public void onCameraIdle() {
+ }
+
+ @Override
+ public void onCaptureStarted(int requestId, long timestamp) {
+ }
+
+ @Override
+ public void onResultReceived(int frameId, CameraMetadataNative result)
+ throws RemoteException {
}
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
index 13ce52e..43ebef4 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
@@ -30,6 +30,7 @@
import android.os.Handler;
import android.os.HandlerThread;
import android.os.RemoteException;
+import android.os.SystemClock;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;
@@ -40,6 +41,7 @@
import com.android.mediaframeworktest.MediaFrameworkIntegrationTestRunner;
import org.mockito.ArgumentMatcher;
+import org.mockito.ArgumentCaptor;
import static org.mockito.Mockito.*;
public class CameraDeviceBinderTest extends AndroidTestCase {
@@ -48,6 +50,12 @@
private static int NUM_CALLBACKS_CHECKED = 10;
// Wait for capture result timeout value: 1500ms
private final static int WAIT_FOR_COMPLETE_TIMEOUT_MS = 1500;
+ // Wait for flush timeout value: 1000ms
+ private final static int WAIT_FOR_FLUSH_TIMEOUT_MS = 1000;
+ // Wait for idle timeout value: 2000ms
+ private final static int WAIT_FOR_IDLE_TIMEOUT_MS = 2000;
+ // Wait while camera device starts working on requests
+ private final static int WAIT_FOR_WORK_MS = 300;
// Default size is VGA, which is mandatory camera supported image size by CDD.
private static final int DEFAULT_IMAGE_WIDTH = 640;
private static final int DEFAULT_IMAGE_HEIGHT = 480;
@@ -77,11 +85,19 @@
public class DummyCameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub {
@Override
- public void notifyCallback(int msgType, int ext1, int ext2) throws RemoteException {
+ public void onCameraError(int errorCode) {
}
@Override
- public void onResultReceived(int frameId, CameraMetadataNative result) throws RemoteException {
+ public void onCameraIdle() {
+ }
+
+ @Override
+ public void onCaptureStarted(int requestId, long timestamp) {
+ }
+
+ @Override
+ public void onResultReceived(int frameId, CameraMetadataNative result) {
}
}
@@ -90,7 +106,7 @@
public boolean matches(Object obj) {
return !((CameraMetadataNative) obj).isEmpty();
}
- }
+ }
private void createDefaultSurface() {
mImageReader =
@@ -346,6 +362,60 @@
}
@SmallTest
+ public void testCaptureStartedCallbacks() throws Exception {
+ CaptureRequest request = createDefaultBuilder(/* needStream */true).build();
+
+ ArgumentCaptor<Long> timestamps = ArgumentCaptor.forClass(Long.class);
+
+ // Test both single request and streaming request.
+ int requestId1 = submitCameraRequest(request, /* streaming */false);
+ verify(mMockCb, timeout(WAIT_FOR_COMPLETE_TIMEOUT_MS).times(1)).onCaptureStarted(
+ eq(requestId1),
+ anyLong());
+
+ int streamingId = submitCameraRequest(request, /* streaming */true);
+ verify(mMockCb, timeout(WAIT_FOR_COMPLETE_TIMEOUT_MS).atLeast(NUM_CALLBACKS_CHECKED))
+ .onCaptureStarted(
+ eq(streamingId),
+ timestamps.capture());
+
+ long timestamp = 0; // All timestamps should be larger than 0.
+ for (Long nextTimestamp : timestamps.getAllValues()) {
+ Log.v(TAG, "next t: " + nextTimestamp + " current t: " + timestamp);
+ assertTrue("Captures are out of order", timestamp < nextTimestamp);
+ timestamp = nextTimestamp;
+ }
+ }
+
+ @SmallTest
+ public void testIdleCallback() throws Exception {
+ int status;
+ CaptureRequest request = createDefaultBuilder(/* needStream */true).build();
+
+ // Try streaming
+ int streamingId = submitCameraRequest(request, /* streaming */true);
+
+ // Wait a bit to fill up the queue
+ SystemClock.sleep(WAIT_FOR_WORK_MS);
+
+ // Cancel and make sure we eventually quiesce
+ status = mCameraUser.cancelRequest(streamingId);
+
+ verify(mMockCb, timeout(WAIT_FOR_IDLE_TIMEOUT_MS).times(1)).onCameraIdle();
+
+ // Submit a few capture requests
+ int requestId1 = submitCameraRequest(request, /* streaming */false);
+ int requestId2 = submitCameraRequest(request, /* streaming */false);
+ int requestId3 = submitCameraRequest(request, /* streaming */false);
+ int requestId4 = submitCameraRequest(request, /* streaming */false);
+ int requestId5 = submitCameraRequest(request, /* streaming */false);
+
+ // And wait for more idle
+ verify(mMockCb, timeout(WAIT_FOR_IDLE_TIMEOUT_MS).times(2)).onCameraIdle();
+
+ }
+
+ @SmallTest
public void testFlush() throws Exception {
int status;
@@ -367,10 +437,24 @@
int requestId4 = submitCameraRequest(request, /* streaming */false);
int requestId5 = submitCameraRequest(request, /* streaming */false);
- // Then flush
+ // Then flush and wait for idle
status = mCameraUser.flush();
assertEquals(CameraBinderTestUtils.NO_ERROR, status);
+ verify(mMockCb, timeout(WAIT_FOR_FLUSH_TIMEOUT_MS).times(1)).onCameraIdle();
+
+ // Now a streaming request
+ int streamingId = submitCameraRequest(request, /* streaming */true);
+
+ // Wait a bit to fill up the queue
+ SystemClock.sleep(WAIT_FOR_WORK_MS);
+
+ // Then flush and wait for the idle callback
+ status = mCameraUser.flush();
+ assertEquals(CameraBinderTestUtils.NO_ERROR, status);
+
+ verify(mMockCb, timeout(WAIT_FOR_FLUSH_TIMEOUT_MS).times(2)).onCameraIdle();
+
// TODO: When errors are hooked up, count that errors + successful
// requests equal to 5.
}
diff --git a/packages/DocumentsUI/res/values-af/strings.xml b/packages/DocumentsUI/res/values-af/strings.xml
index 5460199..41fd63a 100644
--- a/packages/DocumentsUI/res/values-af/strings.xml
+++ b/packages/DocumentsUI/res/values-af/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Versteek wortels"</string>
<string name="save_error" msgid="6167009778003223664">"Kon nie dokument stoor nie"</string>
<string name="create_error" msgid="3735649141335444215">"Kon nie vouer skep nie"</string>
+ <string name="query_error" msgid="1222448261663503501">"Kon nie navraag doen oor dokumente nie"</string>
<string name="root_recent" msgid="4470053704320518133">"Onlangs"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> gratis"</string>
<string name="root_type_service" msgid="2178854894416775409">"Bergingdienste"</string>
diff --git a/packages/DocumentsUI/res/values-am/strings.xml b/packages/DocumentsUI/res/values-am/strings.xml
index e1fa755..c77a8ee 100644
--- a/packages/DocumentsUI/res/values-am/strings.xml
+++ b/packages/DocumentsUI/res/values-am/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"ስሮችን ደብቅ"</string>
<string name="save_error" msgid="6167009778003223664">"ሰነድ ማስቀመጥ አልተሳካም"</string>
<string name="create_error" msgid="3735649141335444215">"አቃፊ መፍጠር አልተሳካም"</string>
+ <string name="query_error" msgid="1222448261663503501">"ለሰነዶች መጠይቅ መስራት አልተሳካም"</string>
<string name="root_recent" msgid="4470053704320518133">"የቅርብ ጊዜ"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ነፃ"</string>
<string name="root_type_service" msgid="2178854894416775409">"የማከማቻ አገልግሎቶች"</string>
diff --git a/packages/DocumentsUI/res/values-ar/strings.xml b/packages/DocumentsUI/res/values-ar/strings.xml
index d7ea35e..c59c0ee 100644
--- a/packages/DocumentsUI/res/values-ar/strings.xml
+++ b/packages/DocumentsUI/res/values-ar/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"إخفاء الجذور"</string>
<string name="save_error" msgid="6167009778003223664">"أخفق حفظ المستند"</string>
<string name="create_error" msgid="3735649141335444215">"أخفق إنشاء المجلد"</string>
+ <string name="query_error" msgid="1222448261663503501">"أخفق إرسال طلب بحث عن المستندات"</string>
<string name="root_recent" msgid="4470053704320518133">"الأخيرة"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> خالية"</string>
<string name="root_type_service" msgid="2178854894416775409">"خدمات التخزين"</string>
diff --git a/packages/DocumentsUI/res/values-bg/strings.xml b/packages/DocumentsUI/res/values-bg/strings.xml
index d3eb993..20f4de9 100644
--- a/packages/DocumentsUI/res/values-bg/strings.xml
+++ b/packages/DocumentsUI/res/values-bg/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Скриване на основните елементи"</string>
<string name="save_error" msgid="6167009778003223664">"Запазването на документа не бе успешно"</string>
<string name="create_error" msgid="3735649141335444215">"Създаването на папката не бе успешно"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Скорошно"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Свободно: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Услуги за съхранение"</string>
diff --git a/packages/DocumentsUI/res/values-ca/strings.xml b/packages/DocumentsUI/res/values-ca/strings.xml
index da1a886..68c7b0e 100644
--- a/packages/DocumentsUI/res/values-ca/strings.xml
+++ b/packages/DocumentsUI/res/values-ca/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Amaga les arrels"</string>
<string name="save_error" msgid="6167009778003223664">"No s\'ha pogut desar el document."</string>
<string name="create_error" msgid="3735649141335444215">"No s\'ha pogut crear la carpeta"</string>
+ <string name="query_error" msgid="1222448261663503501">"No s\'han pogut consultar els documents"</string>
<string name="root_recent" msgid="4470053704320518133">"Recent"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> lliures"</string>
<string name="root_type_service" msgid="2178854894416775409">"Serveis d\'emmagatzematge"</string>
diff --git a/packages/DocumentsUI/res/values-cs/strings.xml b/packages/DocumentsUI/res/values-cs/strings.xml
index 4f176a2..f089c8b 100644
--- a/packages/DocumentsUI/res/values-cs/strings.xml
+++ b/packages/DocumentsUI/res/values-cs/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Skrýt kořeny"</string>
<string name="save_error" msgid="6167009778003223664">"Uložení dokumentu se nezdařilo"</string>
<string name="create_error" msgid="3735649141335444215">"Složku se nepodařilo vytvořit"</string>
+ <string name="query_error" msgid="1222448261663503501">"Seznam dokumentů se nepodařilo načíst"</string>
<string name="root_recent" msgid="4470053704320518133">"Poslední"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Volný prostor: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Služby úložiště"</string>
diff --git a/packages/DocumentsUI/res/values-da/strings.xml b/packages/DocumentsUI/res/values-da/strings.xml
index 34143fa..816f9a7 100644
--- a/packages/DocumentsUI/res/values-da/strings.xml
+++ b/packages/DocumentsUI/res/values-da/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Skjul rødder"</string>
<string name="save_error" msgid="6167009778003223664">"Dokumentet kunne ikke gemmes"</string>
<string name="create_error" msgid="3735649141335444215">"Mappen kunne ikke oprettes"</string>
+ <string name="query_error" msgid="1222448261663503501">"Dokumenterne kunne ikke forespørges."</string>
<string name="root_recent" msgid="4470053704320518133">"Seneste"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ledig plads"</string>
<string name="root_type_service" msgid="2178854894416775409">"Lagringstjenester"</string>
diff --git a/packages/DocumentsUI/res/values-de/strings.xml b/packages/DocumentsUI/res/values-de/strings.xml
index 9f21b77..3b448d9 100644
--- a/packages/DocumentsUI/res/values-de/strings.xml
+++ b/packages/DocumentsUI/res/values-de/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Root-Verzeichnis ausblenden"</string>
<string name="save_error" msgid="6167009778003223664">"Dokument konnte nicht gespeichert werden."</string>
<string name="create_error" msgid="3735649141335444215">"Ordner konnte nicht erstellt werden."</string>
+ <string name="query_error" msgid="1222448261663503501">"Fehler bei der Anforderung von Dokumenten"</string>
<string name="root_recent" msgid="4470053704320518133">"Letzte"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> verfügbar"</string>
<string name="root_type_service" msgid="2178854894416775409">"Speicherdienste"</string>
diff --git a/packages/DocumentsUI/res/values-el/strings.xml b/packages/DocumentsUI/res/values-el/strings.xml
index debd576..aec3318 100644
--- a/packages/DocumentsUI/res/values-el/strings.xml
+++ b/packages/DocumentsUI/res/values-el/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Απόκρυψη ρίζας"</string>
<string name="save_error" msgid="6167009778003223664">"Αποτυχία αποθήκευσης του εγγράφου"</string>
<string name="create_error" msgid="3735649141335444215">"Αποτυχία δημιουργίας φακέλου"</string>
+ <string name="query_error" msgid="1222448261663503501">"Αποτυχία υποβολής ερωτήματος για έγγραφα"</string>
<string name="root_recent" msgid="4470053704320518133">"Πρόσφατα"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ελεύθερα"</string>
<string name="root_type_service" msgid="2178854894416775409">"Υπηρεσίες αποθήκευσης"</string>
diff --git a/packages/DocumentsUI/res/values-en-rGB/strings.xml b/packages/DocumentsUI/res/values-en-rGB/strings.xml
index 86fb40d..a95e7f1 100644
--- a/packages/DocumentsUI/res/values-en-rGB/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rGB/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string>
<string name="save_error" msgid="6167009778003223664">"Failed to save document"</string>
<string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string>
+ <string name="query_error" msgid="1222448261663503501">"Failed to query documents"</string>
<string name="root_recent" msgid="4470053704320518133">"Recent"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string>
<string name="root_type_service" msgid="2178854894416775409">"Storage services"</string>
diff --git a/packages/DocumentsUI/res/values-en-rIN/strings.xml b/packages/DocumentsUI/res/values-en-rIN/strings.xml
index 86fb40d..a95e7f1 100644
--- a/packages/DocumentsUI/res/values-en-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rIN/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string>
<string name="save_error" msgid="6167009778003223664">"Failed to save document"</string>
<string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string>
+ <string name="query_error" msgid="1222448261663503501">"Failed to query documents"</string>
<string name="root_recent" msgid="4470053704320518133">"Recent"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string>
<string name="root_type_service" msgid="2178854894416775409">"Storage services"</string>
diff --git a/packages/DocumentsUI/res/values-es-rUS/strings.xml b/packages/DocumentsUI/res/values-es-rUS/strings.xml
index 31ed469..847482b 100644
--- a/packages/DocumentsUI/res/values-es-rUS/strings.xml
+++ b/packages/DocumentsUI/res/values-es-rUS/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Ocultar raíces"</string>
<string name="save_error" msgid="6167009778003223664">"Error al guardar el documento"</string>
<string name="create_error" msgid="3735649141335444215">"Error al crear la carpeta"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Recientes"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> de espacio libre"</string>
<string name="root_type_service" msgid="2178854894416775409">"Almacenamiento"</string>
diff --git a/packages/DocumentsUI/res/values-es/strings.xml b/packages/DocumentsUI/res/values-es/strings.xml
index 48b969e..1682542 100644
--- a/packages/DocumentsUI/res/values-es/strings.xml
+++ b/packages/DocumentsUI/res/values-es/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Ocultar raíces"</string>
<string name="save_error" msgid="6167009778003223664">"Error al guardar documento"</string>
<string name="create_error" msgid="3735649141335444215">"Error al crear la carpeta"</string>
+ <string name="query_error" msgid="1222448261663503501">"Error al consultar lista de documentos"</string>
<string name="root_recent" msgid="4470053704320518133">"Reciente"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> de espacio libre"</string>
<string name="root_type_service" msgid="2178854894416775409">"Servicios almacenamiento"</string>
diff --git a/packages/DocumentsUI/res/values-et-rEE/strings.xml b/packages/DocumentsUI/res/values-et-rEE/strings.xml
index 7931ced..5412956 100644
--- a/packages/DocumentsUI/res/values-et-rEE/strings.xml
+++ b/packages/DocumentsUI/res/values-et-rEE/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Peida juured"</string>
<string name="save_error" msgid="6167009778003223664">"Dokumendi salvestamine ebaõnnestus"</string>
<string name="create_error" msgid="3735649141335444215">"Kausta loomine ebaõnnestus"</string>
+ <string name="query_error" msgid="1222448261663503501">"Dokumentide päring ebaõnnestus"</string>
<string name="root_recent" msgid="4470053704320518133">"Hiljutised"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> on vaba"</string>
<string name="root_type_service" msgid="2178854894416775409">"Mäluruumi teenused"</string>
diff --git a/packages/DocumentsUI/res/values-fa/strings.xml b/packages/DocumentsUI/res/values-fa/strings.xml
index 94763ab..c922b37 100644
--- a/packages/DocumentsUI/res/values-fa/strings.xml
+++ b/packages/DocumentsUI/res/values-fa/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"پنهان کردن ریشهها"</string>
<string name="save_error" msgid="6167009778003223664">"ذخیره سند انجام نشد"</string>
<string name="create_error" msgid="3735649141335444215">"ایجاد پوشه انجام نشد"</string>
+ <string name="query_error" msgid="1222448261663503501">"جستجوی اسناد ناموفق بود"</string>
<string name="root_recent" msgid="4470053704320518133">"اخیر"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> آزاد"</string>
<string name="root_type_service" msgid="2178854894416775409">"خدمات ذخیرهسازی"</string>
diff --git a/packages/DocumentsUI/res/values-fi/strings.xml b/packages/DocumentsUI/res/values-fi/strings.xml
index 92fc7ab..5e40ecd 100644
--- a/packages/DocumentsUI/res/values-fi/strings.xml
+++ b/packages/DocumentsUI/res/values-fi/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Piilota juuret"</string>
<string name="save_error" msgid="6167009778003223664">"Asiakirjan tallennus epäonnistui"</string>
<string name="create_error" msgid="3735649141335444215">"Kansion luominen epäonnistui"</string>
+ <string name="query_error" msgid="1222448261663503501">"Dokumenttikysely epäonnistui"</string>
<string name="root_recent" msgid="4470053704320518133">"Viimeisimmät"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> vapaana"</string>
<string name="root_type_service" msgid="2178854894416775409">"Tallennuspalvelut"</string>
diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
index 7ec6fe8..1cb12f7 100644
--- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml
+++ b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Masquer les racines"</string>
<string name="save_error" msgid="6167009778003223664">"Échec de l\'enregistrement du document"</string>
<string name="create_error" msgid="3735649141335444215">"Échec de la création du dossier"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Récents"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> disponible"</string>
<string name="root_type_service" msgid="2178854894416775409">"Services de stockage"</string>
diff --git a/packages/DocumentsUI/res/values-fr/strings.xml b/packages/DocumentsUI/res/values-fr/strings.xml
index 97e35b0..f6d7c78 100644
--- a/packages/DocumentsUI/res/values-fr/strings.xml
+++ b/packages/DocumentsUI/res/values-fr/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Masquer les répertoires racines"</string>
<string name="save_error" msgid="6167009778003223664">"Échec de l\'enregistrement du document."</string>
<string name="create_error" msgid="3735649141335444215">"Échec de la création du dossier."</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Récents"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Espace disponible : <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Services de stockage"</string>
diff --git a/packages/DocumentsUI/res/values-hi/strings.xml b/packages/DocumentsUI/res/values-hi/strings.xml
index 6821a21..4ce02db 100644
--- a/packages/DocumentsUI/res/values-hi/strings.xml
+++ b/packages/DocumentsUI/res/values-hi/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"रूट छिपाएं"</string>
<string name="save_error" msgid="6167009778003223664">"दस्तावेज़ सहेजने में विफल रहा"</string>
<string name="create_error" msgid="3735649141335444215">"फ़ोल्डर बनाने में विफल"</string>
+ <string name="query_error" msgid="1222448261663503501">"दस्तावेजों के लिए क्वेरी करने में विफल रहा"</string>
<string name="root_recent" msgid="4470053704320518133">"हाल ही के"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> रिक्त"</string>
<string name="root_type_service" msgid="2178854894416775409">"संग्रहण सेवाएं"</string>
diff --git a/packages/DocumentsUI/res/values-hr/strings.xml b/packages/DocumentsUI/res/values-hr/strings.xml
index cbbe046..73c2f04 100644
--- a/packages/DocumentsUI/res/values-hr/strings.xml
+++ b/packages/DocumentsUI/res/values-hr/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Sakrij korijene"</string>
<string name="save_error" msgid="6167009778003223664">"Nije uspjelo spremanje dokumenta"</string>
<string name="create_error" msgid="3735649141335444215">"Izrada mape nije uspjela"</string>
+ <string name="query_error" msgid="1222448261663503501">"Traženje dokumenata nije uspjelo"</string>
<string name="root_recent" msgid="4470053704320518133">"Nedavno"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> besplatno"</string>
<string name="root_type_service" msgid="2178854894416775409">"Usluge pohrane"</string>
diff --git a/packages/DocumentsUI/res/values-hu/strings.xml b/packages/DocumentsUI/res/values-hu/strings.xml
index 458c8e8..db7854b 100644
--- a/packages/DocumentsUI/res/values-hu/strings.xml
+++ b/packages/DocumentsUI/res/values-hu/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Gyökérszint elrejtése"</string>
<string name="save_error" msgid="6167009778003223664">"Nem sikerült menteni a dokumentumot"</string>
<string name="create_error" msgid="3735649141335444215">"Nem sikerült létrehozni a mappát"</string>
+ <string name="query_error" msgid="1222448261663503501">"A dokumentumok lekérése nem sikerült"</string>
<string name="root_recent" msgid="4470053704320518133">"Legutóbbiak"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> szabad"</string>
<string name="root_type_service" msgid="2178854894416775409">"Tárhelyszolgáltatások"</string>
diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
index 992437a..3ab7bc9 100644
--- a/packages/DocumentsUI/res/values-hy-rAM/strings.xml
+++ b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Թաքցնել արմատները"</string>
<string name="save_error" msgid="6167009778003223664">"Չհաջողվեց պահել փաստաթուղթը"</string>
<string name="create_error" msgid="3735649141335444215">"Չհաջողվեց ստեղծել թղթապանակը"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Վերջին"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ազատ է"</string>
<string name="root_type_service" msgid="2178854894416775409">"Պահուստի ծառայություններ"</string>
diff --git a/packages/DocumentsUI/res/values-in/strings.xml b/packages/DocumentsUI/res/values-in/strings.xml
index 16fe78b..aad26b6 100644
--- a/packages/DocumentsUI/res/values-in/strings.xml
+++ b/packages/DocumentsUI/res/values-in/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Sembunyikan akar"</string>
<string name="save_error" msgid="6167009778003223664">"Gagal menyimpan dokumen"</string>
<string name="create_error" msgid="3735649141335444215">"Gagal membuat folder"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Terkini"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bebas"</string>
<string name="root_type_service" msgid="2178854894416775409">"Layanan penyimpanan"</string>
diff --git a/packages/DocumentsUI/res/values-it/strings.xml b/packages/DocumentsUI/res/values-it/strings.xml
index 2f2cb47..28323b6 100644
--- a/packages/DocumentsUI/res/values-it/strings.xml
+++ b/packages/DocumentsUI/res/values-it/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Nascondi nodi principali"</string>
<string name="save_error" msgid="6167009778003223664">"Impossibile salvare il documento"</string>
<string name="create_error" msgid="3735649141335444215">"Impossibile creare la cartella"</string>
+ <string name="query_error" msgid="1222448261663503501">"Impossibile chiedere documenti"</string>
<string name="root_recent" msgid="4470053704320518133">"Recente"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> liberi"</string>
<string name="root_type_service" msgid="2178854894416775409">"Servizi di archiviazione"</string>
diff --git a/packages/DocumentsUI/res/values-iw/strings.xml b/packages/DocumentsUI/res/values-iw/strings.xml
index b8e8e3c..712c060 100644
--- a/packages/DocumentsUI/res/values-iw/strings.xml
+++ b/packages/DocumentsUI/res/values-iw/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"הסתר שורשים"</string>
<string name="save_error" msgid="6167009778003223664">"שמירת המסמך נכשלה"</string>
<string name="create_error" msgid="3735649141335444215">"יצירת התיקיה נכשלה"</string>
+ <string name="query_error" msgid="1222448261663503501">"שאילתת המסמכים נכשלה"</string>
<string name="root_recent" msgid="4470053704320518133">"מהזמן האחרון"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> של שטח פנוי"</string>
<string name="root_type_service" msgid="2178854894416775409">"שירותי אחסון"</string>
diff --git a/packages/DocumentsUI/res/values-ja/strings.xml b/packages/DocumentsUI/res/values-ja/strings.xml
index f2c4055..c5a50ee 100644
--- a/packages/DocumentsUI/res/values-ja/strings.xml
+++ b/packages/DocumentsUI/res/values-ja/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"ルートを非表示にする"</string>
<string name="save_error" msgid="6167009778003223664">"ドキュメントを保存できませんでした"</string>
<string name="create_error" msgid="3735649141335444215">"フォルダを作成できませんでした"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"最近"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"空き容量: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"ストレージサービス"</string>
diff --git a/packages/DocumentsUI/res/values-ka-rGE/strings.xml b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
index e8bcc76..201a89c 100644
--- a/packages/DocumentsUI/res/values-ka-rGE/strings.xml
+++ b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"ფესვების დამალვა"</string>
<string name="save_error" msgid="6167009778003223664">"დოკუმენტის შენახვა ვერ მოხერხდა"</string>
<string name="create_error" msgid="3735649141335444215">"საქაღალდის შექმნა ვერ მოხერხდა"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"ბოლო"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> თავისუფალია"</string>
<string name="root_type_service" msgid="2178854894416775409">"მეხსიერების სერვისები"</string>
diff --git a/packages/DocumentsUI/res/values-km-rKH/strings.xml b/packages/DocumentsUI/res/values-km-rKH/strings.xml
index 6be5a06..80f3698 100644
--- a/packages/DocumentsUI/res/values-km-rKH/strings.xml
+++ b/packages/DocumentsUI/res/values-km-rKH/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"លាក់ roots"</string>
<string name="save_error" msgid="6167009778003223664">"បានបរាជ័យក្នុងការរក្សាទុកឯកសារ"</string>
<string name="create_error" msgid="3735649141335444215">"បានបរាជ័យក្នុងការបង្កើតថត"</string>
+ <string name="query_error" msgid="1222448261663503501">"បានបរាជ័យក្នុងការច្រោះឯកសារ"</string>
<string name="root_recent" msgid="4470053704320518133">"ថ្មីៗ"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"ទំនេរ <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"សេវាកម្មផ្ដល់ឧបករណ៍ផ្ទុក"</string>
diff --git a/packages/DocumentsUI/res/values-ko/strings.xml b/packages/DocumentsUI/res/values-ko/strings.xml
index 0e4b8c1..0fef587 100644
--- a/packages/DocumentsUI/res/values-ko/strings.xml
+++ b/packages/DocumentsUI/res/values-ko/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"루트 숨기기"</string>
<string name="save_error" msgid="6167009778003223664">"문서 저장 실패"</string>
<string name="create_error" msgid="3735649141335444215">"폴더를 만들지 못함"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"최근"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> 남음"</string>
<string name="root_type_service" msgid="2178854894416775409">"저장용량 서비스"</string>
diff --git a/packages/DocumentsUI/res/values-lo-rLA/strings.xml b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
index 9dc9e65..9a6f32f 100644
--- a/packages/DocumentsUI/res/values-lo-rLA/strings.xml
+++ b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"ເຊື່ອງ roots"</string>
<string name="save_error" msgid="6167009778003223664">"ການບັນທຶກເອກະສານລົ້ມເຫລວ"</string>
<string name="create_error" msgid="3735649141335444215">"ການສ້າງໂຟນເດີລົ້ມເຫຼວ"</string>
+ <string name="query_error" msgid="1222448261663503501">"ການຊອກຫາເອກະສານລົ້ມເຫຼວ"</string>
<string name="root_recent" msgid="4470053704320518133">"ຫາກໍໃຊ້"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"ຟຣີ <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"ບໍລິການບ່ອນຈັດເກັບຂໍ້ມູນ"</string>
diff --git a/packages/DocumentsUI/res/values-lt/strings.xml b/packages/DocumentsUI/res/values-lt/strings.xml
index 8e41ab9..598b417e 100644
--- a/packages/DocumentsUI/res/values-lt/strings.xml
+++ b/packages/DocumentsUI/res/values-lt/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Slėpti šaknis"</string>
<string name="save_error" msgid="6167009778003223664">"Nepavyko išsaugoti dokumento"</string>
<string name="create_error" msgid="3735649141335444215">"Nepavyko sukurti aplanko"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Naujausi"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Laisvos vietos: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Saugyklos paslaugos"</string>
diff --git a/packages/DocumentsUI/res/values-lv/strings.xml b/packages/DocumentsUI/res/values-lv/strings.xml
index f2ec3f0..651a59fe0d 100644
--- a/packages/DocumentsUI/res/values-lv/strings.xml
+++ b/packages/DocumentsUI/res/values-lv/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Slēpt saknes"</string>
<string name="save_error" msgid="6167009778003223664">"Neizdevās saglabāt dokumentu."</string>
<string name="create_error" msgid="3735649141335444215">"Neizdevās izveidot mapi."</string>
+ <string name="query_error" msgid="1222448261663503501">"Neizdevās atrast vaicājumā norādītos dokumentus."</string>
<string name="root_recent" msgid="4470053704320518133">"Pēdējie"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Brīva vieta: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Glabāšanas pakalpojumi"</string>
diff --git a/packages/DocumentsUI/res/values-mn-rMN/strings.xml b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
index 0556018..22c9fcd 100644
--- a/packages/DocumentsUI/res/values-mn-rMN/strings.xml
+++ b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Язгуурыг нууцлах"</string>
<string name="save_error" msgid="6167009778003223664">"Документыг хадгалж чадсангүй"</string>
<string name="create_error" msgid="3735649141335444215">"Фолдер үүсгэж чадсангүй"</string>
+ <string name="query_error" msgid="1222448261663503501">"Документын хүсэлт гаргаж чадсангүй"</string>
<string name="root_recent" msgid="4470053704320518133">"Саяхны"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> чөлөөтэй"</string>
<string name="root_type_service" msgid="2178854894416775409">"Сангийн үйлчилгээ"</string>
diff --git a/packages/DocumentsUI/res/values-ms-rMY/strings.xml b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
index fcdc55f..f7eb7fa 100644
--- a/packages/DocumentsUI/res/values-ms-rMY/strings.xml
+++ b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Sembunyikan akar"</string>
<string name="save_error" msgid="6167009778003223664">"Gagal menyimpan dokumen"</string>
<string name="create_error" msgid="3735649141335444215">"Gagal membuat folder"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Terbaharu"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> kosong"</string>
<string name="root_type_service" msgid="2178854894416775409">"Perkhidmatan storan"</string>
diff --git a/packages/DocumentsUI/res/values-nb/strings.xml b/packages/DocumentsUI/res/values-nb/strings.xml
index 7ef2632..7cf3a13 100644
--- a/packages/DocumentsUI/res/values-nb/strings.xml
+++ b/packages/DocumentsUI/res/values-nb/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Skjul røtter"</string>
<string name="save_error" msgid="6167009778003223664">"Kunne ikke lagre dokumentet"</string>
<string name="create_error" msgid="3735649141335444215">"Kunne ikke opprette mappen"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Siste"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> gratis"</string>
<string name="root_type_service" msgid="2178854894416775409">"Lagringstjenester"</string>
diff --git a/packages/DocumentsUI/res/values-nl/strings.xml b/packages/DocumentsUI/res/values-nl/strings.xml
index 1908d2a..08862e8 100644
--- a/packages/DocumentsUI/res/values-nl/strings.xml
+++ b/packages/DocumentsUI/res/values-nl/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Roots verbergen"</string>
<string name="save_error" msgid="6167009778003223664">"Kan document niet opslaan"</string>
<string name="create_error" msgid="3735649141335444215">"Kan map niet maken"</string>
+ <string name="query_error" msgid="1222448261663503501">"Kan geen query\'s voor documenten verzenden"</string>
<string name="root_recent" msgid="4470053704320518133">"Recent"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> vrij"</string>
<string name="root_type_service" msgid="2178854894416775409">"Opslagservices"</string>
diff --git a/packages/DocumentsUI/res/values-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml
index 088a7a34..320afc8 100644
--- a/packages/DocumentsUI/res/values-pl/strings.xml
+++ b/packages/DocumentsUI/res/values-pl/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Ukryj elementy główne"</string>
<string name="save_error" msgid="6167009778003223664">"Nie udało się zapisać dokumentu"</string>
<string name="create_error" msgid="3735649141335444215">"Nie udało się utworzyć folderu"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Ostatnie"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> wolne"</string>
<string name="root_type_service" msgid="2178854894416775409">"Usługi pamięci masowej"</string>
diff --git a/packages/DocumentsUI/res/values-pt-rPT/strings.xml b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
index 25b055d..1c1ba8b 100644
--- a/packages/DocumentsUI/res/values-pt-rPT/strings.xml
+++ b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Ocultar raízes"</string>
<string name="save_error" msgid="6167009778003223664">"Falha ao guardar o documento"</string>
<string name="create_error" msgid="3735649141335444215">"Falha ao criar a pasta"</string>
+ <string name="query_error" msgid="1222448261663503501">"Falha ao consultar os documentos"</string>
<string name="root_recent" msgid="4470053704320518133">"Recentes"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> espaço livre"</string>
<string name="root_type_service" msgid="2178854894416775409">"Serv. de armazenamento"</string>
diff --git a/packages/DocumentsUI/res/values-pt/strings.xml b/packages/DocumentsUI/res/values-pt/strings.xml
index bda6711..2c7b0bd 100644
--- a/packages/DocumentsUI/res/values-pt/strings.xml
+++ b/packages/DocumentsUI/res/values-pt/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Ocultar raízes"</string>
<string name="save_error" msgid="6167009778003223664">"Falha ao salvar o documento"</string>
<string name="create_error" msgid="3735649141335444215">"Falha ao criar a pasta"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Recentes"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> livres"</string>
<string name="root_type_service" msgid="2178854894416775409">"Serviços de armazenamento"</string>
diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml
index e672198..b196d77 100644
--- a/packages/DocumentsUI/res/values-ro/strings.xml
+++ b/packages/DocumentsUI/res/values-ro/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Ascundeți directoarele rădăcină"</string>
<string name="save_error" msgid="6167009778003223664">"Salvarea documentului nu a reușit"</string>
<string name="create_error" msgid="3735649141335444215">"Eroare la crearea dosarului"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Recente"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> spațiu liber"</string>
<string name="root_type_service" msgid="2178854894416775409">"Servicii de stocare"</string>
diff --git a/packages/DocumentsUI/res/values-ru/strings.xml b/packages/DocumentsUI/res/values-ru/strings.xml
index 8aaa823..ae9bf54 100644
--- a/packages/DocumentsUI/res/values-ru/strings.xml
+++ b/packages/DocumentsUI/res/values-ru/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Скрыть"</string>
<string name="save_error" msgid="6167009778003223664">"Не удалось сохранить документ"</string>
<string name="create_error" msgid="3735649141335444215">"Не удалось создать папку"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Недавние"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Свободно <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Службы хранения"</string>
diff --git a/packages/DocumentsUI/res/values-sk/strings.xml b/packages/DocumentsUI/res/values-sk/strings.xml
index 01aa1c9..bf20456 100644
--- a/packages/DocumentsUI/res/values-sk/strings.xml
+++ b/packages/DocumentsUI/res/values-sk/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Skryť korene"</string>
<string name="save_error" msgid="6167009778003223664">"Dokument sa nepodarilo uložiť"</string>
<string name="create_error" msgid="3735649141335444215">"Priečinok sa nepodarilo vytvoriť"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Nedávne"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Voľné: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Služby úložiska"</string>
diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml
index 22d22ff..f984a0a 100644
--- a/packages/DocumentsUI/res/values-sl/strings.xml
+++ b/packages/DocumentsUI/res/values-sl/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Skrij korene"</string>
<string name="save_error" msgid="6167009778003223664">"Dokumenta ni bilo mogoče shraniti"</string>
<string name="create_error" msgid="3735649141335444215">"Mape ni bilo mogoče ustvariti"</string>
+ <string name="query_error" msgid="1222448261663503501">"Poizvedba za dokumente ni uspela"</string>
<string name="root_recent" msgid="4470053704320518133">"Nedavno"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Prosto: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Storitve shrambe"</string>
diff --git a/packages/DocumentsUI/res/values-sr/strings.xml b/packages/DocumentsUI/res/values-sr/strings.xml
index c5f1177..7486741 100644
--- a/packages/DocumentsUI/res/values-sr/strings.xml
+++ b/packages/DocumentsUI/res/values-sr/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Сакриј основне елементе"</string>
<string name="save_error" msgid="6167009778003223664">"Чување документа није успело"</string>
<string name="create_error" msgid="3735649141335444215">"Директоријум није направљен"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Недавно"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Слободно је <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Услуге складиштења"</string>
diff --git a/packages/DocumentsUI/res/values-sv/strings.xml b/packages/DocumentsUI/res/values-sv/strings.xml
index 0397fb6..7aa5c50 100644
--- a/packages/DocumentsUI/res/values-sv/strings.xml
+++ b/packages/DocumentsUI/res/values-sv/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Dölj rötter"</string>
<string name="save_error" msgid="6167009778003223664">"Det gick inte att spara dokumentet"</string>
<string name="create_error" msgid="3735649141335444215">"Det gick inte att skapa mappen"</string>
+ <string name="query_error" msgid="1222448261663503501">"Det gick inte att söka efter dokument"</string>
<string name="root_recent" msgid="4470053704320518133">"Senaste"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ledigt"</string>
<string name="root_type_service" msgid="2178854894416775409">"Lagringstjänster"</string>
diff --git a/packages/DocumentsUI/res/values-sw/strings.xml b/packages/DocumentsUI/res/values-sw/strings.xml
index f02a769..123558b7 100644
--- a/packages/DocumentsUI/res/values-sw/strings.xml
+++ b/packages/DocumentsUI/res/values-sw/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Ficha usuli"</string>
<string name="save_error" msgid="6167009778003223664">"Imeshindwa kuhifadhi hati"</string>
<string name="create_error" msgid="3735649141335444215">"Ilishindwa kuunda folda"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Hivi karibuni"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bila malipo"</string>
<string name="root_type_service" msgid="2178854894416775409">"Huduma za hifadhi"</string>
diff --git a/packages/DocumentsUI/res/values-th/strings.xml b/packages/DocumentsUI/res/values-th/strings.xml
index cfcaadf..503bb4e 100644
--- a/packages/DocumentsUI/res/values-th/strings.xml
+++ b/packages/DocumentsUI/res/values-th/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"ซ่อนราก"</string>
<string name="save_error" msgid="6167009778003223664">"การบันทึกเอกสารล้มเหลว"</string>
<string name="create_error" msgid="3735649141335444215">"การสร้างโฟลเดอร์ล้มเหลว"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"ล่าสุด"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"ว่าง <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"บริการที่เก็บข้อมูล"</string>
diff --git a/packages/DocumentsUI/res/values-tl/strings.xml b/packages/DocumentsUI/res/values-tl/strings.xml
index 8df51f5..cf46bba 100644
--- a/packages/DocumentsUI/res/values-tl/strings.xml
+++ b/packages/DocumentsUI/res/values-tl/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Itago ang mga root"</string>
<string name="save_error" msgid="6167009778003223664">"Hindi na-save ang dokumento"</string>
<string name="create_error" msgid="3735649141335444215">"Hindi nagawa ang folder"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Kamakailan"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ang libre"</string>
<string name="root_type_service" msgid="2178854894416775409">"Mga serbisyo ng storage"</string>
diff --git a/packages/DocumentsUI/res/values-tr/strings.xml b/packages/DocumentsUI/res/values-tr/strings.xml
index 2696e02..d4db48d 100644
--- a/packages/DocumentsUI/res/values-tr/strings.xml
+++ b/packages/DocumentsUI/res/values-tr/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Kökleri sakla"</string>
<string name="save_error" msgid="6167009778003223664">"Doküman kaydedilemedi"</string>
<string name="create_error" msgid="3735649141335444215">"Klasör oluşturulamadı"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"En son"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> boş"</string>
<string name="root_type_service" msgid="2178854894416775409">"Depolama hizmetleri"</string>
diff --git a/packages/DocumentsUI/res/values-uk/strings.xml b/packages/DocumentsUI/res/values-uk/strings.xml
index 0e0c7fb..f87b6a2 100644
--- a/packages/DocumentsUI/res/values-uk/strings.xml
+++ b/packages/DocumentsUI/res/values-uk/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Сховати кореневі каталоги"</string>
<string name="save_error" msgid="6167009778003223664">"Не вдалося зберегти документ"</string>
<string name="create_error" msgid="3735649141335444215">"Помилка створення папки"</string>
+ <string name="query_error" msgid="1222448261663503501">"Помилка надсилання запиту на документи"</string>
<string name="root_recent" msgid="4470053704320518133">"Останні"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> вільного місця"</string>
<string name="root_type_service" msgid="2178854894416775409">"Онлайн-сховища"</string>
diff --git a/packages/DocumentsUI/res/values-vi/strings.xml b/packages/DocumentsUI/res/values-vi/strings.xml
index 0f900ff..915fd24 100644
--- a/packages/DocumentsUI/res/values-vi/strings.xml
+++ b/packages/DocumentsUI/res/values-vi/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"Ẩn gốc"</string>
<string name="save_error" msgid="6167009778003223664">"Không lưu tài liệu được"</string>
<string name="create_error" msgid="3735649141335444215">"Không thể tạo thư mục"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"Gần đây"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> còn trống"</string>
<string name="root_type_service" msgid="2178854894416775409">"Dịch vụ lưu trữ"</string>
diff --git a/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
index c5f59c9..93678b1 100644
--- a/packages/DocumentsUI/res/values-zh-rCN/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"隐藏根目录"</string>
<string name="save_error" msgid="6167009778003223664">"无法保存文档"</string>
<string name="create_error" msgid="3735649141335444215">"无法创建文件夹"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"最近"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"可用空间:<xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"存储服务"</string>
diff --git a/packages/DocumentsUI/res/values-zh-rHK/strings.xml b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
index 4373ef6..09c40c9 100644
--- a/packages/DocumentsUI/res/values-zh-rHK/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"隱藏根目錄"</string>
<string name="save_error" msgid="6167009778003223664">"無法儲存文件"</string>
<string name="create_error" msgid="3735649141335444215">"無法建立資料夾"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"近期用過"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"可用空間:<xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"儲存空間服務"</string>
diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
index e1fadff..439e92a 100644
--- a/packages/DocumentsUI/res/values-zh-rTW/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
@@ -37,6 +37,8 @@
<string name="drawer_close" msgid="7602734368552123318">"隱藏根目錄"</string>
<string name="save_error" msgid="6167009778003223664">"無法儲存文件"</string>
<string name="create_error" msgid="3735649141335444215">"無法建立資料夾"</string>
+ <!-- no translation found for query_error (1222448261663503501) -->
+ <skip />
<string name="root_recent" msgid="4470053704320518133">"最近使用過的項目"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"可用空間:<xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"儲存空間服務"</string>
diff --git a/packages/DocumentsUI/res/values-zu/strings.xml b/packages/DocumentsUI/res/values-zu/strings.xml
index 900007f..12c0b56 100644
--- a/packages/DocumentsUI/res/values-zu/strings.xml
+++ b/packages/DocumentsUI/res/values-zu/strings.xml
@@ -37,6 +37,7 @@
<string name="drawer_close" msgid="7602734368552123318">"Fihla izimpande"</string>
<string name="save_error" msgid="6167009778003223664">"Yehlulekile ukulondoloza idokhumenti"</string>
<string name="create_error" msgid="3735649141335444215">"Yehlulekile ukudala ifolda"</string>
+ <string name="query_error" msgid="1222448261663503501">"Ihlulekile ukubuza amadokhumenti"</string>
<string name="root_recent" msgid="4470053704320518133">"Okwakamuva"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> okhululekile"</string>
<string name="root_type_service" msgid="2178854894416775409">"Amasevisi wesitoreji"</string>
diff --git a/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png
new file mode 100644
index 0000000..3819029
--- /dev/null
+++ b/packages/Keyguard/res/drawable-hdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.png
deleted file mode 100644
index d7a8cfc..0000000
--- a/packages/Keyguard/res/drawable-hdpi/ic_lockscreen_alarm.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png
new file mode 100644
index 0000000..2aeedaf
--- /dev/null
+++ b/packages/Keyguard/res/drawable-mdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.png
deleted file mode 100644
index 330ade1..0000000
--- a/packages/Keyguard/res/drawable-mdpi/ic_lockscreen_alarm.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png
new file mode 100644
index 0000000..e28b3f6
--- /dev/null
+++ b/packages/Keyguard/res/drawable-sw600dp-hdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png
new file mode 100644
index 0000000..f727d01
--- /dev/null
+++ b/packages/Keyguard/res/drawable-sw600dp-mdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png
new file mode 100644
index 0000000..d9c0623
--- /dev/null
+++ b/packages/Keyguard/res/drawable-sw600dp-xhdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png
new file mode 100644
index 0000000..a36bf1f
--- /dev/null
+++ b/packages/Keyguard/res/drawable-sw600dp-xxhdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png
new file mode 100644
index 0000000..0290bdc
--- /dev/null
+++ b/packages/Keyguard/res/drawable-xhdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.png b/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.png
deleted file mode 100644
index e6cceef..0000000
--- a/packages/Keyguard/res/drawable-xhdpi/ic_lockscreen_alarm.png
+++ /dev/null
Binary files differ
diff --git a/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png b/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png
new file mode 100644
index 0000000..66968e8
--- /dev/null
+++ b/packages/Keyguard/res/drawable-xxhdpi/ic_alarm_small.png
Binary files differ
diff --git a/packages/Keyguard/res/layout-land/keyguard_status_area.xml b/packages/Keyguard/res/layout-land/keyguard_status_area.xml
deleted file mode 100644
index d450c5c..0000000
--- a/packages/Keyguard/res/layout-land/keyguard_status_area.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 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.
-*/
--->
-
-<!-- This is a view that shows general status information in Keyguard. -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/keyguard_status_area"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:layout_marginTop="-16dp"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/kg_status_date_font_size"
- android:textAllCaps="@bool/kg_use_all_caps"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:layout_marginTop="28dp"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearance"
- android:textSize="@dimen/kg_status_line_font_size"
- android:drawablePadding="4dip"
- android:textAllCaps="@bool/kg_use_all_caps"
- />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/packages/Keyguard/res/layout-port/keyguard_status_area.xml b/packages/Keyguard/res/layout-port/keyguard_status_area.xml
deleted file mode 100644
index af0d2e8..0000000
--- a/packages/Keyguard/res/layout-port/keyguard_status_area.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 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.
-*/
--->
-
-<!-- This is a view that shows general status information in Keyguard. -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/keyguard_status_area"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:orientation="vertical">
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="0dp"
- android:layout_gravity="right">
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/kg_status_date_font_size"
- android:textAllCaps="@bool/kg_use_all_caps"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearance"
- android:textSize="@dimen/kg_status_line_font_size"
- android:drawablePadding="4dip"
- android:textAllCaps="@bool/kg_use_all_caps"
- />
- </LinearLayout>
-
-</LinearLayout>
diff --git a/packages/Keyguard/res/layout/keyguard_status_area.xml b/packages/Keyguard/res/layout/keyguard_status_area.xml
new file mode 100644
index 0000000..d1f3873
--- /dev/null
+++ b/packages/Keyguard/res/layout/keyguard_status_area.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- This is a view that shows general status information in Keyguard. -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center">
+ <TextClock android:id="@+id/date_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/clock_white"
+ android:format12Hour="@string/abbrev_wday_month_day_no_year"
+ android:format24Hour="@string/abbrev_wday_month_day_no_year"
+ style="@style/widget_label"
+ android:gravity="center"
+ />
+ <TextView android:id="@+id/alarm_status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:drawablePadding="2dip"
+ android:drawableLeft="@drawable/ic_alarm_small"
+ android:drawableStart="@drawable/ic_alarm_small"
+ android:textColor="@color/clock_gray"
+ style="@style/widget_label"
+ android:layout_marginLeft="8dip"
+ android:layout_marginStart="8dip"
+ android:gravity="center"
+ android:visibility="gone"
+ />
+</LinearLayout>
diff --git a/packages/Keyguard/res/layout/keyguard_status_view.xml b/packages/Keyguard/res/layout/keyguard_status_view.xml
index 2304d9f..5857fc2 100644
--- a/packages/Keyguard/res/layout/keyguard_status_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_status_view.xml
@@ -35,34 +35,26 @@
android:layout_height="match_parent"
android:gravity="center_horizontal|top"
android:contentDescription="@string/keyguard_accessibility_status">
-
- <LinearLayout android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top"
- android:orientation="vertical"
- android:focusable="true">
- <com.android.keyguard.ClockView
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:orientation="vertical"
+ android:focusable="true">
+ <TextClock
android:id="@+id/clock_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/kg_status_line_font_right_margin"
- android:layout_gravity="right">
-
- <TextView android:id="@+id/clock_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/kg_status_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="#ffffffff"
- android:drawablePadding="2dip"
- />
-
- </com.android.keyguard.ClockView>
+ android:layout_gravity="center_horizontal|top"
+ android:textColor="@color/clock_white"
+ android:singleLine="true"
+ style="@style/widget_big_thin"
+ android:format12Hour="@string/keyguard_widget_12_hours_format"
+ android:format24Hour="@string/keyguard_widget_24_hours_format"
+ android:baselineAligned="true"
+ android:layout_marginBottom="@dimen/bottom_text_spacing_digital" />
<include layout="@layout/keyguard_status_area" />
</LinearLayout>
-
</com.android.keyguard.KeyguardStatusView>
</com.android.keyguard.KeyguardWidgetFrame>
diff --git a/packages/Keyguard/res/layout/keyguard_transport_control_view.xml b/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
index 801999a..81c7425 100644
--- a/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_transport_control_view.xml
@@ -22,34 +22,133 @@
android:gravity="center_horizontal"
android:id="@+id/keyguard_transport_control">
- <!-- Use ImageView for its cropping features; otherwise could be android:background -->
- <ImageView
- android:id="@+id/albumart"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="fill"
- android:scaleType="centerCrop"
- android:adjustViewBounds="false"
- android:contentDescription="@string/keygaurd_accessibility_media_controls" />
-
-
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="bottom">
- <TextView
- android:id="@+id/title"
+ android:layout_gravity="top"
+ android:gravity="center">
+ <ImageView
+ android:id="@+id/badge"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:scaleType="fitCenter" />
+ <FrameLayout
+ android:id="@+id/info_container"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip"
- android:gravity="center_horizontal"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
+ android:layout_height="wrap_content">
+ <LinearLayout
+ android:id="@+id/metadata_container"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center">
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:gravity="center_horizontal"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:fontFamily="sans-serif-light" />
+ <TextView
+ android:id="@+id/artist_album"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:gravity="center_horizontal"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary" />
+ </LinearLayout>
+ <RelativeLayout
+ android:id="@+id/transient_seek"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:visibility="invisible">
+ <SeekBar
+ android:id="@+id/transient_seek_bar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ <TextView
+ android:id="@+id/transient_seek_time_elapsed"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_below="@id/transient_seek_bar"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textSize="12dp" />
+ <TextView
+ android:id="@+id/transient_seek_time_remaining"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_below="@id/transient_seek_bar"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textSize="12dp" />
+ </RelativeLayout>
+ <LinearLayout
+ android:id="@+id/transient_rating"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:visibility="invisible">
+ <RatingBar
+ android:id="@+id/transient_rating_bar_stars"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+ <LinearLayout
+ android:id="@+id/transient_rating_thumbs"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1">
+ <ImageButton
+ android:id="@+id/btn_thumbs_up"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:src="@drawable/ic_media_previous"
+ android:background="?android:attr/selectableItemBackground"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
+ android:contentDescription="@string/keyguard_accessibility_transport_thumbs_up_description"/>
+ </FrameLayout>
+ <FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1">
+ <ImageButton
+ android:id="@+id/btn_thumbs_down"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:src="@drawable/ic_media_next"
+ android:background="?android:attr/selectableItemBackground"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
+ android:contentDescription="@string/keyguard_accessibility_transport_thumbs_down_description"/>
+ </FrameLayout>
+ </LinearLayout>
+ <ToggleButton
+ android:id="@+id/transient_rating_heart"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="invisible"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
+ android:contentDescription="@string/keyguard_accessibility_transport_heart_description" />
+ </LinearLayout>
+ </FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -59,45 +158,45 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
- <ImageView
+ <ImageButton
android:id="@+id/btn_prev"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_media_previous"
- android:clickable="true"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
android:contentDescription="@string/keyguard_accessibility_transport_prev_description"/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
- <ImageView
+ <ImageButton
android:id="@+id/btn_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:clickable="true"
android:src="@drawable/ic_media_play"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
android:contentDescription="@string/keyguard_accessibility_transport_play_description"/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1">
- <ImageView
+ <ImageButton
android:id="@+id/btn_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:clickable="true"
android:src="@drawable/ic_media_next"
android:background="?android:attr/selectableItemBackground"
- android:padding="10dip"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
android:contentDescription="@string/keyguard_accessibility_transport_next_description"/>
</FrameLayout>
</LinearLayout>
diff --git a/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml b/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml
index 294c386..58b5b27 100644
--- a/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml
+++ b/packages/Keyguard/res/layout/keyguard_widget_remove_drop_target.xml
@@ -26,7 +26,7 @@
android:drawablePadding="4dp"
android:text="@string/kg_reordering_delete_drop_target_text"
android:textColor="#FFF"
- android:textSize="13sp"
+ android:textSize="12dp"
android:shadowColor="#000"
android:shadowDy="1.0"
android:shadowRadius="1.0"
diff --git a/packages/Keyguard/res/values-ca/strings.xml b/packages/Keyguard/res/values-ca/strings.xml
index 77c44ea..cf750ab 100644
--- a/packages/Keyguard/res/values-ca/strings.xml
+++ b/packages/Keyguard/res/values-ca/strings.xml
@@ -73,7 +73,7 @@
<string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botó de parada"</string>
<string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Desbloqueja per continuar"</string>
<string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"S\'ha cancel·lat l\'inici"</string>
- <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Deixa anar <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> perquè se suprimeixi."</string>
+ <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Deixa anar <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> per suprimir-lo."</string>
<string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"No se suprimirà <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
diff --git a/packages/Keyguard/res/values-land/dimens.xml b/packages/Keyguard/res/values-land/dimens.xml
index 64e043c..bf30332 100644
--- a/packages/Keyguard/res/values-land/dimens.xml
+++ b/packages/Keyguard/res/values-land/dimens.xml
@@ -19,17 +19,6 @@
-->
<resources>
- <!-- Default height of a key in the password keyboard for alpha -->
- <dimen name="password_keyboard_key_height_alpha">47dip</dimen>
- <!-- Default height of a key in the password keyboard for numeric -->
- <dimen name="password_keyboard_key_height_numeric">50dip</dimen>
- <!-- Default correction for the space key in the password keyboard -->
- <dimen name="password_keyboard_spacebar_vertical_correction">2dip</dimen>
- <dimen name="preference_widget_width">72dp</dimen>
-
- <!-- Size of clock font in LockScreen on Unsecure unlock screen. -->
- <dimen name="keyguard_lockscreen_clock_font_size">70sp</dimen>
-
<!-- Shift emergency button from the left edge by this amount. Used by landscape layout on
phones -->
<dimen name="kg_emergency_button_shift">30dp</dimen>
diff --git a/packages/Keyguard/res/values-large/dimens.xml b/packages/Keyguard/res/values-large/dimens.xml
index 8cd614d..0b5d4ad 100644
--- a/packages/Keyguard/res/values-large/dimens.xml
+++ b/packages/Keyguard/res/values-large/dimens.xml
@@ -17,13 +17,6 @@
*/
-->
<resources>
- <!-- Default height of a key in the password keyboard for alpha -->
- <dimen name="password_keyboard_key_height_alpha">75dip</dimen>
- <!-- Default height of a key in the password keyboard for numeric -->
- <dimen name="password_keyboard_key_height_numeric">75dip</dimen>
- <!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
- <dimen name="password_keyboard_height">48.0mm</dimen>
-
<!-- Minimum width of the search view text entry area. -->
<dimen name="search_view_text_min_width">192dip</dimen>
diff --git a/packages/Keyguard/res/values-sl/strings.xml b/packages/Keyguard/res/values-sl/strings.xml
index b893422..7c791db 100644
--- a/packages/Keyguard/res/values-sl/strings.xml
+++ b/packages/Keyguard/res/values-sl/strings.xml
@@ -73,7 +73,7 @@
<string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Gumb za ustavitev"</string>
<string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Za nadaljevanje odklenite"</string>
<string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Zagon je preklican"</string>
- <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Povlecite pripomoček <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>, da ga izbrišete."</string>
+ <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Izpustite pripomoček <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>, da ga izbrišete."</string>
<string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Pripomoček <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ne bo izbrisan."</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
diff --git a/packages/Keyguard/res/values-sw600dp/dimens.xml b/packages/Keyguard/res/values-sw600dp/dimens.xml
index c0e3937..f8a1362 100644
--- a/packages/Keyguard/res/values-sw600dp/dimens.xml
+++ b/packages/Keyguard/res/values-sw600dp/dimens.xml
@@ -18,9 +18,6 @@
*/
-->
<resources>
- <!-- Size of clock font in LockScreen. -->
- <dimen name="keyguard_pattern_unlock_clock_font_size">112sp</dimen>
-
<!-- Size of lockscreen outerring on unsecure unlock LockScreen -->
<dimen name="keyguard_lockscreen_outerring_diameter">364dp</dimen>
@@ -37,9 +34,6 @@
<!-- Size of the clock font in keyguard's status view -->
<dimen name="kg_status_clock_font_size">141dp</dimen>
- <!-- Size of the date font in keyguard's status view -->
- <dimen name="kg_status_date_font_size">25.5dp</dimen>
-
<!-- Size of the generic status lines keyguard's status view -->
<dimen name="kg_status_line_font_size">16sp</dimen>
@@ -68,4 +62,8 @@
<!-- Margin around the various security views -->
<dimen name="keyguard_muliuser_selector_margin">12dp</dimen>
+ <!-- Overload default clock widget parameters -->
+ <dimen name="widget_label_font_size">16dp</dimen>
+ <dimen name="widget_big_font_size">141dp</dimen>
+
</resources>
diff --git a/packages/Keyguard/res/values-sw720dp/dimens.xml b/packages/Keyguard/res/values-sw720dp/dimens.xml
index b29ac22..0790b79 100644
--- a/packages/Keyguard/res/values-sw720dp/dimens.xml
+++ b/packages/Keyguard/res/values-sw720dp/dimens.xml
@@ -21,9 +21,6 @@
<!-- Size of the clock font in keyguard's status view -->
<dimen name="kg_status_clock_font_size">188dp</dimen>
- <!-- Size of the date font in keyguard's status view -->
- <dimen name="kg_status_date_font_size">34dp</dimen>
-
<!-- Size of the generic status lines keyguard's status view -->
<dimen name="kg_status_line_font_size">19sp</dimen>
diff --git a/packages/Keyguard/res/values-xlarge/dimens.xml b/packages/Keyguard/res/values-xlarge/dimens.xml
deleted file mode 100644
index b8cf287..0000000
--- a/packages/Keyguard/res/values-xlarge/dimens.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/dimens.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>
- <!-- Default height of a key in the password keyboard for alpha -->
- <dimen name="password_keyboard_key_height_alpha">75dip</dimen>
- <!-- Default height of a key in the password keyboard for numeric -->
- <dimen name="password_keyboard_key_height_numeric">75dip</dimen>
- <!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
- <dimen name="password_keyboard_height">48.0mm</dimen>
-</resources>
diff --git a/packages/Keyguard/res/values-zh-rTW/strings.xml b/packages/Keyguard/res/values-zh-rTW/strings.xml
index 2c24c52..42fffe6 100644
--- a/packages/Keyguard/res/values-zh-rTW/strings.xml
+++ b/packages/Keyguard/res/values-zh-rTW/strings.xml
@@ -73,7 +73,7 @@
<string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"[停止] 按鈕"</string>
<string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"先解鎖才能繼續操作"</string>
<string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"已取消啟動"</string>
- <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"將「<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>」拖放到刪除選單中。"</string>
+ <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"拖放「<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>」即可將其刪除。"</string>
<string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"「<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>」將不會遭到刪除。"</string>
<string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
<string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
diff --git a/packages/Keyguard/res/values/alias.xml b/packages/Keyguard/res/values/alias.xml
index c964391..b22311e 100644
--- a/packages/Keyguard/res/values/alias.xml
+++ b/packages/Keyguard/res/values/alias.xml
@@ -34,9 +34,6 @@
<!-- Alias used to reference framework drawable in keyguard. -->
<item type="drawable" name="ic_contact_picture">@*android:drawable/ic_contact_picture</item>
- <!-- Alias used to reference framework drawable in keyguard. -->
- <item type="drawable" name="ic_lock_idle_alarm">@*android:drawable/ic_lock_idle_alarm</item>
-
<!-- Alias used to reference framework "OK" string in keyguard. -->
<item type="string" name="ok">@*android:string/ok</item>
@@ -52,4 +49,4 @@
<!-- Alias used to reference framework activity duration. -->
<item type="integer" name="config_activityDefaultDur">@*android:integer/config_activityDefaultDur</item>
-</resources>
\ No newline at end of file
+</resources>
diff --git a/packages/Keyguard/res/values/colors.xml b/packages/Keyguard/res/values/colors.xml
index 0c56a43..a9e8061 100644
--- a/packages/Keyguard/res/values/colors.xml
+++ b/packages/Keyguard/res/values/colors.xml
@@ -23,4 +23,8 @@
<!-- FaceLock -->
<color name="facelock_spotlight_mask">#CC000000</color>
+
+ <!-- Clock -->
+ <color name="clock_white">#ffffffff</color>
+ <color name="clock_gray">#80ffffff</color>
</resources>
diff --git a/packages/Keyguard/res/values/dimens.xml b/packages/Keyguard/res/values/dimens.xml
index ce72f43..8039b09 100644
--- a/packages/Keyguard/res/values/dimens.xml
+++ b/packages/Keyguard/res/values/dimens.xml
@@ -18,17 +18,6 @@
*/
-->
<resources>
- <!-- Default height of a key in the password keyboard for alpha (used by keyguard) -->
- <dimen name="password_keyboard_key_height_alpha">56dip</dimen>
- <!-- Default height of a key in the password keyboard for numeric (used by keyguard) -->
- <dimen name="password_keyboard_key_height_numeric">56dip</dimen>
- <!-- Default correction for the space key in the password keyboard (used by keyguard) -->
- <dimen name="password_keyboard_spacebar_vertical_correction">4dip</dimen>
- <!-- Default horizontal gap between keys in the password keyboard (used by keyguard) -->
- <dimen name="password_keyboard_horizontalGap">3dip</dimen>
- <!-- Default vertical gap between keys in the password keyboard (used by keyguard) -->
- <dimen name="password_keyboard_verticalGap">9dip</dimen>
-
<!-- Size of lockscreen outerring on unsecure unlock LockScreen -->
<dimen name="keyguard_lockscreen_outerring_diameter">270dp</dimen>
@@ -47,9 +36,6 @@
<!-- Default distance from each snap target that GlowPadView considers a "hit" -->
<dimen name="glowpadview_inner_radius">15dip</dimen>
- <!-- Size of clock font in LockScreen on Unsecure unlock screen. -->
- <dimen name="keyguard_lockscreen_clock_font_size">80dip</dimen>
-
<!-- Size of status line font on Unsecure unlock LockScreen. -->
<dimen name="keyguard_lockscreen_status_line_font_size">14dip</dimen>
@@ -84,11 +70,8 @@
<!-- Size of the clock font in keyguard's status view -->
<dimen name="kg_status_clock_font_size">75dp</dimen>
- <!-- Size of the date font in keyguard's status view -->
- <dimen name="kg_status_date_font_size">15dp</dimen>
-
<!-- Size of the generic status lines keyguard's status view -->
- <dimen name="kg_status_line_font_size">13dp</dimen>
+ <dimen name="kg_status_line_font_size">12dp</dimen>
<!-- Size of margin on the right of keyguard's status view -->
<dimen name="kg_status_line_font_right_margin">16dp</dimen>
@@ -166,5 +149,12 @@
used on tablets; on phones, this size is determined by the space left by the
security mode. -->
<dimen name="kg_small_widget_height">160dp</dimen>
+
+ <!-- Default clock parameters -->
+ <dimen name="bottom_text_spacing_digital">-8dp</dimen>
+ <dimen name="label_font_size">14dp</dimen>
+ <dimen name="widget_label_font_size">12dp</dimen>
+ <dimen name="widget_big_font_size">80dp</dimen>
+ <dimen name="big_font_size">120dp</dimen>
</resources>
diff --git a/packages/Keyguard/res/values/donottranslate.xml b/packages/Keyguard/res/values/donottranslate.xml
new file mode 100644
index 0000000..71d3ed7
--- /dev/null
+++ b/packages/Keyguard/res/values/donottranslate.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- String matching the lock screen format for displaying the date. -->
+ <string name="abbrev_wday_month_day_no_year">EEE, MMMM d</string>
+ <!-- Format for describing the date, for accessibility. -->
+ <string name="full_wday_month_day_no_year">EEEE, MMMM d</string>
+</resources>
diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml
index 89e7240..abc4483 100644
--- a/packages/Keyguard/res/values/strings.xml
+++ b/packages/Keyguard/res/values/strings.xml
@@ -94,6 +94,10 @@
progress dialog in the meantime. this is the emssage. -->
<string name="keyguard_sim_unlock_progress_dialog_message">Unlocking SIM card\u2026</string>
+ <!-- Time format strings for fall-back clock widget -->
+ <string name="keyguard_widget_12_hours_format" translatable="false">h:mm</string>
+ <!-- Time format strings for fall-back clock widget -->
+ <string name="keyguard_widget_24_hours_format" translatable="false">kk:mm</string>
<!-- Accessibility description sent when user changes the current lock screen widget. [CHAR_LIMIT=none] -->
<string name="keyguard_accessibility_widget_changed">%1$s. Widget %2$d of %3$d.</string>
@@ -148,6 +152,13 @@
<string name="keyguard_accessibility_transport_play_description">Play button</string>
<!-- Shown on transport control of lockscreen. Pressing button pauses playback -->
<string name="keyguard_accessibility_transport_stop_description">Stop button</string>
+ <!-- Shown on transport control of lockscreen. Pressing button rates the track as "thumbs up." -->
+ <string name="keyguard_accessibility_transport_thumbs_up_description">Thumbs up</string>
+ <!-- Shown on transport control of lockscreen. Pressing button rates the track as "thumbs down." -->
+ <string name="keyguard_accessibility_transport_thumbs_down_description">Thumbs down</string>
+ <!-- Shown on transport control of lockscreen. Pressing button toggles the "heart" rating. -->
+ <string name="keyguard_accessibility_transport_heart_description">Heart</string>
+
<!-- Accessibility description for when the device prompts the user to dismiss keyguard
in order to complete an action. This will be followed by a message about the current
diff --git a/packages/Keyguard/res/values/styles.xml b/packages/Keyguard/res/values/styles.xml
index a31f708..44f560f 100644
--- a/packages/Keyguard/res/values/styles.xml
+++ b/packages/Keyguard/res/values/styles.xml
@@ -52,5 +52,20 @@
<item name="android:windowEnterAnimation">@anim/lock_screen_enter</item>
<item name="android:windowExitAnimation">@anim/lock_screen_exit</item>
</style>
+
+ <!-- Built-in clock widget stuff -->
+ <style name="widget_label">
+ <item name="android:textStyle">bold</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ <item name="android:textSize">@dimen/kg_status_line_font_size</item>
+ </style>
+ <style name="big_thin">
+ <item name="android:textSize">@dimen/big_font_size</item>
+ <item name="android:fontFamily">sans-serif-thin</item>
+ </style>
+ <style name="widget_big_thin" parent="big_thin">
+ <item name="android:textSize">@dimen/widget_big_font_size</item>
+ </style>
</resources>
diff --git a/packages/Keyguard/src/com/android/keyguard/ClockView.java b/packages/Keyguard/src/com/android/keyguard/ClockView.java
deleted file mode 100644
index ad85e9a..0000000
--- a/packages/Keyguard/src/com/android/keyguard/ClockView.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.keyguard;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.ContentObserver;
-import android.graphics.Typeface;
-import android.os.Handler;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.text.format.DateFormat;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import java.lang.ref.WeakReference;
-import java.text.DateFormatSymbols;
-import java.util.Calendar;
-
-/**
- * Displays the time
- */
-public class ClockView extends RelativeLayout {
- private static final String ANDROID_CLOCK_FONT_FILE = "/system/fonts/AndroidClock.ttf";
- private final static String M12 = "h:mm";
- private final static String M24 = "HH:mm";
-
- private Calendar mCalendar;
- private String mFormat;
- private TextView mTimeView;
- private AmPm mAmPm;
- private ContentObserver mFormatChangeObserver;
- private int mAttached = 0; // for debugging - tells us whether attach/detach is unbalanced
-
- /* called by system on minute ticks */
- private final Handler mHandler = new Handler();
- private BroadcastReceiver mIntentReceiver;
-
- private static class TimeChangedReceiver extends BroadcastReceiver {
- private WeakReference<ClockView> mClock;
- private Context mContext;
-
- public TimeChangedReceiver(ClockView clock) {
- mClock = new WeakReference<ClockView>(clock);
- mContext = clock.getContext();
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- // Post a runnable to avoid blocking the broadcast.
- final boolean timezoneChanged =
- intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED);
- final ClockView clock = mClock.get();
- if (clock != null) {
- clock.mHandler.post(new Runnable() {
- public void run() {
- if (timezoneChanged) {
- clock.mCalendar = Calendar.getInstance();
- }
- clock.updateTime();
- }
- });
- } else {
- try {
- mContext.unregisterReceiver(this);
- } catch (RuntimeException e) {
- // Shouldn't happen
- }
- }
- }
- };
-
- static class AmPm {
- private TextView mAmPmTextView;
- private String mAmString, mPmString;
-
- AmPm(View parent, Typeface tf) {
- // No longer used, uncomment if we decide to use AM/PM indicator again
- // mAmPmTextView = (TextView) parent.findViewById(R.id.am_pm);
- if (mAmPmTextView != null && tf != null) {
- mAmPmTextView.setTypeface(tf);
- }
-
- String[] ampm = new DateFormatSymbols().getAmPmStrings();
- mAmString = ampm[0];
- mPmString = ampm[1];
- }
-
- void setShowAmPm(boolean show) {
- if (mAmPmTextView != null) {
- mAmPmTextView.setVisibility(show ? View.VISIBLE : View.GONE);
- }
- }
-
- void setIsMorning(boolean isMorning) {
- if (mAmPmTextView != null) {
- mAmPmTextView.setText(isMorning ? mAmString : mPmString);
- }
- }
- }
-
- private static class FormatChangeObserver extends ContentObserver {
- private WeakReference<ClockView> mClock;
- private Context mContext;
- public FormatChangeObserver(ClockView clock) {
- super(new Handler());
- mClock = new WeakReference<ClockView>(clock);
- mContext = clock.getContext();
- }
- @Override
- public void onChange(boolean selfChange) {
- ClockView digitalClock = mClock.get();
- if (digitalClock != null) {
- digitalClock.setDateFormat();
- digitalClock.updateTime();
- } else {
- try {
- mContext.getContentResolver().unregisterContentObserver(this);
- } catch (RuntimeException e) {
- // Shouldn't happen
- }
- }
- }
- }
-
- public ClockView(Context context) {
- this(context, null);
- }
-
- public ClockView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- mTimeView = (TextView) findViewById(R.id.clock_text);
- mTimeView.setTypeface(Typeface.createFromFile(ANDROID_CLOCK_FONT_FILE));
- mAmPm = new AmPm(this, null);
- mCalendar = Calendar.getInstance();
- setDateFormat();
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
-
- mAttached++;
-
- /* monitor time ticks, time changed, timezone */
- if (mIntentReceiver == null) {
- mIntentReceiver = new TimeChangedReceiver(this);
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_TIME_TICK);
- filter.addAction(Intent.ACTION_TIME_CHANGED);
- filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
- mContext.registerReceiverAsUser(mIntentReceiver, UserHandle.OWNER, filter, null, null );
- }
-
- /* monitor 12/24-hour display preference */
- if (mFormatChangeObserver == null) {
- mFormatChangeObserver = new FormatChangeObserver(this);
- mContext.getContentResolver().registerContentObserver(
- Settings.System.CONTENT_URI, true, mFormatChangeObserver);
- }
-
- updateTime();
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
-
- mAttached--;
-
- if (mIntentReceiver != null) {
- mContext.unregisterReceiver(mIntentReceiver);
- }
- if (mFormatChangeObserver != null) {
- mContext.getContentResolver().unregisterContentObserver(
- mFormatChangeObserver);
- }
-
- mFormatChangeObserver = null;
- mIntentReceiver = null;
- }
-
- void updateTime(Calendar c) {
- mCalendar = c;
- updateTime();
- }
-
- public void updateTime() {
- mCalendar.setTimeInMillis(System.currentTimeMillis());
-
- CharSequence newTime = DateFormat.format(mFormat, mCalendar);
- mTimeView.setText(newTime);
- mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0);
- }
-
- private void setDateFormat() {
- mFormat = android.text.format.DateFormat.is24HourFormat(getContext()) ? M24 : M12;
- mAmPm.setShowAmPm(mFormat.equals(M12));
- }
-}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
index bc8c866..63aab4d 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
@@ -134,6 +134,10 @@
void userActivity();
}
+ interface TransportControlCallback {
+ void userActivity();
+ }
+
/*package*/ interface OnDismissAction {
/* returns true if the dismiss should be deferred */
boolean onDismiss();
@@ -1222,6 +1226,11 @@
LayoutInflater inflater = LayoutInflater.from(mContext);
mTransportControl = (KeyguardTransportControlView)
inflater.inflate(R.layout.keyguard_transport_control_view, this, false);
+ mTransportControl.setTransportControlCallback(new TransportControlCallback() {
+ public void userActivity() {
+ mViewMediatorCallback.userActivity();
+ }
+ });
}
return mTransportControl;
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
index 0289a1f..ffb619b 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
@@ -38,17 +38,9 @@
private static final boolean DEBUG = KeyguardViewMediator.DEBUG;
private static final String TAG = "KeyguardStatusView";
- public static final int LOCK_ICON = 0; // R.drawable.ic_lock_idle_lock;
- public static final int ALARM_ICON = R.drawable.ic_lock_idle_alarm;
- public static final int CHARGING_ICON = 0; //R.drawable.ic_lock_idle_charging;
- public static final int BATTERY_LOW_ICON = 0; //R.drawable.ic_lock_idle_low_battery;
-
- private SimpleDateFormat mDateFormat;
private LockPatternUtils mLockPatternUtils;
- private TextView mDateView;
private TextView mAlarmStatusView;
- private ClockView mClockView;
private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
@@ -81,21 +73,12 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- Resources res = getContext().getResources();
- final Locale locale = Locale.getDefault();
- final String datePattern = res.getString(R.string.system_ui_date_pattern);
- final String bestFormat = ICU.getBestDateTimePattern(datePattern, locale.toString());
- mDateFormat = new SimpleDateFormat(bestFormat, locale);
- mDateView = (TextView) findViewById(R.id.date);
+
mAlarmStatusView = (TextView) findViewById(R.id.alarm_status);
- mClockView = (ClockView) findViewById(R.id.clock_view);
mLockPatternUtils = new LockPatternUtils(getContext());
- // Use custom font in mDateView
- mDateView.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD);
-
// Required to get Marquee to work.
- final View marqueeViews[] = { mDateView, mAlarmStatusView };
+ final View marqueeViews[] = { mAlarmStatusView };
for (int i = 0; i < marqueeViews.length; i++) {
View v = marqueeViews[i];
if (v == null) {
@@ -107,8 +90,6 @@
}
protected void refresh() {
- mClockView.updateTime();
- refreshDate();
refreshAlarmStatus(); // might as well
}
@@ -117,17 +98,12 @@
String nextAlarm = mLockPatternUtils.getNextAlarm();
if (!TextUtils.isEmpty(nextAlarm)) {
mAlarmStatusView.setText(nextAlarm);
- mAlarmStatusView.setCompoundDrawablesWithIntrinsicBounds(ALARM_ICON, 0, 0, 0);
mAlarmStatusView.setVisibility(View.VISIBLE);
} else {
mAlarmStatusView.setVisibility(View.GONE);
}
}
- void refreshDate() {
- mDateView.setText(mDateFormat.format(new Date()));
- }
-
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
index 2a5f979..83d8ab1 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
@@ -16,191 +16,263 @@
package com.android.keyguard;
-import android.app.PendingIntent;
-import android.app.PendingIntent.CanceledException;
import android.content.Context;
-import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
import android.graphics.Bitmap;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.drawable.Drawable;
import android.media.AudioManager;
-import android.media.IRemoteControlDisplay;
+import android.media.MediaMetadataEditor;
import android.media.MediaMetadataRetriever;
import android.media.RemoteControlClient;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
+import android.media.RemoteController;
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.RemoteException;
import android.os.SystemClock;
-import android.text.Spannable;
import android.text.TextUtils;
-import android.text.style.ForegroundColorSpan;
+import android.text.format.DateFormat;
+import android.transition.ChangeBounds;
+import android.transition.ChangeText;
+import android.transition.Fade;
+import android.transition.TransitionManager;
+import android.transition.TransitionSet;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
-import android.view.View.OnClickListener;
+import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
+import android.widget.SeekBar;
import android.widget.TextView;
-import java.lang.ref.WeakReference;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
/**
* This is the widget responsible for showing music controls in keyguard.
*/
-public class KeyguardTransportControlView extends FrameLayout implements OnClickListener {
+public class KeyguardTransportControlView extends FrameLayout {
- private static final int MSG_UPDATE_STATE = 100;
- private static final int MSG_SET_METADATA = 101;
- private static final int MSG_SET_TRANSPORT_CONTROLS = 102;
- private static final int MSG_SET_ARTWORK = 103;
- private static final int MSG_SET_GENERATION_ID = 104;
private static final int DISPLAY_TIMEOUT_MS = 5000; // 5s
+ private static final int RESET_TO_METADATA_DELAY = 5000;
protected static final boolean DEBUG = false;
protected static final String TAG = "TransportControlView";
- private ImageView mAlbumArt;
+ private static final boolean ANIMATE_TRANSITIONS = false;
+
+ private ViewGroup mMetadataContainer;
+ private ViewGroup mInfoContainer;
private TextView mTrackTitle;
+ private TextView mTrackArtistAlbum;
+
+ private View mTransientSeek;
+ private SeekBar mTransientSeekBar;
+ private TextView mTransientSeekTimeElapsed;
+ private TextView mTransientSeekTimeRemaining;
+
private ImageView mBtnPrev;
private ImageView mBtnPlay;
private ImageView mBtnNext;
- private int mClientGeneration;
private Metadata mMetadata = new Metadata();
- private boolean mAttached;
- private PendingIntent mClientIntent;
private int mTransportControlFlags;
private int mCurrentPlayState;
private AudioManager mAudioManager;
- private IRemoteControlDisplayWeak mIRCD;
+ private RemoteController mRemoteController;
+
+ private ImageView mBadge;
+
+ private boolean mSeekEnabled;
+ private boolean mUserSeeking;
+ private java.text.DateFormat mFormat;
/**
* The metadata which should be populated into the view once we've been attached
*/
- private Bundle mPopulateMetadataWhenAttached = null;
+ private RemoteController.MetadataEditor mPopulateMetadataWhenAttached = null;
- // This handler is required to ensure messages from IRCD are handled in sequence and on
- // the UI thread.
- private Handler mHandler = new Handler() {
+ private RemoteController.OnClientUpdateListener mRCClientUpdateListener =
+ new RemoteController.OnClientUpdateListener() {
@Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_UPDATE_STATE:
- if (mClientGeneration == msg.arg1) updatePlayPauseState(msg.arg2);
- break;
-
- case MSG_SET_METADATA:
- if (mClientGeneration == msg.arg1) updateMetadata((Bundle) msg.obj);
- break;
-
- case MSG_SET_TRANSPORT_CONTROLS:
- if (mClientGeneration == msg.arg1) updateTransportControls(msg.arg2);
- break;
-
- case MSG_SET_ARTWORK:
- if (mClientGeneration == msg.arg1) {
- mMetadata.bitmap = (Bitmap) msg.obj;
- KeyguardUpdateMonitor.getInstance(getContext()).dispatchSetBackground(
- mMetadata.bitmap);
- }
- break;
-
- case MSG_SET_GENERATION_ID:
- if (DEBUG) Log.v(TAG, "New genId = " + msg.arg1 + ", clearing = " + msg.arg2);
- mClientGeneration = msg.arg1;
- mClientIntent = (PendingIntent) msg.obj;
- break;
-
+ public void onClientChange(boolean clearing) {
+ if (clearing) {
+ clearMetadata();
}
}
- };
- /**
- * This class is required to have weak linkage to the current TransportControlView
- * because the remote process can hold a strong reference to this binder object and
- * we can't predict when it will be GC'd in the remote process. Without this code, it
- * would allow a heavyweight object to be held on this side of the binder when there's
- * no requirement to run a GC on the other side.
- */
- private static class IRemoteControlDisplayWeak extends IRemoteControlDisplay.Stub {
- private WeakReference<Handler> mLocalHandler;
-
- IRemoteControlDisplayWeak(Handler handler) {
- mLocalHandler = new WeakReference<Handler>(handler);
+ @Override
+ public void onClientPlaybackStateUpdate(int state) {
+ setSeekBarsEnabled(false);
+ updatePlayPauseState(state);
}
- public void setPlaybackState(int generationId, int state, long stateChangeTimeMs,
+ @Override
+ public void onClientPlaybackStateUpdate(int state, long stateChangeTimeMs,
long currentPosMs, float speed) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_UPDATE_STATE, generationId, state).sendToTarget();
- }
+ setSeekBarsEnabled(mMetadata != null && mMetadata.duration > 0);
+ updatePlayPauseState(state);
+ if (DEBUG) Log.d(TAG, "onClientPlaybackStateUpdate(state=" + state +
+ ", stateChangeTimeMs=" + stateChangeTimeMs + ", currentPosMs=" + currentPosMs +
+ ", speed=" + speed + ")");
}
- public void setMetadata(int generationId, Bundle metadata) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_METADATA, generationId, 0, metadata).sendToTarget();
- }
+ @Override
+ public void onClientTransportControlUpdate(int transportControlFlags) {
+ updateTransportControls(transportControlFlags);
}
- public void setTransportControlInfo(int generationId, int flags, int posCapabilities) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_TRANSPORT_CONTROLS, generationId, flags)
- .sendToTarget();
- }
+ @Override
+ public void onClientMetadataUpdate(RemoteController.MetadataEditor metadataEditor) {
+ updateMetadata(metadataEditor);
}
+ };
- public void setArtwork(int generationId, Bitmap bitmap) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_ARTWORK, generationId, 0, bitmap).sendToTarget();
- }
- }
-
- public void setAllMetadata(int generationId, Bundle metadata, Bitmap bitmap) {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_METADATA, generationId, 0, metadata).sendToTarget();
- handler.obtainMessage(MSG_SET_ARTWORK, generationId, 0, bitmap).sendToTarget();
- }
- }
-
- public void setCurrentClientId(int clientGeneration, PendingIntent mediaIntent,
- boolean clearing) throws RemoteException {
- Handler handler = mLocalHandler.get();
- if (handler != null) {
- handler.obtainMessage(MSG_SET_GENERATION_ID,
- clientGeneration, (clearing ? 1 : 0), mediaIntent).sendToTarget();
+ private final Runnable mUpdateSeekBars = new Runnable() {
+ public void run() {
+ if (updateSeekBars()) {
+ postDelayed(this, 1000);
}
}
};
+ private final Runnable mResetToMetadata = new Runnable() {
+ public void run() {
+ resetToMetadata();
+ }
+ };
+
+ private final OnClickListener mTransportCommandListener = new OnClickListener() {
+ public void onClick(View v) {
+ int keyCode = -1;
+ if (v == mBtnPrev) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS;
+ } else if (v == mBtnNext) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_NEXT;
+ } else if (v == mBtnPlay) {
+ keyCode = KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
+ }
+ if (keyCode != -1) {
+ sendMediaButtonClick(keyCode);
+ }
+ }
+ };
+
+ private final OnLongClickListener mTransportShowSeekBarListener = new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ if (mSeekEnabled) {
+ return tryToggleSeekBar();
+ }
+ return false;
+ }
+ };
+
+ private final SeekBar.OnSeekBarChangeListener mOnSeekBarChangeListener =
+ new SeekBar.OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ if (fromUser) {
+ scrubTo(progress);
+ delayResetToMetadata();
+ }
+ updateSeekDisplay();
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ mUserSeeking = true;
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ mUserSeeking = false;
+ }
+ };
+
+ private static final int TRANSITION_DURATION = 200;
+ private final TransitionSet mMetadataChangeTransition;
+
+ KeyguardHostView.TransportControlCallback mTransportControlCallback;
+
public KeyguardTransportControlView(Context context, AttributeSet attrs) {
super(context, attrs);
if (DEBUG) Log.v(TAG, "Create TCV " + this);
mAudioManager = new AudioManager(mContext);
mCurrentPlayState = RemoteControlClient.PLAYSTATE_NONE; // until we get a callback
- mIRCD = new IRemoteControlDisplayWeak(mHandler);
+ mRemoteController = new RemoteController(context);
+ mRemoteController.setOnClientUpdateListener(mRCClientUpdateListener);
+
+ final DisplayMetrics dm = context.getResources().getDisplayMetrics();
+ final int dim = Math.max(dm.widthPixels, dm.heightPixels);
+ mRemoteController.setArtworkConfiguration(true, dim, dim);
+
+ final ChangeText tc = new ChangeText();
+ tc.setChangeBehavior(ChangeText.CHANGE_BEHAVIOR_OUT_IN);
+ final TransitionSet inner = new TransitionSet();
+ inner.addTransition(tc).addTransition(new ChangeBounds());
+ final TransitionSet tg = new TransitionSet();
+ tg.addTransition(new Fade(Fade.OUT)).addTransition(inner).
+ addTransition(new Fade(Fade.IN));
+ tg.setOrdering(TransitionSet.ORDERING_SEQUENTIAL);
+ tg.setDuration(TRANSITION_DURATION);
+ mMetadataChangeTransition = tg;
}
private void updateTransportControls(int transportControlFlags) {
mTransportControlFlags = transportControlFlags;
+ setSeekBarsEnabled(
+ (transportControlFlags & RemoteControlClient.FLAG_KEY_MEDIA_POSITION_UPDATE) != 0);
+ }
+
+ void setSeekBarsEnabled(boolean enabled) {
+ if (enabled == mSeekEnabled) return;
+
+ mSeekEnabled = enabled;
+ if (mTransientSeek.getVisibility() == VISIBLE) {
+ mTransientSeek.setVisibility(INVISIBLE);
+ mMetadataContainer.setVisibility(VISIBLE);
+ mUserSeeking = false;
+ cancelResetToMetadata();
+ }
+ if (enabled) {
+ mUpdateSeekBars.run();
+ postDelayed(mUpdateSeekBars, 1000);
+ } else {
+ removeCallbacks(mUpdateSeekBars);
+ }
+ }
+
+ public void setTransportControlCallback(KeyguardHostView.TransportControlCallback
+ transportControlCallback) {
+ mTransportControlCallback = transportControlCallback;
}
@Override
public void onFinishInflate() {
super.onFinishInflate();
+ mInfoContainer = (ViewGroup) findViewById(R.id.info_container);
+ mMetadataContainer = (ViewGroup) findViewById(R.id.metadata_container);
+ mBadge = (ImageView) findViewById(R.id.badge);
mTrackTitle = (TextView) findViewById(R.id.title);
mTrackTitle.setSelected(true); // enable marquee
- mAlbumArt = (ImageView) findViewById(R.id.albumart);
+ mTrackArtistAlbum = (TextView) findViewById(R.id.artist_album);
+ mTrackArtistAlbum.setSelected(true);
+ mTransientSeek = findViewById(R.id.transient_seek);
+ mTransientSeekBar = (SeekBar) findViewById(R.id.transient_seek_bar);
+ mTransientSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangeListener);
+ mTransientSeekTimeElapsed = (TextView) findViewById(R.id.transient_seek_time_elapsed);
+ mTransientSeekTimeRemaining = (TextView) findViewById(R.id.transient_seek_time_remaining);
mBtnPrev = (ImageView) findViewById(R.id.btn_prev);
mBtnPlay = (ImageView) findViewById(R.id.btn_play);
mBtnNext = (ImageView) findViewById(R.id.btn_next);
final View buttons[] = { mBtnPrev, mBtnPlay, mBtnNext };
for (View view : buttons) {
- view.setOnClickListener(this);
+ view.setOnClickListener(mTransportCommandListener);
+ view.setOnLongClickListener(mTransportShowSeekBarListener);
}
}
@@ -212,32 +284,34 @@
updateMetadata(mPopulateMetadataWhenAttached);
mPopulateMetadataWhenAttached = null;
}
- if (!mAttached) {
- if (DEBUG) Log.v(TAG, "Registering TCV " + this);
- mAudioManager.registerRemoteControlDisplay(mIRCD);
- }
- mAttached = true;
+ if (DEBUG) Log.v(TAG, "Registering TCV " + this);
+ mAudioManager.registerRemoteController(mRemoteController);
}
@Override
- protected void onSizeChanged (int w, int h, int oldw, int oldh) {
- if (mAttached) {
- final DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
- int dim = Math.max(dm.widthPixels, dm.heightPixels);
- if (DEBUG) Log.v(TAG, "TCV uses bitmap size=" + dim);
- mAudioManager.remoteControlDisplayUsesBitmapSize(mIRCD, dim, dim);
- }
+ protected void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ final DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
+ final int dim = Math.max(dm.widthPixels, dm.heightPixels);
+ mRemoteController.setArtworkConfiguration(true, dim, dim);
}
@Override
public void onDetachedFromWindow() {
if (DEBUG) Log.v(TAG, "onDetachFromWindow()");
super.onDetachedFromWindow();
- if (mAttached) {
- if (DEBUG) Log.v(TAG, "Unregistering TCV " + this);
- mAudioManager.unregisterRemoteControlDisplay(mIRCD);
- }
- mAttached = false;
+ if (DEBUG) Log.v(TAG, "Unregistering TCV " + this);
+ mAudioManager.unregisterRemoteController(mRemoteController);
+ mUserSeeking = false;
+ }
+
+ void setBadgeIcon(Drawable bmp) {
+ mBadge.setImageDrawable(bmp);
+
+ final ColorMatrix cm = new ColorMatrix();
+ cm.setSaturation(0);
+ mBadge.setColorFilter(new ColorMatrixColorFilter(cm));
+ mBadge.setImageAlpha(0xef);
}
class Metadata {
@@ -245,21 +319,39 @@
private String trackTitle;
private String albumTitle;
private Bitmap bitmap;
+ private long duration;
+
+ public void clear() {
+ artist = null;
+ trackTitle = null;
+ albumTitle = null;
+ bitmap = null;
+ duration = -1;
+ }
public String toString() {
- return "Metadata[artist=" + artist + " trackTitle=" + trackTitle + " albumTitle=" + albumTitle + "]";
+ return "Metadata[artist=" + artist + " trackTitle=" + trackTitle +
+ " albumTitle=" + albumTitle + " duration=" + duration + "]";
}
}
- private String getMdString(Bundle data, int id) {
- return data.getString(Integer.toString(id));
+ void clearMetadata() {
+ mPopulateMetadataWhenAttached = null;
+ mMetadata.clear();
+ populateMetadata();
}
- private void updateMetadata(Bundle data) {
- if (mAttached) {
- mMetadata.artist = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST);
- mMetadata.trackTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_TITLE);
- mMetadata.albumTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUM);
+ void updateMetadata(RemoteController.MetadataEditor data) {
+ if (isAttachedToWindow()) {
+ mMetadata.artist = data.getString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST,
+ mMetadata.artist);
+ mMetadata.trackTitle = data.getString(MediaMetadataRetriever.METADATA_KEY_TITLE,
+ mMetadata.trackTitle);
+ mMetadata.albumTitle = data.getString(MediaMetadataRetriever.METADATA_KEY_ALBUM,
+ mMetadata.albumTitle);
+ mMetadata.duration = data.getLong(MediaMetadataRetriever.METADATA_KEY_DURATION, -1);
+ mMetadata.bitmap = data.getBitmap(MediaMetadataEditor.BITMAP_KEY_ARTWORK,
+ mMetadata.bitmap);
populateMetadata();
} else {
mPopulateMetadataWhenAttached = data;
@@ -270,12 +362,22 @@
* Populates the given metadata into the view
*/
private void populateMetadata() {
- StringBuilder sb = new StringBuilder();
- int trackTitleLength = 0;
- if (!TextUtils.isEmpty(mMetadata.trackTitle)) {
- sb.append(mMetadata.trackTitle);
- trackTitleLength = mMetadata.trackTitle.length();
+ if (ANIMATE_TRANSITIONS && isLaidOut() && mMetadataContainer.getVisibility() == VISIBLE) {
+ TransitionManager.beginDelayedTransition(mMetadataContainer, mMetadataChangeTransition);
}
+
+ final String remoteClientPackage = mRemoteController.getRemoteControlClientPackageName();
+ Drawable badgeIcon = null;
+ try {
+ badgeIcon = getContext().getPackageManager().getApplicationIcon(remoteClientPackage);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(TAG, "Couldn't get remote control client package icon", e);
+ }
+ setBadgeIcon(badgeIcon);
+ if (!TextUtils.isEmpty(mMetadata.trackTitle)) {
+ mTrackTitle.setText(mMetadata.trackTitle);
+ }
+ StringBuilder sb = new StringBuilder();
if (!TextUtils.isEmpty(mMetadata.artist)) {
if (sb.length() != 0) {
sb.append(" - ");
@@ -288,16 +390,27 @@
}
sb.append(mMetadata.albumTitle);
}
- mTrackTitle.setText(sb.toString(), TextView.BufferType.SPANNABLE);
- Spannable str = (Spannable) mTrackTitle.getText();
- if (trackTitleLength != 0) {
- str.setSpan(new ForegroundColorSpan(0xffffffff), 0, trackTitleLength,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- trackTitleLength++;
- }
- if (sb.length() > trackTitleLength) {
- str.setSpan(new ForegroundColorSpan(0x7fffffff), trackTitleLength, sb.length(),
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ mTrackArtistAlbum.setText(sb.toString());
+
+ if (mMetadata.duration >= 0) {
+ setSeekBarsEnabled(true);
+ setSeekBarDuration(mMetadata.duration);
+
+ final String skeleton;
+
+ if (mMetadata.duration >= 86400000) {
+ skeleton = "DDD kk mm ss";
+ } else if (mMetadata.duration >= 3600000) {
+ skeleton = "kk mm ss";
+ } else {
+ skeleton = "mm ss";
+ }
+ mFormat = new SimpleDateFormat(DateFormat.getBestDateTimePattern(
+ getContext().getResources().getConfiguration().locale,
+ skeleton));
+ mFormat.setTimeZone(TimeZone.getTimeZone("GMT+0"));
+ } else {
+ setSeekBarsEnabled(false);
}
KeyguardUpdateMonitor.getInstance(getContext()).dispatchSetBackground(
@@ -314,6 +427,66 @@
updatePlayPauseState(mCurrentPlayState);
}
+ void updateSeekDisplay() {
+ if (mMetadata != null && mRemoteController != null && mFormat != null) {
+ final long timeElapsed = mRemoteController.getEstimatedMediaPosition();
+ final long duration = mMetadata.duration;
+ final long remaining = duration - timeElapsed;
+
+ mTransientSeekTimeElapsed.setText(mFormat.format(new Date(timeElapsed)));
+ mTransientSeekTimeRemaining.setText(mFormat.format(new Date(remaining)));
+
+ if (DEBUG) Log.d(TAG, "updateSeekDisplay timeElapsed=" + timeElapsed +
+ " duration=" + duration + " remaining=" + remaining);
+ }
+ }
+
+ boolean tryToggleSeekBar() {
+ if (ANIMATE_TRANSITIONS) {
+ TransitionManager.beginDelayedTransition(mInfoContainer);
+ }
+ if (mTransientSeek.getVisibility() == VISIBLE) {
+ mTransientSeek.setVisibility(INVISIBLE);
+ mMetadataContainer.setVisibility(VISIBLE);
+ cancelResetToMetadata();
+ } else {
+ mTransientSeek.setVisibility(VISIBLE);
+ mMetadataContainer.setVisibility(INVISIBLE);
+ delayResetToMetadata();
+ }
+ mTransportControlCallback.userActivity();
+ return true;
+ }
+
+ void resetToMetadata() {
+ if (ANIMATE_TRANSITIONS) {
+ TransitionManager.beginDelayedTransition(mInfoContainer);
+ }
+ if (mTransientSeek.getVisibility() == VISIBLE) {
+ mTransientSeek.setVisibility(INVISIBLE);
+ mMetadataContainer.setVisibility(VISIBLE);
+ }
+ // TODO Also hide ratings, if applicable
+ }
+
+ void delayResetToMetadata() {
+ removeCallbacks(mResetToMetadata);
+ postDelayed(mResetToMetadata, RESET_TO_METADATA_DELAY);
+ }
+
+ void cancelResetToMetadata() {
+ removeCallbacks(mResetToMetadata);
+ }
+
+ void setSeekBarDuration(long duration) {
+ mTransientSeekBar.setMax((int) duration);
+ }
+
+ void scrubTo(int progress) {
+ mRemoteController.seekTo(progress);
+ mTransportControlCallback.userActivity();
+ }
+
private static void setVisibilityBasedOnFlag(View view, int flags, int flag) {
if ((flags & flag) != 0) {
view.setVisibility(View.VISIBLE);
@@ -341,6 +514,9 @@
case RemoteControlClient.PLAYSTATE_PLAYING:
imageResId = R.drawable.ic_media_pause;
imageDescId = R.string.keyguard_transport_pause_description;
+ if (mSeekEnabled) {
+ postDelayed(mUpdateSeekBars, 1000);
+ }
break;
case RemoteControlClient.PLAYSTATE_BUFFERING:
@@ -354,11 +530,30 @@
imageDescId = R.string.keyguard_transport_play_description;
break;
}
+
+ if (state != RemoteControlClient.PLAYSTATE_PLAYING) {
+ removeCallbacks(mUpdateSeekBars);
+ updateSeekBars();
+ }
mBtnPlay.setImageResource(imageResId);
mBtnPlay.setContentDescription(getResources().getString(imageDescId));
mCurrentPlayState = state;
}
+ boolean updateSeekBars() {
+ final int position = (int) mRemoteController.getEstimatedMediaPosition();
+ if (position >= 0) {
+ if (!mUserSeeking) {
+ mTransientSeekBar.setProgress(position);
+ }
+ return true;
+ }
+ Log.w(TAG, "Updating seek bars; received invalid estimated media position (" +
+ position + "). Disabling seek.");
+ setSeekBarsEnabled(false);
+ return false;
+ }
+
static class SavedState extends BaseSavedState {
boolean clientPresent;
@@ -389,48 +584,13 @@
};
}
- public void onClick(View v) {
- int keyCode = -1;
- if (v == mBtnPrev) {
- keyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS;
- } else if (v == mBtnNext) {
- keyCode = KeyEvent.KEYCODE_MEDIA_NEXT;
- } else if (v == mBtnPlay) {
- keyCode = KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
-
- }
- if (keyCode != -1) {
- sendMediaButtonClick(keyCode);
- }
- }
-
private void sendMediaButtonClick(int keyCode) {
- if (mClientIntent == null) {
- // Shouldn't be possible because this view should be hidden in this case.
- Log.e(TAG, "sendMediaButtonClick(): No client is currently registered");
- return;
- }
- // use the registered PendingIntent that will be processed by the registered
- // media button event receiver, which is the component of mClientIntent
- KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
- Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
- intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
- try {
- mClientIntent.send(getContext(), 0, intent);
- } catch (CanceledException e) {
- Log.e(TAG, "Error sending intent for media button down: "+e);
- e.printStackTrace();
- }
+ // TODO We should think about sending these up/down events accurately with touch up/down
+ // on the buttons, but in the near term this will interfere with the long press behavior.
+ mRemoteController.sendMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
+ mRemoteController.sendMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));
- keyEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode);
- intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
- intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
- try {
- mClientIntent.send(getContext(), 0, intent);
- } catch (CanceledException e) {
- Log.e(TAG, "Error sending intent for media button up: "+e);
- e.printStackTrace();
- }
+ mTransportControlCallback.userActivity();
}
public boolean providesClock() {
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
index ec3eb157..dc28bd0 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
@@ -124,6 +124,7 @@
private static final int SHOW_ASSISTANT = 14;
private static final int DISPATCH_EVENT = 15;
private static final int LAUNCH_CAMERA = 16;
+ private static final int DISMISS = 17;
/**
* The default amount of time we stay awake (used for all key input)
@@ -910,12 +911,16 @@
/**
* Dismiss the keyguard through the security layers.
*/
- public void dismiss() {
+ public void handleDismiss() {
if (mShowing && !mHidden) {
mKeyguardViewManager.dismiss();
}
}
+ public void dismiss() {
+ mHandler.sendEmptyMessage(DISMISS);
+ }
+
/**
* Send message to keyguard telling it to reset its state.
* @param options options about how to show the keyguard
@@ -1014,14 +1019,13 @@
};
public void keyguardDone(boolean authenticated, boolean wakeup) {
- mKeyguardDonePending = false;
+ if (DEBUG) Log.d(TAG, "keyguardDone(" + authenticated + ")");
+ EventLog.writeEvent(70000, 2);
synchronized (this) {
- EventLog.writeEvent(70000, 2);
- if (DEBUG) Log.d(TAG, "keyguardDone(" + authenticated + ")");
- Message msg = mHandler.obtainMessage(KEYGUARD_DONE, authenticated ? 1 : 0,
- wakeup ? 1 : 0);
- mHandler.sendMessage(msg);
+ mKeyguardDonePending = false;
}
+ Message msg = mHandler.obtainMessage(KEYGUARD_DONE, authenticated ? 1 : 0, wakeup ? 1 : 0);
+ mHandler.sendMessage(msg);
}
/**
@@ -1037,31 +1041,31 @@
switch (msg.what) {
case SHOW:
handleShow((Bundle) msg.obj);
- return ;
+ break;
case HIDE:
handleHide();
- return ;
+ break;
case RESET:
handleReset((Bundle) msg.obj);
- return ;
+ break;
case VERIFY_UNLOCK:
handleVerifyUnlock();
- return;
+ break;
case NOTIFY_SCREEN_OFF:
handleNotifyScreenOff();
- return;
+ break;
case NOTIFY_SCREEN_ON:
handleNotifyScreenOn((IKeyguardShowCallback) msg.obj);
- return;
+ break;
case KEYGUARD_DONE:
handleKeyguardDone(msg.arg1 != 0, msg.arg2 != 0);
- return;
+ break;
case KEYGUARD_DONE_DRAWING:
handleKeyguardDoneDrawing();
- return;
+ break;
case KEYGUARD_DONE_AUTHENTICATING:
keyguardDone(true, true);
- return;
+ break;
case SET_HIDDEN:
handleSetHidden(msg.arg1 != 0);
break;
@@ -1079,6 +1083,9 @@
case LAUNCH_CAMERA:
handleLaunchCamera();
break;
+ case DISMISS:
+ handleDismiss();
+ break;
}
}
};
@@ -1178,8 +1185,7 @@
private void updateActivityLockScreenState() {
try {
- ActivityManagerNative.getDefault().setLockScreenShown(
- mShowing && !mHidden);
+ ActivityManagerNative.getDefault().setLockScreenShown(mShowing && !mHidden);
} catch (RemoteException e) {
}
}
diff --git a/packages/PrintSpooler/res/values-af/strings.xml b/packages/PrintSpooler/res/values-af/strings.xml
index 7e15080..6361df4 100644
--- a/packages/PrintSpooler/res/values-af/strings.xml
+++ b/packages/PrintSpooler/res/values-af/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle drukkers…"</string>
<string name="search" msgid="5421724265322228497">"Deursoek"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle drukkers"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Voeg diens by"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Kies drukdiens"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Soek in Play-winkel"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Geen drukkers gekry nie"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Druk tans <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Kanselleer tans <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Drukkerfout by <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-am/strings.xml b/packages/PrintSpooler/res/values-am/strings.xml
index bac0527..be683ba 100644
--- a/packages/PrintSpooler/res/values-am/strings.xml
+++ b/packages/PrintSpooler/res/values-am/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"ሁሉም አታሚዎች…"</string>
<string name="search" msgid="5421724265322228497">"ፍለጋ"</string>
<string name="all_printers_label" msgid="3178848870161526399">"ሁሉም አታሚዎች"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"አገልግሎት አክል"</string>
<string name="choose_print_service" msgid="3740309762324459694">"የህትመት አገልግሎት ይምረጡ"</string>
- <string name="search_play_store" msgid="1575218005860538249">"በPlay ሱቅ ውስጥ ይፈልጉ"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"ምንም አታሚዎች አልተገኙም"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን በማተም ላይ"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን በመተው ላይ"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"የአታሚ ስህተት <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ar/strings.xml b/packages/PrintSpooler/res/values-ar/strings.xml
index 4cca804..eae6a91 100644
--- a/packages/PrintSpooler/res/values-ar/strings.xml
+++ b/packages/PrintSpooler/res/values-ar/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"جميع الطابعات…"</string>
<string name="search" msgid="5421724265322228497">"بحث"</string>
<string name="all_printers_label" msgid="3178848870161526399">"جميع الطابعات"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"إضافة خدمة"</string>
<string name="choose_print_service" msgid="3740309762324459694">"اختر خدمة طباعة"</string>
- <string name="search_play_store" msgid="1575218005860538249">"البحث في سوق Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"لم يتم العثور على طابعات"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"جارٍ طباعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"جارٍ إلغاء <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"خطا في الطابعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-bg/strings.xml b/packages/PrintSpooler/res/values-bg/strings.xml
index 737fc23..b0f5506 100644
--- a/packages/PrintSpooler/res/values-bg/strings.xml
+++ b/packages/PrintSpooler/res/values-bg/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Всички принтери…"</string>
<string name="search" msgid="5421724265322228497">"Търсене"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Всички принтери"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Избиране на услуга за отпечатване"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Търсене в Google Play Магазин"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"„<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“ се отпечатва"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"„<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“ се анулира"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка в принтера при „<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"Рестартиране"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Няма връзка с принтера"</string>
<string name="reason_unknown" msgid="5507940196503246139">"няма данни"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – не е налице"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Черно-бяло"</item>
<item msgid="2762241247228983754">"Цветно"</item>
diff --git a/packages/PrintSpooler/res/values-ca/strings.xml b/packages/PrintSpooler/res/values-ca/strings.xml
index 9bc03f9..700d2c9 100644
--- a/packages/PrintSpooler/res/values-ca/strings.xml
+++ b/packages/PrintSpooler/res/values-ca/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Totes les impressores…"</string>
<string name="search" msgid="5421724265322228497">"Cerca"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Totes les impressores"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Afegeix un servei"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Selecció del servei d\'impressió"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Cerca a Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No s\'ha trobat cap impressora"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"S\'està imprimint <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"S\'està cancel·lant <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Error d\'impressora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-cs/strings.xml b/packages/PrintSpooler/res/values-cs/strings.xml
index 6cb024d..151165f 100644
--- a/packages/PrintSpooler/res/values-cs/strings.xml
+++ b/packages/PrintSpooler/res/values-cs/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Všechny tiskárny…"</string>
<string name="search" msgid="5421724265322228497">"Hledat"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Všechny tiskárny"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Přidat službu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Zvolte službu tisku"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Vyhledat v Obchodě Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nebyly nalezeny žádné tiskárny"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Tisk úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Rušení úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Chyba tiskárny u úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +46,7 @@
<string name="restart" msgid="2472034227037808749">"Restartovat"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Nelze se připojit k tiskárně"</string>
<string name="reason_unknown" msgid="5507940196503246139">"neznámé"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – není k dispozici"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Černobíle"</item>
<item msgid="2762241247228983754">"Barevně"</item>
diff --git a/packages/PrintSpooler/res/values-da/strings.xml b/packages/PrintSpooler/res/values-da/strings.xml
index 26457b6..e9c4d6d 100644
--- a/packages/PrintSpooler/res/values-da/strings.xml
+++ b/packages/PrintSpooler/res/values-da/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle printere..."</string>
<string name="search" msgid="5421724265322228497">"Søg"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle printere"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Tilføj tjeneste"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Vælg udskriftstjeneste"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Søg i Play Butik"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Der blev ikke fundet nogen printere"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> udskrives"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> annulleres"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Udskriften <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> mislykkedes"</string>
diff --git a/packages/PrintSpooler/res/values-de/strings.xml b/packages/PrintSpooler/res/values-de/strings.xml
index ceffeda..417792e 100644
--- a/packages/PrintSpooler/res/values-de/strings.xml
+++ b/packages/PrintSpooler/res/values-de/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle Drucker…"</string>
<string name="search" msgid="5421724265322228497">"Suchen"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle Drucker"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Dienst hinzufügen"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Druckdienst auswählen"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Im Play Store suchen"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Keine Drucker gefunden"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> wird gedruckt..."</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> wird abgebrochen..."</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Druckerfehler <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-el/strings.xml b/packages/PrintSpooler/res/values-el/strings.xml
index 44ba5d4..331315d 100644
--- a/packages/PrintSpooler/res/values-el/strings.xml
+++ b/packages/PrintSpooler/res/values-el/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Όλοι οι εκτυπωτές…"</string>
<string name="search" msgid="5421724265322228497">"Αναζήτηση"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Όλοι οι εκτυπωτές"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Προσθήκη υπηρεσίας"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Επιλέξτε υπηρεσία εκτύπωσης"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Αναζήτηση στο play store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Δεν βρέθηκαν εκτυπωτές"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Εκτύπωση <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Ακύρωση <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Σφάλμα εκτυπωτή <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-en-rGB/strings.xml b/packages/PrintSpooler/res/values-en-rGB/strings.xml
index 7b77483..5fc9c68 100644
--- a/packages/PrintSpooler/res/values-en-rGB/strings.xml
+++ b/packages/PrintSpooler/res/values-en-rGB/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"All printers…"</string>
<string name="search" msgid="5421724265322228497">"Search"</string>
<string name="all_printers_label" msgid="3178848870161526399">"All printers"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Add service"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Search in Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No printers found"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Printing <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-en-rIN/strings.xml b/packages/PrintSpooler/res/values-en-rIN/strings.xml
index 7b77483..5fc9c68 100644
--- a/packages/PrintSpooler/res/values-en-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-en-rIN/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"All printers…"</string>
<string name="search" msgid="5421724265322228497">"Search"</string>
<string name="all_printers_label" msgid="3178848870161526399">"All printers"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Add service"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Search in Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No printers found"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Printing <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-es-rUS/strings.xml b/packages/PrintSpooler/res/values-es-rUS/strings.xml
index 8f76e9d..444561d 100644
--- a/packages/PrintSpooler/res/values-es-rUS/strings.xml
+++ b/packages/PrintSpooler/res/values-es-rUS/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Todas las impresoras…"</string>
<string name="search" msgid="5421724265322228497">"Buscar"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Todas las impresoras"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Elegir servicio de impresión"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Buscar en Play Store"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Imprimiendo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Error de impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-es/strings.xml b/packages/PrintSpooler/res/values-es/strings.xml
index 26343e5..350834a 100644
--- a/packages/PrintSpooler/res/values-es/strings.xml
+++ b/packages/PrintSpooler/res/values-es/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Todas las impresoras…"</string>
<string name="search" msgid="5421724265322228497">"Buscar"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Todas las impresoras"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Añadir servicio"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Seleccionar servicio de impresión"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Buscar en Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"No se encontraron impresoras"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Imprimiendo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Error de impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -51,8 +52,8 @@
<item msgid="2762241247228983754">"Color"</item>
</string-array>
<string-array name="orientation_labels">
- <item msgid="4061931020926489228">"Retrato"</item>
- <item msgid="3199660090246166812">"Paisaje"</item>
+ <item msgid="4061931020926489228">"Vertical"</item>
+ <item msgid="3199660090246166812">"Horizontal"</item>
</string-array>
<string-array name="page_options_labels">
<item msgid="7421377442011699994">"Todo"</item>
diff --git a/packages/PrintSpooler/res/values-et-rEE/strings.xml b/packages/PrintSpooler/res/values-et-rEE/strings.xml
index 0d28170..94a6775 100644
--- a/packages/PrintSpooler/res/values-et-rEE/strings.xml
+++ b/packages/PrintSpooler/res/values-et-rEE/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Kõik printerid …"</string>
<string name="search" msgid="5421724265322228497">"Otsing"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Kõik printerid"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Lisa teenus"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Prinditeenuse valimine"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Otsi Play poest"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Printereid ei leitud"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> printimine"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> tühistamine"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printeri viga: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-fa/strings.xml b/packages/PrintSpooler/res/values-fa/strings.xml
index 709d529..320dfb0 100644
--- a/packages/PrintSpooler/res/values-fa/strings.xml
+++ b/packages/PrintSpooler/res/values-fa/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"همه چاپگرها..."</string>
<string name="search" msgid="5421724265322228497">"جستجو"</string>
<string name="all_printers_label" msgid="3178848870161526399">"همه چاپگرها"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"افزودن سرویس"</string>
<string name="choose_print_service" msgid="3740309762324459694">"انتخاب سرویس چاپ"</string>
- <string name="search_play_store" msgid="1575218005860538249">"جستجو در فروشگاه Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"هیچ چاپگری یافت نشد"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"در حال چاپ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"در حال لغو <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"خطای چاپگر <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +46,7 @@
<string name="restart" msgid="2472034227037808749">"راهاندازی مجدد"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"اتصال با چاپگر برقرار نیست"</string>
<string name="reason_unknown" msgid="5507940196503246139">"نامعلوم"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - در دسترس نیست"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"سیاه و سفید"</item>
<item msgid="2762241247228983754">"رنگی"</item>
diff --git a/packages/PrintSpooler/res/values-fi/strings.xml b/packages/PrintSpooler/res/values-fi/strings.xml
index cbf9931..9e92744 100644
--- a/packages/PrintSpooler/res/values-fi/strings.xml
+++ b/packages/PrintSpooler/res/values-fi/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Kaikki tulostimet…"</string>
<string name="search" msgid="5421724265322228497">"Haku"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Kaikki tulostimet"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Lisää palvelu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Valitse tulostuspalvelu"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Haku Play-kaupasta"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Tulostimia ei löydy"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Tulostetaan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Peruutetaan työ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Tulostinvirhe työlle <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-fr-rCA/strings.xml b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
index f5c504f..0a50d49 100644
--- a/packages/PrintSpooler/res/values-fr-rCA/strings.xml
+++ b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Toutes les imprimantes…"</string>
<string name="search" msgid="5421724265322228497">"Rechercher"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Toutes les imprimantes"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Rechercher dans la boutique Google Play Store"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Impression de <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> en cours…"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annulation de « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> »…"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Erreur impression : « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> »"</string>
diff --git a/packages/PrintSpooler/res/values-fr/strings.xml b/packages/PrintSpooler/res/values-fr/strings.xml
index 2d6a7a1..6b47686 100644
--- a/packages/PrintSpooler/res/values-fr/strings.xml
+++ b/packages/PrintSpooler/res/values-fr/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Toutes les imprimantes…"</string>
<string name="search" msgid="5421724265322228497">"Rechercher"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Toutes les imprimantes"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Rechercher sur le Play Store"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Impression de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" en cours…"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annulation de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" en cours…"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Erreur impression pour \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
diff --git a/packages/PrintSpooler/res/values-hi/strings.xml b/packages/PrintSpooler/res/values-hi/strings.xml
index 59a88a8..59a4054 100644
--- a/packages/PrintSpooler/res/values-hi/strings.xml
+++ b/packages/PrintSpooler/res/values-hi/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"सभी प्रिंटर..."</string>
<string name="search" msgid="5421724265322228497">"खोजें"</string>
<string name="all_printers_label" msgid="3178848870161526399">"सभी प्रिंटर"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"सेवा जोड़ें"</string>
<string name="choose_print_service" msgid="3740309762324459694">"प्रिंट सेवा चुनें"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Play स्टोर में खोजें"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"कोई प्रिंटर नहीं मिला"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> प्रिंट हो रहा है"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द हो रहा है"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिंटर त्रुटि <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-hr/strings.xml b/packages/PrintSpooler/res/values-hr/strings.xml
index 399e14e..19f546e 100644
--- a/packages/PrintSpooler/res/values-hr/strings.xml
+++ b/packages/PrintSpooler/res/values-hr/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Svi pisači…"</string>
<string name="search" msgid="5421724265322228497">"Pretraživanje"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Svi pisači"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Dodaj uslugu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Odaberite uslugu ispisa"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Pretraži u Trgovini Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nije pronađen nijedan pisač"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Ispisivanje <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Otkazivanje zadatka <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Pogreška pisača <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-hu/strings.xml b/packages/PrintSpooler/res/values-hu/strings.xml
index ea997c5..31505f0 100644
--- a/packages/PrintSpooler/res/values-hu/strings.xml
+++ b/packages/PrintSpooler/res/values-hu/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Az összes nyomtató…"</string>
<string name="search" msgid="5421724265322228497">"Keresés"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Az összes nyomtató"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Szolgáltatás hozzáadása"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Nyomtatási szolgáltatás kiválasztása"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Keresés a Play Áruházban"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nem található nyomtató"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> nyomtatása"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> törlése"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Nyomtatási hiba: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-hy-rAM/strings.xml b/packages/PrintSpooler/res/values-hy-rAM/strings.xml
index 47d8627..5ccb0ab4 100644
--- a/packages/PrintSpooler/res/values-hy-rAM/strings.xml
+++ b/packages/PrintSpooler/res/values-hy-rAM/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Բոլոր տպիչները..."</string>
<string name="search" msgid="5421724265322228497">"Որոնել"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Բոլոր տպիչները"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Ընտրեք տպելու ծառայությունը"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Որոնել Play Store-ում"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Տպվում է՝ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ը չեղարկվում է"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Տպիչի սխալ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-in/strings.xml b/packages/PrintSpooler/res/values-in/strings.xml
index d4878cd..a7a2fdc 100644
--- a/packages/PrintSpooler/res/values-in/strings.xml
+++ b/packages/PrintSpooler/res/values-in/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Semua printer…"</string>
<string name="search" msgid="5421724265322228497">"Cari"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Semua printer"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Pilih layanan cetak"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Cari di Play Store"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Mencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Membatalkan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Ada kesalahan printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-it/strings.xml b/packages/PrintSpooler/res/values-it/strings.xml
index a623bb6..d8f8eab 100644
--- a/packages/PrintSpooler/res/values-it/strings.xml
+++ b/packages/PrintSpooler/res/values-it/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Tutte le stampanti…"</string>
<string name="search" msgid="5421724265322228497">"Cerca"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Tutte le stampanti"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Aggiungi servizio"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Scegli servizio di stampa"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Cerca nel Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nessuna stampante trovata"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Stampa di <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annullamento di <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Errore della stampante: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml
index 15b097c..44a001a 100644
--- a/packages/PrintSpooler/res/values-iw/strings.xml
+++ b/packages/PrintSpooler/res/values-iw/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"כל המדפסות…"</string>
<string name="search" msgid="5421724265322228497">"חפש"</string>
<string name="all_printers_label" msgid="3178848870161526399">"כל המדפסות"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"הוסף שירות"</string>
<string name="choose_print_service" msgid="3740309762324459694">"בחר שירות הדפסה"</string>
- <string name="search_play_store" msgid="1575218005860538249">"חפש בחנות Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"לא נמצאו מדפסות"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"מדפיס את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"מבטל את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"שגיאת מדפסת ב-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ja/strings.xml b/packages/PrintSpooler/res/values-ja/strings.xml
index 116c7fe..6212b32 100644
--- a/packages/PrintSpooler/res/values-ja/strings.xml
+++ b/packages/PrintSpooler/res/values-ja/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"すべてのプリンタ…"</string>
<string name="search" msgid="5421724265322228497">"検索"</string>
<string name="all_printers_label" msgid="3178848870161526399">"すべてのプリンタ"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"印刷サービスの選択"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Playストアで検索"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>を印刷しています"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>をキャンセルしています"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"プリンタエラー: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ka-rGE/strings.xml b/packages/PrintSpooler/res/values-ka-rGE/strings.xml
index 05ad4c7..2cb994c 100644
--- a/packages/PrintSpooler/res/values-ka-rGE/strings.xml
+++ b/packages/PrintSpooler/res/values-ka-rGE/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"ყველა პრინტერი…"</string>
<string name="search" msgid="5421724265322228497">"ძიება"</string>
<string name="all_printers_label" msgid="3178848870161526399">"ყველა პრინტერი"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"აირჩიეთ ბეჭდვის სერვისი"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Play Store-ში ძიება"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"იბეჭდება <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"მიმდინარეობს <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ის გაუქმება"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"ბეჭდვის შეცდომა <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"გადატვირთვა"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"პრინტერთან კავშირი არ არის"</string>
<string name="reason_unknown" msgid="5507940196503246139">"უცნობი"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – მიუწვდომელია"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"შავ-თეთრი"</item>
<item msgid="2762241247228983754">"ფერი"</item>
diff --git a/packages/PrintSpooler/res/values-km-rKH/strings.xml b/packages/PrintSpooler/res/values-km-rKH/strings.xml
index b9a52f1..1d682e3 100644
--- a/packages/PrintSpooler/res/values-km-rKH/strings.xml
+++ b/packages/PrintSpooler/res/values-km-rKH/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"ម៉ាស៊ីនបោះពុម្ពទាំងអស់ ..."</string>
<string name="search" msgid="5421724265322228497">"ស្វែងរក"</string>
<string name="all_printers_label" msgid="3178848870161526399">"ម៉ាស៊ីនបោះពុម្ពទាំងអស់"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"បន្ថែមសេវាកម្ម"</string>
<string name="choose_print_service" msgid="3740309762324459694">"ជ្រើសសេវាបោះពុម្ព"</string>
- <string name="search_play_store" msgid="1575218005860538249">"ស្វែងរកក្នុងឃ្លាំងកម្មវិធី"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"រកមិនឃើញម៉ាស៊ីនបោះពុម្ព"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"កំពុងបោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"ការបោះបង់ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"កំហុសម៉ាស៊ីនបោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ko/strings.xml b/packages/PrintSpooler/res/values-ko/strings.xml
index ed3942b9..a512f62 100644
--- a/packages/PrintSpooler/res/values-ko/strings.xml
+++ b/packages/PrintSpooler/res/values-ko/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"모든 프린터…"</string>
<string name="search" msgid="5421724265322228497">"검색"</string>
<string name="all_printers_label" msgid="3178848870161526399">"모든 프린터"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"인쇄 서비스 선택"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Play 스토어에서 검색"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> 인쇄 중"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> 취소 중"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"프린터 오류: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"다시 시작"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"프린터와 연결되지 않음"</string>
<string name="reason_unknown" msgid="5507940196503246139">"알 수 없음"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – 사용할 수 없음"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"흑백"</item>
<item msgid="2762241247228983754">"컬러"</item>
diff --git a/packages/PrintSpooler/res/values-lo-rLA/strings.xml b/packages/PrintSpooler/res/values-lo-rLA/strings.xml
index cefb82c..ced114b 100644
--- a/packages/PrintSpooler/res/values-lo-rLA/strings.xml
+++ b/packages/PrintSpooler/res/values-lo-rLA/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"ທຸກເຄື່ອງພິມ..."</string>
<string name="search" msgid="5421724265322228497">"ຊອກຫາ"</string>
<string name="all_printers_label" msgid="3178848870161526399">"ທຸກເຄື່ອງພິມ"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"ເພີ່ມບໍລິການ"</string>
<string name="choose_print_service" msgid="3740309762324459694">"ເລືອກບໍລິການການພິມ"</string>
- <string name="search_play_store" msgid="1575218005860538249">"ຊອກຫາໃນ play store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"ບໍ່ພົບເຄື່ອງພິມ"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"ກຳລັງພິມ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"ກຳລັງຍົກເລີກ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"ເຄື່ອງພິມເກີດຂໍ້ຜິດພາດ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +46,7 @@
<string name="restart" msgid="2472034227037808749">"ປິດເປີດໃໝ່"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"ບໍ່ມີການເຊື່ອມຕໍ່ຫາເຄື່ອງພິມ"</string>
<string name="reason_unknown" msgid="5507940196503246139">"ບໍ່ຮູ້ຈັກ"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - ບໍ່ມີຢູ່"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"ຂາວດຳ"</item>
<item msgid="2762241247228983754">"ສີ"</item>
diff --git a/packages/PrintSpooler/res/values-lt/strings.xml b/packages/PrintSpooler/res/values-lt/strings.xml
index 6778b75..dc72e8a 100644
--- a/packages/PrintSpooler/res/values-lt/strings.xml
+++ b/packages/PrintSpooler/res/values-lt/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Visi spausdintuvai…"</string>
<string name="search" msgid="5421724265322228497">"Ieškoti"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Visi spausdintuvai"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Pasirinkite spausdinimo paslaugą"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Ieškoti „Google Play“ parduotuvėje"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Spausdinama: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Atšaukiama: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Spausdintuvo klaida: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-lv/strings.xml b/packages/PrintSpooler/res/values-lv/strings.xml
index a255001..aae7b97 100644
--- a/packages/PrintSpooler/res/values-lv/strings.xml
+++ b/packages/PrintSpooler/res/values-lv/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Visi printeri…"</string>
<string name="search" msgid="5421724265322228497">"Meklēt"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Visi printeri"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Pievienot pakalpojumu"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Izvēlieties drukāšanas pakalpojumu"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Meklēt Play veikalā"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Netika atrasts neviens printeris."</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Notiek darba <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> drukāšana…"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Pārtrauc drukas darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>…"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printera kļūda ar darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-mn-rMN/strings.xml b/packages/PrintSpooler/res/values-mn-rMN/strings.xml
index b1dfc28..af5f066 100644
--- a/packages/PrintSpooler/res/values-mn-rMN/strings.xml
+++ b/packages/PrintSpooler/res/values-mn-rMN/strings.xml
@@ -24,7 +24,7 @@
<string name="label_paper_size" msgid="8681895607876809323">"Цаасны хэмжээ"</string>
<string name="label_color" msgid="1108690305218188969">"Өнгө"</string>
<string name="label_orientation" msgid="2853142581990496477">"Чиглэл"</string>
- <string name="label_pages" msgid="6300874667546617333">"ХУУДСУУД (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+ <string name="label_pages" msgid="6300874667546617333">"(<xliff:g id="PAGE_COUNT">%1$s</xliff:g>) хуудас"</string>
<string name="pages_range_example" msgid="4069269138547562081">"жнь. 1–5, 8, 11–13"</string>
<string name="print_preview" msgid="8010217796057763343">"Хэвлэхээр урьдчилан харах"</string>
<string name="install_for_print_preview" msgid="6366303997385509332">"Урьдчилан харахын тулд PDF харагчийг суулгах"</string>
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Бүх принтерүүд…"</string>
<string name="search" msgid="5421724265322228497">"Хайх"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Бүх принтерүүд"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Үйлчилгээ нэмэх"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Хэвлэх үйлчилгээг сонгох"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Play Store-с хайх"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Принтер олдсонгүй"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Хэвлэж байна <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Цуцлаж байна <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Принтерийн алдаа <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ms-rMY/strings.xml b/packages/PrintSpooler/res/values-ms-rMY/strings.xml
index 43ebf77..6c70bc2 100644
--- a/packages/PrintSpooler/res/values-ms-rMY/strings.xml
+++ b/packages/PrintSpooler/res/values-ms-rMY/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Semua pencetak..."</string>
<string name="search" msgid="5421724265322228497">"Cari"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Semua pencetak"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Pilih perkhidmatan cetak"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Cari di gedung play"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Mencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Membatalkan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Ralat pencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"Mulakan semula"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Tiada sambungan ke pencetak"</string>
<string name="reason_unknown" msgid="5507940196503246139">"tidak diketahui"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – tidak tersedia"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Hitam & Putih"</item>
<item msgid="2762241247228983754">"Warna"</item>
diff --git a/packages/PrintSpooler/res/values-nb/strings.xml b/packages/PrintSpooler/res/values-nb/strings.xml
index b80975a..ebdbe2f 100644
--- a/packages/PrintSpooler/res/values-nb/strings.xml
+++ b/packages/PrintSpooler/res/values-nb/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Alle skrivere"</string>
<string name="search" msgid="5421724265322228497">"Søk"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle skrivere"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Velg utskriftstjeneste"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Søk i Play-butikken"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Skriver ut <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Avbryter <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Skriverfeil <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"Start på nytt"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Ingen forbindelse med skriveren"</string>
<string name="reason_unknown" msgid="5507940196503246139">"ukjent"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – utilgjengelig"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Svart og hvitt"</item>
<item msgid="2762241247228983754">"Farge"</item>
diff --git a/packages/PrintSpooler/res/values-nl/strings.xml b/packages/PrintSpooler/res/values-nl/strings.xml
index 2d27eed..2548edd 100644
--- a/packages/PrintSpooler/res/values-nl/strings.xml
+++ b/packages/PrintSpooler/res/values-nl/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alle printers…"</string>
<string name="search" msgid="5421724265322228497">"Zoeken"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alle printers"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Service toevoegen"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Afdrukservice kiezen"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Zoeken in de Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Geen printers gevonden"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> afdrukken"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> annuleren"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Printerfout <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-pl/strings.xml b/packages/PrintSpooler/res/values-pl/strings.xml
index 6f8aab2..397ef3f 100644
--- a/packages/PrintSpooler/res/values-pl/strings.xml
+++ b/packages/PrintSpooler/res/values-pl/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Wszystkie drukarki…"</string>
<string name="search" msgid="5421724265322228497">"Szukaj"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Wszystkie drukarki"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Wybierz usługę drukowania"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Szukaj w Sklepie Play"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Drukowanie: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Anulowanie: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Błąd drukarki: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
index db37f90..5fe98ef 100644
--- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml
+++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Todas as impressoras..."</string>
<string name="search" msgid="5421724265322228497">"Pesquisar"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Todas as impressoras"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Adicionar serviço"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Escolher o serviço de impressão"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Pesquisar na Play Store"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Nenhuma impressora encontrada"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"A imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"A cancelar <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Erro da impressora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-pt/strings.xml b/packages/PrintSpooler/res/values-pt/strings.xml
index 1a7a737..1afbe3e 100644
--- a/packages/PrintSpooler/res/values-pt/strings.xml
+++ b/packages/PrintSpooler/res/values-pt/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Todas as impressoras…"</string>
<string name="search" msgid="5421724265322228497">"Pesquisar"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Todas as impressoras"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Selecione o serviço de impressão"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Pesquisar na Play Store"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Imprimindo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Erro ao imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-ro/strings.xml b/packages/PrintSpooler/res/values-ro/strings.xml
index 301691e..c17f308 100644
--- a/packages/PrintSpooler/res/values-ro/strings.xml
+++ b/packages/PrintSpooler/res/values-ro/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Toate imprimantele..."</string>
<string name="search" msgid="5421724265322228497">"Căutați"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Toate imprimantele"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Alegeți serviciul de printare"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Căutați în Magazin Play"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Se printează <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Se anulează <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Eroare de printare: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"Reporniți"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Nu există conexiune la o imprimantă"</string>
<string name="reason_unknown" msgid="5507940196503246139">"necunoscut"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - indisponibil"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Alb-negru"</item>
<item msgid="2762241247228983754">"Color"</item>
diff --git a/packages/PrintSpooler/res/values-ru/strings.xml b/packages/PrintSpooler/res/values-ru/strings.xml
index 4ca08bf..0a89171 100644
--- a/packages/PrintSpooler/res/values-ru/strings.xml
+++ b/packages/PrintSpooler/res/values-ru/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Все принтеры"</string>
<string name="search" msgid="5421724265322228497">"Поиск"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Все принтеры"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Выберите службу печати"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Поиск в Google Play"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Печать задания \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\"…"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Отмена задания <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>…"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Ошибка задания \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"Повторить"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Нет связи с принтером"</string>
<string name="reason_unknown" msgid="5507940196503246139">"неизвестно"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – недоступен"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Черно-белое"</item>
<item msgid="2762241247228983754">"Цветное"</item>
diff --git a/packages/PrintSpooler/res/values-sk/strings.xml b/packages/PrintSpooler/res/values-sk/strings.xml
index 22d4a2f..667a456 100644
--- a/packages/PrintSpooler/res/values-sk/strings.xml
+++ b/packages/PrintSpooler/res/values-sk/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Všetky tlačiarne..."</string>
<string name="search" msgid="5421724265322228497">"VYHĽADÁVANIE"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Všetky tlačiarne"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Výber tlačovej služby"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Vyhľadať v Obchode Play"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Prebieha tlač úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Prebieha zrušenie úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Chyba tlačiarne – úloha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"Spustiť znova"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Žiadne pripojenie k tlačiarni"</string>
<string name="reason_unknown" msgid="5507940196503246139">"neznáme"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – nie je k dispozícii"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Čiernobiele"</item>
<item msgid="2762241247228983754">"Farba"</item>
diff --git a/packages/PrintSpooler/res/values-sl/strings.xml b/packages/PrintSpooler/res/values-sl/strings.xml
index dca67b2..398268a 100644
--- a/packages/PrintSpooler/res/values-sl/strings.xml
+++ b/packages/PrintSpooler/res/values-sl/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Vsi tiskalniki …"</string>
<string name="search" msgid="5421724265322228497">"Iskanje"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Vsi tiskalniki"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Dodaj storitev"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Izberite tiskalno storitev"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Iskanje v Trgovini Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Tiskalnikov ni mogoče najti"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Tiskanje: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Preklic: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Napaka tiskalnika: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +46,7 @@
<string name="restart" msgid="2472034227037808749">"Začni znova"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Ni povezave s tiskalnikom"</string>
<string name="reason_unknown" msgid="5507940196503246139">"neznano"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – ni na voljo"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Črno-belo"</item>
<item msgid="2762241247228983754">"Barvno"</item>
diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml
index 3b03e10..5d1fc71 100644
--- a/packages/PrintSpooler/res/values-sr/strings.xml
+++ b/packages/PrintSpooler/res/values-sr/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Сви штампачи…"</string>
<string name="search" msgid="5421724265322228497">"Претражи"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Сви штампачи"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Изаберите услугу штампања"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Претражи у Play продавници"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Штампа се <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Отказује се <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка штампача <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-sv/strings.xml b/packages/PrintSpooler/res/values-sv/strings.xml
index 413c372..3ceefe8 100644
--- a/packages/PrintSpooler/res/values-sv/strings.xml
+++ b/packages/PrintSpooler/res/values-sv/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Alla skrivare ..."</string>
<string name="search" msgid="5421724265322228497">"Sök"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Alla skrivare"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Lägg till tjänst"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Välj utskriftstjänst"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Sök i Play Butik"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Det gick inte att hitta några skrivare"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Skriver ut <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Avbryter <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Skrivarfel för <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +46,7 @@
<string name="restart" msgid="2472034227037808749">"Starta om"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Ingen anslutning till skrivaren"</string>
<string name="reason_unknown" msgid="5507940196503246139">"okänt"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – inte tillgänglig"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Svartvit"</item>
<item msgid="2762241247228983754">"Färg"</item>
diff --git a/packages/PrintSpooler/res/values-sw/strings.xml b/packages/PrintSpooler/res/values-sw/strings.xml
index 148d8fc..9378b8d 100644
--- a/packages/PrintSpooler/res/values-sw/strings.xml
+++ b/packages/PrintSpooler/res/values-sw/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Printa zote..."</string>
<string name="search" msgid="5421724265322228497">"Tafuta"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Printa zote"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Chagua huduma ya printa"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Tafuta katika duka la Google Play"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Inachapisha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Inaghairi <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Hitilafu ya kuchapisha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"Anzisha upya"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Hakuna muunganisho kwa printa"</string>
<string name="reason_unknown" msgid="5507940196503246139">"haijulikani"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - haipatikani"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Nyeusi na Nyeupe"</item>
<item msgid="2762241247228983754">"Rangi"</item>
diff --git a/packages/PrintSpooler/res/values-th/strings.xml b/packages/PrintSpooler/res/values-th/strings.xml
index ba20aaf..f46588f 100644
--- a/packages/PrintSpooler/res/values-th/strings.xml
+++ b/packages/PrintSpooler/res/values-th/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"เครื่องพิมพ์ทั้งหมด…"</string>
<string name="search" msgid="5421724265322228497">"ค้นหา"</string>
<string name="all_printers_label" msgid="3178848870161526399">"เครื่องพิมพ์ทั้งหมด"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"เลือกบริการพิมพ์"</string>
- <string name="search_play_store" msgid="1575218005860538249">"ค้นหาใน Play สโตร์"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"กำลังพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"กำลังยกเลิก <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"ข้อผิดพลาดเครื่องพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-tl/strings.xml b/packages/PrintSpooler/res/values-tl/strings.xml
index a0fd8ad..6aac2e8 100644
--- a/packages/PrintSpooler/res/values-tl/strings.xml
+++ b/packages/PrintSpooler/res/values-tl/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Lahat ng printer…"</string>
<string name="search" msgid="5421724265322228497">"Hanapin"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Lahat ng printer"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Pumili ng serbisyo ng pag-print"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Hanapin sa play store"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"Pini-print ang <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Kinakansela ang <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Error sa printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-tr/strings.xml b/packages/PrintSpooler/res/values-tr/strings.xml
index ef57400..95e52a4 100644
--- a/packages/PrintSpooler/res/values-tr/strings.xml
+++ b/packages/PrintSpooler/res/values-tr/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Tüm yazıcılar…"</string>
<string name="search" msgid="5421724265322228497">"Ara"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Tüm yazıcılar"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Yazdırma hizmetini seçin"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Google Play Store\'da ara"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> yazdırılıyor"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> iptal ediliyor"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Yazıcı hatası: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"Yeniden başlat"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"Yazıcı bağlantısı yok"</string>
<string name="reason_unknown" msgid="5507940196503246139">"bilinmiyor"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – kullanılamıyor"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"Siyah Beyaz"</item>
<item msgid="2762241247228983754">"Renkli"</item>
diff --git a/packages/PrintSpooler/res/values-uk/strings.xml b/packages/PrintSpooler/res/values-uk/strings.xml
index 0aa514f..f88da45 100644
--- a/packages/PrintSpooler/res/values-uk/strings.xml
+++ b/packages/PrintSpooler/res/values-uk/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Усі принтери…"</string>
<string name="search" msgid="5421724265322228497">"Пошук"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Усі принтери"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Додати службу"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Вибрати службу друку"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Шукати в магазині Play"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Принтери не знайдено"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" друкується"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" скасовується"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Помилка завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
diff --git a/packages/PrintSpooler/res/values-vi/strings.xml b/packages/PrintSpooler/res/values-vi/strings.xml
index bb06d8b0..9141cba 100644
--- a/packages/PrintSpooler/res/values-vi/strings.xml
+++ b/packages/PrintSpooler/res/values-vi/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"Tất cả máy in…"</string>
<string name="search" msgid="5421724265322228497">"Tìm kiếm"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Tất cả máy in"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Chọn dịch vụ in"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Tìm kiếm trong Cửa hàng Play"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"In <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Hủy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Lỗi máy in <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
index 71ea194..c5899b3 100644
--- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"所有打印机…"</string>
<string name="search" msgid="5421724265322228497">"搜索"</string>
<string name="all_printers_label" msgid="3178848870161526399">"所有打印机"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"选择打印服务"</string>
- <string name="search_play_store" msgid="1575218005860538249">"在 Play 商店中搜索"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"正在打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"打印机在打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”时出错"</string>
@@ -45,8 +48,7 @@
<string name="restart" msgid="2472034227037808749">"重新开始"</string>
<string name="no_connection_to_printer" msgid="2159246915977282728">"未与打印机建立连接"</string>
<string name="reason_unknown" msgid="5507940196503246139">"未知"</string>
- <!-- no translation found for printer_unavailable (2434170617003315690) -->
- <skip />
+ <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - 无法使用"</string>
<string-array name="color_mode_labels">
<item msgid="7602948745415174937">"黑白"</item>
<item msgid="2762241247228983754">"彩色"</item>
diff --git a/packages/PrintSpooler/res/values-zh-rHK/strings.xml b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
index 99eb30a..6a30ad1 100644
--- a/packages/PrintSpooler/res/values-zh-rHK/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"所有打印機…"</string>
<string name="search" msgid="5421724265322228497">"搜尋"</string>
<string name="all_printers_label" msgid="3178848870161526399">"所有打印機"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string>
- <string name="search_play_store" msgid="1575218005860538249">"前往「Play 商店」搜尋"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"正在列印 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"打印機錯誤:<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rTW/strings.xml b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
index 4f20161..1e192cf 100644
--- a/packages/PrintSpooler/res/values-zh-rTW/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
@@ -35,8 +35,11 @@
<string name="all_printers" msgid="5018829726861876202">"所有印表機…"</string>
<string name="search" msgid="5421724265322228497">"搜尋"</string>
<string name="all_printers_label" msgid="3178848870161526399">"所有印表機"</string>
+ <!-- no translation found for add_print_service_label (5356702546188981940) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string>
- <string name="search_play_store" msgid="1575218005860538249">"前往 Play 商店搜尋"</string>
+ <!-- no translation found for print_no_printers_found (5932593791392441303) -->
+ <skip />
<string name="printing_notification_title_template" msgid="295903957762447362">"正在列印 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"印表機發生錯誤:<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/PrintSpooler/res/values-zu/strings.xml b/packages/PrintSpooler/res/values-zu/strings.xml
index 7ad8ce2..e93fb1a 100644
--- a/packages/PrintSpooler/res/values-zu/strings.xml
+++ b/packages/PrintSpooler/res/values-zu/strings.xml
@@ -35,8 +35,9 @@
<string name="all_printers" msgid="5018829726861876202">"Wonke amaphrinta…"</string>
<string name="search" msgid="5421724265322228497">"Sesha"</string>
<string name="all_printers_label" msgid="3178848870161526399">"Wonke amaphrinta"</string>
+ <string name="add_print_service_label" msgid="5356702546188981940">"Engeza isevisi"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Khetha isevisi yephrinta"</string>
- <string name="search_play_store" msgid="1575218005860538249">"Sesha ku-Google Play Isitolo"</string>
+ <string name="print_no_printers_found" msgid="5932593791392441303">"Awekho amaphrinta atholiwe"</string>
<string name="printing_notification_title_template" msgid="295903957762447362">"Iphrinta i-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="cancelling_notification_title_template" msgid="1821759594704703197">"Ikhansela i-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="failed_notification_title_template" msgid="2256217208186530973">"Iphutha lephrinta ye-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/drawable-hdpi/nav_background.9.png b/packages/SystemUI/res/drawable-hdpi/nav_background.9.png
new file mode 100644
index 0000000..db36d2b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/nav_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/search_light.png b/packages/SystemUI/res/drawable-hdpi/search_light.png
index 9a8f771..c8b5a2e 100644
--- a/packages/SystemUI/res/drawable-hdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-hdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/status_background.9.png b/packages/SystemUI/res/drawable-hdpi/status_background.9.png
new file mode 100644
index 0000000..66d14675
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/status_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/nav_background.9.png b/packages/SystemUI/res/drawable-mdpi/nav_background.9.png
new file mode 100644
index 0000000..45e6e8f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/nav_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/search_light.png b/packages/SystemUI/res/drawable-mdpi/search_light.png
index c355b6a..4b5b2a4 100644
--- a/packages/SystemUI/res/drawable-mdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-mdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/status_background.9.png b/packages/SystemUI/res/drawable-mdpi/status_background.9.png
new file mode 100644
index 0000000..49076d3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/status_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/nav_background.9.png b/packages/SystemUI/res/drawable-xhdpi/nav_background.9.png
new file mode 100644
index 0000000..152e4ac
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/nav_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/search_light.png b/packages/SystemUI/res/drawable-xhdpi/search_light.png
index 68b70eb..3aa890f 100644
--- a/packages/SystemUI/res/drawable-xhdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-xhdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/status_background.9.png b/packages/SystemUI/res/drawable-xhdpi/status_background.9.png
new file mode 100644
index 0000000..75ec8f5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/status_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/nav_background.9.png b/packages/SystemUI/res/drawable-xxhdpi/nav_background.9.png
new file mode 100644
index 0000000..cce2e062
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/nav_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/search_light.png b/packages/SystemUI/res/drawable-xxhdpi/search_light.png
index faa97f8..74ad3c8 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/search_light.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/search_light.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png b/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png
new file mode 100644
index 0000000..679ca5d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/status_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 1c0f5fe..02e641c 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -132,7 +132,7 @@
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"វ៉ាយហ្វាយ"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"គ្មានស៊ីមកាត។"</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ការភ្ជាប់ប៊្លូធូស។"</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"របៀបជិះយន្តហោះ"</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>
@@ -151,7 +151,7 @@
<string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
<string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"ចល័ត <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ថ្ម <xliff:g id="STATE">%s</xliff:g> ។"</string>
- <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"របៀបជិះយន្តហោះ <xliff:g id="STATE">%s</xliff:g> ។"</string>
+ <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"របៀបពេលជិះយន្តហោះ <xliff:g id="STATE">%s</xliff:g> ។"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"ប៊្លូធូស <xliff:g id="STATE">%s</xliff:g> ។"</string>
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"កំណត់សំឡេងរោទ៍សម្រាប់ <xliff:g id="TIME">%s</xliff:g> ។"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"បានបិទទិន្នន័យ 2G-3G"</string>
@@ -173,7 +173,7 @@
<string name="dessert_case" msgid="1295161776223959221">"ករណី Dessert"</string>
<string name="start_dreams" msgid="7219575858348719790">"ស្រមើស្រមៃ"</string>
<string name="ethernet_label" msgid="7967563676324087464">"អ៊ីសឺរណិត"</string>
- <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"របៀបជិះយន្តហោះ"</string>
+ <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"របៀបពេលជិះយន្តហោះ"</string>
<string name="quick_settings_battery_charging_label" msgid="490074774465309209">"បញ្ចូលថ្ម <xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"បានបញ្ចូលពេញ"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ប៊្លូធូស"</string>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 2f0d0f9..ce94162 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -21,8 +21,6 @@
<drawable name="ticker_background_color">#ff1d1d1d</drawable>
<drawable name="system_bar_background">#ff000000</drawable>
<color name="system_bar_background_semi_transparent">#66000000</color> <!-- 40% black -->
- <color name="system_bar_background_gradient_start">#8c000000</color> <!-- 55% black -->
- <color name="system_bar_background_gradient_end">#00000000</color>
<color name="notification_panel_solid_background">#ff000000</color>
<drawable name="status_bar_recents_app_thumbnail_background">#88000000</drawable>
<color name="status_bar_recents_app_label_color">#ffffffff</color>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
index 0c25c83..ce578e5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -23,8 +23,6 @@
import android.content.res.Resources;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
-import android.graphics.drawable.GradientDrawable;
-import android.graphics.drawable.GradientDrawable.Orientation;
import android.graphics.drawable.TransitionDrawable;
import android.util.Log;
import android.view.View;
@@ -50,15 +48,12 @@
private final int mOpaque;
private final int mSemiTransparent;
- private final int mGradientStart;
- private final int mGradientEnd;
private int mMode;
private ValueAnimator mColorDrawableAnimator;
private boolean mColorDrawableShowing;
private final ColorDrawable mColorDrawable;
- private final GradientDrawable mGradientDrawable;
private final TransitionDrawable mTransitionDrawable;
private final AnimatorUpdateListener mAnimatorListener = new AnimatorUpdateListener() {
@Override
@@ -67,7 +62,7 @@
}
};
- public BarTransitions(View view) {
+ public BarTransitions(View view, int gradientResourceId) {
mTag = "BarTransitions." + view.getClass().getSimpleName();
mView = view;
final Resources res = mView.getContext().getResources();
@@ -75,20 +70,14 @@
if (DEBUG_COLORS) {
mOpaque = 0xff0000ff;
mSemiTransparent = 0x7f0000ff;
- mGradientStart = 0x7fff0000;
- mGradientEnd = 0x7f00ff00;
} else {
mOpaque = res.getColor(R.drawable.system_bar_background);
mSemiTransparent = res.getColor(R.color.system_bar_background_semi_transparent);
- mGradientStart = res.getColor(R.color.system_bar_background_gradient_start);
- mGradientEnd = res.getColor(R.color.system_bar_background_gradient_end);
}
mColorDrawable = new ColorDrawable(mOpaque);
- mGradientDrawable = new GradientDrawable(Orientation.BOTTOM_TOP,
- new int[] { mGradientStart, mGradientEnd });
mTransitionDrawable = new TransitionDrawable(
- new Drawable[] { mGradientDrawable, mColorDrawable });
+ new Drawable[] { res.getDrawable(gradientResourceId), mColorDrawable });
mTransitionDrawable.setCrossFadeEnabled(true);
mTransitionDrawable.resetTransition();
if (mSupportsTransitions) {
@@ -96,13 +85,6 @@
}
}
- protected void setOrientation(GradientDrawable.Orientation orientation) {
- if (orientation.equals(mGradientDrawable.getOrientation())) return; // GD doesn't check
- if (DEBUG) Log.d(mTag, "setOrientation " + orientation);
- mGradientDrawable.mutate();
- mGradientDrawable.setOrientation(orientation);
- }
-
public int getMode() {
return mMode;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
index 04922fb..4e92179 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
@@ -19,7 +19,6 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.Context;
-import android.graphics.drawable.GradientDrawable.Orientation;
import android.os.ServiceManager;
import android.view.MotionEvent;
import android.view.View;
@@ -35,9 +34,11 @@
private final IStatusBarService mBarService;
private boolean mLightsOut;
+ private boolean mVertical;
+ private int mRequestedMode;
public NavigationBarTransitions(NavigationBarView view) {
- super(view);
+ super(view, R.drawable.nav_background);
mView = view;
mBarService = IStatusBarService.Stub.asInterface(
ServiceManager.getService(Context.STATUS_BAR_SERVICE));
@@ -50,7 +51,18 @@
}
public void setVertical(boolean isVertical) {
- setOrientation(isVertical ? Orientation.RIGHT_LEFT : Orientation.BOTTOM_TOP);
+ mVertical = isVertical;
+ transitionTo(mRequestedMode, false /*animate*/);
+ }
+
+ @Override
+ public void transitionTo(int mode, boolean animate) {
+ mRequestedMode = mode;
+ if (mVertical && mode == MODE_TRANSPARENT) {
+ // fully transparent mode not allowed when vertical
+ mode = MODE_OPAQUE;
+ }
+ super.transitionTo(mode, animate);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
index a492d76..6bb6776 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
@@ -37,7 +37,7 @@
private Animator mCurrentAnimation;
public PhoneStatusBarTransitions(PhoneStatusBarView view) {
- super(view);
+ super(view, R.drawable.status_background);
mView = view;
final Resources res = mView.getContext().getResources();
mIconAlphaWhenOpaque = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1);
@@ -49,7 +49,6 @@
mSignalCluster = mView.findViewById(R.id.signal_cluster);
mBattery = mView.findViewById(R.id.battery);
mClock = mView.findViewById(R.id.clock);
- setOrientation(Orientation.TOP_BOTTOM);
applyModeBackground(-1, getMode(), false /*animate*/);
applyMode(getMode(), false /*animate*/);
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 7f93c28..3232a1e 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -374,6 +374,7 @@
static final Rect mTmpOverscanFrame = new Rect();
static final Rect mTmpContentFrame = new Rect();
static final Rect mTmpVisibleFrame = new Rect();
+ static final Rect mTmpDecorFrame = new Rect();
static final Rect mTmpNavigationFrame = new Rect();
WindowState mTopFullscreenOpaqueWindowState;
@@ -1620,10 +1621,6 @@
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
- if (!compatInfo.supportsScreen()) {
- win.addFlags(WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW);
- }
-
win.setDefaultIcon(icon);
win.setDefaultLogo(logo);
@@ -1638,6 +1635,11 @@
params.privateFlags |=
WindowManager.LayoutParams.PRIVATE_FLAG_FAKE_HARDWARE_ACCELERATED;
params.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
+
+ if (!compatInfo.supportsScreen()) {
+ params.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
+ }
+
params.setTitle("Starting " + packageName);
wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
@@ -2680,10 +2682,12 @@
final Rect df = mTmpDisplayFrame;
final Rect of = mTmpOverscanFrame;
final Rect vf = mTmpVisibleFrame;
+ final Rect dcf = mTmpDecorFrame;
pf.left = df.left = of.left = vf.left = mDockLeft;
pf.top = df.top = of.top = vf.top = mDockTop;
pf.right = df.right = of.right = vf.right = mDockRight;
pf.bottom = df.bottom = of.bottom = vf.bottom = mDockBottom;
+ dcf.setEmpty(); // Decor frame N/A for system bars.
if (isDefaultDisplay) {
// For purposes of putting out fake window up to steal focus, we will
@@ -2706,7 +2710,7 @@
} else if (mHideNavFakeWindow == null) {
mHideNavFakeWindow = mWindowManagerFuncs.addFakeWindow(
mHandler.getLooper(), mHideNavInputEventReceiverFactory,
- "hidden nav", WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER,
+ "hidden nav", WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER, 0,
0, false, false, true);
}
@@ -2781,7 +2785,7 @@
mStatusBarLayer = mNavigationBar.getSurfaceLayer();
// And compute the final frame.
mNavigationBar.computeFrameLw(mTmpNavigationFrame, mTmpNavigationFrame,
- mTmpNavigationFrame, mTmpNavigationFrame, mTmpNavigationFrame);
+ mTmpNavigationFrame, mTmpNavigationFrame, mTmpNavigationFrame, dcf);
if (DEBUG_LAYOUT) Slog.i(TAG, "mNavigationBar frame: " + mTmpNavigationFrame);
if (mNavigationBarController.checkHiddenLw()) {
updateSysUiVisibility = true;
@@ -2806,7 +2810,7 @@
mStatusBarLayer = mStatusBar.getSurfaceLayer();
// Let the status bar determine its size.
- mStatusBar.computeFrameLw(pf, df, vf, vf, vf);
+ mStatusBar.computeFrameLw(pf, df, vf, vf, vf, dcf);
// For layout, the status bar is always at the top with our fixed height.
mStableTop = mUnrestrictedScreenTop + mStatusBarHeight;
@@ -2854,11 +2858,7 @@
/** {@inheritDoc} */
@Override
- public int getSystemDecorRectLw(Rect systemRect) {
- systemRect.left = mSystemLeft;
- systemRect.top = mSystemTop;
- systemRect.right = mSystemRight;
- systemRect.bottom = mSystemBottom;
+ public int getSystemDecorLayerLw() {
if (mStatusBar != null) return mStatusBar.getSurfaceLayer();
if (mNavigationBar != null) return mNavigationBar.getSurfaceLayer();
return 0;
@@ -2961,6 +2961,8 @@
final Rect of = mTmpOverscanFrame;
final Rect cf = mTmpContentFrame;
final Rect vf = mTmpVisibleFrame;
+ final Rect dcf = mTmpDecorFrame;
+ dcf.setEmpty();
final boolean hasNavBar = (isDefaultDisplay && mHasNavigationBar
&& mNavigationBar != null && mNavigationBar.isVisibleLw());
@@ -2991,6 +2993,28 @@
attrs.gravity = Gravity.BOTTOM;
mDockLayer = win.getSurfaceLayer();
} else {
+
+ // Default policy decor for the default display
+ dcf.left = mSystemLeft;
+ dcf.top = mSystemTop;
+ dcf.right = mSystemRight;
+ dcf.bottom = mSystemBottom;
+ if (attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
+ && attrs.type <= WindowManager.LayoutParams.LAST_APPLICATION_WINDOW) {
+ if ((attrs.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) == 0
+ && (sysUiFl & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0
+ && (sysUiFl & View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS) == 0) {
+ // Ensure policy decor includes status bar
+ dcf.top = mStableTop;
+ }
+ if ((sysUiFl & View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION) == 0
+ && (sysUiFl & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {
+ // Ensure policy decor includes navigation bar
+ dcf.bottom = mStableBottom;
+ dcf.right = mStableRight;
+ }
+ }
+
if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR))
== (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) {
if (DEBUG_LAYOUT) Slog.v(TAG, "layoutWindowLw(" + attrs.getTitle()
@@ -3026,7 +3050,7 @@
if (DEBUG_LAYOUT) Slog.v(TAG, String.format(
"Laying out status bar window: (%d,%d - %d,%d)",
pf.left, pf.top, pf.right, pf.bottom));
- } else if ((attrs.flags&FLAG_LAYOUT_IN_OVERSCAN) != 0
+ } else if ((fl & FLAG_LAYOUT_IN_OVERSCAN) != 0
&& attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
&& attrs.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
// Asking to layout into the overscan region, so give it that pure
@@ -3071,7 +3095,7 @@
of.bottom = mUnrestrictedScreenTop + mUnrestrictedScreenHeight;
}
- if ((attrs.flags&FLAG_FULLSCREEN) == 0) {
+ if ((fl & FLAG_FULLSCREEN) == 0) {
if (adjust != SOFT_INPUT_ADJUST_RESIZE) {
cf.left = mDockLeft;
cf.top = mDockTop;
@@ -3093,7 +3117,6 @@
cf.right = mRestrictedScreenLeft + mRestrictedScreenWidth;
cf.bottom = mRestrictedScreenTop + mRestrictedScreenHeight;
}
-
applyStableConstraints(sysUiFl, fl, cf);
if (adjust != SOFT_INPUT_ADJUST_NOTHING) {
vf.left = mCurLeft;
@@ -3164,7 +3187,7 @@
= mUnrestrictedScreenLeft + mUnrestrictedScreenWidth;
pf.bottom = df.bottom = of.bottom = cf.bottom
= mUnrestrictedScreenTop + mUnrestrictedScreenHeight;
- } else if ((attrs.flags & FLAG_LAYOUT_IN_OVERSCAN) != 0
+ } else if ((fl & FLAG_LAYOUT_IN_OVERSCAN) != 0
&& attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
&& attrs.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
// Asking to layout into the overscan region, so give it that pure
@@ -3275,9 +3298,10 @@
+ String.format(" flags=0x%08x", fl)
+ " pf=" + pf.toShortString() + " df=" + df.toShortString()
+ " of=" + of.toShortString()
- + " cf=" + cf.toShortString() + " vf=" + vf.toShortString());
+ + " cf=" + cf.toShortString() + " vf=" + vf.toShortString()
+ + " dcf=" + dcf.toShortString());
- win.computeFrameLw(pf, df, of, cf, vf);
+ win.computeFrameLw(pf, df, of, cf, vf, dcf);
// Dock windows carve out the bottom of the screen, so normal windows
// can't appear underneath them.
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index 9e7a15d..274009f 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -474,6 +474,7 @@
const InputWindowInfo* windowInfo = windowHandle->getInfo();
if (windowInfo->displayId == displayId) {
int32_t flags = windowInfo->layoutParamsFlags;
+ int32_t privateFlags = windowInfo->layoutParamsPrivateFlags;
if (windowInfo->visible) {
if (!(flags & InputWindowInfo::FLAG_NOT_TOUCHABLE)) {
@@ -486,7 +487,7 @@
}
}
- if (flags & InputWindowInfo::FLAG_SYSTEM_ERROR) {
+ if (privateFlags & InputWindowInfo::PRIVATE_FLAG_SYSTEM_ERROR) {
// Error window is on top but not visible, so touch is dropped.
return NULL;
}
@@ -1215,13 +1216,14 @@
continue; // wrong display
}
- int32_t flags = windowInfo->layoutParamsFlags;
- if (flags & InputWindowInfo::FLAG_SYSTEM_ERROR) {
+ int32_t privateFlags = windowInfo->layoutParamsPrivateFlags;
+ if (privateFlags & InputWindowInfo::PRIVATE_FLAG_SYSTEM_ERROR) {
if (topErrorWindowHandle == NULL) {
topErrorWindowHandle = windowHandle;
}
}
+ int32_t flags = windowInfo->layoutParamsFlags;
if (windowInfo->visible) {
if (! (flags & InputWindowInfo::FLAG_NOT_TOUCHABLE)) {
isTouchModal = (flags & (InputWindowInfo::FLAG_NOT_FOCUSABLE
diff --git a/services/input/InputWindow.h b/services/input/InputWindow.h
index 136870a..28fa7ab 100644
--- a/services/input/InputWindow.h
+++ b/services/input/InputWindow.h
@@ -59,13 +59,13 @@
FLAG_TURN_SCREEN_ON = 0x00200000,
FLAG_DISMISS_KEYGUARD = 0x00400000,
FLAG_SPLIT_TOUCH = 0x00800000,
- FLAG_HARDWARE_ACCELERATED = 0x01000000,
- FLAG_HARDWARE_ACCELERATED_SYSTEM = 0x02000000,
- FLAG_SLIPPERY = 0x04000000,
- FLAG_NEEDS_MENU_KEY = 0x08000000,
- FLAG_KEEP_SURFACE_WHILE_ANIMATING = 0x10000000,
- FLAG_COMPATIBLE_WINDOW = 0x20000000,
- FLAG_SYSTEM_ERROR = 0x40000000,
+ FLAG_SLIPPERY = 0x20000000,
+ FLAG_NEEDS_MENU_KEY = 0x40000000,
+ };
+
+ // Private Window flags from WindowManager.LayoutParams
+ enum {
+ PRIVATE_FLAG_SYSTEM_ERROR = 0x00000100,
};
// Window types from WindowManager.LayoutParams
@@ -117,6 +117,7 @@
sp<InputChannel> inputChannel;
String8 name;
int32_t layoutParamsFlags;
+ int32_t layoutParamsPrivateFlags;
int32_t layoutParamsType;
nsecs_t dispatchingTimeout;
int32_t frameLeft;
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 3f13f3a..f005f5f 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -3987,8 +3987,8 @@
return timeOutMs;
}
- // Start off with notification off
- setProvNotificationVisible(false, ConnectivityManager.TYPE_NONE, null, null);
+ // Start off with mobile notification off
+ setProvNotificationVisible(false, ConnectivityManager.TYPE_MOBILE_HIPRI, null, null);
CheckMp checkMp = new CheckMp(mContext, this);
CheckMp.CallBack cb = new CheckMp.CallBack() {
@@ -4013,7 +4013,8 @@
}
if (TextUtils.isEmpty(url) == false) {
if (DBG) log("CheckMp.onComplete: warm (redirected), url=" + url);
- setProvNotificationVisible(true, ni.getType(), ni.getExtraInfo(),
+ setProvNotificationVisible(true,
+ ConnectivityManager.TYPE_MOBILE_HIPRI, ni.getExtraInfo(),
url);
} else {
if (DBG) log("CheckMp.onComplete: warm (redirected), no url");
@@ -4024,7 +4025,8 @@
String url = getMobileProvisioningUrl();
if (TextUtils.isEmpty(url) == false) {
if (DBG) log("CheckMp.onComplete: warm (no dns/tcp), url=" + url);
- setProvNotificationVisible(true, ni.getType(), ni.getExtraInfo(),
+ setProvNotificationVisible(true,
+ ConnectivityManager.TYPE_MOBILE_HIPRI, ni.getExtraInfo(),
url);
} else {
if (DBG) log("CheckMp.onComplete: warm (no dns/tcp), no url");
@@ -4426,7 +4428,7 @@
private void handleMobileProvisioningAction(String url) {
// Notication mark notification as not visible
- setProvNotificationVisible(false, ConnectivityManager.TYPE_NONE, null, null);
+ setProvNotificationVisible(false, ConnectivityManager.TYPE_MOBILE_HIPRI, null, null);
// If provisioning network handle as a special case,
// otherwise launch browser with the intent directly.
@@ -4512,14 +4514,14 @@
notification.setLatestEventInfo(mContext, title, details, notification.contentIntent);
try {
- notificationManager.notify(NOTIFICATION_ID, 1, notification);
+ notificationManager.notify(NOTIFICATION_ID, networkType, notification);
} catch (NullPointerException npe) {
loge("setNotificaitionVisible: visible notificationManager npe=" + npe);
npe.printStackTrace();
}
} else {
try {
- notificationManager.cancel(NOTIFICATION_ID, 1);
+ notificationManager.cancel(NOTIFICATION_ID, networkType);
} catch (NullPointerException npe) {
loge("setNotificaitionVisible: cancel notificationManager npe=" + npe);
npe.printStackTrace();
diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java
index 6ab86f5..59ec777 100644
--- a/services/java/com/android/server/MountService.java
+++ b/services/java/com/android/server/MountService.java
@@ -2145,6 +2145,10 @@
return -1;
}
+ if (!appPath.endsWith("/")) {
+ appPath = appPath + "/";
+ }
+
// Try translating the app path into a vold path, but require that it
// belong to the calling package.
String voldPath = maybeTranslatePathForVold(appPath,
@@ -2194,9 +2198,9 @@
}
for (int i = 0; i < appPaths.length; i++) {
- final String appPath = appPaths[i].getAbsolutePath();
+ final String appPath = appPaths[i].getAbsolutePath() + "/";
if (path.startsWith(appPath)) {
- path = new File(voldPaths[i], path.substring(appPath.length() + 1))
+ path = new File(voldPaths[i], path.substring(appPath.length()))
.getAbsolutePath();
if (!path.endsWith("/")) {
path = path + "/";
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index ef50df7..0e0f156 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -515,8 +515,9 @@
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);
networkStats.bindConnectivityManager(connectivity);
networkPolicy.bindConnectivityManager(connectivity);
- wifi.checkAndStartWifi();
+
wifiP2p.connectivityServiceReady();
+ wifi.checkAndStartWifi();
} catch (Throwable e) {
reportWtf("starting Connectivity Service", e);
}
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java
index 162add4..6957bac0 100644
--- a/services/java/com/android/server/WallpaperManagerService.java
+++ b/services/java/com/android/server/WallpaperManagerService.java
@@ -219,6 +219,8 @@
WallpaperData mWallpaper;
IRemoteCallback mReply;
+ boolean mDimensionsChanged = false;
+
public WallpaperConnection(WallpaperInfo info, WallpaperData wallpaper) {
mInfo = info;
mWallpaper = wallpaper;
@@ -262,6 +264,14 @@
public void attachEngine(IWallpaperEngine engine) {
synchronized (mLock) {
mEngine = engine;
+ if (mDimensionsChanged) {
+ try {
+ mEngine.setDesiredSize(mWallpaper.width, mWallpaper.height);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to set wallpaper dimensions", e);
+ }
+ mDimensionsChanged = false;
+ }
}
}
@@ -652,6 +662,11 @@
} catch (RemoteException e) {
}
notifyCallbacksLocked(wallpaper);
+ } else if (wallpaper.connection.mService != null) {
+ // We've attached to the service but the engine hasn't attached back to us
+ // yet. This means it will be created with the previous dimensions, so we
+ // need to update it to the new dimensions once it attaches.
+ wallpaper.connection.mDimensionsChanged = true;
}
}
}
diff --git a/services/java/com/android/server/am/AppErrorDialog.java b/services/java/com/android/server/am/AppErrorDialog.java
index fffa75e..0ba62c5 100644
--- a/services/java/com/android/server/am/AppErrorDialog.java
+++ b/services/java/com/android/server/am/AppErrorDialog.java
@@ -16,8 +16,6 @@
package com.android.server.am;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
-
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
@@ -72,10 +70,10 @@
}
setTitle(res.getText(com.android.internal.R.string.aerr_title));
- getWindow().addFlags(PRIVATE_FLAG_SYSTEM_ERROR);
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.setTitle("Application Error: " + app.info.processName);
- attrs.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
+ attrs.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR
+ | WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
getWindow().setAttributes(attrs);
if (app.persistent) {
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
diff --git a/services/java/com/android/server/am/AppNotRespondingDialog.java b/services/java/com/android/server/am/AppNotRespondingDialog.java
index 4de272d..f4c1664 100644
--- a/services/java/com/android/server/am/AppNotRespondingDialog.java
+++ b/services/java/com/android/server/am/AppNotRespondingDialog.java
@@ -16,8 +16,6 @@
package com.android.server.am;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
-
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
@@ -94,10 +92,10 @@
if (aboveSystem) {
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
}
- getWindow().addFlags(PRIVATE_FLAG_SYSTEM_ERROR);
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.setTitle("Application Not Responding: " + app.info.processName);
- attrs.privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
+ attrs.privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR |
+ WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
getWindow().setAttributes(attrs);
}
diff --git a/services/java/com/android/server/am/StrictModeViolationDialog.java b/services/java/com/android/server/am/StrictModeViolationDialog.java
index 5fee0d3..fda1ec1 100644
--- a/services/java/com/android/server/am/StrictModeViolationDialog.java
+++ b/services/java/com/android/server/am/StrictModeViolationDialog.java
@@ -74,7 +74,7 @@
}
setTitle(res.getText(com.android.internal.R.string.aerr_title));
- getWindow().addFlags(PRIVATE_FLAG_SYSTEM_ERROR);
+ getWindow().addPrivateFlags(PRIVATE_FLAG_SYSTEM_ERROR);
getWindow().setTitle("Strict Mode Violation: " + app.info.processName);
// After the timeout, pretend the user clicked the quit button
diff --git a/services/java/com/android/server/input/InputWindowHandle.java b/services/java/com/android/server/input/InputWindowHandle.java
index ad4fdd1..9eb9a33 100644
--- a/services/java/com/android/server/input/InputWindowHandle.java
+++ b/services/java/com/android/server/input/InputWindowHandle.java
@@ -44,6 +44,7 @@
// Window layout params attributes. (WindowManager.LayoutParams)
public int layoutParamsFlags;
+ public int layoutParamsPrivateFlags;
public int layoutParamsType;
// Dispatching timeout.
diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java
index 2ccd21c..8fbde14 100644
--- a/services/java/com/android/server/power/PowerManagerService.java
+++ b/services/java/com/android/server/power/PowerManagerService.java
@@ -580,6 +580,12 @@
}
@Override // Binder call
+ public void acquireWakeLockWithUid(IBinder lock, int flags, String tag, String packageName,
+ int uid) {
+ acquireWakeLock(lock, flags, tag, packageName, new WorkSource(uid));
+ }
+
+ @Override // Binder call
public void acquireWakeLock(IBinder lock, int flags, String tag, String packageName,
WorkSource ws) {
if (lock == null) {
diff --git a/services/java/com/android/server/wifi/WifiController.java b/services/java/com/android/server/wifi/WifiController.java
index 87b4394..a3d514e 100644
--- a/services/java/com/android/server/wifi/WifiController.java
+++ b/services/java/com/android/server/wifi/WifiController.java
@@ -57,6 +57,7 @@
private int mStayAwakeConditions;
private long mIdleMillis;
private int mSleepPolicy;
+ private boolean mFirstUserSignOnSeen = false;
private AlarmManager mAlarmManager;
private PendingIntent mIdleIntent;
@@ -113,6 +114,7 @@
static final int CMD_AIRPLANE_TOGGLED = BASE + 9;
static final int CMD_SET_AP = BASE + 10;
static final int CMD_DEFERRED_TOGGLE = BASE + 11;
+ static final int CMD_USER_PRESENT = BASE + 12;
private DefaultState mDefaultState = new DefaultState();
private StaEnabledState mStaEnabledState = new StaEnabledState();
@@ -361,6 +363,9 @@
case CMD_AIRPLANE_TOGGLED:
case CMD_EMERGENCY_MODE_CHANGED:
break;
+ case CMD_USER_PRESENT:
+ mFirstUserSignOnSeen = true;
+ break;
case CMD_DEFERRED_TOGGLE:
log("DEFERRED_TOGGLE ignored due to state change");
break;
@@ -639,6 +644,15 @@
if (msg.what == CMD_DEVICE_IDLE) {
checkLocksAndTransitionWhenDeviceIdle();
// We let default state handle the rest of work
+ } else if (msg.what == CMD_USER_PRESENT) {
+ // TLS networks can't connect until user unlocks keystore. KeyStore
+ // unlocks when the user punches PIN after the reboot. So use this
+ // trigger to get those networks connected.
+ if (mFirstUserSignOnSeen == false) {
+ mWifiStateMachine.reloadTlsNetworksAndReconnect();
+ }
+ mFirstUserSignOnSeen = true;
+ return HANDLED;
}
return NOT_HANDLED;
}
diff --git a/services/java/com/android/server/wifi/WifiService.java b/services/java/com/android/server/wifi/WifiService.java
index f93a45b..86c68f3 100644
--- a/services/java/com/android/server/wifi/WifiService.java
+++ b/services/java/com/android/server/wifi/WifiService.java
@@ -83,6 +83,7 @@
import static com.android.server.wifi.WifiController.CMD_SCREEN_OFF;
import static com.android.server.wifi.WifiController.CMD_SCREEN_ON;
import static com.android.server.wifi.WifiController.CMD_SET_AP;
+import static com.android.server.wifi.WifiController.CMD_USER_PRESENT;
import static com.android.server.wifi.WifiController.CMD_WIFI_TOGGLED;
/**
* WifiService handles remote WiFi operation requests by implementing
@@ -1084,6 +1085,8 @@
String action = intent.getAction();
if (action.equals(Intent.ACTION_SCREEN_ON)) {
mWifiController.sendMessage(CMD_SCREEN_ON);
+ } else if (action.equals(Intent.ACTION_USER_PRESENT)) {
+ mWifiController.sendMessage(CMD_USER_PRESENT);
} else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
mWifiController.sendMessage(CMD_SCREEN_OFF);
} else if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
@@ -1120,6 +1123,7 @@
private void registerForBroadcasts() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
+ intentFilter.addAction(Intent.ACTION_USER_PRESENT);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
diff --git a/services/java/com/android/server/wm/DimLayer.java b/services/java/com/android/server/wm/DimLayer.java
index 39e664f..c189ddd 100644
--- a/services/java/com/android/server/wm/DimLayer.java
+++ b/services/java/com/android/server/wm/DimLayer.java
@@ -48,9 +48,13 @@
/** Time in milliseconds to take to transition from mStartAlpha to mTargetAlpha */
long mDuration;
- DimLayer(WindowManagerService service, DisplayContent displayContent) {
- mDisplayContent = displayContent;
- final int displayId = displayContent.getDisplayId();
+ /** Owning stack */
+ final TaskStack mStack;
+
+ DimLayer(WindowManagerService service, TaskStack stack) {
+ mStack = stack;
+ mDisplayContent = stack.getDisplayContent();
+ final int displayId = mDisplayContent.getDisplayId();
if (DEBUG) Slog.v(TAG, "Ctor: displayId=" + displayId);
SurfaceControl.openTransaction();
try {
@@ -160,22 +164,29 @@
return;
}
- /*
- // Set surface size to screen size.
- final DisplayInfo info = mDisplayContent.getDisplayInfo();
- // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose a
- // corner.
- final int dw = (int) (info.logicalWidth * 1.5);
- final int dh = (int) (info.logicalHeight * 1.5);
- // back off position so 1/4 of Surface is before and 1/4 is after.
- final float xPos = -1 * dw / 6;
- final float yPos = -1 * dh / 6;
- */
+ final int dw, dh;
+ final float xPos, yPos;
+ if (mStack.hasSibling()) {
+ dw = mBounds.width();
+ dh = mBounds.height();
+ xPos = mBounds.left;
+ yPos = mBounds.right;
+ } else {
+ // Set surface size to screen size.
+ final DisplayInfo info = mDisplayContent.getDisplayInfo();
+ // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose a
+ // corner.
+ dw = (int) (info.logicalWidth * 1.5);
+ dh = (int) (info.logicalHeight * 1.5);
+ // back off position so 1/4 of Surface is before and 1/4 is after.
+ xPos = -1 * dw / 6;
+ yPos = -1 * dh / 6;
+ }
if (!mLastBounds.equals(mBounds) || mLayer != layer) {
try {
- mDimSurface.setPosition(mBounds.left, mBounds.top);
- mDimSurface.setSize(mBounds.width(), mBounds.height());
+ mDimSurface.setPosition(xPos, yPos);
+ mDimSurface.setSize(dw, dh);
mDimSurface.setLayer(layer);
} catch (RuntimeException e) {
Slog.w(TAG, "Failure setting size or layer", e);
diff --git a/services/java/com/android/server/wm/DragState.java b/services/java/com/android/server/wm/DragState.java
index 745b886..a737939 100644
--- a/services/java/com/android/server/wm/DragState.java
+++ b/services/java/com/android/server/wm/DragState.java
@@ -115,6 +115,7 @@
mDragWindowHandle.inputChannel = mServerChannel;
mDragWindowHandle.layer = getDragLayerLw();
mDragWindowHandle.layoutParamsFlags = 0;
+ mDragWindowHandle.layoutParamsPrivateFlags = 0;
mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG;
mDragWindowHandle.dispatchingTimeoutNanos =
WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
diff --git a/services/java/com/android/server/wm/FakeWindowImpl.java b/services/java/com/android/server/wm/FakeWindowImpl.java
index 5ec72cc..5a3471b 100644
--- a/services/java/com/android/server/wm/FakeWindowImpl.java
+++ b/services/java/com/android/server/wm/FakeWindowImpl.java
@@ -40,8 +40,8 @@
public FakeWindowImpl(WindowManagerService service,
Looper looper, InputEventReceiver.Factory inputEventReceiverFactory,
- String name, int windowType, int layoutParamsFlags, boolean canReceiveKeys,
- boolean hasFocus, boolean touchFullscreen) {
+ String name, int windowType, int layoutParamsFlags, int layoutParamsPrivateFlags,
+ boolean canReceiveKeys, boolean hasFocus, boolean touchFullscreen) {
mService = service;
InputChannel[] channels = InputChannel.openInputChannelPair(name);
@@ -63,6 +63,7 @@
mWindowLayer = getLayerLw(windowType);
mWindowHandle.layer = mWindowLayer;
mWindowHandle.layoutParamsFlags = layoutParamsFlags;
+ mWindowHandle.layoutParamsPrivateFlags = layoutParamsPrivateFlags;
mWindowHandle.layoutParamsType = windowType;
mWindowHandle.dispatchingTimeoutNanos =
WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
diff --git a/services/java/com/android/server/wm/InputMonitor.java b/services/java/com/android/server/wm/InputMonitor.java
index 2e13fe2..3d2ec45 100644
--- a/services/java/com/android/server/wm/InputMonitor.java
+++ b/services/java/com/android/server/wm/InputMonitor.java
@@ -166,7 +166,7 @@
}
private void addInputWindowHandleLw(final InputWindowHandle inputWindowHandle,
- final WindowState child, int flags, final int type,
+ final WindowState child, int flags, int privateFlags, final int type,
final boolean isVisible, final boolean hasFocus, final boolean hasWallpaper) {
// Add a window to our list of input windows.
inputWindowHandle.name = child.toString();
@@ -181,6 +181,7 @@
child.getTouchableRegion(inputWindowHandle.touchableRegion);
}
inputWindowHandle.layoutParamsFlags = flags;
+ inputWindowHandle.layoutParamsPrivateFlags = privateFlags;
inputWindowHandle.layoutParamsType = type;
inputWindowHandle.dispatchingTimeoutNanos = child.getInputDispatchingTimeoutNanos();
inputWindowHandle.visible = isVisible;
@@ -274,6 +275,7 @@
}
final int flags = child.mAttrs.flags;
+ final int privateFlags = child.mAttrs.privateFlags;
final int type = child.mAttrs.type;
final boolean hasFocus = (child == mInputFocus);
@@ -293,13 +295,14 @@
final WindowState u = universeBackground.mWin;
if (u.mInputChannel != null && u.mInputWindowHandle != null) {
addInputWindowHandleLw(u.mInputWindowHandle, u, u.mAttrs.flags,
- u.mAttrs.type, true, u == mInputFocus, false);
+ u.mAttrs.privateFlags, u.mAttrs.type,
+ true, u == mInputFocus, false);
}
addedUniverse = true;
}
if (child.mWinAnimator != universeBackground) {
- addInputWindowHandleLw(inputWindowHandle, child, flags, type,
+ addInputWindowHandleLw(inputWindowHandle, child, flags, privateFlags, type,
isVisible, hasFocus, hasWallpaper);
}
}
diff --git a/services/java/com/android/server/wm/TaskStack.java b/services/java/com/android/server/wm/TaskStack.java
index 7bb6734..2347a19 100644
--- a/services/java/com/android/server/wm/TaskStack.java
+++ b/services/java/com/android/server/wm/TaskStack.java
@@ -71,8 +71,8 @@
mStackId = stackId;
mDisplayContent = displayContent;
final int displayId = displayContent.getDisplayId();
- mDimLayer = new DimLayer(service, displayContent);
- mAnimationBackgroundSurface = new DimLayer(service, displayContent);
+ mDimLayer = new DimLayer(service, this);
+ mAnimationBackgroundSurface = new DimLayer(service, this);
}
DisplayContent getDisplayContent() {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 3b572e4..9bbaf60 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -441,7 +441,6 @@
= new ArrayList<IRotationWatcher>();
int mDeferredRotationPauseCount;
- final Rect mSystemDecorRect = new Rect();
int mSystemDecorLayer = 0;
final Rect mScreenRect = new Rect();
@@ -1233,10 +1232,10 @@
// the IME above it until it is completely gone so it doesn't drop
// behind the dialog or its full-screen scrim.
final WindowState curTarget = mInputMethodTarget;
- if (curTarget != null && w != null
+ if (curTarget != null
&& curTarget.isDisplayedLw()
&& curTarget.isClosing()
- && (curTarget.mWinAnimator.mAnimLayer > w.mWinAnimator.mAnimLayer)) {
+ && (w == null || curTarget.mWinAnimator.mAnimLayer > w.mWinAnimator.mAnimLayer)) {
if (DEBUG_INPUT_METHOD) Slog.v(TAG, "Current target higher, not changing");
return windows.indexOf(curTarget) + 1;
}
@@ -2794,7 +2793,8 @@
if (DEBUG_LAYOUT) Slog.v(TAG, "Relayout " + win + ": viewVisibility=" + viewVisibility
+ " req=" + requestedWidth + "x" + requestedHeight + " " + win.mAttrs);
- win.mEnforceSizeCompat = (win.mAttrs.flags & PRIVATE_FLAG_COMPATIBLE_WINDOW) != 0;
+ win.mEnforceSizeCompat =
+ (win.mAttrs.privateFlags & PRIVATE_FLAG_COMPATIBLE_WINDOW) != 0;
if ((attrChanges & WindowManager.LayoutParams.ALPHA_CHANGED) != 0) {
winAnimator.mAlpha = attrs.alpha;
@@ -8203,7 +8203,7 @@
mPolicy.beginLayoutLw(isDefaultDisplay, dw, dh, mRotation);
if (isDefaultDisplay) {
// Not needed on non-default displays.
- mSystemDecorLayer = mPolicy.getSystemDecorRectLw(mSystemDecorRect);
+ mSystemDecorLayer = mPolicy.getSystemDecorLayerLw();
mScreenRect.set(0, 0, dw, dh);
}
@@ -10123,12 +10123,13 @@
@Override
public FakeWindow addFakeWindow(Looper looper,
InputEventReceiver.Factory inputEventReceiverFactory,
- String name, int windowType, int layoutParamsFlags, boolean canReceiveKeys,
- boolean hasFocus, boolean touchFullscreen) {
+ String name, int windowType, int layoutParamsFlags, int layoutParamsPrivateFlags,
+ boolean canReceiveKeys, boolean hasFocus, boolean touchFullscreen) {
synchronized (mWindowMap) {
FakeWindowImpl fw = new FakeWindowImpl(this, looper, inputEventReceiverFactory,
name, windowType,
- layoutParamsFlags, canReceiveKeys, hasFocus, touchFullscreen);
+ layoutParamsFlags, layoutParamsPrivateFlags, canReceiveKeys,
+ hasFocus, touchFullscreen);
int i=0;
while (i<mFakeWindows.size()) {
if (mFakeWindows.get(i).mWindowLayer <= fw.mWindowLayer) {
@@ -10411,8 +10412,7 @@
}
pw.println();
if (dumpAll) {
- pw.print(" mSystemDecorRect="); pw.print(mSystemDecorRect.toShortString());
- pw.print(" mSystemDecorLayer="); pw.print(mSystemDecorLayer);
+ pw.print(" mSystemDecorLayer="); pw.print(mSystemDecorLayer);
pw.print(" mScreenRect="); pw.println(mScreenRect.toShortString());
if (mLastStatusBarVisibility != 0) {
pw.print(" mLastStatusBarVisibility=0x");
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index d56e225..2d08792 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -218,6 +218,7 @@
final Rect mContentFrame = new Rect();
final Rect mParentFrame = new Rect();
final Rect mVisibleFrame = new Rect();
+ final Rect mDecorFrame = new Rect();
boolean mContentChanged;
@@ -332,7 +333,7 @@
mContext = mService.mContext;
DeathRecipient deathRecipient = new DeathRecipient();
mSeq = seq;
- mEnforceSizeCompat = (mAttrs.flags & PRIVATE_FLAG_COMPATIBLE_WINDOW) != 0;
+ mEnforceSizeCompat = (mAttrs.privateFlags & PRIVATE_FLAG_COMPATIBLE_WINDOW) != 0;
if (WindowManagerService.localLOGV) Slog.v(
TAG, "Window " + this + " client=" + c.asBinder()
+ " token=" + token + " (" + mAttrs.token + ")" + " params=" + a);
@@ -458,7 +459,7 @@
}
@Override
- public void computeFrameLw(Rect pf, Rect df, Rect of, Rect cf, Rect vf) {
+ public void computeFrameLw(Rect pf, Rect df, Rect of, Rect cf, Rect vf, Rect dcf) {
mHaveFrame = true;
TaskStack stack = mAppToken != null ? getStack() : null;
@@ -524,6 +525,7 @@
mOverscanFrame.set(of);
mContentFrame.set(cf);
mVisibleFrame.set(vf);
+ mDecorFrame.set(dcf);
final int fw = mFrame.width();
final int fh = mFrame.height();
@@ -1404,6 +1406,8 @@
pw.print(prefix); pw.print(" content="); mContentFrame.printShortString(pw);
pw.print(" visible="); mVisibleFrame.printShortString(pw);
pw.println();
+ pw.print(prefix); pw.print(" decor="); mDecorFrame.printShortString(pw);
+ pw.println();
pw.print(prefix); pw.print("Cur insets: overscan=");
mOverscanInsets.printShortString(pw);
pw.print(" content="); mContentInsets.printShortString(pw);
diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java
index 533f626..e2fae89 100644
--- a/services/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/java/com/android/server/wm/WindowStateAnimator.java
@@ -1100,12 +1100,14 @@
} else {
applyDecorRect(mService.mScreenRect);
}
- } else if (w.mAttrs.type == WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND) {
- // The universe background isn't cropped.
+ } else if (w.mAttrs.type == WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND
+ || w.mDecorFrame.isEmpty()) {
+ // The universe background isn't cropped, nor windows without policy decor.
w.mSystemDecorRect.set(0, 0, w.mCompatFrame.width(),
w.mCompatFrame.height());
} else {
- applyDecorRect(mService.mSystemDecorRect);
+ // Crop to the system decor specified by policy.
+ applyDecorRect(w.mDecorFrame);
}
if (!w.mSystemDecorRect.equals(w.mLastSystemDecorRect)) {
diff --git a/services/jni/com_android_server_input_InputWindowHandle.cpp b/services/jni/com_android_server_input_InputWindowHandle.cpp
index bbb27d3..82e3dad 100644
--- a/services/jni/com_android_server_input_InputWindowHandle.cpp
+++ b/services/jni/com_android_server_input_InputWindowHandle.cpp
@@ -35,6 +35,7 @@
jfieldID inputChannel;
jfieldID name;
jfieldID layoutParamsFlags;
+ jfieldID layoutParamsPrivateFlags;
jfieldID layoutParamsType;
jfieldID dispatchingTimeoutNanos;
jfieldID frameLeft;
@@ -109,6 +110,8 @@
mInfo->layoutParamsFlags = env->GetIntField(obj,
gInputWindowHandleClassInfo.layoutParamsFlags);
+ mInfo->layoutParamsPrivateFlags = env->GetIntField(obj,
+ gInputWindowHandleClassInfo.layoutParamsPrivateFlags);
mInfo->layoutParamsType = env->GetIntField(obj,
gInputWindowHandleClassInfo.layoutParamsType);
mInfo->dispatchingTimeout = env->GetLongField(obj,
@@ -244,6 +247,9 @@
GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsFlags, clazz,
"layoutParamsFlags", "I");
+ GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsPrivateFlags, clazz,
+ "layoutParamsPrivateFlags", "I");
+
GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsType, clazz,
"layoutParamsType", "I");
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 7d8b64f..ea0d220 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -1400,4 +1400,22 @@
} catch (NullPointerException ex) {
}
}
+
+ /**
+ * Returns the MMS user agent.
+ */
+ public String getMmsUserAgent() {
+ if (mContext == null) return null;
+ return mContext.getResources().getString(
+ com.android.internal.R.string.config_mms_user_agent);
+ }
+
+ /**
+ * Returns the MMS user agent profile URL.
+ */
+ public String getMmsUAProfUrl() {
+ if (mContext == null) return null;
+ return mContext.getResources().getString(
+ com.android.internal.R.string.config_mms_user_agent_profile_url);
+ }
}
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index fd7a645..225b0c3 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -266,8 +266,8 @@
}
@Override
- public Bitmap screenshotApplications(IBinder arg0, int displayId, int arg1, int arg2)
- throws RemoteException {
+ public Bitmap screenshotApplications(IBinder arg0, int displayId, int arg1,
+ int arg2, boolean arg3) throws RemoteException {
// TODO Auto-generated method stub
return null;
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
index 6fd5acc..a8b58aa 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
@@ -45,6 +45,12 @@
}
@Override
+ public void acquireWakeLockWithUid(IBinder arg0, int arg1, String arg2, String arg2_5, int arg3)
+ throws RemoteException {
+ // pass for now.
+ }
+
+ @Override
public void crash(String arg0) throws RemoteException {
// pass for now.
}
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java
index f79a4a6..a6ae215 100644
--- a/wifi/java/android/net/wifi/WifiConfigStore.java
+++ b/wifi/java/android/net/wifi/WifiConfigStore.java
@@ -57,6 +57,7 @@
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.security.PublicKey;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collection;
@@ -742,6 +743,26 @@
markAllNetworksDisabledExcept(INVALID_NETWORK_ID);
}
+ boolean needsUnlockedKeyStore() {
+
+ // Any network using certificates to authenticate access requires
+ // unlocked key store; unless the certificates can be stored with
+ // hardware encryption
+
+ for(WifiConfiguration config : mConfiguredNetworks.values()) {
+
+ if (config.allowedKeyManagement.get(KeyMgmt.WPA_EAP)
+ && config.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
+
+ if (config.enterpriseConfig.needsSoftwareBackedKeyStore()) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
private void writeIpAndProxyConfigurations() {
/* Make a copy */
@@ -1223,7 +1244,6 @@
* Keyguard settings may eventually be controlled by device policy.
* We check here if keystore is unlocked before installing
* credentials.
- * TODO: Figure a way to store these credentials for wifi alone
* TODO: Do we need a dialog here ?
*/
if (mKeyStore.state() != KeyStore.State.UNLOCKED) {
@@ -1583,6 +1603,7 @@
}
config.enterpriseConfig.migrateCerts(mKeyStore);
+ config.enterpriseConfig.initializeSoftwareKeystoreFlag(mKeyStore);
}
private String removeDoubleQuotes(String string) {
diff --git a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
index e357804a..c7ebecb 100644
--- a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
+++ b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
@@ -19,8 +19,10 @@
import android.os.Parcelable;
import android.os.Process;
import android.security.Credentials;
+import android.security.KeyChain;
import android.security.KeyStore;
import android.text.TextUtils;
+import android.util.Slog;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -43,6 +45,7 @@
*/
public class WifiEnterpriseConfig implements Parcelable {
private static final String TAG = "WifiEnterpriseConfig";
+ private static final boolean DBG = false;
/**
* In old configurations, the "private_key" field was used. However, newer
* configurations use the key_id field with the engine_id set to "keystore".
@@ -91,6 +94,7 @@
private X509Certificate mCaCert;
private PrivateKey mClientPrivateKey;
private X509Certificate mClientCertificate;
+ private boolean mNeedsSoftwareKeystore = false;
/** This represents an empty value of an enterprise field.
* NULL is used at wpa_supplicant to indicate an empty value
@@ -509,6 +513,18 @@
return true;
}
+ static boolean isHardwareBackedKey(PrivateKey key) {
+ return KeyChain.isBoundKeyAlgorithm(key.getAlgorithm());
+ }
+
+ static boolean hasHardwareBackedKey(Certificate certificate) {
+ return KeyChain.isBoundKeyAlgorithm(certificate.getPublicKey().getAlgorithm());
+ }
+
+ boolean needsSoftwareBackedKeyStore() {
+ return mNeedsSoftwareKeystore;
+ }
+
boolean installKeys(android.security.KeyStore keyStore, String name) {
boolean ret = true;
String privKeyName = Credentials.USER_PRIVATE_KEY + name;
@@ -516,8 +532,23 @@
String caCertName = Credentials.CA_CERTIFICATE + name;
if (mClientCertificate != null) {
byte[] privKeyData = mClientPrivateKey.getEncoded();
- ret = keyStore.importKey(privKeyName, privKeyData, Process.WIFI_UID,
- KeyStore.FLAG_ENCRYPTED);
+ if (isHardwareBackedKey(mClientPrivateKey)) {
+ // Hardware backed key store is secure enough to store keys un-encrypted, this
+ // removes the need for user to punch a PIN to get access to these keys
+ if (DBG) Slog.d(TAG, "importing keys " + name + " in hardware backed " +
+ "store");
+ ret = keyStore.importKey(privKeyName, privKeyData, Process.WIFI_UID,
+ KeyStore.FLAG_NONE);
+ } else {
+ // Software backed key store is NOT secure enough to store keys un-encrypted.
+ // Save keys encrypted so they are protected with user's PIN. User will
+ // have to unlock phone before being able to use these keys and connect to
+ // networks.
+ if (DBG) Slog.d(TAG, "importing keys " + name + " in software backed store");
+ ret = keyStore.importKey(privKeyName, privKeyData, Process.WIFI_UID,
+ KeyStore.FLAG_ENCRYPTED);
+ mNeedsSoftwareKeystore = true;
+ }
if (ret == false) {
return ret;
}
@@ -561,7 +592,9 @@
Certificate cert) {
try {
byte[] certData = Credentials.convertToPem(cert);
- return keyStore.put(name, certData, Process.WIFI_UID, KeyStore.FLAG_ENCRYPTED);
+ if (DBG) Slog.d(TAG, "putting certificate " + name + " in keystore");
+ return keyStore.put(name, certData, Process.WIFI_UID, KeyStore.FLAG_NONE);
+
} catch (IOException e1) {
return false;
} catch (CertificateException e2) {
@@ -573,6 +606,7 @@
String client = getFieldValue(CLIENT_CERT_KEY, CLIENT_CERT_PREFIX);
// a valid client certificate is configured
if (!TextUtils.isEmpty(client)) {
+ if (DBG) Slog.d(TAG, "removing client private key and user cert");
keyStore.delKey(Credentials.USER_PRIVATE_KEY + client, Process.WIFI_UID);
keyStore.delete(Credentials.USER_CERTIFICATE + client, Process.WIFI_UID);
}
@@ -580,6 +614,7 @@
String ca = getFieldValue(CA_CERT_KEY, CA_CERT_PREFIX);
// a valid ca certificate is configured
if (!TextUtils.isEmpty(ca)) {
+ if (DBG) Slog.d(TAG, "removing CA cert");
keyStore.delete(Credentials.CA_CERTIFICATE + ca, Process.WIFI_UID);
}
}
@@ -684,6 +719,61 @@
}
}
+ void initializeSoftwareKeystoreFlag(android.security.KeyStore keyStore) {
+ String client = getFieldValue(CLIENT_CERT_KEY, CLIENT_CERT_PREFIX);
+ if (!TextUtils.isEmpty(client)) {
+ // a valid client certificate is configured
+
+ // BUGBUG: keyStore.get() never returns certBytes; because it is not
+ // taking WIFI_UID as a parameter. It always looks for certificate
+ // with SYSTEM_UID, and never finds any Wifi certificates. Assuming that
+ // all certificates need software keystore until we get the get() API
+ // fixed.
+
+ mNeedsSoftwareKeystore = true;
+
+ /*
+ try {
+
+ if (DBG) Slog.d(TAG, "Loading client certificate " + Credentials
+ .USER_CERTIFICATE + client);
+
+ CertificateFactory factory = CertificateFactory.getInstance("X.509");
+ if (factory == null) {
+ Slog.e(TAG, "Error getting certificate factory");
+ return;
+ }
+
+ byte[] certBytes = keyStore.get(Credentials.USER_CERTIFICATE + client);
+ if (certBytes != null) {
+ Certificate cert = (X509Certificate) factory.generateCertificate(
+ new ByteArrayInputStream(certBytes));
+
+ if (cert != null) {
+ mNeedsSoftwareKeystore = hasHardwareBackedKey(cert);
+
+ if (DBG) Slog.d(TAG, "Loaded client certificate " + Credentials
+ .USER_CERTIFICATE + client);
+ if (DBG) Slog.d(TAG, "It " + (mNeedsSoftwareKeystore ? "needs" :
+ "does not need" ) + " software key store");
+ } else {
+ Slog.d(TAG, "could not generate certificate");
+ }
+ } else {
+ Slog.e(TAG, "Could not load client certificate " + Credentials
+ .USER_CERTIFICATE + client);
+ mNeedsSoftwareKeystore = true;
+ }
+
+ } catch(CertificateException e) {
+ Slog.e(TAG, "Could not read certificates");
+ mCaCert = null;
+ mClientCertificate = null;
+ }
+ */
+ }
+ }
+
private String removeDoubleQuotes(String string) {
if (TextUtils.isEmpty(string)) return "";
int length = string.length();
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 798bc2e..cf09836 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -426,6 +426,8 @@
static final int CMD_IP_ADDRESS_UPDATED = BASE + 140;
/* An IP address was removed from our interface */
static final int CMD_IP_ADDRESS_REMOVED = BASE + 141;
+ /* Reload all networks and reconnect */
+ static final int CMD_RELOAD_TLS_AND_RECONNECT = BASE + 142;
/* Wifi state machine modes of operation */
/* CONNECT_MODE - connect to any 'known' AP when it becomes available */
@@ -1320,6 +1322,14 @@
}
/**
+ * Reload networks and then reconnect; helps load correct data for TLS networks
+ */
+
+ public void reloadTlsNetworksAndReconnect() {
+ sendMessage(CMD_RELOAD_TLS_AND_RECONNECT);
+ }
+
+ /**
* Add a network synchronously
*
* @return network id of the new network
@@ -2445,6 +2455,7 @@
case CMD_DISCONNECT:
case CMD_RECONNECT:
case CMD_REASSOCIATE:
+ case CMD_RELOAD_TLS_AND_RECONNECT:
case WifiMonitor.SUP_CONNECTION_EVENT:
case WifiMonitor.SUP_DISCONNECTION_EVENT:
case WifiMonitor.NETWORK_CONNECTION_EVENT:
@@ -3395,6 +3406,13 @@
case CMD_REASSOCIATE:
mWifiNative.reassociate();
break;
+ case CMD_RELOAD_TLS_AND_RECONNECT:
+ if (mWifiConfigStore.needsUnlockedKeyStore()) {
+ logd("Reconnecting to give a chance to un-connected TLS networks");
+ mWifiNative.disconnect();
+ mWifiNative.reconnect();
+ }
+ break;
case WifiManager.CONNECT_NETWORK:
/* The connect message can contain a network id passed as arg1 on message or
* or a config passed as obj on message.