Merge "Fix flakiness MtpManagerTest test."
diff --git a/Android.mk b/Android.mk
index 51dfa57..d3e1cf5 100644
--- a/Android.mk
+++ b/Android.mk
@@ -499,6 +499,7 @@
frameworks/base/graphics/java/android/graphics/PointF.aidl \
frameworks/base/graphics/java/android/graphics/RectF.aidl \
frameworks/base/graphics/java/android/graphics/Rect.aidl \
+ frameworks/base/graphics/java/android/graphics/drawable/Icon.aidl \
frameworks/base/core/java/android/accounts/AuthenticatorDescription.aidl \
frameworks/base/core/java/android/accounts/Account.aidl \
frameworks/base/core/java/android/app/admin/SystemUpdatePolicy.aidl \
diff --git a/api/current.txt b/api/current.txt
index 6610e37..ec65b25 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3504,6 +3504,7 @@
method public boolean releaseInstance();
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
+ method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
method public final void requestPermissions(java.lang.String[], int);
method public boolean requestVisibleBehind(boolean);
method public final boolean requestWindowFeature(int);
@@ -29146,6 +29147,9 @@
method public android.print.PrinterInfo build();
method public android.print.PrinterInfo.Builder setCapabilities(android.print.PrinterCapabilitiesInfo);
method public android.print.PrinterInfo.Builder setDescription(java.lang.String);
+ method public android.print.PrinterInfo.Builder setHasCustomPrinterIcon();
+ method public android.print.PrinterInfo.Builder setIconResourceId(int);
+ method public android.print.PrinterInfo.Builder setInfoIntent(android.app.PendingIntent);
method public android.print.PrinterInfo.Builder setName(java.lang.String);
method public android.print.PrinterInfo.Builder setStatus(int);
}
@@ -29166,6 +29170,10 @@
package android.printservice {
+ public class CustomPrinterIconCallback {
+ method public boolean onCustomPrinterIconLoaded(android.graphics.drawable.Icon);
+ }
+
public final class PrintDocument {
method public android.os.ParcelFileDescriptor getData();
method public android.print.PrintDocumentInfo getInfo();
@@ -29221,6 +29229,7 @@
method public final boolean isDestroyed();
method public final boolean isPrinterDiscoveryStarted();
method public abstract void onDestroy();
+ method public void onRequestCustomPrinterIcon(android.print.PrinterId, android.printservice.CustomPrinterIconCallback);
method public abstract void onStartPrinterDiscovery(java.util.List<android.print.PrinterId>);
method public abstract void onStartPrinterStateTracking(android.print.PrinterId);
method public abstract void onStopPrinterDiscovery();
@@ -39596,7 +39605,6 @@
method public boolean getResult();
method public float getX();
method public float getY();
- method public android.view.DropPermissions requestDropPermissions();
method public void writeToParcel(android.os.Parcel, int);
field public static final int ACTION_DRAG_ENDED = 4; // 0x4
field public static final int ACTION_DRAG_ENTERED = 5; // 0x5
diff --git a/api/system-current.txt b/api/system-current.txt
index ff37365..e992a77 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3609,6 +3609,7 @@
method public boolean releaseInstance();
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
+ method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
method public final void requestPermissions(java.lang.String[], int);
method public boolean requestVisibleBehind(boolean);
method public final boolean requestWindowFeature(int);
@@ -31156,6 +31157,9 @@
method public android.print.PrinterInfo build();
method public android.print.PrinterInfo.Builder setCapabilities(android.print.PrinterCapabilitiesInfo);
method public android.print.PrinterInfo.Builder setDescription(java.lang.String);
+ method public android.print.PrinterInfo.Builder setHasCustomPrinterIcon();
+ method public android.print.PrinterInfo.Builder setIconResourceId(int);
+ method public android.print.PrinterInfo.Builder setInfoIntent(android.app.PendingIntent);
method public android.print.PrinterInfo.Builder setName(java.lang.String);
method public android.print.PrinterInfo.Builder setStatus(int);
}
@@ -31176,6 +31180,10 @@
package android.printservice {
+ public class CustomPrinterIconCallback {
+ method public boolean onCustomPrinterIconLoaded(android.graphics.drawable.Icon);
+ }
+
public final class PrintDocument {
method public android.os.ParcelFileDescriptor getData();
method public android.print.PrintDocumentInfo getInfo();
@@ -31231,6 +31239,7 @@
method public final boolean isDestroyed();
method public final boolean isPrinterDiscoveryStarted();
method public abstract void onDestroy();
+ method public void onRequestCustomPrinterIcon(android.print.PrinterId, android.printservice.CustomPrinterIconCallback);
method public abstract void onStartPrinterDiscovery(java.util.List<android.print.PrinterId>);
method public abstract void onStartPrinterStateTracking(android.print.PrinterId);
method public abstract void onStopPrinterDiscovery();
@@ -41950,7 +41959,6 @@
method public boolean getResult();
method public float getX();
method public float getY();
- method public android.view.DropPermissions requestDropPermissions();
method public void writeToParcel(android.os.Parcel, int);
field public static final int ACTION_DRAG_ENDED = 4; // 0x4
field public static final int ACTION_DRAG_ENTERED = 5; // 0x5
diff --git a/api/test-current.txt b/api/test-current.txt
index 883dd31..42a6a86 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -3504,6 +3504,7 @@
method public boolean releaseInstance();
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
+ method public android.view.DropPermissions requestDropPermissions(android.view.DragEvent);
method public final void requestPermissions(java.lang.String[], int);
method public boolean requestVisibleBehind(boolean);
method public final boolean requestWindowFeature(int);
@@ -29135,6 +29136,7 @@
method public android.print.PrinterId getId();
method public java.lang.String getName();
method public int getStatus();
+ method public android.graphics.drawable.Drawable loadIcon(android.content.Context);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.print.PrinterInfo> CREATOR;
field public static final int STATUS_BUSY = 2; // 0x2
@@ -29148,6 +29150,9 @@
method public android.print.PrinterInfo build();
method public android.print.PrinterInfo.Builder setCapabilities(android.print.PrinterCapabilitiesInfo);
method public android.print.PrinterInfo.Builder setDescription(java.lang.String);
+ method public android.print.PrinterInfo.Builder setHasCustomPrinterIcon();
+ method public android.print.PrinterInfo.Builder setIconResourceId(int);
+ method public android.print.PrinterInfo.Builder setInfoIntent(android.app.PendingIntent);
method public android.print.PrinterInfo.Builder setName(java.lang.String);
method public android.print.PrinterInfo.Builder setStatus(int);
}
@@ -29168,6 +29173,10 @@
package android.printservice {
+ public class CustomPrinterIconCallback {
+ method public boolean onCustomPrinterIconLoaded(android.graphics.drawable.Icon);
+ }
+
public final class PrintDocument {
method public android.os.ParcelFileDescriptor getData();
method public android.print.PrintDocumentInfo getInfo();
@@ -29223,6 +29232,7 @@
method public final boolean isDestroyed();
method public final boolean isPrinterDiscoveryStarted();
method public abstract void onDestroy();
+ method public void onRequestCustomPrinterIcon(android.print.PrinterId, android.printservice.CustomPrinterIconCallback);
method public abstract void onStartPrinterDiscovery(java.util.List<android.print.PrinterId>);
method public abstract void onStartPrinterStateTracking(android.print.PrinterId);
method public abstract void onStopPrinterDiscovery();
@@ -39598,7 +39608,6 @@
method public boolean getResult();
method public float getX();
method public float getY();
- method public android.view.DropPermissions requestDropPermissions();
method public void writeToParcel(android.os.Parcel, int);
field public static final int ACTION_DRAG_ENDED = 4; // 0x4
field public static final int ACTION_DRAG_ENTERED = 5; // 0x5
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 6d72059..800ebc6 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -31,6 +31,8 @@
import android.transition.TransitionManager;
import android.util.ArrayMap;
import android.util.SuperNotCalledException;
+import android.view.DragEvent;
+import android.view.DropPermissions;
import android.view.Window.WindowControllerCallback;
import android.widget.Toolbar;
@@ -6336,6 +6338,21 @@
mActivityTransitionState.startPostponedEnterTransition();
}
+ /**
+ * Create {@link DropPermissions} object bound to this activity and controlling the access
+ * permissions for content URIs associated with the {@link DragEvent}.
+ * @param event Drag event
+ * @return The DropPermissions object used to control access to the content URIs. Null if
+ * no content URIs are associated with the event or if permissions could not be granted.
+ */
+ public DropPermissions requestDropPermissions(DragEvent event) {
+ DropPermissions dropPermissions = DropPermissions.obtain(event);
+ if (dropPermissions != null && dropPermissions.take(getActivityToken())) {
+ return dropPermissions;
+ }
+ return null;
+ }
+
// ------------------ Internal API ------------------
final void setParent(Activity parent) {
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 1b08273..3a3aa92 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1845,6 +1845,15 @@
return true;
}
+ case GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ IBinder activityToken = data.readStrongBinder();
+ IBinder perm = getUriPermissionOwnerForActivity(activityToken);
+ reply.writeNoException();
+ reply.writeStrongBinder(perm);
+ return true;
+ }
+
case GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
IBinder owner = data.readStrongBinder();
@@ -5121,6 +5130,19 @@
return res;
}
+ public IBinder getUriPermissionOwnerForActivity(IBinder activityToken) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(activityToken);
+ mRemote.transact(GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
+ reply.readException();
+ IBinder res = reply.readStrongBinder();
+ data.recycle();
+ reply.recycle();
+ return res;
+ }
+
public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException {
Parcel data = Parcel.obtain();
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 0ecf223..61b1bc8 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -363,6 +363,7 @@
public String getProviderMimeType(Uri uri, int userId) throws RemoteException;
public IBinder newUriPermissionOwner(String name) throws RemoteException;
+ public IBinder getUriPermissionOwnerForActivity(IBinder activityToken) throws RemoteException;
public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException;
public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
@@ -920,4 +921,5 @@
int KILL_PACKAGE_DEPENDENTS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 354;
int ENTER_PICTURE_IN_PICTURE_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 355;
int SET_VR_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 356;
+ int GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 357;
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 5df6ba8..eda0982 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -4142,6 +4142,10 @@
* <p>When account management is disabled for an account type, adding or removing an account
* of that type will not be possible.
*
+ * <p>From {@link android.os.Build.VERSION_CODES#N} the profile or device owner can still use
+ * {@link android.accounts.AccountManager} APIs to add or remove accounts when account
+ * management for a specific type is disabled.
+ *
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
* @param accountType For which account management is disabled or enabled.
* @param disabled The boolean indicating that account management will be disabled (true) or
diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java
index d619c0a..c7d4c65 100644
--- a/core/java/android/nfc/NfcActivityManager.java
+++ b/core/java/android/nfc/NfcActivityManager.java
@@ -371,40 +371,44 @@
flags = state.flags;
activity = state.activity;
}
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ // Make callbacks without lock
+ if (ndefCallback != null) {
+ message = ndefCallback.createNdefMessage(event);
+ }
+ if (urisCallback != null) {
+ uris = urisCallback.createBeamUris(event);
+ if (uris != null) {
+ ArrayList<Uri> validUris = new ArrayList<Uri>();
+ for (Uri uri : uris) {
+ if (uri == null) {
+ Log.e(TAG, "Uri not allowed to be null.");
+ continue;
+ }
+ String scheme = uri.getScheme();
+ if (scheme == null || (!scheme.equalsIgnoreCase("file") &&
+ !scheme.equalsIgnoreCase("content"))) {
+ Log.e(TAG, "Uri needs to have " +
+ "either scheme file or scheme content");
+ continue;
+ }
+ uri = ContentProvider.maybeAddUserId(uri, UserHandle.myUserId());
+ validUris.add(uri);
+ }
- // Make callbacks without lock
- if (ndefCallback != null) {
- message = ndefCallback.createNdefMessage(event);
- }
- if (urisCallback != null) {
- uris = urisCallback.createBeamUris(event);
- if (uris != null) {
- ArrayList<Uri> validUris = new ArrayList<Uri>();
- for (Uri uri : uris) {
- if (uri == null) {
- Log.e(TAG, "Uri not allowed to be null.");
- continue;
- }
- String scheme = uri.getScheme();
- if (scheme == null || (!scheme.equalsIgnoreCase("file") &&
- !scheme.equalsIgnoreCase("content"))) {
- Log.e(TAG, "Uri needs to have " +
- "either scheme file or scheme content");
- continue;
- }
- uri = ContentProvider.maybeAddUserId(uri, UserHandle.myUserId());
- validUris.add(uri);
+ uris = validUris.toArray(new Uri[validUris.size()]);
}
-
- uris = validUris.toArray(new Uri[validUris.size()]);
}
- }
- if (uris != null && uris.length > 0) {
- for (Uri uri : uris) {
- // Grant the NFC process permission to read these URIs
- activity.grantUriPermission("com.android.nfc", uri,
- Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ if (uris != null && uris.length > 0) {
+ for (Uri uri : uris) {
+ // Grant the NFC process permission to read these URIs
+ activity.grantUriPermission("com.android.nfc", uri,
+ Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ }
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
return new BeamShareData(message, uris, new UserHandle(UserHandle.myUserId()), flags);
}
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 16696af..037916a 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -57,6 +57,10 @@
* Authenticator.
* The default value is <code>false</code>.
*
+ * <p>From {@link android.os.Build.VERSION_CODES#N} a profile or device owner app can still
+ * use {@link android.accounts.AccountManager} APIs to add or remove accounts when account
+ * management is disallowed.
+ *
* <p/>Key for user restrictions.
* <p/>Type: Boolean
* @see DevicePolicyManager#addUserRestriction(ComponentName, String)
diff --git a/core/java/android/print/IPrintManager.aidl b/core/java/android/print/IPrintManager.aidl
index 8fa7ab9..9a80e37 100644
--- a/core/java/android/print/IPrintManager.aidl
+++ b/core/java/android/print/IPrintManager.aidl
@@ -16,6 +16,7 @@
package android.print;
+import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.print.IPrinterDiscoveryObserver;
import android.print.IPrintDocumentAdapter;
@@ -53,6 +54,19 @@
void stopPrinterDiscovery(in IPrinterDiscoveryObserver observer, int userId);
void validatePrinters(in List<PrinterId> printerIds, int userId);
void startPrinterStateTracking(in PrinterId printerId, int userId);
+
+ /**
+ * Get the custom icon for a printer. If the icon is not cached, the icon is
+ * requested asynchronously. Once it is available the printer is updated.
+ *
+ * @param printerId the id of the printer the icon should be loaded for
+ * @param userId the id of the user requesting the printer
+ * @return the custom icon to be used for the printer or null if the icon is
+ * not yet available
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ Icon getCustomPrinterIcon(in PrinterId printerId, int userId);
+
void stopPrinterStateTracking(in PrinterId printerId, int userId);
void destroyPrinterDiscoverySession(in IPrinterDiscoveryObserver observer,
int userId);
diff --git a/core/java/android/print/IPrintSpooler.aidl b/core/java/android/print/IPrintSpooler.aidl
index b7cfbea..c3625b8 100644
--- a/core/java/android/print/IPrintSpooler.aidl
+++ b/core/java/android/print/IPrintSpooler.aidl
@@ -17,9 +17,11 @@
package android.print;
import android.content.ComponentName;
+import android.graphics.drawable.Icon;
import android.os.ParcelFileDescriptor;
import android.print.IPrintSpoolerClient;
import android.print.IPrintSpoolerCallbacks;
+import android.print.PrinterId;
import android.print.PrinterInfo;
import android.print.PrintAttributes;
import android.print.PrintJobId;
@@ -58,6 +60,39 @@
*/
void setStatus(in PrintJobId printJobId, in CharSequence status);
+ /**
+ * Handle that a custom icon for a printer was loaded.
+ *
+ * @param printerId the id of the printer the icon belongs to
+ * @param icon the icon that was loaded
+ * @param callbacks the callback to call once icon is stored in case
+ * @param sequence the sequence number of the call
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ void onCustomPrinterIconLoaded(in PrinterId printerId, in Icon icon,
+ in IPrintSpoolerCallbacks callbacks, in int sequence);
+
+ /**
+ * Get the custom icon for a printer. If the icon is not cached, the icon is
+ * requested asynchronously. Once it is available the printer is updated.
+ *
+ * @param printerId the id of the printer the icon should be loaded for
+ * @param callbacks the callback to call once icon is retrieved
+ * @param sequence the sequence number of the call
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ void getCustomPrinterIcon(in PrinterId printerId,
+ in IPrintSpoolerCallbacks callbacks, in int sequence);
+
+ /**
+ * Clear all state from the custom printer icon cache.
+ *
+ * @param callbacks the callback to call once cache is cleared
+ * @param sequence the sequence number of the call
+ */
+ void clearCustomPrinterIconCache(in IPrintSpoolerCallbacks callbacks,
+ in int sequence);
+
void setPrintJobTag(in PrintJobId printJobId, String tag, IPrintSpoolerCallbacks callback,
int sequence);
void writePrintJobData(in ParcelFileDescriptor fd, in PrintJobId printJobId);
diff --git a/core/java/android/print/IPrintSpoolerCallbacks.aidl b/core/java/android/print/IPrintSpoolerCallbacks.aidl
index 45c5332..23d706a 100644
--- a/core/java/android/print/IPrintSpoolerCallbacks.aidl
+++ b/core/java/android/print/IPrintSpoolerCallbacks.aidl
@@ -16,7 +16,9 @@
package android.print;
+import android.graphics.drawable.Icon;
import android.print.PrintJobInfo;
+import android.print.PrinterId;
import java.util.List;
/**
@@ -32,4 +34,27 @@
void onSetPrintJobStateResult(boolean success, int sequence);
void onSetPrintJobTagResult(boolean success, int sequence);
void onGetPrintJobInfoResult(in PrintJobInfo printJob, int sequence);
+
+ /**
+ * Deliver the result of a request of a custom printer icon.
+ *
+ * @param icon the icon that was retrieved, or null if no icon could be
+ * found
+ * @param sequence the sequence number of the call to get the icon
+ */
+ void onGetCustomPrinterIconResult(in Icon icon, int sequence);
+
+ /**
+ * Declare that the print spooler cached a custom printer icon.
+ *
+ * @param sequence the sequence number of the call to cache the icon
+ */
+ void onCustomPrinterIconCached(int sequence);
+
+ /**
+ * Declare that the custom printer icon cache was cleared.
+ *
+ * @param sequence the sequence number of the call to clear the cache
+ */
+ void customPrinterIconCacheCleared(int sequence);
}
diff --git a/core/java/android/print/PageRange.java b/core/java/android/print/PageRange.java
index 8bc157a..57c7718 100644
--- a/core/java/android/print/PageRange.java
+++ b/core/java/android/print/PageRange.java
@@ -16,6 +16,8 @@
package android.print;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
@@ -42,7 +44,7 @@
* @throws IllegalArgumentException If start is less than zero or end
* is less than zero or start greater than end.
*/
- public PageRange(int start, int end) {
+ public PageRange(@IntRange(from = 0) int start, @IntRange(from = 0) int end) {
if (start < 0) {
throw new IllegalArgumentException("start cannot be less than zero.");
}
@@ -56,7 +58,7 @@
mEnd = end;
}
- private PageRange (Parcel parcel) {
+ private PageRange(@NonNull Parcel parcel) {
this(parcel.readInt(), parcel.readInt());
}
@@ -65,7 +67,7 @@
*
* @return The start page index.
*/
- public int getStart() {
+ public @IntRange(from = 0) int getStart() {
return mStart;
}
@@ -74,7 +76,7 @@
*
* @return The end page index.
*/
- public int getEnd() {
+ public @IntRange(from = 0) int getEnd() {
return mEnd;
}
diff --git a/core/java/android/print/PrintAttributes.java b/core/java/android/print/PrintAttributes.java
index 2afbb99..8892e34 100644
--- a/core/java/android/print/PrintAttributes.java
+++ b/core/java/android/print/PrintAttributes.java
@@ -16,6 +16,10 @@
package android.print;
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources.NotFoundException;
@@ -27,6 +31,8 @@
import com.android.internal.R;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.Map;
/**
@@ -37,6 +43,13 @@
* 10 mills (thousand of an inch) on all sides, and be black and white.
*/
public final class PrintAttributes implements Parcelable {
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag = true, value = {
+ COLOR_MODE_MONOCHROME, COLOR_MODE_COLOR
+ })
+ public @interface ColorMode {
+ }
/** Color mode: Monochrome color scheme, for example one color is used. */
public static final int COLOR_MODE_MONOCHROME = 1 << 0;
/** Color mode: Color color scheme, for example many colors are used. */
@@ -45,6 +58,13 @@
private static final int VALID_COLOR_MODES =
COLOR_MODE_MONOCHROME | COLOR_MODE_COLOR;
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag = true, value = {
+ DUPLEX_MODE_NONE, DUPLEX_MODE_LONG_EDGE, DUPLEX_MODE_SHORT_EDGE
+ })
+ public @interface DuplexMode {
+ }
/** Duplex mode: No duplexing. */
public static final int DUPLEX_MODE_NONE = 1 << 0;
/** Duplex mode: Pages are turned sideways along the long edge - like a book. */
@@ -66,7 +86,7 @@
/* hide constructor */
}
- private PrintAttributes(Parcel parcel) {
+ private PrintAttributes(@NonNull Parcel parcel) {
mMediaSize = (parcel.readInt() == 1) ? MediaSize.createFromParcel(parcel) : null;
mResolution = (parcel.readInt() == 1) ? Resolution.createFromParcel(parcel) : null;
mMinMargins = (parcel.readInt() == 1) ? Margins.createFromParcel(parcel) : null;
@@ -79,7 +99,7 @@
*
* @return The media size or <code>null</code> if not set.
*/
- public MediaSize getMediaSize() {
+ public @Nullable MediaSize getMediaSize() {
return mMediaSize;
}
@@ -99,7 +119,7 @@
*
* @return The resolution or <code>null</code> if not set.
*/
- public Resolution getResolution() {
+ public @Nullable Resolution getResolution() {
return mResolution;
}
@@ -127,7 +147,7 @@
*
* @return The margins or <code>null</code> if not set.
*/
- public Margins getMinMargins() {
+ public @Nullable Margins getMinMargins() {
return mMinMargins;
}
@@ -158,7 +178,7 @@
* @see #COLOR_MODE_COLOR
* @see #COLOR_MODE_MONOCHROME
*/
- public int getColorMode() {
+ public @ColorMode int getColorMode() {
return mColorMode;
}
@@ -199,7 +219,7 @@
* @see #DUPLEX_MODE_LONG_EDGE
* @see #DUPLEX_MODE_SHORT_EDGE
*/
- public int getDuplexMode() {
+ public @DuplexMode int getDuplexMode() {
return mDuplexMode;
}
@@ -828,7 +848,8 @@
* or the widthMils is less than or equal to zero or the heightMils is less
* than or equal to zero.
*/
- public MediaSize(String id, String label, int widthMils, int heightMils) {
+ public MediaSize(@NonNull String id, @NonNull String label,
+ @IntRange(from = 1) int widthMils, @IntRange(from = 1) int heightMils) {
if (TextUtils.isEmpty(id)) {
throw new IllegalArgumentException("id cannot be empty.");
}
@@ -872,7 +893,7 @@
*
* @return The unique media size id.
*/
- public String getId() {
+ public @NonNull String getId() {
return mId;
}
@@ -882,7 +903,7 @@
* @param packageManager The package manager for loading the label.
* @return The human readable label.
*/
- public String getLabel(PackageManager packageManager) {
+ public @NonNull String getLabel(@NonNull PackageManager packageManager) {
if (!TextUtils.isEmpty(mPackageName) && mLabelResId > 0) {
try {
return packageManager.getResourcesForApplication(
@@ -903,7 +924,7 @@
*
* @return The media width.
*/
- public int getWidthMils() {
+ public @IntRange(from = 1) int getWidthMils() {
return mWidthMils;
}
@@ -912,7 +933,7 @@
*
* @return The media height.
*/
- public int getHeightMils() {
+ public @IntRange(from = 1) int getHeightMils() {
return mHeightMils;
}
@@ -934,7 +955,7 @@
* @return New instance in landscape orientation if this one
* is in landscape, otherwise this instance.
*/
- public MediaSize asPortrait() {
+ public @NonNull MediaSize asPortrait() {
if (isPortrait()) {
return this;
}
@@ -951,7 +972,7 @@
* @return New instance in landscape orientation if this one
* is in portrait, otherwise this instance.
*/
- public MediaSize asLandscape() {
+ public @NonNull MediaSize asLandscape() {
if (!isPortrait()) {
return this;
}
@@ -1063,7 +1084,8 @@
* or the horizontalDpi is less than or equal to zero or the verticalDpi is
* less than or equal to zero.
*/
- public Resolution(String id, String label, int horizontalDpi, int verticalDpi) {
+ public Resolution(@NonNull String id, @NonNull String label,
+ @IntRange(from = 1) int horizontalDpi, @IntRange(from = 1) int verticalDpi) {
if (TextUtils.isEmpty(id)) {
throw new IllegalArgumentException("id cannot be empty.");
}
@@ -1094,7 +1116,7 @@
*
* @return The unique resolution id.
*/
- public String getId() {
+ public @NonNull String getId() {
return mId;
}
@@ -1103,7 +1125,7 @@
*
* @return The human readable label.
*/
- public String getLabel() {
+ public @NonNull String getLabel() {
return mLabel;
}
@@ -1112,7 +1134,7 @@
*
* @return The horizontal resolution.
*/
- public int getHorizontalDpi() {
+ public @IntRange(from = 1) int getHorizontalDpi() {
return mHorizontalDpi;
}
@@ -1121,7 +1143,7 @@
*
* @return The vertical resolution.
*/
- public int getVerticalDpi() {
+ public @IntRange(from = 1) int getVerticalDpi() {
return mVerticalDpi;
}
@@ -1204,7 +1226,8 @@
* @param rightMils The right margin in mils (thousands of an inch).
* @param bottomMils The bottom margin in mils (thousands of an inch).
*/
- public Margins(int leftMils, int topMils, int rightMils, int bottomMils) {
+ public Margins(@IntRange(from = 0) int leftMils, @IntRange(from = 0) int topMils,
+ @IntRange(from = 0) int rightMils, @IntRange(from = 0) int bottomMils) {
mTopMils = topMils;
mLeftMils = leftMils;
mRightMils = rightMils;
@@ -1216,7 +1239,7 @@
*
* @return The left margin.
*/
- public int getLeftMils() {
+ public @IntRange(from = 0) int getLeftMils() {
return mLeftMils;
}
@@ -1225,7 +1248,7 @@
*
* @return The top margin.
*/
- public int getTopMils() {
+ public @IntRange(from = 0) int getTopMils() {
return mTopMils;
}
@@ -1234,7 +1257,7 @@
*
* @return The right margin.
*/
- public int getRightMils() {
+ public @IntRange(from = 0) int getRightMils() {
return mRightMils;
}
@@ -1243,7 +1266,7 @@
*
* @return The bottom margin.
*/
- public int getBottomMils() {
+ public @IntRange(from = 0) int getBottomMils() {
return mBottomMils;
}
@@ -1368,7 +1391,7 @@
* @param mediaSize The media size.
* @return This builder.
*/
- public Builder setMediaSize(MediaSize mediaSize) {
+ public @NonNull Builder setMediaSize(@NonNull MediaSize mediaSize) {
mAttributes.setMediaSize(mediaSize);
return this;
}
@@ -1379,7 +1402,7 @@
* @param resolution The resolution.
* @return This builder.
*/
- public Builder setResolution(Resolution resolution) {
+ public @NonNull Builder setResolution(@NonNull Resolution resolution) {
mAttributes.setResolution(resolution);
return this;
}
@@ -1391,7 +1414,7 @@
* @param margins The margins.
* @return This builder.
*/
- public Builder setMinMargins(Margins margins) {
+ public @NonNull Builder setMinMargins(@NonNull Margins margins) {
mAttributes.setMinMargins(margins);
return this;
}
@@ -1405,7 +1428,7 @@
* @see PrintAttributes#COLOR_MODE_MONOCHROME
* @see PrintAttributes#COLOR_MODE_COLOR
*/
- public Builder setColorMode(int colorMode) {
+ public @NonNull Builder setColorMode(@ColorMode int colorMode) {
mAttributes.setColorMode(colorMode);
return this;
}
@@ -1420,7 +1443,7 @@
* @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
* @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
*/
- public Builder setDuplexMode(int duplexMode) {
+ public @NonNull Builder setDuplexMode(@DuplexMode int duplexMode) {
mAttributes.setDuplexMode(duplexMode);
return this;
}
@@ -1430,7 +1453,7 @@
*
* @return The new instance.
*/
- public PrintAttributes build() {
+ public @NonNull PrintAttributes build() {
return mAttributes;
}
}
diff --git a/core/java/android/print/PrintDocumentInfo.java b/core/java/android/print/PrintDocumentInfo.java
index 44e6410..db3b6f4 100644
--- a/core/java/android/print/PrintDocumentInfo.java
+++ b/core/java/android/print/PrintDocumentInfo.java
@@ -16,10 +16,16 @@
package android.print;
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/**
* This class encapsulates information about a document for printing
* purposes. This meta-data is used by the platform and print services,
@@ -74,6 +80,13 @@
*/
public static final int PAGE_COUNT_UNKNOWN = -1;
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({
+ CONTENT_TYPE_UNKNOWN, CONTENT_TYPE_DOCUMENT, CONTENT_TYPE_PHOTO
+ })
+ public @interface ContentType {
+ }
/**
* Content type: unknown.
*/
@@ -116,9 +129,9 @@
/**
* Creates a new instance.
*
- * @param Prototype from which to clone.
+ * @param prototype from which to clone.
*/
- private PrintDocumentInfo(PrintDocumentInfo prototype) {
+ private PrintDocumentInfo(@NonNull PrintDocumentInfo prototype) {
mName = prototype.mName;
mPageCount = prototype.mPageCount;
mContentType = prototype.mContentType;
@@ -143,7 +156,7 @@
*
* @return The document name.
*/
- public String getName() {
+ public @NonNull String getName() {
return mName;
}
@@ -154,7 +167,7 @@
*
* @see #PAGE_COUNT_UNKNOWN
*/
- public int getPageCount() {
+ public @IntRange(from = -1) int getPageCount() {
return mPageCount;
}
@@ -167,7 +180,7 @@
* @see #CONTENT_TYPE_DOCUMENT
* @see #CONTENT_TYPE_PHOTO
*/
- public int getContentType() {
+ public @ContentType int getContentType() {
return mContentType;
}
@@ -176,7 +189,7 @@
*
* @return The data size.
*/
- public long getDataSize() {
+ public @IntRange(from = 0) long getDataSize() {
return mDataSize;
}
@@ -187,7 +200,7 @@
*
* @hide
*/
- public void setDataSize(long dataSize) {
+ public void setDataSize(@IntRange(from = 0) long dataSize) {
mDataSize = dataSize;
}
@@ -288,7 +301,7 @@
* is the file name if the content it describes is saved as a PDF.
* Cannot be empty.
*/
- public Builder(String name) {
+ public Builder(@NonNull String name) {
if (TextUtils.isEmpty(name)) {
throw new IllegalArgumentException("name cannot be empty");
}
@@ -302,10 +315,11 @@
* <strong>Default: </strong> {@link #PAGE_COUNT_UNKNOWN}
* </p>
*
- * @param pageCount The number of pages. Must be greater than
- * or equal to zero or {@link PrintDocumentInfo#PAGE_COUNT_UNKNOWN}.
+ * @param pageCount The number of pages. Must be greater than or equal to zero or
+ * {@link PrintDocumentInfo#PAGE_COUNT_UNKNOWN}.
+ * @return This builder.
*/
- public Builder setPageCount(int pageCount) {
+ public @NonNull Builder setPageCount(@IntRange(from = -1) int pageCount) {
if (pageCount < 0 && pageCount != PAGE_COUNT_UNKNOWN) {
throw new IllegalArgumentException("pageCount"
+ " must be greater than or equal to zero or"
@@ -322,12 +336,12 @@
* </p>
*
* @param type The content type.
- *
+ * @return This builder.
* @see #CONTENT_TYPE_UNKNOWN
* @see #CONTENT_TYPE_DOCUMENT
* @see #CONTENT_TYPE_PHOTO
*/
- public Builder setContentType(int type) {
+ public @NonNull Builder setContentType(@ContentType int type) {
mPrototype.mContentType = type;
return this;
}
@@ -337,7 +351,7 @@
*
* @return The new instance.
*/
- public PrintDocumentInfo build() {
+ public @NonNull PrintDocumentInfo build() {
// Zero pages is the same as unknown as in this case
// we will have to ask for all pages and look a the
// wiritten PDF file for the page count.
diff --git a/core/java/android/print/PrintJob.java b/core/java/android/print/PrintJob.java
index 0abe219..777baab 100644
--- a/core/java/android/print/PrintJob.java
+++ b/core/java/android/print/PrintJob.java
@@ -16,6 +16,9 @@
package android.print;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
/**
* This class represents a print job from the perspective of an
* application. It contains behavior methods for performing operations
@@ -41,7 +44,7 @@
*
* @return The id.
*/
- public PrintJobId getId() {
+ public @NonNull PrintJobId getId() {
return mCachedInfo.getId();
}
@@ -55,7 +58,7 @@
*
* @return The print job info.
*/
- public PrintJobInfo getInfo() {
+ public @Nullable PrintJobInfo getInfo() {
if (isInImmutableState()) {
return mCachedInfo;
}
diff --git a/core/java/android/print/PrintJobId.java b/core/java/android/print/PrintJobId.java
index 01550e2..a2ee02b 100644
--- a/core/java/android/print/PrintJobId.java
+++ b/core/java/android/print/PrintJobId.java
@@ -16,6 +16,7 @@
package android.print;
+import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -91,14 +92,14 @@
*
* @hide
*/
- public String flattenToString() {
+ public @NonNull String flattenToString() {
return mValue;
}
/**
* Unflattens a print job id from a string.
*
- * @string The string.
+ * @param string The string.
* @return The unflattened id, or null if the string is malformed.
*
* @hide
diff --git a/core/java/android/print/PrintJobInfo.java b/core/java/android/print/PrintJobInfo.java
index 7148c87..21836b3 100644
--- a/core/java/android/print/PrintJobInfo.java
+++ b/core/java/android/print/PrintJobInfo.java
@@ -17,6 +17,9 @@
package android.print;
import android.annotation.FloatRange;
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.os.Bundle;
@@ -25,6 +28,8 @@
import com.android.internal.util.Preconditions;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
/**
@@ -35,6 +40,15 @@
*/
public final class PrintJobInfo implements Parcelable {
+ /** @hide */
+ @IntDef({
+ STATE_CREATED, STATE_QUEUED, STATE_STARTED, STATE_BLOCKED, STATE_COMPLETED,
+ STATE_FAILED, STATE_CANCELED
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface State {
+ }
+
/**
* Constant for matching any print job state.
*
@@ -200,7 +214,7 @@
mAdvancedOptions = other.mAdvancedOptions;
}
- private PrintJobInfo(Parcel parcel) {
+ private PrintJobInfo(@NonNull Parcel parcel) {
mId = parcel.readParcelable(null);
mLabel = parcel.readString();
mPrinterId = parcel.readParcelable(null);
@@ -230,7 +244,7 @@
*
* @return The id.
*/
- public PrintJobId getId() {
+ public @NonNull PrintJobId getId() {
return mId;
}
@@ -241,7 +255,7 @@
*
* @hide
*/
- public void setId(PrintJobId id) {
+ public void setId(@NonNull PrintJobId id) {
this.mId = id;
}
@@ -250,7 +264,7 @@
*
* @return The label.
*/
- public String getLabel() {
+ public @NonNull String getLabel() {
return mLabel;
}
@@ -261,7 +275,7 @@
*
* @hide
*/
- public void setLabel(String label) {
+ public void setLabel(@NonNull String label) {
mLabel = label;
}
@@ -270,7 +284,7 @@
*
* @return The target printer id.
*/
- public PrinterId getPrinterId() {
+ public @Nullable PrinterId getPrinterId() {
return mPrinterId;
}
@@ -281,7 +295,7 @@
*
* @hide
*/
- public void setPrinterId(PrinterId printerId) {
+ public void setPrinterId(@NonNull PrinterId printerId) {
mPrinterId = printerId;
}
@@ -292,7 +306,7 @@
*
* @hide
*/
- public String getPrinterName() {
+ public @Nullable String getPrinterName() {
return mPrinterName;
}
@@ -303,7 +317,7 @@
*
* @hide
*/
- public void setPrinterName(String printerName) {
+ public void setPrinterName(@NonNull String printerName) {
mPrinterName = printerName;
}
@@ -320,7 +334,7 @@
* @see #STATE_FAILED
* @see #STATE_CANCELED
*/
- public int getState() {
+ public @State int getState() {
return mState;
}
@@ -431,7 +445,7 @@
*
* @return The number of copies or zero if not set.
*/
- public int getCopies() {
+ public @IntRange(from = 0) int getCopies() {
return mCopies;
}
@@ -454,7 +468,7 @@
*
* @return The included pages or <code>null</code> if not set.
*/
- public PageRange[] getPages() {
+ public @Nullable PageRange[] getPages() {
return mPageRanges;
}
@@ -474,7 +488,7 @@
*
* @return The attributes.
*/
- public PrintAttributes getAttributes() {
+ public @NonNull PrintAttributes getAttributes() {
return mAttributes;
}
@@ -713,7 +727,7 @@
* @param prototype Prototype to use as a starting point.
* Can be <code>null</code>.
*/
- public Builder(PrintJobInfo prototype) {
+ public Builder(@Nullable PrintJobInfo prototype) {
mPrototype = (prototype != null)
? new PrintJobInfo(prototype)
: new PrintJobInfo();
@@ -724,7 +738,7 @@
*
* @param copies The number of copies.
*/
- public void setCopies(int copies) {
+ public void setCopies(@IntRange(from = 1) int copies) {
mPrototype.mCopies = copies;
}
@@ -733,7 +747,7 @@
*
* @param attributes The attributes.
*/
- public void setAttributes(PrintAttributes attributes) {
+ public void setAttributes(@NonNull PrintAttributes attributes) {
mPrototype.mAttributes = attributes;
}
@@ -742,7 +756,7 @@
*
* @param pages The included pages.
*/
- public void setPages(PageRange[] pages) {
+ public void setPages(@NonNull PageRange[] pages) {
mPrototype.mPageRanges = pages;
}
@@ -774,7 +788,7 @@
* @param key The option key.
* @param value The option value.
*/
- public void putAdvancedOption(String key, String value) {
+ public void putAdvancedOption(@NonNull String key, @Nullable String value) {
if (mPrototype.mAdvancedOptions == null) {
mPrototype.mAdvancedOptions = new Bundle();
}
@@ -787,7 +801,7 @@
* @param key The option key.
* @param value The option value.
*/
- public void putAdvancedOption(String key, int value) {
+ public void putAdvancedOption(@NonNull String key, int value) {
if (mPrototype.mAdvancedOptions == null) {
mPrototype.mAdvancedOptions = new Bundle();
}
@@ -799,7 +813,7 @@
*
* @return The new instance.
*/
- public PrintJobInfo build() {
+ public @NonNull PrintJobInfo build() {
return mPrototype;
}
}
diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java
index 3fb812e..3eb4874 100644
--- a/core/java/android/print/PrintManager.java
+++ b/core/java/android/print/PrintManager.java
@@ -16,11 +16,14 @@
package android.print;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.Activity;
import android.app.Application.ActivityLifecycleCallbacks;
import android.content.Context;
import android.content.IntentSender;
import android.content.IntentSender.SendIntentException;
+import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
@@ -180,6 +183,8 @@
*
* @param context The current context in which to operate.
* @param service The backing system service.
+ * @param userId The user id in which to operate.
+ * @param appId The application id in which to operate.
* @hide
*/
public PrintManager(Context context, IPrintManager service, int userId, int appId) {
@@ -290,6 +295,7 @@
/**
* Gets a print job given its id.
*
+ * @param printJobId The id of the print job.
* @return The print job list.
* @see PrintJob
* @hide
@@ -311,12 +317,35 @@
}
/**
+ * Get the custom icon for a printer. If the icon is not cached, the icon is
+ * requested asynchronously. Once it is available the printer is updated.
+ *
+ * @param printerId the id of the printer the icon should be loaded for
+ * @return the custom icon to be used for the printer or null if the icon is
+ * not yet available
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ * @hide
+ */
+ public Icon getCustomPrinterIcon(PrinterId printerId) {
+ if (mService == null) {
+ Log.w(LOG_TAG, "Feature android.software.print not available");
+ return null;
+ }
+ try {
+ return mService.getCustomPrinterIcon(printerId, mUserId);
+ } catch (RemoteException re) {
+ Log.e(LOG_TAG, "Error getting custom printer icon", re);
+ }
+ return null;
+ }
+
+ /**
* Gets the print jobs for this application.
*
* @return The print job list.
* @see PrintJob
*/
- public List<PrintJob> getPrintJobs() {
+ public @NonNull List<PrintJob> getPrintJobs() {
if (mService == null) {
Log.w(LOG_TAG, "Feature android.software.print not available");
return Collections.emptyList();
@@ -411,8 +440,9 @@
*
* @see PrintJob
*/
- public PrintJob print(String printJobName, PrintDocumentAdapter documentAdapter,
- PrintAttributes attributes) {
+ public @NonNull PrintJob print(@NonNull String printJobName,
+ @NonNull PrintDocumentAdapter documentAdapter,
+ @Nullable PrintAttributes attributes) {
if (mService == null) {
Log.w(LOG_TAG, "Feature android.software.print not available");
return null;
diff --git a/core/java/android/print/PrinterCapabilitiesInfo.java b/core/java/android/print/PrinterCapabilitiesInfo.java
index 96f3185..d13879b 100644
--- a/core/java/android/print/PrinterCapabilitiesInfo.java
+++ b/core/java/android/print/PrinterCapabilitiesInfo.java
@@ -16,8 +16,11 @@
package android.print;
+import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
+import android.print.PrintAttributes.ColorMode;
+import android.print.PrintAttributes.DuplexMode;
import android.print.PrintAttributes.Margins;
import android.print.PrintAttributes.MediaSize;
import android.print.PrintAttributes.Resolution;
@@ -121,7 +124,7 @@
*
* @return The media sizes.
*/
- public List<MediaSize> getMediaSizes() {
+ public @NonNull List<MediaSize> getMediaSizes() {
return Collections.unmodifiableList(mMediaSizes);
}
@@ -130,7 +133,7 @@
*
* @return The resolutions.
*/
- public List<Resolution> getResolutions() {
+ public @NonNull List<Resolution> getResolutions() {
return Collections.unmodifiableList(mResolutions);
}
@@ -140,7 +143,7 @@
*
* @return The minimal margins.
*/
- public Margins getMinMargins() {
+ public @NonNull Margins getMinMargins() {
return mMinMargins;
}
@@ -152,7 +155,7 @@
* @see PrintAttributes#COLOR_MODE_COLOR
* @see PrintAttributes#COLOR_MODE_MONOCHROME
*/
- public int getColorModes() {
+ public @ColorMode int getColorModes() {
return mColorModes;
}
@@ -165,7 +168,7 @@
* @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
* @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
*/
- public int getDuplexModes() {
+ public @DuplexMode int getDuplexModes() {
return mDuplexModes;
}
@@ -174,7 +177,7 @@
*
* @return The default attributes.
*/
- public PrintAttributes getDefaults() {
+ public @NonNull PrintAttributes getDefaults() {
PrintAttributes.Builder builder = new PrintAttributes.Builder();
builder.setMinMargins(mMinMargins);
@@ -425,7 +428,7 @@
*
* @throws IllegalArgumentException If the printer id is <code>null</code>.
*/
- public Builder(PrinterId printerId) {
+ public Builder(@NonNull PrinterId printerId) {
if (printerId == null) {
throw new IllegalArgumentException("printerId cannot be null.");
}
@@ -446,7 +449,7 @@
*
* @see PrintAttributes.MediaSize
*/
- public Builder addMediaSize(MediaSize mediaSize, boolean isDefault) {
+ public @NonNull Builder addMediaSize(@NonNull MediaSize mediaSize, boolean isDefault) {
if (mPrototype.mMediaSizes == null) {
mPrototype.mMediaSizes = new ArrayList<MediaSize>();
}
@@ -474,7 +477,7 @@
*
* @see PrintAttributes.Resolution
*/
- public Builder addResolution(Resolution resolution, boolean isDefault) {
+ public @NonNull Builder addResolution(@NonNull Resolution resolution, boolean isDefault) {
if (mPrototype.mResolutions == null) {
mPrototype.mResolutions = new ArrayList<Resolution>();
}
@@ -502,7 +505,7 @@
*
* @see PrintAttributes.Margins
*/
- public Builder setMinMargins(Margins margins) {
+ public @NonNull Builder setMinMargins(@NonNull Margins margins) {
if (margins == null) {
throw new IllegalArgumentException("margins cannot be null");
}
@@ -532,7 +535,8 @@
* @see PrintAttributes#COLOR_MODE_COLOR
* @see PrintAttributes#COLOR_MODE_MONOCHROME
*/
- public Builder setColorModes(int colorModes, int defaultColorMode) {
+ public @NonNull Builder setColorModes(@ColorMode int colorModes,
+ @ColorMode int defaultColorMode) {
int currentModes = colorModes;
while (currentModes > 0) {
final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes));
@@ -562,7 +566,8 @@
* @see PrintAttributes#DUPLEX_MODE_LONG_EDGE
* @see PrintAttributes#DUPLEX_MODE_SHORT_EDGE
*/
- public Builder setDuplexModes(int duplexModes, int defaultDuplexMode) {
+ public @NonNull Builder setDuplexModes(@DuplexMode int duplexModes,
+ @DuplexMode int defaultDuplexMode) {
int currentModes = duplexModes;
while (currentModes > 0) {
final int currentMode = (1 << Integer.numberOfTrailingZeros(currentModes));
@@ -589,7 +594,7 @@
*
* @throws IllegalStateException If a required attribute was not specified.
*/
- public PrinterCapabilitiesInfo build() {
+ public @NonNull PrinterCapabilitiesInfo build() {
if (mPrototype.mMediaSizes == null || mPrototype.mMediaSizes.isEmpty()) {
throw new IllegalStateException("No media size specified.");
}
diff --git a/core/java/android/print/PrinterId.java b/core/java/android/print/PrinterId.java
index a3f3b2bf..83efe80 100644
--- a/core/java/android/print/PrinterId.java
+++ b/core/java/android/print/PrinterId.java
@@ -16,6 +16,7 @@
package android.print;
+import android.annotation.NonNull;
import android.content.ComponentName;
import android.os.Parcel;
import android.os.Parcelable;
@@ -65,7 +66,7 @@
*
* @return The printer name.
*/
- public String getLocalId() {
+ public @NonNull String getLocalId() {
return mLocalId;
}
diff --git a/core/java/android/print/PrinterInfo.java b/core/java/android/print/PrinterInfo.java
index 7fcc81f..20d91b2 100644
--- a/core/java/android/print/PrinterInfo.java
+++ b/core/java/android/print/PrinterInfo.java
@@ -16,10 +16,26 @@
package android.print;
+import android.annotation.DrawableRes;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.TestApi;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/**
* This class represents the description of a printer. Instances of
* this class are created by print services to report to the system
@@ -30,6 +46,13 @@
*/
public final class PrinterInfo implements Parcelable {
+ /** @hide */
+ @IntDef({
+ STATUS_IDLE, STATUS_BUSY, STATUS_UNAVAILABLE
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface Status {
+ }
/** Printer status: the printer is idle and ready to print. */
public static final int STATUS_IDLE = 1;
@@ -41,6 +64,18 @@
private PrinterId mId;
+ /** Resource inside the printer's services's package to be used as an icon */
+ private int mIconResourceId;
+
+ /** If a custom icon can be loaded for the printer */
+ private boolean mHasCustomPrinterIcon;
+
+ /** The generation of the icon in the cache. */
+ private int mCustomPrinterIconGen;
+
+ /** Intent that launches the activity showing more information about the printer. */
+ private PendingIntent mInfoIntent;
+
private String mName;
private int mStatus;
@@ -77,6 +112,10 @@
} else {
mCapabilities = null;
}
+ mIconResourceId = other.mIconResourceId;
+ mHasCustomPrinterIcon = other.mHasCustomPrinterIcon;
+ mCustomPrinterIconGen = other.mCustomPrinterIconGen;
+ mInfoIntent = other.mInfoIntent;
}
/**
@@ -84,16 +123,64 @@
*
* @return The printer id.
*/
- public PrinterId getId() {
+ public @NonNull PrinterId getId() {
return mId;
}
/**
+ * Get the icon to be used for this printer. If no per printer icon is available, the printer's
+ * service's icon is returned. If the printer has a custom icon this icon might get requested
+ * asynchronously. Once the icon is loaded the discovery sessions will be notified that the
+ * printer changed.
+ *
+ * @param context The context that will be using the icons
+ * @return The icon to be used for the printer or null if no icon could be found.
+ * @hide
+ */
+ @TestApi
+ public @Nullable Drawable loadIcon(@NonNull Context context) {
+ Drawable drawable = null;
+ PackageManager packageManager = context.getPackageManager();
+
+ if (mHasCustomPrinterIcon) {
+ PrintManager printManager = (PrintManager) context
+ .getSystemService(Context.PRINT_SERVICE);
+
+ Icon icon = printManager.getCustomPrinterIcon(mId);
+
+ if (icon != null) {
+ drawable = icon.loadDrawable(context);
+ }
+ }
+
+ if (drawable == null) {
+ try {
+ String packageName = mId.getServiceName().getPackageName();
+ PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
+ ApplicationInfo appInfo = packageInfo.applicationInfo;
+
+ // If no custom icon is available, try the icon from the resources
+ if (mIconResourceId != 0) {
+ drawable = packageManager.getDrawable(packageName, mIconResourceId, appInfo);
+ }
+
+ // Fall back to the printer's service's icon if no per printer icon could be found
+ if (drawable == null) {
+ drawable = appInfo.loadIcon(packageManager);
+ }
+ } catch (NameNotFoundException e) {
+ }
+ }
+
+ return drawable;
+ }
+
+ /**
* Get the printer name.
*
* @return The printer name.
*/
- public String getName() {
+ public @Nullable String getName() {
return mName;
}
@@ -106,7 +193,7 @@
* @see #STATUS_IDLE
* @see #STATUS_UNAVAILABLE
*/
- public int getStatus() {
+ public @Status int getStatus() {
return mStatus;
}
@@ -115,16 +202,28 @@
*
* @return The description.
*/
- public String getDescription() {
+ public @Nullable String getDescription() {
return mDescription;
}
/**
+ * Get the {@link PendingIntent} that launches the activity showing more information about the
+ * printer.
+ *
+ * @return the {@link PendingIntent} that launches the activity showing more information about
+ * the printer or null if it is not configured
+ * @hide
+ */
+ public @Nullable PendingIntent getInfoIntent() {
+ return mInfoIntent;
+ }
+
+ /**
* Gets the printer capabilities.
*
* @return The capabilities.
*/
- public PrinterCapabilitiesInfo getCapabilities() {
+ public @Nullable PrinterCapabilitiesInfo getCapabilities() {
return mCapabilities;
}
@@ -134,6 +233,10 @@
mStatus = parcel.readInt();
mDescription = parcel.readString();
mCapabilities = parcel.readParcelable(null);
+ mIconResourceId = parcel.readInt();
+ mHasCustomPrinterIcon = parcel.readByte() != 0;
+ mCustomPrinterIconGen = parcel.readInt();
+ mInfoIntent = parcel.readParcelable(null);
}
@Override
@@ -148,6 +251,10 @@
parcel.writeInt(mStatus);
parcel.writeString(mDescription);
parcel.writeParcelable(mCapabilities, flags);
+ parcel.writeInt(mIconResourceId);
+ parcel.writeByte((byte) (mHasCustomPrinterIcon ? 1 : 0));
+ parcel.writeInt(mCustomPrinterIconGen);
+ parcel.writeParcelable(mInfoIntent, flags);
}
@Override
@@ -159,9 +266,61 @@
result = prime * result + mStatus;
result = prime * result + ((mDescription != null) ? mDescription.hashCode() : 0);
result = prime * result + ((mCapabilities != null) ? mCapabilities.hashCode() : 0);
+ result = prime * result + mIconResourceId;
+ result = prime * result + (mHasCustomPrinterIcon ? 1 : 0);
+ result = prime * result + mCustomPrinterIconGen;
+ result = prime * result + ((mInfoIntent != null) ? mInfoIntent.hashCode() : 0);
return result;
}
+ /**
+ * Compare two {@link PrinterInfo printerInfos} in all aspects beside being null and the
+ * {@link #mStatus}.
+ *
+ * @param other the other {@link PrinterInfo}
+ * @return true iff the infos are equivalent
+ * @hide
+ */
+ public boolean equalsIgnoringStatus(PrinterInfo other) {
+ if (mId == null) {
+ if (other.mId != null) {
+ return false;
+ }
+ } else if (!mId.equals(other.mId)) {
+ return false;
+ }
+ if (!TextUtils.equals(mName, other.mName)) {
+ return false;
+ }
+ if (!TextUtils.equals(mDescription, other.mDescription)) {
+ return false;
+ }
+ if (mCapabilities == null) {
+ if (other.mCapabilities != null) {
+ return false;
+ }
+ } else if (!mCapabilities.equals(other.mCapabilities)) {
+ return false;
+ }
+ if (mIconResourceId != other.mIconResourceId) {
+ return false;
+ }
+ if (mHasCustomPrinterIcon != other.mHasCustomPrinterIcon) {
+ return false;
+ }
+ if (mCustomPrinterIconGen != other.mCustomPrinterIconGen) {
+ return false;
+ }
+ if (mInfoIntent == null) {
+ if (other.mInfoIntent != null) {
+ return false;
+ }
+ } else if (!mInfoIntent.equals(other.mInfoIntent)) {
+ return false;
+ }
+ return true;
+ }
+
@Override
public boolean equals(Object obj) {
if (this == obj) {
@@ -174,29 +333,12 @@
return false;
}
PrinterInfo other = (PrinterInfo) obj;
- if (mId == null) {
- if (other.mId != null) {
- return false;
- }
- } else if (!mId.equals(other.mId)) {
- return false;
- }
- if (!TextUtils.equals(mName, other.mName)) {
+ if (!equalsIgnoringStatus(other)) {
return false;
}
if (mStatus != other.mStatus) {
return false;
}
- if (!TextUtils.equals(mDescription, other.mDescription)) {
- return false;
- }
- if (mCapabilities == null) {
- if (other.mCapabilities != null) {
- return false;
- }
- } else if (!mCapabilities.equals(other.mCapabilities)) {
- return false;
- }
return true;
}
@@ -209,6 +351,10 @@
builder.append(", status=").append(mStatus);
builder.append(", description=").append(mDescription);
builder.append(", capabilities=").append(mCapabilities);
+ builder.append(", iconResId=").append(mIconResourceId);
+ builder.append(", hasCustomPrinterIcon=").append(mHasCustomPrinterIcon);
+ builder.append(", customPrinterIconGen=").append(mCustomPrinterIconGen);
+ builder.append(", infoIntent=").append(mInfoIntent);
builder.append("\"}");
return builder.toString();
}
@@ -228,7 +374,7 @@
* @throws IllegalArgumentException If the printer id is null, or the
* printer name is empty or the status is not a valid one.
*/
- public Builder(PrinterId printerId, String name, int status) {
+ public Builder(@NonNull PrinterId printerId, @NonNull String name, @Status int status) {
if (printerId == null) {
throw new IllegalArgumentException("printerId cannot be null.");
}
@@ -249,7 +395,7 @@
*
* @param other Other info from which to start building.
*/
- public Builder(PrinterInfo other) {
+ public Builder(@NonNull PrinterInfo other) {
mPrototype = new PrinterInfo();
mPrototype.copyFrom(other);
}
@@ -264,19 +410,50 @@
* @see PrinterInfo#STATUS_BUSY
* @see PrinterInfo#STATUS_UNAVAILABLE
*/
- public Builder setStatus(int status) {
+ public @Nullable Builder setStatus(@Status int status) {
mPrototype.mStatus = status;
return this;
}
/**
+ * Set a drawable resource as icon for this printer. If no icon is set the printer's
+ * service's icon is used for the printer.
+ *
+ * @param iconResourceId The resource ID of the icon.
+ * @return This builder.
+ * @see PrinterInfo.Builder#setHasCustomPrinterIcon
+ */
+ public @NonNull Builder setIconResourceId(@DrawableRes int iconResourceId) {
+ mPrototype.mIconResourceId = iconResourceId;
+ return this;
+ }
+
+ /**
+ * Declares that the print service can load a custom per printer's icon. If both
+ * {@link PrinterInfo.Builder#setIconResourceId} and a custom icon are set the resource icon
+ * is shown while the custom icon loads but then the custom icon is used. If
+ * {@link PrinterInfo.Builder#setIconResourceId} is not set the printer's service's icon is
+ * shown while loading.
+ * <p>
+ * The icon is requested asynchronously and only when needed via
+ * {@link android.printservice.PrinterDiscoverySession#onRequestCustomPrinterIcon}.
+ * </p>
+ *
+ * @return This builder.
+ */
+ public @NonNull Builder setHasCustomPrinterIcon() {
+ mPrototype.mHasCustomPrinterIcon = true;
+ return this;
+ }
+
+ /**
* Sets the <strong>localized</strong> printer name which
* is shown to the user
*
* @param name The name.
* @return This builder.
*/
- public Builder setName(String name) {
+ public @NonNull Builder setName(@NonNull String name) {
mPrototype.mName = name;
return this;
}
@@ -288,18 +465,30 @@
* @param description The description.
* @return This builder.
*/
- public Builder setDescription(String description) {
+ public @NonNull Builder setDescription(@NonNull String description) {
mPrototype.mDescription = description;
return this;
}
/**
+ * Sets the {@link PendingIntent} that launches an activity showing more information about
+ * the printer.
+ *
+ * @param infoIntent The {@link PendingIntent intent}.
+ * @return This builder.
+ */
+ public @NonNull Builder setInfoIntent(@NonNull PendingIntent infoIntent) {
+ mPrototype.mInfoIntent = infoIntent;
+ return this;
+ }
+
+ /**
* Sets the printer capabilities.
*
* @param capabilities The capabilities.
* @return This builder.
*/
- public Builder setCapabilities(PrinterCapabilitiesInfo capabilities) {
+ public @NonNull Builder setCapabilities(@NonNull PrinterCapabilitiesInfo capabilities) {
mPrototype.mCapabilities = capabilities;
return this;
}
@@ -309,7 +498,7 @@
*
* @return A new {@link PrinterInfo}.
*/
- public PrinterInfo build() {
+ public @NonNull PrinterInfo build() {
return mPrototype;
}
@@ -318,6 +507,19 @@
|| status == STATUS_BUSY
|| status == STATUS_UNAVAILABLE);
}
+
+ /**
+ * Increments the generation number of the custom printer icon. As the {@link PrinterInfo}
+ * does not match the previous one anymore, users of the {@link PrinterInfo} will reload the
+ * icon if needed.
+ *
+ * @return This builder.
+ * @hide
+ */
+ public @NonNull Builder incCustomPrinterIconGen() {
+ mPrototype.mCustomPrinterIconGen++;
+ return this;
+ }
}
public static final Parcelable.Creator<PrinterInfo> CREATOR =
diff --git a/core/java/android/print/pdf/PrintedPdfDocument.java b/core/java/android/print/pdf/PrintedPdfDocument.java
index 2d8aafa..df7c054 100644
--- a/core/java/android/print/pdf/PrintedPdfDocument.java
+++ b/core/java/android/print/pdf/PrintedPdfDocument.java
@@ -16,26 +16,25 @@
package android.print.pdf;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.pdf.PdfDocument;
-import android.graphics.pdf.PdfDocument.Page;
-import android.graphics.pdf.PdfDocument.PageInfo;
import android.print.PrintAttributes;
import android.print.PrintAttributes.Margins;
import android.print.PrintAttributes.MediaSize;
/**
- * This class is a helper for creating a PDF file for given print
- * attributes. It is useful for implementing printing via the native
- * Android graphics APIs.
+ * This class is a helper for creating a PDF file for given print attributes. It is useful for
+ * implementing printing via the native Android graphics APIs.
* <p>
- * This class computes the page width, page height, and content rectangle
- * from the provided print attributes and these precomputed values can be
- * accessed via {@link #getPageWidth()}, {@link #getPageHeight()}, and
- * {@link #getPageContentRect()}, respectively. The {@link #startPage(int)}
- * methods creates pages whose {@link PageInfo} is initialized with the
- * precomputed values for width, height, and content rectangle.
+ * This class computes the page width, page height, and content rectangle from the provided print
+ * attributes and these precomputed values can be accessed via {@link #getPageWidth()},
+ * {@link #getPageHeight()}, and {@link #getPageContentRect()}, respectively. The
+ * {@link #startPage(int)} methods creates pages whose
+ * {@link android.graphics.pdf.PdfDocument.PageInfo PageInfo} is initialized with the precomputed
+ * values for width, height, and content rectangle.
* <p>
* A typical use of the APIs looks like this:
* </p>
@@ -81,7 +80,7 @@
* @param context Context instance for accessing resources.
* @param attributes The print attributes.
*/
- public PrintedPdfDocument(Context context, PrintAttributes attributes) {
+ public PrintedPdfDocument(@NonNull Context context, @NonNull PrintAttributes attributes) {
MediaSize mediaSize = attributes.getMediaSize();
// Compute the size of the target canvas from the attributes.
@@ -105,28 +104,28 @@
}
/**
- * Starts a new page. The page is created using width, height and content
- * rectangle computed from the print attributes passed in the constructor
- * and the given page number to create an appropriate {@link PageInfo}.
+ * Starts a new page. The page is created using width, height and content rectangle computed
+ * from the print attributes passed in the constructor and the given page number to create an
+ * appropriate {@link android.graphics.pdf.PdfDocument.PageInfo PageInfo}.
* <p>
- * After the page is created you can draw arbitrary content on the page's
- * canvas which you can get by calling {@link Page#getCanvas() Page.getCanvas()}.
+ * After the page is created you can draw arbitrary content on the page's canvas which you can
+ * get by calling {@link android.graphics.pdf.PdfDocument.Page#getCanvas() Page.getCanvas()}.
* After you are done drawing the content you should finish the page by calling
- * {@link #finishPage(Page)}. After the page is finished you should no longer
- * access the page or its canvas.
+ * {@link #finishPage(Page)}. After the page is finished you should no longer access the page or
+ * its canvas.
* </p>
* <p>
- * <strong>Note:</strong> Do not call this method after {@link #close()}.
- * Also do not call this method if the last page returned by this method
- * is not finished by calling {@link #finishPage(Page)}.
+ * <strong>Note:</strong> Do not call this method after {@link #close()}. Also do not call this
+ * method if the last page returned by this method is not finished by calling
+ * {@link #finishPage(Page)}.
* </p>
*
- * @param pageNumber The page number. Must be a positive value.
+ * @param pageNumber The page number. Must be a non negative.
* @return A blank page.
*
* @see #finishPage(Page)
*/
- public Page startPage(int pageNumber) {
+ public @NonNull Page startPage(@IntRange(from = 0) int pageNumber) {
PageInfo pageInfo = new PageInfo
.Builder(mPageWidth, mPageHeight, pageNumber)
.setContentRect(mContentRect)
@@ -139,7 +138,7 @@
*
* @return The page width in PostScript points (1/72th of an inch).
*/
- public int getPageWidth() {
+ public @IntRange(from = 0) int getPageWidth() {
return mPageWidth;
}
@@ -148,7 +147,7 @@
*
* @return The page height in PostScript points (1/72th of an inch).
*/
- public int getPageHeight() {
+ public @IntRange(from = 0) int getPageHeight() {
return mPageHeight;
}
@@ -158,7 +157,7 @@
*
* @return The content rectangle.
*/
- public Rect getPageContentRect() {
+ public @NonNull Rect getPageContentRect() {
return mContentRect;
}
}
diff --git a/core/java/android/printservice/CustomPrinterIconCallback.java b/core/java/android/printservice/CustomPrinterIconCallback.java
new file mode 100644
index 0000000..ea9ea8b
--- /dev/null
+++ b/core/java/android/printservice/CustomPrinterIconCallback.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.printservice;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.drawable.Icon;
+import android.os.RemoteException;
+import android.print.PrinterId;
+import android.util.Log;
+
+
+/**
+ * Callback for {@link PrinterDiscoverySession#onRequestCustomPrinterIcon}.
+ */
+public class CustomPrinterIconCallback {
+ /** The printer the call back is for */
+ private final @NonNull PrinterId mPrinterId;
+ private final @NonNull IPrintServiceClient mObserver;
+ private static final String LOG_TAG = "CustomPrinterIconCallback";
+
+ /**
+ * Create a callback class to be used once a icon is loaded
+ *
+ * @param printerId The printer the icon should be loaded for
+ * @param observer The observer that needs to be notified about the update.
+ */
+ CustomPrinterIconCallback(@NonNull PrinterId printerId, @NonNull IPrintServiceClient observer) {
+ mPrinterId = printerId;
+ mObserver = observer;
+ }
+
+ /**
+ * Provide a new icon for a printer. Can be called more than once to update the icon.
+ *
+ * @param icon The new icon for the printer or null to unset the current icon
+ * @return true iff the icon could be updated
+ */
+ public boolean onCustomPrinterIconLoaded(@Nullable Icon icon) {
+ try {
+ mObserver.onCustomPrinterIconLoaded(mPrinterId, icon);
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG , "Could not update icon", e);
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/core/java/android/printservice/IPrintService.aidl b/core/java/android/printservice/IPrintService.aidl
index ee36619..3750d7a 100644
--- a/core/java/android/printservice/IPrintService.aidl
+++ b/core/java/android/printservice/IPrintService.aidl
@@ -10,7 +10,7 @@
* 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 languagÿe governing permissions and
+ * See the License for the specific language governing permissions and
* limitations under the License.
*/
@@ -35,6 +35,15 @@
void stopPrinterDiscovery();
void validatePrinters(in List<PrinterId> printerIds);
void startPrinterStateTracking(in PrinterId printerId);
+
+ /**
+ * Request the custom icon for a printer.
+ *
+ * @param printerId the id of the printer the icon should be loaded for
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ void requestCustomPrinterIcon(in PrinterId printerId);
+
void stopPrinterStateTracking(in PrinterId printerId);
void destroyPrinterDiscoverySession();
}
diff --git a/core/java/android/printservice/IPrintServiceClient.aidl b/core/java/android/printservice/IPrintServiceClient.aidl
index b4baa48..0ae1e18 100644
--- a/core/java/android/printservice/IPrintServiceClient.aidl
+++ b/core/java/android/printservice/IPrintServiceClient.aidl
@@ -16,6 +16,7 @@
package android.printservice;
+import android.graphics.drawable.Icon;
import android.os.ParcelFileDescriptor;
import android.print.PrintJobInfo;
import android.print.PrinterId;
@@ -53,4 +54,13 @@
void onPrintersAdded(in ParceledListSlice printers);
void onPrintersRemoved(in ParceledListSlice printerIds);
+
+ /**
+ * Handle that a custom icon for a printer was loaded.
+ *
+ * @param printerId the id of the printer the icon belongs to
+ * @param icon the icon that was loaded
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ void onCustomPrinterIconLoaded(in PrinterId printerId, in Icon icon);
}
diff --git a/core/java/android/printservice/PrintDocument.java b/core/java/android/printservice/PrintDocument.java
index e43f2a8..0121ae1 100644
--- a/core/java/android/printservice/PrintDocument.java
+++ b/core/java/android/printservice/PrintDocument.java
@@ -16,6 +16,8 @@
package android.printservice;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.print.PrintDocumentInfo;
@@ -54,7 +56,7 @@
*
* @return The document info.
*/
- public PrintDocumentInfo getInfo() {
+ public @NonNull PrintDocumentInfo getInfo() {
PrintService.throwIfNotCalledOnMainThread();
return mInfo;
}
@@ -69,7 +71,7 @@
*
* @return A file descriptor for reading the data.
*/
- public ParcelFileDescriptor getData() {
+ public @Nullable ParcelFileDescriptor getData() {
PrintService.throwIfNotCalledOnMainThread();
ParcelFileDescriptor source = null;
ParcelFileDescriptor sink = null;
diff --git a/core/java/android/printservice/PrintJob.java b/core/java/android/printservice/PrintJob.java
index 86fc292..6414b6a 100644
--- a/core/java/android/printservice/PrintJob.java
+++ b/core/java/android/printservice/PrintJob.java
@@ -344,7 +344,7 @@
* @return True if the tag was set, false otherwise.
*/
@MainThread
- public boolean setTag(String tag) {
+ public boolean setTag(@NonNull String tag) {
PrintService.throwIfNotCalledOnMainThread();
if (isInImmutableState()) {
return false;
@@ -364,7 +364,8 @@
*
* @see #setTag(String)
*/
- public String getTag() {
+ @MainThread
+ public @Nullable String getTag() {
PrintService.throwIfNotCalledOnMainThread();
return getInfo().getTag();
}
diff --git a/core/java/android/printservice/PrintService.java b/core/java/android/printservice/PrintService.java
index 6295822..d0037b7 100644
--- a/core/java/android/printservice/PrintService.java
+++ b/core/java/android/printservice/PrintService.java
@@ -16,6 +16,7 @@
package android.printservice;
+import android.annotation.Nullable;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
@@ -191,30 +192,29 @@
/**
* If you declared an optional activity with advanced print options via the
- * {@link android.R.attr#advancedPrintOptionsActivity advancedPrintOptionsActivity}
- * attribute, this extra is used to pass in the currently constructed {@link
- * PrintJobInfo} to your activity allowing you to modify it. After you are
- * done, you must return the modified {@link PrintJobInfo} via the same extra.
+ * {@link android.R.attr#advancedPrintOptionsActivity advancedPrintOptionsActivity} attribute,
+ * this extra is used to pass in the currently constructed {@link PrintJobInfo} to your activity
+ * allowing you to modify it. After you are done, you must return the modified
+ * {@link PrintJobInfo} via the same extra.
* <p>
- * You cannot modify the passed in {@link PrintJobInfo} directly, rather you
- * should build another one using the {@link PrintJobInfo.Builder} class. You
- * can specify any standard properties and add advanced, printer specific,
- * ones via {@link PrintJobInfo.Builder#putAdvancedOption(String, String)
- * PrintJobInfo.Builder.putAdvancedOption(String, String)} and {@link
- * PrintJobInfo.Builder#putAdvancedOption(String, int)
- * PrintJobInfo.Builder.putAdvancedOption(String, int)}. The advanced options
- * are not interpreted by the system, they will not be visible to applications,
- * and can only be accessed by your print service via {@link
- * PrintJob#getAdvancedStringOption(String) PrintJob.getAdvancedStringOption(String)}
- * and {@link PrintJob#getAdvancedIntOption(String) PrintJob.getAdvancedIntOption(String)}.
+ * You cannot modify the passed in {@link PrintJobInfo} directly, rather you should build
+ * another one using the {@link android.print.PrintJobInfo.Builder PrintJobInfo.Builder} class.
+ * You can specify any standard properties and add advanced, printer specific, ones via
+ * {@link android.print.PrintJobInfo.Builder#putAdvancedOption(String, String)
+ * PrintJobInfo.Builder.putAdvancedOption(String, String)} and
+ * {@link android.print.PrintJobInfo.Builder#putAdvancedOption(String, int)
+ * PrintJobInfo.Builder.putAdvancedOption(String, int)}. The advanced options are not
+ * interpreted by the system, they will not be visible to applications, and can only be accessed
+ * by your print service via {@link PrintJob#getAdvancedStringOption(String)
+ * PrintJob.getAdvancedStringOption(String)} and {@link PrintJob#getAdvancedIntOption(String)
+ * PrintJob.getAdvancedIntOption(String)}.
* </p>
* <p>
- * If the advanced print options activity offers changes to the standard print
- * options, you can get the current {@link android.print.PrinterInfo} using the
- * {@link #EXTRA_PRINTER_INFO} extra which will allow you to present the user
- * with UI options supported by the current printer. For example, if the current
- * printer does not support a given media size, you should not offer it in the
- * advanced print options UI.
+ * If the advanced print options activity offers changes to the standard print options, you can
+ * get the current {@link android.print.PrinterInfo PrinterInfo} using the
+ * {@link #EXTRA_PRINTER_INFO} extra which will allow you to present the user with UI options
+ * supported by the current printer. For example, if the current printer does not support a
+ * given media size, you should not offer it in the advanced print options UI.
* </p>
*
* @see #EXTRA_PRINTER_INFO
@@ -275,9 +275,10 @@
/**
* Callback asking you to create a new {@link PrinterDiscoverySession}.
*
+ * @return The created session.
* @see PrinterDiscoverySession
*/
- protected abstract PrinterDiscoverySession onCreatePrinterDiscoverySession();
+ protected abstract @Nullable PrinterDiscoverySession onCreatePrinterDiscoverySession();
/**
* Called when cancellation of a print job is requested. The service
@@ -368,6 +369,7 @@
mHandler.sendEmptyMessage(ServiceHandler.MSG_DESTROY_PRINTER_DISCOVERY_SESSION);
}
+ @Override
public void startPrinterDiscovery(List<PrinterId> priorityList) {
mHandler.obtainMessage(ServiceHandler.MSG_START_PRINTER_DISCOVERY,
priorityList).sendToTarget();
@@ -391,6 +393,12 @@
}
@Override
+ public void requestCustomPrinterIcon(PrinterId printerId) {
+ mHandler.obtainMessage(ServiceHandler.MSG_REQUEST_CUSTOM_PRINTER_ICON,
+ printerId).sendToTarget();
+ }
+
+ @Override
public void stopPrinterStateTracking(PrinterId printerId) {
mHandler.obtainMessage(ServiceHandler.MSG_STOP_PRINTER_STATE_TRACKING,
printerId).sendToTarget();
@@ -423,10 +431,11 @@
public static final int MSG_STOP_PRINTER_DISCOVERY = 4;
public static final int MSG_VALIDATE_PRINTERS = 5;
public static final int MSG_START_PRINTER_STATE_TRACKING = 6;
- public static final int MSG_STOP_PRINTER_STATE_TRACKING = 7;
- public static final int MSG_ON_PRINTJOB_QUEUED = 8;
- public static final int MSG_ON_REQUEST_CANCEL_PRINTJOB = 9;
- public static final int MSG_SET_CLIENT = 10;
+ public static final int MSG_REQUEST_CUSTOM_PRINTER_ICON = 7;
+ public static final int MSG_STOP_PRINTER_STATE_TRACKING = 8;
+ public static final int MSG_ON_PRINTJOB_QUEUED = 9;
+ public static final int MSG_ON_REQUEST_CANCEL_PRINTJOB = 10;
+ public static final int MSG_SET_CLIENT = 11;
public ServiceHandler(Looper looper) {
super(looper, null, true);
@@ -508,6 +517,17 @@
}
} break;
+ case MSG_REQUEST_CUSTOM_PRINTER_ICON: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_REQUEST_CUSTOM_PRINTER_ICON "
+ + getPackageName());
+ }
+ if (mDiscoverySession != null) {
+ PrinterId printerId = (PrinterId) message.obj;
+ mDiscoverySession.requestCustomPrinterIcon(printerId);
+ }
+ } break;
+
case MSG_STOP_PRINTER_STATE_TRACKING: {
if (DEBUG) {
Log.i(LOG_TAG, "MSG_STOP_PRINTER_STATE_TRACKING "
diff --git a/core/java/android/printservice/PrintServiceInfo.java b/core/java/android/printservice/PrintServiceInfo.java
index a2c6c09e..b33ef83 100644
--- a/core/java/android/printservice/PrintServiceInfo.java
+++ b/core/java/android/printservice/PrintServiceInfo.java
@@ -98,8 +98,7 @@
*
* @param resolveInfo The service resolve info.
* @param context Context for accessing resources.
- * @throws XmlPullParserException If a XML parsing error occurs.
- * @throws IOException If a I/O error occurs.
+ * @return The created instance.
*/
public static PrintServiceInfo create(ResolveInfo resolveInfo, Context context) {
String settingsActivityName = null;
@@ -220,10 +219,12 @@
/**
* {@inheritDoc}
*/
+ @Override
public int describeContents() {
return 0;
}
+ @Override
public void writeToParcel(Parcel parcel, int flagz) {
parcel.writeString(mId);
parcel.writeParcelable(mResolveInfo, 0);
@@ -275,10 +276,12 @@
public static final Parcelable.Creator<PrintServiceInfo> CREATOR =
new Parcelable.Creator<PrintServiceInfo>() {
+ @Override
public PrintServiceInfo createFromParcel(Parcel parcel) {
return new PrintServiceInfo(parcel);
}
+ @Override
public PrintServiceInfo[] newArray(int size) {
return new PrintServiceInfo[size];
}
diff --git a/core/java/android/printservice/PrinterDiscoverySession.java b/core/java/android/printservice/PrinterDiscoverySession.java
index 17cb68f..cd5a903 100644
--- a/core/java/android/printservice/PrinterDiscoverySession.java
+++ b/core/java/android/printservice/PrinterDiscoverySession.java
@@ -16,6 +16,7 @@
package android.printservice;
+import android.annotation.NonNull;
import android.content.pm.ParceledListSlice;
import android.os.RemoteException;
import android.print.PrinterCapabilitiesInfo;
@@ -138,7 +139,7 @@
* @see #removePrinters(List)
* @see #isDestroyed()
*/
- public final List<PrinterInfo> getPrinters() {
+ public final @NonNull List<PrinterInfo> getPrinters() {
PrintService.throwIfNotCalledOnMainThread();
if (mIsDestroyed) {
return Collections.emptyList();
@@ -161,7 +162,7 @@
* @see #getPrinters()
* @see #isDestroyed()
*/
- public final void addPrinters(List<PrinterInfo> printers) {
+ public final void addPrinters(@NonNull List<PrinterInfo> printers) {
PrintService.throwIfNotCalledOnMainThread();
// If the session is destroyed - nothing do to.
@@ -225,7 +226,7 @@
* @see #getPrinters()
* @see #isDestroyed()
*/
- public final void removePrinters(List<PrinterId> printerIds) {
+ public final void removePrinters(@NonNull List<PrinterId> printerIds) {
PrintService.throwIfNotCalledOnMainThread();
// If the session is destroyed - nothing do to.
@@ -350,7 +351,7 @@
* @see #removePrinters(List)
* @see #isPrinterDiscoveryStarted()
*/
- public abstract void onStartPrinterDiscovery(List<PrinterId> priorityList);
+ public abstract void onStartPrinterDiscovery(@NonNull List<PrinterId> priorityList);
/**
* Callback notifying you that you should stop printer discovery.
@@ -372,10 +373,10 @@
*
* @param printerIds The printers to validate.
*
- * @see PrinterInfo.Builder#setCapabilities(PrinterCapabilitiesInfo)
+ * @see android.print.PrinterInfo.Builder#setCapabilities(PrinterCapabilitiesInfo)
* PrinterInfo.Builder.setCapabilities(PrinterCapabilitiesInfo)
*/
- public abstract void onValidatePrinters(List<PrinterId> printerIds);
+ public abstract void onValidatePrinters(@NonNull List<PrinterId> printerIds);
/**
* Callback asking you to start tracking the state of a printer. Tracking
@@ -400,10 +401,24 @@
* @param printerId The printer to start tracking.
*
* @see #onStopPrinterStateTracking(PrinterId)
- * @see PrinterInfo.Builder#setCapabilities(PrinterCapabilitiesInfo)
+ * @see android.print.PrinterInfo.Builder#setCapabilities(PrinterCapabilitiesInfo)
* PrinterInfo.Builder.setCapabilities(PrinterCapabilitiesInfo)
*/
- public abstract void onStartPrinterStateTracking(PrinterId printerId);
+ public abstract void onStartPrinterStateTracking(@NonNull PrinterId printerId);
+
+ /**
+ * Request the custom icon for a printer. Once the icon is available use
+ * {@link CustomPrinterIconCallback#onCustomPrinterIconLoaded} to send the data to the print
+ * service.
+ *
+ * @param printerId The printer to icon belongs to.
+ * @param callback Callback for returning the icon to the print spooler.
+ *
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public void onRequestCustomPrinterIcon(@NonNull PrinterId printerId,
+ @NonNull CustomPrinterIconCallback callback) {
+ }
/**
* Callback asking you to stop tracking the state of a printer. The passed
@@ -414,7 +429,7 @@
*
* @see #onStartPrinterStateTracking(PrinterId)
*/
- public abstract void onStopPrinterStateTracking(PrinterId printerId);
+ public abstract void onStopPrinterStateTracking(@NonNull PrinterId printerId);
/**
* Gets the printers that should be tracked. These are printers that are
@@ -434,7 +449,7 @@
* @see #onStopPrinterStateTracking(PrinterId)
* @see #isDestroyed()
*/
- public final List<PrinterId> getTrackedPrinters() {
+ public final @NonNull List<PrinterId> getTrackedPrinters() {
PrintService.throwIfNotCalledOnMainThread();
if (mIsDestroyed) {
return Collections.emptyList();
@@ -476,7 +491,7 @@
return mIsDiscoveryStarted;
}
- void startPrinterDiscovery(List<PrinterId> priorityList) {
+ void startPrinterDiscovery(@NonNull List<PrinterId> priorityList) {
if (!mIsDestroyed) {
mIsDiscoveryStarted = true;
sendOutOfDiscoveryPeriodPrinterChanges();
@@ -494,13 +509,13 @@
}
}
- void validatePrinters(List<PrinterId> printerIds) {
+ void validatePrinters(@NonNull List<PrinterId> printerIds) {
if (!mIsDestroyed && mObserver != null) {
onValidatePrinters(printerIds);
}
}
- void startPrinterStateTracking(PrinterId printerId) {
+ void startPrinterStateTracking(@NonNull PrinterId printerId) {
if (!mIsDestroyed && mObserver != null
&& !mTrackedPrinters.contains(printerId)) {
mTrackedPrinters.add(printerId);
@@ -508,7 +523,21 @@
}
}
- void stopPrinterStateTracking(PrinterId printerId) {
+ /**
+ * Request the custom icon for a printer.
+ *
+ * @param printerId The printer to icon belongs to.
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ void requestCustomPrinterIcon(@NonNull PrinterId printerId) {
+ if (!mIsDestroyed && mObserver != null) {
+ CustomPrinterIconCallback callback = new CustomPrinterIconCallback(printerId,
+ mObserver);
+ onRequestCustomPrinterIcon(printerId, callback);
+ }
+ }
+
+ void stopPrinterStateTracking(@NonNull PrinterId printerId) {
if (!mIsDestroyed && mObserver != null
&& mTrackedPrinters.remove(printerId)) {
onStopPrinterStateTracking(printerId);
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index 5903d4a..71db0b5 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -364,20 +364,9 @@
return mClipDescription;
}
- /**
- * Requests the permissions for the content URIs contained in {@link android.content.ClipData}
- * object associated with this event. Which permissions will be granted is defined by the set of
- * flags passed to {@link View#startDragAndDrop(ClipData, View.DragShadowBuilder, Object, int)}.
- * Returns the {@link DropPermissions} object that can be used by the receiving app to release
- * the permissions for the content URIs when they are no longer needed.
- * This method only returns valid data if the event action is {@link #ACTION_DROP}.
- * @return The DropPermissions object used to control access to the content URIs.
- */
- public DropPermissions requestDropPermissions() {
- if (mDropPermissions == null) {
- return null;
- }
- return new DropPermissions(mDropPermissions);
+ /** @hide */
+ public IDropPermissions getDropPermissions() {
+ return mDropPermissions;
}
/**
diff --git a/core/java/android/view/DropPermissions.java b/core/java/android/view/DropPermissions.java
index 780461f..8c948a9 100644
--- a/core/java/android/view/DropPermissions.java
+++ b/core/java/android/view/DropPermissions.java
@@ -16,11 +16,27 @@
package android.view;
+import android.os.IBinder;
import android.os.RemoteException;
import com.android.internal.view.IDropPermissions;
import dalvik.system.CloseGuard;
+/**
+ * {@link DropPermissions} controls the access permissions for the content URIs associated with a
+ * {@link DragEvent}.
+ * <p>
+ * Permission are granted when this object is created by {@link
+ * android.app.Activity#requestDropPermissions(DragEvent) Activity.requestDropPermissions}.
+ * Which permissions are granted is defined by the set of flags passed to {@link
+ * View#startDragAndDrop(android.content.ClipData, View.DragShadowBuilder, Object, int)
+ * View.startDragAndDrop} by the app that started the drag operation.
+ * <p>
+ * The life cycle of the permissions is bound to the activity used to call {@link
+ * android.app.Activity#requestDropPermissions(DragEvent) requestDropPermissions}. The
+ * permissions are revoked when this activity is destroyed, or when {@link #release()} is called,
+ * whichever occurs first.
+ */
public final class DropPermissions {
private final IDropPermissions mDropPermissions;
@@ -28,21 +44,43 @@
private final CloseGuard mCloseGuard = CloseGuard.get();
/**
- * Create a new DropPermissions object to be passed to the client with a DragEvent.
- *
+ * Create a new {@link DropPermissions} object to control the access permissions for content
+ * URIs associated with {@link DragEvent}.
+ * @param dragEvent Drag event
+ * @return {@link DropPermissions} object or null if there are no content URIs associated with
+ * the {@link DragEvent}.
* @hide
*/
- DropPermissions(IDropPermissions dropPermissions) {
- mDropPermissions = dropPermissions;
- try {
- mDropPermissions.take();
- } catch (RemoteException e) {
+ public static DropPermissions obtain(DragEvent dragEvent) {
+ if (dragEvent.getDropPermissions() == null) {
+ return null;
}
- mCloseGuard.open("release");
+ return new DropPermissions(dragEvent.getDropPermissions());
+ }
+
+ /** @hide */
+ private DropPermissions(IDropPermissions dropPermissions) {
+ mDropPermissions = dropPermissions;
}
/**
- * Revoke permissions taken by {@link DragEvent#requestDropPermissions()}.
+ * Take the permissions and bind their lifetime to the activity.
+ * @param activityToken Binder pointing to an Activity instance to bind the lifetime to.
+ * @return True if permissions are successfully taken.
+ * @hide
+ */
+ public boolean take(IBinder activityToken) {
+ try {
+ mDropPermissions.take(activityToken);
+ } catch (RemoteException e) {
+ return false;
+ }
+ mCloseGuard.open("release");
+ return true;
+ }
+
+ /**
+ * Revoke permissions explicitly.
*/
public void release() {
try {
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 394660f..ef50fdc 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -57,6 +57,7 @@
private static native int nativeGetHeight(long nativeObject);
private static native long nativeGetNextFrameNumber(long nativeObject);
+ private static native int nativeSetScalingMode(long nativeObject, int scalingMode);
public static final Parcelable.Creator<Surface> CREATOR =
new Parcelable.Creator<Surface>() {
@@ -95,6 +96,21 @@
private HwuiContext mHwuiContext;
/** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({SCALING_MODE_FREEZE, SCALING_MODE_SCALE_TO_WINDOW,
+ SCALING_MODE_SCALE_CROP, SCALING_MODE_NO_SCALE_CROP})
+ public @interface ScalingMode {}
+ // From system/window.h
+ /** @hide */
+ static final int SCALING_MODE_FREEZE = 0;
+ /** @hide */
+ static final int SCALING_MODE_SCALE_TO_WINDOW = 1;
+ /** @hide */
+ static final int SCALING_MODE_SCALE_CROP = 2;
+ /** @hide */
+ static final int SCALING_MODE_NO_SCALE_CROP = 3;
+
+ /** @hide */
@IntDef({ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270})
@Retention(RetentionPolicy.SOURCE)
public @interface Rotation {}
@@ -500,6 +516,20 @@
}
/**
+ * Set the scaling mode to be used for this surfaces buffers
+ * @hide
+ */
+ void setScalingMode(@ScalingMode int scalingMode) {
+ synchronized (mLock) {
+ checkNotReleasedLocked();
+ int err = nativeSetScalingMode(mNativeObject, scalingMode);
+ if (err != 0) {
+ throw new IllegalArgumentException("Invalid scaling mode: " + scalingMode);
+ }
+ }
+ }
+
+ /**
* Exception thrown when a Canvas couldn't be locked with {@link Surface#lockCanvas}, or
* when a SurfaceTexture could not successfully be allocated.
*/
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 589c0dc..f4fa980 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -578,8 +578,19 @@
}
mSurface.transferFrom(mNewSurface);
-
if (visible && mSurface.isValid()) {
+ // We set SCALING_MODE_NO_SCALE_CROP to allow the WindowManager
+ // to update our Surface crop without requiring a new buffer from
+ // us. In the default mode of SCALING_MODE_FREEZE, surface geometry
+ // state (which includes crop) is only applied when a buffer
+ // with appropriate geometry is available. During drag resize
+ // it is quite frequent that a matching buffer will not be available
+ // (because we are constantly being resized and have fallen behind).
+ // However in such situations the WindowManager still needs to be able
+ // to update our crop to ensure we stay within the bounds of the containing
+ // window.
+ mSurface.setScalingMode(Surface.SCALING_MODE_NO_SCALE_CROP);
+
if (!mSurfaceCreated && (surfaceChanged || visibleChanged)) {
mSurfaceCreated = true;
mIsCreating = true;
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 2d8bfd4..fafe3d1 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -274,6 +274,8 @@
private int mDecorCaptionShade = DECOR_CAPTION_SHADE_AUTO;
+ private boolean mUseDecorContext = false;
+
static class WindowManagerHolder {
static final IWindowManager sWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService("window"));
@@ -286,8 +288,14 @@
mLayoutInflater = LayoutInflater.from(context);
}
+ /**
+ * Constructor for main window of an activity.
+ */
public PhoneWindow(Context context, Window preservedWindow) {
this(context);
+ // Only main activity windows use decor context, all the other windows depend on whatever
+ // context that was given to them.
+ mUseDecorContext = true;
if (preservedWindow != null) {
mDecor = (DecorView) preservedWindow.getDecorView();
mElevation = preservedWindow.getElevation();
@@ -2259,15 +2267,19 @@
// System process doesn't have application context and in that case we need to directly use
// the context we have. Otherwise we want the application context, so we don't cling to the
// activity.
- Context applicationContext = getContext().getApplicationContext();
Context context;
- if (applicationContext == null) {
- context = getContext();
- } else {
- context = new DecorContext(applicationContext);
- if (mTheme != -1) {
- context.setTheme(mTheme);
+ if (mUseDecorContext) {
+ Context applicationContext = getContext().getApplicationContext();
+ if (applicationContext == null) {
+ context = getContext();
+ } else {
+ context = new DecorContext(applicationContext);
+ if (mTheme != -1) {
+ context.setTheme(mTheme);
+ }
}
+ } else {
+ context = getContext();
}
return new DecorView(context, featureId, this);
}
diff --git a/core/java/com/android/internal/view/IDropPermissions.aidl b/core/java/com/android/internal/view/IDropPermissions.aidl
index 86d27e7..2438bda 100644
--- a/core/java/com/android/internal/view/IDropPermissions.aidl
+++ b/core/java/com/android/internal/view/IDropPermissions.aidl
@@ -16,11 +16,13 @@
package com.android.internal.view;
+import android.os.IBinder;
+
/**
* Interface to allow a drop receiver to request permissions for URIs passed along with ClipData
* contained in DragEvent.
*/
interface IDropPermissions {
- void take();
+ void take(IBinder activityToken);
void release();
}
diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp
index 7c8dbe8..ab0df55 100644
--- a/core/jni/android/graphics/FontFamily.cpp
+++ b/core/jni/android/graphics/FontFamily.cpp
@@ -36,12 +36,12 @@
namespace android {
static jlong FontFamily_create(JNIEnv* env, jobject clazz, jstring lang, jint variant) {
- if (lang == NULL) {
- return (jlong)new FontFamily(variant);
+ FontLanguage fontLanguage;
+ if (lang != NULL) {
+ ScopedUtfChars str(env, lang);
+ fontLanguage = FontLanguage(str.c_str(), str.size());
}
- ScopedUtfChars str(env, lang);
- uint32_t langId = FontStyle::registerLanguageList(str.c_str());
- return (jlong)new FontFamily(langId, variant);
+ return (jlong)new FontFamily(fontLanguage, variant);
}
static void FontFamily_unref(JNIEnv* env, jobject clazz, jlong familyPtr) {
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 0a25a0a..654d148 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -313,10 +313,94 @@
obj->setTextAlign(align);
}
+ // generate bcp47 identifier for the supplied locale
+ static void toLanguageTag(char* output, size_t outSize,
+ const char* locale) {
+ if (output == NULL || outSize <= 0) {
+ return;
+ }
+ if (locale == NULL) {
+ output[0] = '\0';
+ return;
+ }
+ char canonicalChars[ULOC_FULLNAME_CAPACITY];
+ UErrorCode uErr = U_ZERO_ERROR;
+ uloc_canonicalize(locale, canonicalChars, ULOC_FULLNAME_CAPACITY,
+ &uErr);
+ if (U_SUCCESS(uErr)) {
+ char likelyChars[ULOC_FULLNAME_CAPACITY];
+ uErr = U_ZERO_ERROR;
+ uloc_addLikelySubtags(canonicalChars, likelyChars,
+ ULOC_FULLNAME_CAPACITY, &uErr);
+ if (U_SUCCESS(uErr)) {
+ uErr = U_ZERO_ERROR;
+ uloc_toLanguageTag(likelyChars, output, outSize, FALSE, &uErr);
+ if (U_SUCCESS(uErr)) {
+ return;
+ } else {
+ ALOGD("uloc_toLanguageTag(\"%s\") failed: %s", likelyChars,
+ u_errorName(uErr));
+ }
+ } else {
+ ALOGD("uloc_addLikelySubtags(\"%s\") failed: %s",
+ canonicalChars, u_errorName(uErr));
+ }
+ } else {
+ ALOGD("uloc_canonicalize(\"%s\") failed: %s", locale,
+ u_errorName(uErr));
+ }
+ // unable to build a proper language identifier
+ output[0] = '\0';
+ }
+
+ static void toLanguageTags(std::string* output, const char* locales) {
+ if (output == NULL) {
+ return;
+ }
+ if (locales == NULL) {
+ output->clear();
+ return;
+ }
+
+ char langTag[ULOC_FULLNAME_CAPACITY];
+ const char* commaLoc = strchr(locales, ',');
+ if (commaLoc == NULL) {
+ assert(locales[0] != '\0'); // the string should not be empty
+ toLanguageTag(langTag, ULOC_FULLNAME_CAPACITY, locales);
+ *output = langTag;
+ return;
+ }
+
+ size_t len = strlen(locales);
+ char locale[len];
+ output->clear();
+ output->reserve(len);
+ const char* lastStart = locales;
+ do {
+ assert(lastStart > commaLoc); // the substring should not be empty
+ strncpy(locale, lastStart, commaLoc - lastStart);
+ locale[commaLoc - lastStart] = '\0';
+ toLanguageTag(langTag, ULOC_FULLNAME_CAPACITY, locale);
+ if (langTag[0] != '\0') {
+ output->append(langTag);
+ output->push_back(',');
+ }
+ lastStart = commaLoc + 1;
+ commaLoc = strchr(lastStart, ',');
+ } while (commaLoc != NULL);
+ assert(lastStart[0] != '\0'); // the final substring should not be empty
+ toLanguageTag(langTag, ULOC_FULLNAME_CAPACITY, lastStart);
+ if (langTag[0] != '\0') {
+ output->append(langTag);
+ }
+ }
+
static jint setTextLocales(JNIEnv* env, jobject clazz, jlong objHandle, jstring locales) {
Paint* obj = reinterpret_cast<Paint*>(objHandle);
ScopedUtfChars localesChars(env, locales);
- jint minikinLangListId = FontStyle::registerLanguageList(localesChars.c_str());
+ std::string buf;
+ toLanguageTags(&buf, localesChars.c_str());
+ jint minikinLangListId = FontStyle::registerLanguageList(buf);
obj->setMinikinLangListId(minikinLangListId);
return minikinLangListId;
}
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index f6e68c4..cf68449 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -465,11 +465,17 @@
anw->query(anw, NATIVE_WINDOW_HEIGHT, &value);
return value;
}
+
static jlong nativeGetNextFrameNumber(JNIEnv *env, jclass clazz, jlong nativeObject) {
Surface* surface = reinterpret_cast<Surface*>(nativeObject);
return surface->getNextFrameNumber();
}
+static jint nativeSetScalingMode(JNIEnv *env, jclass clazz, jlong nativeObject, jint scalingMode) {
+ Surface* surface = reinterpret_cast<Surface*>(nativeObject);
+ return surface->setScalingMode(scalingMode);
+}
+
namespace uirenderer {
using namespace android::uirenderer::renderthread;
@@ -546,6 +552,7 @@
{"nativeGetWidth", "(J)I", (void*)nativeGetWidth },
{"nativeGetHeight", "(J)I", (void*)nativeGetHeight },
{"nativeGetNextFrameNumber", "(J)J", (void*)nativeGetNextFrameNumber },
+ {"nativeSetScalingMode", "(JI)I", (void*)nativeSetScalingMode },
// HWUI context
{"nHwuiCreate", "(JJ)J", (void*) hwui::create },
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 1ed6dce..ee1b67d 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1477,8 +1477,8 @@
<item quantity="other">Per %d ore</item>
<item quantity="one">Per 1 ora</item>
</plurals>
- <string name="zen_mode_until" msgid="7336308492289875088">"Fino alle ore <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
- <string name="zen_mode_alarm" msgid="9128205721301330797">"Fino alle ore <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (prossima sveglia)"</string>
+ <string name="zen_mode_until" msgid="7336308492289875088">"Fino a <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
+ <string name="zen_mode_alarm" msgid="9128205721301330797">"Fino a <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (prossima sveglia)"</string>
<string name="zen_mode_forever" msgid="7420011936770086993">"Fino alla disattivazione"</string>
<string name="zen_mode_forever_dnd" msgid="3792132696572189081">"Fino alla disattivazione di Non disturbare"</string>
<string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml
index a3d64dd..0548c12 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk-rMK/strings.xml
@@ -1255,7 +1255,7 @@
<string name="media_route_chooser_title" msgid="1751618554539087622">"Поврзи се со уред"</string>
<string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Префрли екран на уред"</string>
<string name="media_route_chooser_searching" msgid="4776236202610828706">"Пребарување за уреди..."</string>
- <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Подесувања"</string>
+ <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Поставки"</string>
<string name="media_route_controller_disconnect" msgid="8966120286374158649">"Исклучи"</string>
<string name="media_route_status_scanning" msgid="7279908761758293783">"Скенирање..."</string>
<string name="media_route_status_connecting" msgid="6422571716007825440">"Се поврзува..."</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index cef0097..77053f2 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -859,15 +859,13 @@
<string name="cut" msgid="3092569408438626261">"剪切"</string>
<string name="copy" msgid="2681946229533511987">"复制"</string>
<string name="paste" msgid="5629880836805036433">"粘贴"</string>
- <!-- no translation found for paste_as_plain_text (5427792741908010675) -->
- <skip />
+ <string name="paste_as_plain_text" msgid="5427792741908010675">"以纯文本形式粘贴"</string>
<string name="replace" msgid="5781686059063148930">"替换..."</string>
<string name="delete" msgid="6098684844021697789">"删除"</string>
<string name="copyUrl" msgid="2538211579596067402">"复制网址"</string>
<string name="selectTextMode" msgid="1018691815143165326">"选择文字"</string>
<string name="undo" msgid="7905788502491742328">"撤消"</string>
- <!-- no translation found for redo (7759464876566803888) -->
- <skip />
+ <string name="redo" msgid="7759464876566803888">"重做"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"文字选择"</string>
<string name="addToDictionary" msgid="4352161534510057874">"添加到字典"</string>
<string name="deleteText" msgid="6979668428458199034">"删除"</string>
@@ -1113,8 +1111,7 @@
<string name="chooser_wallpaper" msgid="7873476199295190279">"更改壁纸"</string>
<string name="notification_listener_binding_label" msgid="2014162835481906429">"通知侦听器"</string>
<string name="condition_provider_service_binding_label" msgid="1321343352906524564">"条件提供程序"</string>
- <!-- no translation found for notification_assistant_binding_label (909456055569102952) -->
- <skip />
+ <string name="notification_assistant_binding_label" msgid="909456055569102952">"通知助手"</string>
<string name="vpn_title" msgid="19615213552042827">"已激活VPN"</string>
<string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g>已激活VPN"</string>
<string name="vpn_text" msgid="3011306607126450322">"触摸可管理网络。"</string>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index ec24af5..ef6b467 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -47,7 +47,7 @@
<!-- How much the content in the divider is inset from the window bounds when resting. Used to
calculate the bounds of the stacks-->
- <dimen name="docked_stack_divider_insets">18dp</dimen>
+ <dimen name="docked_stack_divider_insets">19dp</dimen>
<!-- Min width for a tablet device -->
<dimen name="min_xlarge_screen_width">800dp</dimen>
diff --git a/graphics/java/android/graphics/drawable/Icon.aidl b/graphics/java/android/graphics/drawable/Icon.aidl
new file mode 100644
index 0000000..b82cfc4
--- /dev/null
+++ b/graphics/java/android/graphics/drawable/Icon.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.graphics.drawable;
+
+parcelable Icon;
diff --git a/packages/DocumentsUI/res/layout/item_dir_grid.xml b/packages/DocumentsUI/res/layout/item_dir_grid.xml
new file mode 100644
index 0000000..c17b4c8
--- /dev/null
+++ b/packages/DocumentsUI/res/layout/item_dir_grid.xml
@@ -0,0 +1,62 @@
+<?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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_margin="@dimen/grid_item_margin"
+ android:background="@color/item_doc_background"
+ android:elevation="5dp"
+ android:focusable="true">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp"
+ android:paddingLeft="12dp"
+ android:paddingRight="12dp">
+
+ <ImageView
+ android:src="@drawable/ic_doc_folder"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_marginEnd="8dp"
+ android:scaleType="centerInside"
+ android:contentDescription="@null"/>
+
+ <TextView
+ android:id="@android:id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="middle"
+ android:textAlignment="viewStart"
+ android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+ android:textColor="@*android:color/primary_text_default_material_light" />
+
+ </LinearLayout>
+
+ <!-- An overlay that draws the item border when it is focused. -->
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:contentDescription="@null"
+ android:background="@drawable/item_doc_grid_border"
+ android:duplicateParentState="true" />
+
+</FrameLayout>
diff --git a/packages/DocumentsUI/res/layout/item_doc_grid.xml b/packages/DocumentsUI/res/layout/item_doc_grid.xml
index dcd5cfd..c0fc2c3 100644
--- a/packages/DocumentsUI/res/layout/item_doc_grid.xml
+++ b/packages/DocumentsUI/res/layout/item_doc_grid.xml
@@ -19,6 +19,7 @@
android:layout_height="wrap_content"
android:layout_margin="@dimen/grid_item_margin"
android:background="@color/item_doc_background"
+ android:elevation="5dp"
android:focusable="true">
<!-- Main item thumbnail. Comprised of two overlapping images, the
diff --git a/packages/DocumentsUI/res/values-mk-rMK/strings.xml b/packages/DocumentsUI/res/values-mk-rMK/strings.xml
index 2d8be1b..51cb774 100644
--- a/packages/DocumentsUI/res/values-mk-rMK/strings.xml
+++ b/packages/DocumentsUI/res/values-mk-rMK/strings.xml
@@ -26,7 +26,7 @@
<string name="menu_list" msgid="7279285939892417279">"Приказ на список"</string>
<string name="menu_sort" msgid="7677740407158414452">"Подреди по"</string>
<string name="menu_search" msgid="3816712084502856974">"Пребарај"</string>
- <string name="menu_settings" msgid="6008033148948428823">"Подесувања"</string>
+ <string name="menu_settings" msgid="6008033148948428823">"Поставки"</string>
<string name="menu_open" msgid="432922957274920903">"Отвори"</string>
<string name="menu_save" msgid="2394743337684426338">"Зачувај"</string>
<string name="menu_share" msgid="3075149983979628146">"Сподели"</string>
diff --git a/packages/DocumentsUI/res/values-sw720dp/dimens.xml b/packages/DocumentsUI/res/values-sw720dp/dimens.xml
index 83ceb55..2488fa2 100644
--- a/packages/DocumentsUI/res/values-sw720dp/dimens.xml
+++ b/packages/DocumentsUI/res/values-sw720dp/dimens.xml
@@ -18,5 +18,4 @@
<dimen name="grid_padding_horiz">16dp</dimen>
<dimen name="grid_padding_vert">16dp</dimen>
- <dimen name="grid_item_margin">8dp</dimen>
</resources>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 5cb3b0d..9c0a04c 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -755,11 +755,19 @@
* search currently.
*/
boolean cancelSearch() {
+ boolean collapsed = false;
+ boolean closed = false;
+
if (mActionBar.hasExpandedActionView()) {
mActionBar.collapseActionView();
- return true;
+ collapsed = true;
}
- return false;
+
+ if (isExpanded() || isSearching()) {
+ onClose();
+ closed = true;
+ }
+ return collapsed || closed;
}
boolean isSearching() {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
index 035ae77..0d5e34e 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -964,7 +964,16 @@
final State state = getDisplayState();
switch (state.derivedMode) {
case MODE_GRID:
- holder = new GridDocumentHolder(getContext(), parent, mIconHelper, viewType);
+ switch (viewType) {
+ case ITEM_TYPE_DIRECTORY:
+ holder = new GridDirectoryHolder(getContext(), parent);
+ break;
+ case ITEM_TYPE_DOCUMENT:
+ holder = new GridDocumentHolder(getContext(), parent, mIconHelper);
+ break;
+ default:
+ throw new IllegalStateException("Unsupported layout type.");
+ }
break;
case MODE_LIST:
holder = new ListDocumentHolder(getContext(), parent, mIconHelper);
@@ -1031,7 +1040,10 @@
@Override
public void onModelUpdate(Model model) {
mModelIds = Lists.newArrayList(model.getModelIds());
- mDividerPosition = 0;
+ // Start the divider at the end. That way if the code below encounters no documents
+ // (i.e. in a directory containing only directories), the divider is placed at the end
+ // of the list, as expected.
+ mDividerPosition = mModelIds.size();
// Walk down the list of IDs till we encounter something that's not a directory, and
// insert a whitespace element - this introduces a visual break in the grid between
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentHolder.java
index a01021f..9ac9057 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentHolder.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentHolder.java
@@ -40,16 +40,15 @@
final int mDefaultItemColor;
final boolean mAlwaysShowSummary;
final Context mContext;
- final IconHelper mIconHelper;
private ListDocumentHolder.ClickListener mClickListener;
private View.OnKeyListener mKeyListener;
- public DocumentHolder(Context context, ViewGroup parent, int layout, IconHelper iconHelper) {
- this(context, inflateLayout(context, parent, layout), iconHelper);
+ public DocumentHolder(Context context, ViewGroup parent, int layout) {
+ this(context, inflateLayout(context, parent, layout));
}
- public DocumentHolder(Context context, View item, IconHelper iconHelper) {
+ public DocumentHolder(Context context, View item) {
super(item);
itemView.setOnKeyListener(this);
@@ -59,8 +58,6 @@
mDefaultItemColor = context.getColor(R.color.item_doc_background);
mSelectedItemColor = context.getColor(R.color.item_doc_background_selected);
mAlwaysShowSummary = context.getResources().getBoolean(R.bool.always_show_summary);
-
- mIconHelper = iconHelper;
}
/**
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/EmptyDocumentHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/EmptyDocumentHolder.java
index 0bdf530..ab67a5b 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/EmptyDocumentHolder.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/EmptyDocumentHolder.java
@@ -18,14 +18,18 @@
import android.content.Context;
import android.database.Cursor;
-import android.view.View;
+import android.widget.Space;
+import com.android.documentsui.R;
import com.android.documentsui.State;
final class EmptyDocumentHolder extends DocumentHolder {
public EmptyDocumentHolder(Context context) {
- super(context, new View(context), null);
- itemView.setVisibility(View.GONE);
+ super(context, new Space(context));
+
+ // Per UX spec, this puts a bigger gap between the folders and documents in the grid.
+ final int gridMargin = context.getResources().getDimensionPixelSize(R.dimen.grid_item_margin);
+ itemView.setMinimumHeight(gridMargin * 2);
}
public void bind(Cursor cursor, String modelId, State state) {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java
new file mode 100644
index 0000000..11ff263
--- /dev/null
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2015 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.documentsui.dirlist;
+
+import static com.android.documentsui.model.DocumentInfo.getCursorString;
+import static com.android.internal.util.Preconditions.checkNotNull;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.provider.DocumentsContract.Document;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.android.documentsui.R;
+import com.android.documentsui.State;
+
+final class GridDirectoryHolder extends DocumentHolder {
+ final TextView mTitle;
+ public GridDirectoryHolder(Context context, ViewGroup parent) {
+ super(context, parent, R.layout.item_dir_grid);
+
+ mTitle = (TextView) itemView.findViewById(android.R.id.title);
+ }
+
+ /**
+ * Bind this view to the given document for display.
+ * @param cursor Pointing to the item to be bound.
+ * @param modelId The model ID of the item.
+ * @param state Current display state.
+ */
+ public void bind(Cursor cursor, String modelId, State state) {
+ checkNotNull(cursor, "Cursor cannot be null.");
+
+ this.modelId = modelId;
+
+ final String docDisplayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
+ mTitle.setText(docDisplayName);
+ }
+}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDocumentHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDocumentHolder.java
index 43256c3..63c667b 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDocumentHolder.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDocumentHolder.java
@@ -40,9 +40,22 @@
final class GridDocumentHolder extends DocumentHolder {
private static boolean mHideTitles;
- public GridDocumentHolder(
- Context context, ViewGroup parent, IconHelper thumbnailLoader, int viewType) {
- super(context, parent, R.layout.item_doc_grid, thumbnailLoader);
+ final TextView mTitle;
+ final TextView mDate;
+ final TextView mSize;
+ final ImageView mIconMime;
+ final ImageView mIconThumb;
+ final IconHelper mIconHelper;
+
+ public GridDocumentHolder(Context context, ViewGroup parent, IconHelper iconHelper) {
+ super(context, parent, R.layout.item_doc_grid);
+
+ mTitle = (TextView) itemView.findViewById(android.R.id.title);
+ mDate = (TextView) itemView.findViewById(R.id.date);
+ mSize = (TextView) itemView.findViewById(R.id.size);
+ mIconMime = (ImageView) itemView.findViewById(R.id.icon_mime);
+ mIconThumb = (ImageView) itemView.findViewById(R.id.icon_thumb);
+ mIconHelper = iconHelper;
}
/**
@@ -65,40 +78,34 @@
final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
final long docSize = getCursorLong(cursor, Document.COLUMN_SIZE);
- final TextView title = (TextView) itemView.findViewById(android.R.id.title);
- final TextView date = (TextView) itemView.findViewById(R.id.date);
- final TextView size = (TextView) itemView.findViewById(R.id.size);
- final ImageView iconMime = (ImageView) itemView.findViewById(R.id.icon_mime);
- final ImageView iconThumb = (ImageView) itemView.findViewById(R.id.icon_thumb);
+ mIconHelper.stopLoading(mIconThumb);
- mIconHelper.stopLoading(iconThumb);
-
- iconMime.animate().cancel();
- iconMime.setAlpha(1f);
- iconThumb.animate().cancel();
- iconThumb.setAlpha(0f);
+ mIconMime.animate().cancel();
+ mIconMime.setAlpha(1f);
+ mIconThumb.animate().cancel();
+ mIconThumb.setAlpha(0f);
final Uri uri = DocumentsContract.buildDocumentUri(docAuthority, docId);
- mIconHelper.loadThumbnail(uri, docMimeType, docFlags, docIcon, iconThumb, iconMime);
+ mIconHelper.loadThumbnail(uri, docMimeType, docFlags, docIcon, mIconThumb, mIconMime);
if (mHideTitles) {
- title.setVisibility(View.GONE);
+ mTitle.setVisibility(View.GONE);
} else {
- title.setText(docDisplayName);
- title.setVisibility(View.VISIBLE);
+ mTitle.setText(docDisplayName);
+ mTitle.setVisibility(View.VISIBLE);
}
if (docLastModified == -1) {
- date.setText(null);
+ mDate.setText(null);
} else {
- date.setText(Shared.formatTime(mContext, docLastModified));
+ mDate.setText(Shared.formatTime(mContext, docLastModified));
}
if (!state.showSize || Document.MIME_TYPE_DIR.equals(docMimeType) || docSize == -1) {
- size.setVisibility(View.GONE);
+ mSize.setVisibility(View.GONE);
} else {
- size.setVisibility(View.VISIBLE);
- size.setText(Formatter.formatFileSize(mContext, docSize));
+ mSize.setVisibility(View.VISIBLE);
+ mSize.setText(Formatter.formatFileSize(mContext, docSize));
}
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListDocumentHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListDocumentHolder.java
index b46a0e5a..c22e91d 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListDocumentHolder.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListDocumentHolder.java
@@ -38,16 +38,27 @@
import com.android.documentsui.State;
final class ListDocumentHolder extends DocumentHolder {
+ final TextView mTitle;
+ final TextView mSummary;
+ final TextView mDate;
+ final TextView mSize;
final ImageView mIconMime;
final ImageView mIconThumb;
final ImageView mIcon1;
+ final IconHelper mIconHelper;
- public ListDocumentHolder(Context context, ViewGroup parent, IconHelper thumbnailLoader) {
- super(context, parent, R.layout.item_doc_list, thumbnailLoader);
+ public ListDocumentHolder(Context context, ViewGroup parent, IconHelper iconHelper) {
+ super(context, parent, R.layout.item_doc_list);
+ mTitle = (TextView) itemView.findViewById(android.R.id.title);
+ mSummary = (TextView) itemView.findViewById(android.R.id.summary);
+ mDate = (TextView) itemView.findViewById(R.id.date);
+ mSize = (TextView) itemView.findViewById(R.id.size);
mIconMime = (ImageView) itemView.findViewById(R.id.icon_mime);
mIconThumb = (ImageView) itemView.findViewById(R.id.icon_thumb);
mIcon1 = (ImageView) itemView.findViewById(android.R.id.icon1);
+
+ mIconHelper = iconHelper;
}
/**
@@ -72,11 +83,6 @@
final String docSummary = getCursorString(cursor, Document.COLUMN_SUMMARY);
final long docSize = getCursorLong(cursor, Document.COLUMN_SIZE);
- final TextView title = (TextView) itemView.findViewById(android.R.id.title);
- final TextView summary = (TextView) itemView.findViewById(android.R.id.summary);
- final TextView date = (TextView) itemView.findViewById(R.id.date);
- final TextView size = (TextView) itemView.findViewById(R.id.size);
-
mIconHelper.stopLoading(mIconThumb);
mIconMime.animate().cancel();
@@ -85,27 +91,27 @@
final Uri uri = DocumentsContract.buildDocumentUri(docAuthority, docId);
mIconHelper.loadThumbnail(uri, docMimeType, docFlags, docIcon, mIconThumb, mIconMime);
- title.setText(docDisplayName);
- title.setVisibility(View.VISIBLE);
+ mTitle.setText(docDisplayName);
+ mTitle.setVisibility(View.VISIBLE);
if (docSummary != null) {
- summary.setText(docSummary);
- summary.setVisibility(View.VISIBLE);
+ mSummary.setText(docSummary);
+ mSummary.setVisibility(View.VISIBLE);
} else {
- summary.setVisibility(View.INVISIBLE);
+ mSummary.setVisibility(View.INVISIBLE);
}
if (docLastModified == -1) {
- date.setText(null);
+ mDate.setText(null);
} else {
- date.setText(Shared.formatTime(mContext, docLastModified));
+ mDate.setText(Shared.formatTime(mContext, docLastModified));
}
if (!state.showSize || Document.MIME_TYPE_DIR.equals(docMimeType) || docSize == -1) {
- size.setVisibility(View.GONE);
+ mSize.setVisibility(View.GONE);
} else {
- size.setVisibility(View.VISIBLE);
- size.setText(Formatter.formatFileSize(mContext, docSize));
+ mSize.setVisibility(View.VISIBLE);
+ mSize.setText(Formatter.formatFileSize(mContext, docSize));
}
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java
index 26eac26..e47af67 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java
@@ -383,6 +383,10 @@
* @param position
*/
void setSelectionRangeBegin(int position) {
+ if (position == RecyclerView.NO_POSITION) {
+ return;
+ }
+
if (mSelection.contains(mEnvironment.getModelIdFromAdapterPosition(position))) {
mRanger = new Range(position);
}
@@ -1160,13 +1164,15 @@
mSelection.applyProvisionalSelection();
mModel.endSelection();
int firstSelected = mModel.getPositionNearestOrigin();
- if (!mSelection.contains(mEnvironment.getModelIdFromAdapterPosition(firstSelected))) {
- Log.w(TAG, "First selected by band is NOT in selection!");
- // Sadly this is really happening. Need to figure out what's going on.
- } else if (firstSelected != NOT_SET) {
- // TODO: firstSelected should really be lastSelected, we want to anchor the item
- // where the mouse-up occurred.
- setSelectionRangeBegin(firstSelected);
+ if (firstSelected != NOT_SET) {
+ if (mSelection.contains(mEnvironment.getModelIdFromAdapterPosition(firstSelected))) {
+ // TODO: firstSelected should really be lastSelected, we want to anchor the item
+ // where the mouse-up occurred.
+ setSelectionRangeBegin(firstSelected);
+ } else {
+ // TODO: Check if this is really happening.
+ Log.w(TAG, "First selected by band is NOT in selection!");
+ }
}
mModel = null;
@@ -1558,18 +1564,22 @@
for (int column = columnStartIndex; column <= columnEndIndex; column++) {
SparseIntArray items = mColumns.get(mColumnBounds.get(column).lowerLimit);
for (int row = rowStartIndex; row <= rowEndIndex; row++) {
- int position = items.get(items.keyAt(row));
- String id = mHelper.getModelIdFromAdapterPosition(position);
- if (id != null) {
- // The adapter inserts items for UI layout purposes that aren't associated
- // with files. Those will have a null model ID. Don't select them.
- mSelection.add(id);
- }
- if (isPossiblePositionNearestOrigin(column, columnStartIndex, columnEndIndex,
- row, rowStartIndex, rowEndIndex)) {
- // If this is the position nearest the origin, record it now so that it
- // can be returned by endSelection() later.
- mPositionNearestOrigin = position;
+ // The default return value for SparseIntArray.get is 0, which is a valid
+ // position. Use a sentry value to prevent erroneously selecting item 0.
+ int position = items.get(items.keyAt(row), NOT_SET);
+ if (position != NOT_SET) {
+ String id = mHelper.getModelIdFromAdapterPosition(position);
+ if (id != null) {
+ // The adapter inserts items for UI layout purposes that aren't associated
+ // with files. Those will have a null model ID. Don't select them.
+ mSelection.add(id);
+ }
+ if (isPossiblePositionNearestOrigin(column, columnStartIndex, columnEndIndex,
+ row, rowStartIndex, rowEndIndex)) {
+ // If this is the position nearest the origin, record it now so that it
+ // can be returned by endSelection() later.
+ mPositionNearestOrigin = position;
+ }
}
}
}
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index bc09f3a..c6e5531 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -579,6 +579,10 @@
public AssetFileDescriptor openDocumentThumbnail(
String documentId, Point sizeHint, CancellationSignal signal)
throws FileNotFoundException {
+ if (mArchiveHelper.isArchivedDocument(documentId)) {
+ return mArchiveHelper.openDocumentThumbnail(documentId, sizeHint, signal);
+ }
+
final File file = getFileForDocId(documentId);
return DocumentsContract.openImageThumbnail(file);
}
diff --git a/packages/PrintSpooler/AndroidManifest.xml b/packages/PrintSpooler/AndroidManifest.xml
index 5a6f1d1..af9d251 100644
--- a/packages/PrintSpooler/AndroidManifest.xml
+++ b/packages/PrintSpooler/AndroidManifest.xml
@@ -17,9 +17,7 @@
*/
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.printspooler"
- android:versionName="1"
- android:versionCode="1">
+ package="com.android.printspooler">
<!-- Allows an application to call APIs that give it access to all print jobs
on the device. Usually an app can access only the print jobs it created. -->
@@ -40,6 +38,8 @@
<uses-permission android:name="com.android.printspooler.permission.ACCESS_ALL_PRINT_JOBS"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.START_PRINT_SERVICE_CONFIG_ACTIVITY"/>
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:allowClearUserData="true"
diff --git a/packages/PrintSpooler/res/drawable/ic_info.xml b/packages/PrintSpooler/res/drawable/ic_info.xml
new file mode 100644
index 0000000..2ecd1c7
--- /dev/null
+++ b/packages/PrintSpooler/res/drawable/ic_info.xml
@@ -0,0 +1,24 @@
+<!--
+ Copyright (C) 2015 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z"
+ android:fillColor="#757575"/>
+</vector>
\ No newline at end of file
diff --git a/packages/PrintSpooler/res/layout/printer_dropdown_item.xml b/packages/PrintSpooler/res/layout/printer_dropdown_item.xml
index 4381a7a..e0efbc4 100644
--- a/packages/PrintSpooler/res/layout/printer_dropdown_item.xml
+++ b/packages/PrintSpooler/res/layout/printer_dropdown_item.xml
@@ -62,7 +62,7 @@
android:ellipsize="end"
android:textIsSelectable="false"
android:visibility="gone"
- android:textColor="?android:attr/textColorPrimary"
+ android:textColor="?android:attr/textColorSecondary"
android:duplicateParentState="true">
</TextView>
diff --git a/packages/PrintSpooler/res/layout/printer_list_item.xml b/packages/PrintSpooler/res/layout/printer_list_item.xml
index 7bc144a..50f44c2 100644
--- a/packages/PrintSpooler/res/layout/printer_list_item.xml
+++ b/packages/PrintSpooler/res/layout/printer_list_item.xml
@@ -38,6 +38,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
+ android:layout_weight="1"
android:duplicateParentState="true">
<TextView
@@ -62,10 +63,20 @@
android:ellipsize="end"
android:textIsSelectable="false"
android:visibility="gone"
- android:textColor="?android:attr/textColorPrimary"
+ android:textColor="?android:attr/textColorSecondary"
android:duplicateParentState="true">
</TextView>
</LinearLayout>
+ <ImageView
+ android:id="@+id/more_info"
+ android:layout_width="24dip"
+ android:layout_height="24dip"
+ android:layout_gravity="center_vertical"
+ android:contentDescription="@string/printer_info_desc"
+ android:src="@drawable/ic_info"
+ android:visibility="gone">
+ </ImageView>
+
</LinearLayout>
diff --git a/packages/PrintSpooler/res/values-af/strings.xml b/packages/PrintSpooler/res/values-af/strings.xml
index f263af7..a1b7e84 100644
--- a/packages/PrintSpooler/res/values-af/strings.xml
+++ b/packages/PrintSpooler/res/values-af/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> drukkers gevind</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> drukker gevind</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Kies drukdiens"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Soek tans vir drukkers"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Geen drukdienste is geaktiveer nie"</string>
diff --git a/packages/PrintSpooler/res/values-am/strings.xml b/packages/PrintSpooler/res/values-am/strings.xml
index a93e0a9..a6e1abf 100644
--- a/packages/PrintSpooler/res/values-am/strings.xml
+++ b/packages/PrintSpooler/res/values-am/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> አታሚዎች ተገኝተዋል</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> አታሚዎች ተገኝተዋል</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"ተጨማሪ የዚህ አታሚ መረጃ"</string>
<string name="choose_print_service" msgid="3740309762324459694">"የህትመት አገልግሎት ይምረጡ"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"አታሚዎችን በመፈለግ ላይ"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"ምንም የህትመት አገልግሎቶች አልነቁም"</string>
diff --git a/packages/PrintSpooler/res/values-ar/strings.xml b/packages/PrintSpooler/res/values-ar/strings.xml
index c9a6a395..451f139 100644
--- a/packages/PrintSpooler/res/values-ar/strings.xml
+++ b/packages/PrintSpooler/res/values-ar/strings.xml
@@ -63,6 +63,10 @@
<item quantity="other">تم العثور على <xliff:g id="COUNT_1">%1$s</xliff:g> من الطابعات</item>
<item quantity="one">تم العثور على طابعة واحدة (<xliff:g id="COUNT_0">%1$s</xliff:g>)</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"اختر خدمة طباعة"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"البحث عن طابعات"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"لم يتم تمكين أي خدمات طباعة"</string>
diff --git a/packages/PrintSpooler/res/values-az-rAZ/strings.xml b/packages/PrintSpooler/res/values-az-rAZ/strings.xml
index 5aeb7bb..60af6b0 100644
--- a/packages/PrintSpooler/res/values-az-rAZ/strings.xml
+++ b/packages/PrintSpooler/res/values-az-rAZ/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printer tapıldı</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer tapıldı</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Çap xidmətini seçin"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Printer axtarılır"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Heç bir çap xidməti aktiv edilməyib"</string>
diff --git a/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml b/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml
index 7484718..65004e6 100644
--- a/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml
+++ b/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml
@@ -60,6 +60,10 @@
<item quantity="few">Pronađena su <xliff:g id="COUNT_1">%1$s</xliff:g> štampača</item>
<item quantity="other">Pronađeno je <xliff:g id="COUNT_1">%1$s</xliff:g> štampača</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Izaberite uslugu štampanja"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Pretraga štampača"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nijedna usluga štampanja nije omogućena"</string>
diff --git a/packages/PrintSpooler/res/values-bg/strings.xml b/packages/PrintSpooler/res/values-bg/strings.xml
index 93feea5..c404639 100644
--- a/packages/PrintSpooler/res/values-bg/strings.xml
+++ b/packages/PrintSpooler/res/values-bg/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">Намерени са <xliff:g id="COUNT_1">%1$s</xliff:g> принтера</item>
<item quantity="one">Намерен е <xliff:g id="COUNT_0">%1$s</xliff:g> принтер</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Избиране на услуга за отпечатване"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Търсене на принтери"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Няма активирани услуги за отпечатване"</string>
diff --git a/packages/PrintSpooler/res/values-bn-rBD/strings.xml b/packages/PrintSpooler/res/values-bn-rBD/strings.xml
index 0eed9aa..9a4d49b 100644
--- a/packages/PrintSpooler/res/values-bn-rBD/strings.xml
+++ b/packages/PrintSpooler/res/values-bn-rBD/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g>টি মুদ্রক খুঁজে পাওয়া গেছে</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g>টি মুদ্রক খুঁজে পাওয়া গেছে</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"মুদ্রণ পরিষেবা চয়ন করুন"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"মুদ্রকগুলি অনুসন্ধান করা হচ্ছে"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"মুদ্রণ পরিষেবা সক্ষম নেই"</string>
diff --git a/packages/PrintSpooler/res/values-ca/strings.xml b/packages/PrintSpooler/res/values-ca/strings.xml
index 03d3060..e5c2ebb 100644
--- a/packages/PrintSpooler/res/values-ca/strings.xml
+++ b/packages/PrintSpooler/res/values-ca/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">S\'han trobat <xliff:g id="COUNT_1">%1$s</xliff:g> impressores</item>
<item quantity="one">S\'ha trobat <xliff:g id="COUNT_0">%1$s</xliff:g> impressora</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Selecció del servei d\'impressió"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Cerca d\'impressores"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"No hi ha cap servei d\'impressió activat"</string>
diff --git a/packages/PrintSpooler/res/values-cs/strings.xml b/packages/PrintSpooler/res/values-cs/strings.xml
index 414abf9..0bb48f8 100644
--- a/packages/PrintSpooler/res/values-cs/strings.xml
+++ b/packages/PrintSpooler/res/values-cs/strings.xml
@@ -61,6 +61,8 @@
<item quantity="other">Nalezené tiskárny: <xliff:g id="COUNT_1">%1$s</xliff:g></item>
<item quantity="one">Nalezené tiskárny: <xliff:g id="COUNT_0">%1$s</xliff:g></item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> – <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Další informace o této tiskárně"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Zvolte službu tisku"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Vyhledávání tiskáren"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nejsou aktivovány žádné tiskové služby"</string>
diff --git a/packages/PrintSpooler/res/values-da/strings.xml b/packages/PrintSpooler/res/values-da/strings.xml
index 893c991..a9d042b 100644
--- a/packages/PrintSpooler/res/values-da/strings.xml
+++ b/packages/PrintSpooler/res/values-da/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one">Der blev fundet <xliff:g id="COUNT_1">%1$s</xliff:g> printere</item>
<item quantity="other">Der blev fundet <xliff:g id="COUNT_1">%1$s</xliff:g> printere</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> – <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Flere oplysninger om denne printer"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Vælg udskriftstjeneste"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Søger efter printere"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Ingen udskrivningstjenester er aktiveret"</string>
diff --git a/packages/PrintSpooler/res/values-de/strings.xml b/packages/PrintSpooler/res/values-de/strings.xml
index f6f53ea..0f90c24 100644
--- a/packages/PrintSpooler/res/values-de/strings.xml
+++ b/packages/PrintSpooler/res/values-de/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> Drucker gefunden</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> Drucker gefunden</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Druckdienst auswählen"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Suche nach Druckern"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Keine Druckdienste aktiviert"</string>
diff --git a/packages/PrintSpooler/res/values-el/strings.xml b/packages/PrintSpooler/res/values-el/strings.xml
index 10ddf62..328dd5a 100644
--- a/packages/PrintSpooler/res/values-el/strings.xml
+++ b/packages/PrintSpooler/res/values-el/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">Βρέθηκαν <xliff:g id="COUNT_1">%1$s</xliff:g> εκτυπωτές</item>
<item quantity="one">Βρέθηκε <xliff:g id="COUNT_0">%1$s</xliff:g> εκτυπωτής</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Επιλέξτε υπηρεσία εκτύπωσης"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Αναζήτηση για εκτυπωτές"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Δεν έχουν ενεργοποιηθεί υπηρεσίες εκτύπωσης"</string>
diff --git a/packages/PrintSpooler/res/values-en-rAU/strings.xml b/packages/PrintSpooler/res/values-en-rAU/strings.xml
index a540ac5..753d9df 100644
--- a/packages/PrintSpooler/res/values-en-rAU/strings.xml
+++ b/packages/PrintSpooler/res/values-en-rAU/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers found</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer found</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"More information about this printer"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"No print services enabled"</string>
diff --git a/packages/PrintSpooler/res/values-en-rGB/strings.xml b/packages/PrintSpooler/res/values-en-rGB/strings.xml
index a540ac5..753d9df 100644
--- a/packages/PrintSpooler/res/values-en-rGB/strings.xml
+++ b/packages/PrintSpooler/res/values-en-rGB/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers found</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer found</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"More information about this printer"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"No print services enabled"</string>
diff --git a/packages/PrintSpooler/res/values-en-rIN/strings.xml b/packages/PrintSpooler/res/values-en-rIN/strings.xml
index a540ac5..753d9df 100644
--- a/packages/PrintSpooler/res/values-en-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-en-rIN/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers found</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer found</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"More information about this printer"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"No print services enabled"</string>
diff --git a/packages/PrintSpooler/res/values-es-rUS/strings.xml b/packages/PrintSpooler/res/values-es-rUS/strings.xml
index 8929aa8..88ecca8 100644
--- a/packages/PrintSpooler/res/values-es-rUS/strings.xml
+++ b/packages/PrintSpooler/res/values-es-rUS/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">Se encontraron <xliff:g id="COUNT_1">%1$s</xliff:g> impresoras.</item>
<item quantity="one">Se encontró <xliff:g id="COUNT_0">%1$s</xliff:g> impresora.</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Elegir servicio de impresión"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Buscando impresoras"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"No hay servicios de impresión habilitados"</string>
diff --git a/packages/PrintSpooler/res/values-es/strings.xml b/packages/PrintSpooler/res/values-es/strings.xml
index 7cfd92a..eac568d 100644
--- a/packages/PrintSpooler/res/values-es/strings.xml
+++ b/packages/PrintSpooler/res/values-es/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other">Se han encontrado <xliff:g id="COUNT_1">%1$s</xliff:g> impresoras</item>
<item quantity="one">Se ha encontrado <xliff:g id="COUNT_0">%1$s</xliff:g> impresora</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Más información sobre esta impresora"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Seleccionar servicio de impresión"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Buscando impresoras"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"No hay servicios de impresión habilitados"</string>
diff --git a/packages/PrintSpooler/res/values-et-rEE/strings.xml b/packages/PrintSpooler/res/values-et-rEE/strings.xml
index ee93bcf..2efae73 100644
--- a/packages/PrintSpooler/res/values-et-rEE/strings.xml
+++ b/packages/PrintSpooler/res/values-et-rEE/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">Leiti <xliff:g id="COUNT_1">%1$s</xliff:g> printerit</item>
<item quantity="one">Leiti <xliff:g id="COUNT_0">%1$s</xliff:g> printer</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Prinditeenuse valimine"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Printerite otsimine"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Ühtegi printimisteenust pole lubatud"</string>
diff --git a/packages/PrintSpooler/res/values-eu-rES/strings.xml b/packages/PrintSpooler/res/values-eu-rES/strings.xml
index 882e888..1ede707 100644
--- a/packages/PrintSpooler/res/values-eu-rES/strings.xml
+++ b/packages/PrintSpooler/res/values-eu-rES/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> inprimagailu aurkitu dira</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> inprimagailu aurkitu da</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Aukeratu inprimatze-zerbitzua"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Inprimagailuak bilatzen"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Ez dago gaituta inprimatzeko zerbitzurik"</string>
diff --git a/packages/PrintSpooler/res/values-fa/strings.xml b/packages/PrintSpooler/res/values-fa/strings.xml
index 10743e7..5cd039f 100644
--- a/packages/PrintSpooler/res/values-fa/strings.xml
+++ b/packages/PrintSpooler/res/values-fa/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> چاپگر یافت شد</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> چاپگر یافت شد</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"انتخاب سرویس چاپ"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"درحال جستجوی چاپگرها"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"هیچ خدمات چاپی فعال نیست"</string>
diff --git a/packages/PrintSpooler/res/values-fi/strings.xml b/packages/PrintSpooler/res/values-fi/strings.xml
index ee35c41..1ddbff7 100644
--- a/packages/PrintSpooler/res/values-fi/strings.xml
+++ b/packages/PrintSpooler/res/values-fi/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> tulostinta löydetty</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> tulostin löydetty</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Valitse tulostuspalvelu"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Etsitään tulostimia"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Ei käytössä olevia tulostuspalveluita"</string>
diff --git a/packages/PrintSpooler/res/values-fr-rCA/strings.xml b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
index eb99441..655d090 100644
--- a/packages/PrintSpooler/res/values-fr-rCA/strings.xml
+++ b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimante trouvée</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimante trouvées</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Recherche d\'imprimantes en cours..."</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Aucun service d\'impression activé"</string>
diff --git a/packages/PrintSpooler/res/values-fr/strings.xml b/packages/PrintSpooler/res/values-fr/strings.xml
index c0eecfb..75234ba 100644
--- a/packages/PrintSpooler/res/values-fr/strings.xml
+++ b/packages/PrintSpooler/res/values-fr/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimante trouvée</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimantes trouvées</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Recherche d\'imprimantes en cours"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Aucun service d\'impression activé"</string>
diff --git a/packages/PrintSpooler/res/values-gl-rES/strings.xml b/packages/PrintSpooler/res/values-gl-rES/strings.xml
index b4a1ec6..dbd77d7 100644
--- a/packages/PrintSpooler/res/values-gl-rES/strings.xml
+++ b/packages/PrintSpooler/res/values-gl-rES/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">Encontráronse <xliff:g id="COUNT_1">%1$s</xliff:g> impresoras</item>
<item quantity="one">Encontrouse <xliff:g id="COUNT_0">%1$s</xliff:g> impresora</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Escoller servizo de impresión"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Busca de impresoras"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Non hai servizos de impresión activados"</string>
diff --git a/packages/PrintSpooler/res/values-gu-rIN/strings.xml b/packages/PrintSpooler/res/values-gu-rIN/strings.xml
index 8f77953..d05a392 100644
--- a/packages/PrintSpooler/res/values-gu-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-gu-rIN/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> પ્રિન્ટર્સ મળ્યાં</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> પ્રિન્ટર્સ મળ્યાં</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"આ પ્રિન્ટર વિશે વધુ માહિતી"</string>
<string name="choose_print_service" msgid="3740309762324459694">"પ્રિન્ટ સેવા પસંદ કરો"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"પ્રિન્ટર્સ માટે શોધી રહ્યું છે"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"કોઈ છાપ સેવાઓ સક્ષમ કરેલ નથી"</string>
diff --git a/packages/PrintSpooler/res/values-hi/strings.xml b/packages/PrintSpooler/res/values-hi/strings.xml
index 4c11323..8051900 100644
--- a/packages/PrintSpooler/res/values-hi/strings.xml
+++ b/packages/PrintSpooler/res/values-hi/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर मिले</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर मिले</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"इस प्रिंटर के बारे में अधिक जानकारी"</string>
<string name="choose_print_service" msgid="3740309762324459694">"प्रिंट सेवा चुनें"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिंटर खोज रहा है"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"कोई भी प्रिंट सेवा सक्षम नहीं है"</string>
diff --git a/packages/PrintSpooler/res/values-hr/strings.xml b/packages/PrintSpooler/res/values-hr/strings.xml
index 4cec3ba..f678d380 100644
--- a/packages/PrintSpooler/res/values-hr/strings.xml
+++ b/packages/PrintSpooler/res/values-hr/strings.xml
@@ -60,6 +60,10 @@
<item quantity="few">Pronađena su <xliff:g id="COUNT_1">%1$s</xliff:g> pisača</item>
<item quantity="other">Pronađeno je <xliff:g id="COUNT_1">%1$s</xliff:g> pisača</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Odaberite uslugu ispisa"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Traženje pisača"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nije omogućena nijedna usluga ispisa"</string>
diff --git a/packages/PrintSpooler/res/values-hu/strings.xml b/packages/PrintSpooler/res/values-hu/strings.xml
index ac1ba6e..1a56ee7 100644
--- a/packages/PrintSpooler/res/values-hu/strings.xml
+++ b/packages/PrintSpooler/res/values-hu/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> nyomtató észlelve</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> nyomtató észlelve</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> – <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"További információ erről a nyomtatóról"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Nyomtatási szolgáltatás kiválasztása"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Nyomtatók keresése"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nincs engedélyezett nyomtatási szolgáltatás"</string>
diff --git a/packages/PrintSpooler/res/values-hy-rAM/strings.xml b/packages/PrintSpooler/res/values-hy-rAM/strings.xml
index dda6745..60df011 100644
--- a/packages/PrintSpooler/res/values-hy-rAM/strings.xml
+++ b/packages/PrintSpooler/res/values-hy-rAM/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one">Գտնվել է <xliff:g id="COUNT_1">%1$s</xliff:g> տպիչ</item>
<item quantity="other">Գտնվել է <xliff:g id="COUNT_1">%1$s</xliff:g> տպիչ</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Ընտրեք տպելու ծառայությունը"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Տպիչների որոնում"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Ակտիվացված տպման ծառայություններ չկան"</string>
diff --git a/packages/PrintSpooler/res/values-in/strings.xml b/packages/PrintSpooler/res/values-in/strings.xml
index b203e2b..a991272 100644
--- a/packages/PrintSpooler/res/values-in/strings.xml
+++ b/packages/PrintSpooler/res/values-in/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printer ditemukan</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer ditemukan</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Informasi selengkapnya tentang printer ini"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Pilih layanan cetak"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Mencari printer"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Tidak ada layanan cetak yang aktif"</string>
diff --git a/packages/PrintSpooler/res/values-is-rIS/strings.xml b/packages/PrintSpooler/res/values-is-rIS/strings.xml
index 6dfdabc..c330906 100644
--- a/packages/PrintSpooler/res/values-is-rIS/strings.xml
+++ b/packages/PrintSpooler/res/values-is-rIS/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> prentari fannst</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> prentarar fundust</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Veldu prentþjónustu"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Leitar að prentara"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Engin prentþjónusta er virk"</string>
diff --git a/packages/PrintSpooler/res/values-it/strings.xml b/packages/PrintSpooler/res/values-it/strings.xml
index fd5473a..ffba353 100644
--- a/packages/PrintSpooler/res/values-it/strings.xml
+++ b/packages/PrintSpooler/res/values-it/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> stampanti trovate</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> stampante trovata</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Ulteriori informazioni su questa stampante"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Scegli servizio di stampa"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Ricerca di stampanti"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Non è stato attivato alcun servizio di stampa"</string>
diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml
index dd062a3..2ac1093 100644
--- a/packages/PrintSpooler/res/values-iw/strings.xml
+++ b/packages/PrintSpooler/res/values-iw/strings.xml
@@ -61,6 +61,8 @@
<item quantity="other">נמצאו <xliff:g id="COUNT_1">%1$s</xliff:g> מדפסות</item>
<item quantity="one">נמצאה מדפסת <xliff:g id="COUNT_0">%1$s</xliff:g></item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"מידע נוסף על מדפסת זו"</string>
<string name="choose_print_service" msgid="3740309762324459694">"בחר שירות הדפסה"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"מחפש מדפסות"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"לא הופעלו שירותי הדפסה"</string>
diff --git a/packages/PrintSpooler/res/values-ja/strings.xml b/packages/PrintSpooler/res/values-ja/strings.xml
index 23e4809..1d17f85 100644
--- a/packages/PrintSpooler/res/values-ja/strings.xml
+++ b/packages/PrintSpooler/res/values-ja/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g>台のプリンタが見つかりました</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g>台のプリンタが見つかりました</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"印刷サービスの選択"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"プリンタの検索中"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"使用できる印刷サービスがありません"</string>
diff --git a/packages/PrintSpooler/res/values-ka-rGE/strings.xml b/packages/PrintSpooler/res/values-ka-rGE/strings.xml
index 9f86f05..0decbeb 100644
--- a/packages/PrintSpooler/res/values-ka-rGE/strings.xml
+++ b/packages/PrintSpooler/res/values-ka-rGE/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> პრინტერი ნაპოვნია</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> პრინტერი ნაპოვნია</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"აირჩიეთ ბეჭდვის სერვისი"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"მიმდინარეობს პრინტერების ძიება"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"ბეჭდვის სერვისები გააქტიურებული არ არის"</string>
diff --git a/packages/PrintSpooler/res/values-kk-rKZ/strings.xml b/packages/PrintSpooler/res/values-kk-rKZ/strings.xml
index 05c300e..46a1e1c 100644
--- a/packages/PrintSpooler/res/values-kk-rKZ/strings.xml
+++ b/packages/PrintSpooler/res/values-kk-rKZ/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> принтер табылды</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> принтер табылды</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Принтер қызметін таңдау"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Принтерлерді іздеу"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Басып шығару қызметтері қосылмаған"</string>
diff --git a/packages/PrintSpooler/res/values-km-rKH/strings.xml b/packages/PrintSpooler/res/values-km-rKH/strings.xml
index 0861e59..5021241 100644
--- a/packages/PrintSpooler/res/values-km-rKH/strings.xml
+++ b/packages/PrintSpooler/res/values-km-rKH/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">រកឃើញម៉ាស៊ីនបោះពុម្ព <xliff:g id="COUNT_1">%1$s</xliff:g></item>
<item quantity="one">រកឃើញម៉ាស៊ីនបោះពុម្ព <xliff:g id="COUNT_0">%1$s</xliff:g></item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"ជ្រើសសេវាបោះពុម្ព"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"ស្វែងរកម៉ាស៊ីនបោះពុម្ព"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"គ្មានការបើកដំណើរការសេវាបោះពុម្ពទេ"</string>
diff --git a/packages/PrintSpooler/res/values-kn-rIN/strings.xml b/packages/PrintSpooler/res/values-kn-rIN/strings.xml
index 71b098d..5d5dee8 100644
--- a/packages/PrintSpooler/res/values-kn-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-kn-rIN/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> ಪ್ರಿಂಟರ್ಗಳು ಪತ್ತೆಯಾಗಿವೆ</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ಪ್ರಿಂಟರ್ಗಳು ಪತ್ತೆಯಾಗಿವೆ</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"ಈ ಪ್ರಿಂಟರ್ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಮಾಹಿತಿ"</string>
<string name="choose_print_service" msgid="3740309762324459694">"ಮುದ್ರಣ ಸೇವೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"ಪ್ರಿಂಟರ್ಗಳಿಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"ಯಾವುದೇ ಮುದ್ರಣ ಸೇವೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿಲ್ಲ"</string>
diff --git a/packages/PrintSpooler/res/values-ko/strings.xml b/packages/PrintSpooler/res/values-ko/strings.xml
index 451ab58..884b8de 100644
--- a/packages/PrintSpooler/res/values-ko/strings.xml
+++ b/packages/PrintSpooler/res/values-ko/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">프린터 <xliff:g id="COUNT_1">%1$s</xliff:g>대 검색됨</item>
<item quantity="one">프린터 <xliff:g id="COUNT_0">%1$s</xliff:g>대 검색됨</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"인쇄 서비스 선택"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"프린터 검색 중"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"사용 가능한 프린트 서비스 없음"</string>
diff --git a/packages/PrintSpooler/res/values-ky-rKG/strings.xml b/packages/PrintSpooler/res/values-ky-rKG/strings.xml
index 98da08c..4e1d272 100644
--- a/packages/PrintSpooler/res/values-ky-rKG/strings.xml
+++ b/packages/PrintSpooler/res/values-ky-rKG/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> принтер табылды</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> принтер табылды</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Принтер кызматын тандоо"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Принтерлер изделүүдө"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Принтер-кызматтары иштетилген эмес"</string>
diff --git a/packages/PrintSpooler/res/values-lo-rLA/strings.xml b/packages/PrintSpooler/res/values-lo-rLA/strings.xml
index 2029fdf..3610fbd8 100644
--- a/packages/PrintSpooler/res/values-lo-rLA/strings.xml
+++ b/packages/PrintSpooler/res/values-lo-rLA/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ເຄື່ອງພິມຖືກພົບແລ້ວ</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> ເຄື່ອງພິມຖືກພົບແລ້ວ</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"ເລືອກບໍລິການການພິມ"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"ກຳລັງຊອກຫາເຄື່ອງພິມ"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"ບໍ່ມີການບໍລິການພິມເປີດໃຊ້ງານໄວ້"</string>
diff --git a/packages/PrintSpooler/res/values-lt/strings.xml b/packages/PrintSpooler/res/values-lt/strings.xml
index 972abb5..c152c0d 100644
--- a/packages/PrintSpooler/res/values-lt/strings.xml
+++ b/packages/PrintSpooler/res/values-lt/strings.xml
@@ -61,6 +61,10 @@
<item quantity="many">Rasta <xliff:g id="COUNT_1">%1$s</xliff:g> spausdintuvo</item>
<item quantity="other">Rasta <xliff:g id="COUNT_1">%1$s</xliff:g> spausdintuvų</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Pasirinkite spausdinimo paslaugą"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Ieškoma spausdintuvų"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Neįgalinta jokių spausdinimo paslaugų"</string>
diff --git a/packages/PrintSpooler/res/values-lv/strings.xml b/packages/PrintSpooler/res/values-lv/strings.xml
index f565b23..e9df7d7 100644
--- a/packages/PrintSpooler/res/values-lv/strings.xml
+++ b/packages/PrintSpooler/res/values-lv/strings.xml
@@ -60,6 +60,10 @@
<item quantity="one">Atrasts <xliff:g id="COUNT_1">%1$s</xliff:g> printers</item>
<item quantity="other">Atrasti <xliff:g id="COUNT_1">%1$s</xliff:g> printeri</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Izvēlieties drukāšanas pakalpojumu"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Printeru meklēšana"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nav iespējots neviens drukas pakalpojums"</string>
diff --git a/packages/PrintSpooler/res/values-mk-rMK/strings.xml b/packages/PrintSpooler/res/values-mk-rMK/strings.xml
index f5c06d1..ebc1181 100644
--- a/packages/PrintSpooler/res/values-mk-rMK/strings.xml
+++ b/packages/PrintSpooler/res/values-mk-rMK/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one">Пронајдени се <xliff:g id="COUNT_1">%1$s</xliff:g> печатач</item>
<item quantity="other">Пронајдени се <xliff:g id="COUNT_1">%1$s</xliff:g> печатачи</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Повеќе информации за овој печатач"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Избери услуга печатење"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Пребарување печатачи"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Нема овозможени услуги за печатење"</string>
diff --git a/packages/PrintSpooler/res/values-ml-rIN/strings.xml b/packages/PrintSpooler/res/values-ml-rIN/strings.xml
index 2d45ce5..5e29f92 100644
--- a/packages/PrintSpooler/res/values-ml-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-ml-rIN/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> പ്രിന്ററുകൾ കണ്ടെത്തി</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> പ്രിന്റർ കണ്ടെത്തി</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"പ്രിന്റ് സേവനം തിരഞ്ഞെടുക്കുക"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"പ്രിന്ററുകൾക്കായി തിരയുന്നു"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"പ്രിന്റ് സേവനങ്ങളൊന്നും പ്രവർത്തനക്ഷമാക്കിയിട്ടില്ല"</string>
diff --git a/packages/PrintSpooler/res/values-mn-rMN/strings.xml b/packages/PrintSpooler/res/values-mn-rMN/strings.xml
index f2c7b73..1c2c516 100644
--- a/packages/PrintSpooler/res/values-mn-rMN/strings.xml
+++ b/packages/PrintSpooler/res/values-mn-rMN/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> хэвлэгч олдсон байна</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> хэвлэгч олдсон байна</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Хэвлэх үйлчилгээг сонгох"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Принтер хайж байна"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Хэвлэх үйлчилгээг идэвхжүүлээгүй"</string>
diff --git a/packages/PrintSpooler/res/values-mr-rIN/strings.xml b/packages/PrintSpooler/res/values-mr-rIN/strings.xml
index 1c079dc..3e88468 100644
--- a/packages/PrintSpooler/res/values-mr-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-mr-rIN/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर आढळला</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर आढळले</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"मुद्रण सेवा निवडा"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिंटर शोधत आहे"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"कोणत्याही मुद्रण सेवा सक्षम केलेल्या नाहीत"</string>
diff --git a/packages/PrintSpooler/res/values-ms-rMY/strings.xml b/packages/PrintSpooler/res/values-ms-rMY/strings.xml
index d6b5ea7..71247c6 100644
--- a/packages/PrintSpooler/res/values-ms-rMY/strings.xml
+++ b/packages/PrintSpooler/res/values-ms-rMY/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> pencetak ditemui</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> pencetak ditemui</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Pilih perkhidmatan cetak"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Mencari pencetak"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Perkhidmatan cetak tidak didayakan"</string>
diff --git a/packages/PrintSpooler/res/values-my-rMM/strings.xml b/packages/PrintSpooler/res/values-my-rMM/strings.xml
index c3dc490..f1400c8 100644
--- a/packages/PrintSpooler/res/values-my-rMM/strings.xml
+++ b/packages/PrintSpooler/res/values-my-rMM/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> စာထုတ်စက်များ တွေ့ရှိပါသည်</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g>စာထုတ်စက် တွေ့ရှိပါသည်</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"စာထုတ်ရန် ဝန်ဆောင်မှုကို ရွေးချယ်ပါ"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"စာထုတ်စက်များကို ရှာနေပါသည်"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"ပုံနှိပ်ထုတ်ယူရေး ဝန်ဆောင်မှုများ ဖွင့်မထားပါ"</string>
diff --git a/packages/PrintSpooler/res/values-nb/strings.xml b/packages/PrintSpooler/res/values-nb/strings.xml
index 945bbea..9c2b67c 100644
--- a/packages/PrintSpooler/res/values-nb/strings.xml
+++ b/packages/PrintSpooler/res/values-nb/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> skrivere ble funnet</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> skriver ble funnet</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Velg utskriftstjeneste"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Søker etter skrivere"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Ingen utskriftstjenester er slått på"</string>
diff --git a/packages/PrintSpooler/res/values-ne-rNP/strings.xml b/packages/PrintSpooler/res/values-ne-rNP/strings.xml
index 45bcc95..2d2d829 100644
--- a/packages/PrintSpooler/res/values-ne-rNP/strings.xml
+++ b/packages/PrintSpooler/res/values-ne-rNP/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिन्टरहरू भेटिए</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> प्रिन्टर भेटियो</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"प्रिन्ट सेवा छनौट गर्नुहोस्"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिन्टरहरू खोज्दै"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"कुनै पनि मुद्रण सेवाहरू सक्रिय छैनन्"</string>
diff --git a/packages/PrintSpooler/res/values-nl/strings.xml b/packages/PrintSpooler/res/values-nl/strings.xml
index 76c8656..5df3298 100644
--- a/packages/PrintSpooler/res/values-nl/strings.xml
+++ b/packages/PrintSpooler/res/values-nl/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers gevonden</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer gevonden</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Meer informatie over deze printer"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Afdrukservice kiezen"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Printers zoeken"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Geen afdrukservices ingeschakeld"</string>
diff --git a/packages/PrintSpooler/res/values-pa-rIN/strings.xml b/packages/PrintSpooler/res/values-pa-rIN/strings.xml
index 45fa460..57e9969 100644
--- a/packages/PrintSpooler/res/values-pa-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-pa-rIN/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> ਪ੍ਰਿੰਟਰ ਮਿਲੇ</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ਪ੍ਰਿੰਟਰ ਮਿਲੇ</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"ਇਸ ਪ੍ਰਿੰਟਰ ਬਾਰੇ ਹੋਰ ਜਾਣਕਾਰੀ"</string>
<string name="choose_print_service" msgid="3740309762324459694">"ਪ੍ਰਿੰਟ ਸੇਵਾ ਚੁਣੋ"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"ਪ੍ਰਿੰਟਰ ਖੋਜ ਰਿਹਾ ਹੈ"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"ਪ੍ਰਿੰਟ ਸੇਵਾਵਾਂ ਯੋਗ ਨਹੀਂ ਬਣਾਈਆਂ ਗਈਆਂ"</string>
diff --git a/packages/PrintSpooler/res/values-pl/strings.xml b/packages/PrintSpooler/res/values-pl/strings.xml
index df3ee924..92f3654 100644
--- a/packages/PrintSpooler/res/values-pl/strings.xml
+++ b/packages/PrintSpooler/res/values-pl/strings.xml
@@ -61,6 +61,10 @@
<item quantity="other">Znaleziono <xliff:g id="COUNT_1">%1$s</xliff:g> drukarki</item>
<item quantity="one">Znaleziono <xliff:g id="COUNT_0">%1$s</xliff:g> drukarkę</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Wybierz usługę drukowania"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Szukanie drukarek"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Brak włączonych usług drukowania"</string>
diff --git a/packages/PrintSpooler/res/values-pt-rBR/strings.xml b/packages/PrintSpooler/res/values-pt-rBR/strings.xml
index 90da72b..63bb868 100644
--- a/packages/PrintSpooler/res/values-pt-rBR/strings.xml
+++ b/packages/PrintSpooler/res/values-pt-rBR/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Mais informações sobre essa impressora"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Selecione o serviço de impressão"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Procurando impressoras"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nenhum serviço de impressão ativado"</string>
diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
index 99bbd81..d364ef4 100644
--- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml
+++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> impressora encontrada</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> – <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Mais informações acerca desta impressora"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Escolher o serviço de impressão"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"A procurar impressoras"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nenhum serviço de impressão ativado"</string>
diff --git a/packages/PrintSpooler/res/values-pt/strings.xml b/packages/PrintSpooler/res/values-pt/strings.xml
index 90da72b..63bb868 100644
--- a/packages/PrintSpooler/res/values-pt/strings.xml
+++ b/packages/PrintSpooler/res/values-pt/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Mais informações sobre essa impressora"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Selecione o serviço de impressão"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Procurando impressoras"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nenhum serviço de impressão ativado"</string>
diff --git a/packages/PrintSpooler/res/values-ro/strings.xml b/packages/PrintSpooler/res/values-ro/strings.xml
index 4cfb8ab..8f9185e 100644
--- a/packages/PrintSpooler/res/values-ro/strings.xml
+++ b/packages/PrintSpooler/res/values-ro/strings.xml
@@ -60,6 +60,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> de imprimante găsite</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> imprimantă găsită</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Alegeți serviciul de printare"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Se caută imprimante"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Niciun serviciu de printare activat"</string>
diff --git a/packages/PrintSpooler/res/values-ru/strings.xml b/packages/PrintSpooler/res/values-ru/strings.xml
index fb49330..689edbe 100644
--- a/packages/PrintSpooler/res/values-ru/strings.xml
+++ b/packages/PrintSpooler/res/values-ru/strings.xml
@@ -61,6 +61,10 @@
<item quantity="many">Найдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтеров</item>
<item quantity="other">Найдены <xliff:g id="COUNT_1">%1$s</xliff:g> принтера</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Выберите службу печати"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Поиск принтеров…"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Службы печати недоступны"</string>
diff --git a/packages/PrintSpooler/res/values-si-rLK/strings.xml b/packages/PrintSpooler/res/values-si-rLK/strings.xml
index fb6f145..c573237 100644
--- a/packages/PrintSpooler/res/values-si-rLK/strings.xml
+++ b/packages/PrintSpooler/res/values-si-rLK/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one">මුද්රණ යන්ත්ර <xliff:g id="COUNT_1">%1$s</xliff:g> ක් සොයා ගන්නා ලදි</item>
<item quantity="other">මුද්රණ යන්ත්ර <xliff:g id="COUNT_1">%1$s</xliff:g> ක් සොයා ගන්නා ලදි</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"මුද්රණ සේවාව තෝරන්න"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"මුද්රණ යන්ත්ර සොයමින්"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"මුද්රණ සේවා සබල නැත"</string>
diff --git a/packages/PrintSpooler/res/values-sk/strings.xml b/packages/PrintSpooler/res/values-sk/strings.xml
index 605237b..d928611 100644
--- a/packages/PrintSpooler/res/values-sk/strings.xml
+++ b/packages/PrintSpooler/res/values-sk/strings.xml
@@ -61,6 +61,10 @@
<item quantity="other">Našlo sa <xliff:g id="COUNT_1">%1$s</xliff:g> tlačiarní</item>
<item quantity="one">Našla sa <xliff:g id="COUNT_0">%1$s</xliff:g> tlačiareň</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Výber tlačovej služby"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Vyhľadávanie tlačiarní"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Žiadne tlačové služby nie sú aktivované"</string>
diff --git a/packages/PrintSpooler/res/values-sl/strings.xml b/packages/PrintSpooler/res/values-sl/strings.xml
index 48d2e1d..f7d4a15 100644
--- a/packages/PrintSpooler/res/values-sl/strings.xml
+++ b/packages/PrintSpooler/res/values-sl/strings.xml
@@ -61,6 +61,10 @@
<item quantity="few"><xliff:g id="COUNT_1">%1$s</xliff:g> najdeni tiskalniki</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> najdenih tiskalnikov</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Izberite tiskalno storitev"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Iskanje tiskalnikov"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Ni omogočenih tiskalnih storitev"</string>
diff --git a/packages/PrintSpooler/res/values-sq-rAL/strings.xml b/packages/PrintSpooler/res/values-sq-rAL/strings.xml
index 5ba72ff..d5ebf32 100644
--- a/packages/PrintSpooler/res/values-sq-rAL/strings.xml
+++ b/packages/PrintSpooler/res/values-sq-rAL/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other">U gjetën <xliff:g id="COUNT_1">%1$s</xliff:g> printerë</item>
<item quantity="one">U gjet <xliff:g id="COUNT_0">%1$s</xliff:g> printer</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Më shumë informacione mbi këtë printer"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Zgjidh shërbimin e printimit"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Po kërkon për printerë"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Nuk ka shërbime printimi të aktivizuara"</string>
diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml
index 7a04b8d..f655cb0 100644
--- a/packages/PrintSpooler/res/values-sr/strings.xml
+++ b/packages/PrintSpooler/res/values-sr/strings.xml
@@ -60,6 +60,10 @@
<item quantity="few">Пронађена су <xliff:g id="COUNT_1">%1$s</xliff:g> штампача</item>
<item quantity="other">Пронађено је <xliff:g id="COUNT_1">%1$s</xliff:g> штампача</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Изаберите услугу штампања"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Претрага штампача"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Ниједна услуга штампања није омогућена"</string>
diff --git a/packages/PrintSpooler/res/values-sv/strings.xml b/packages/PrintSpooler/res/values-sv/strings.xml
index ec4ad30..77c17af 100644
--- a/packages/PrintSpooler/res/values-sv/strings.xml
+++ b/packages/PrintSpooler/res/values-sv/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> skrivare hittades</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> skrivare hittades</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Välj utskriftstjänst"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Söker efter skrivare"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Inga utskriftstjänster har aktiverats"</string>
diff --git a/packages/PrintSpooler/res/values-sw/strings.xml b/packages/PrintSpooler/res/values-sw/strings.xml
index eed3356..db2ff1b 100644
--- a/packages/PrintSpooler/res/values-sw/strings.xml
+++ b/packages/PrintSpooler/res/values-sw/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">Printa <xliff:g id="COUNT_1">%1$s</xliff:g> zimepatikana</item>
<item quantity="one">Printa <xliff:g id="COUNT_0">%1$s</xliff:g> imepatikana</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Chagua huduma ya printa"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Inatafuta printa"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Huduma za kuchapisha hazijawashwa"</string>
diff --git a/packages/PrintSpooler/res/values-ta-rIN/strings.xml b/packages/PrintSpooler/res/values-ta-rIN/strings.xml
index a9879c3..0e6ae82 100644
--- a/packages/PrintSpooler/res/values-ta-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-ta-rIN/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> பிரிண்டர்கள் உள்ளன</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> பிரிண்டர் உள்ளது</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"அச்சுப் பொறியைத் தேர்வுசெய்யவும்"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"அச்சுப்பொறிகளைத் தேடுகிறது"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"அச்சுப் பொறிகள் இல்லை"</string>
diff --git a/packages/PrintSpooler/res/values-te-rIN/strings.xml b/packages/PrintSpooler/res/values-te-rIN/strings.xml
index 909cb90..6bdbd5c 100644
--- a/packages/PrintSpooler/res/values-te-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-te-rIN/strings.xml
@@ -59,6 +59,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ప్రింటర్లు కనుగొనబడ్డాయి</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> ప్రింటర్ కనుగొనబడింది</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"ఈ ప్రింటర్ గురించి మరింత సమాచారం"</string>
<string name="choose_print_service" msgid="3740309762324459694">"ముద్రణ సేవను ఎంచుకోండి"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"ప్రింటర్ల కోసం శోధిస్తోంది"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"ముద్రణ సేవలు ఏవీ ప్రారంభించలేదు"</string>
diff --git a/packages/PrintSpooler/res/values-th/strings.xml b/packages/PrintSpooler/res/values-th/strings.xml
index c33a759..c81b7ea 100644
--- a/packages/PrintSpooler/res/values-th/strings.xml
+++ b/packages/PrintSpooler/res/values-th/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">พบเครื่องพิมพ์ <xliff:g id="COUNT_1">%1$s</xliff:g> เครื่อง</item>
<item quantity="one">พบเครื่องพิมพ์ <xliff:g id="COUNT_0">%1$s</xliff:g> เครื่อง</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"เลือกบริการพิมพ์"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"กำลังค้นหาเครื่องพิมพ์"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"ไม่ได้เปิดใช้บริการพิมพ์"</string>
diff --git a/packages/PrintSpooler/res/values-tl/strings.xml b/packages/PrintSpooler/res/values-tl/strings.xml
index 545bda4..cfddfc8 100644
--- a/packages/PrintSpooler/res/values-tl/strings.xml
+++ b/packages/PrintSpooler/res/values-tl/strings.xml
@@ -59,6 +59,10 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> nakitang printer</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> na nakitang printer</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Pumili ng serbisyo ng pag-print"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Naghahanap ng mga printer"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Walang mga naka-enable na serbisyo sa pag-print"</string>
diff --git a/packages/PrintSpooler/res/values-tr/strings.xml b/packages/PrintSpooler/res/values-tr/strings.xml
index a13f2df..37fab87 100644
--- a/packages/PrintSpooler/res/values-tr/strings.xml
+++ b/packages/PrintSpooler/res/values-tr/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> yazıcı bulundu</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> yazıcı bulundu</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Yazdırma hizmetini seçin"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Yazıcılar aranıyor"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Etkin yazıcı hizmeti yok"</string>
diff --git a/packages/PrintSpooler/res/values-uk/strings.xml b/packages/PrintSpooler/res/values-uk/strings.xml
index def21ab..ffdfde0 100644
--- a/packages/PrintSpooler/res/values-uk/strings.xml
+++ b/packages/PrintSpooler/res/values-uk/strings.xml
@@ -61,6 +61,8 @@
<item quantity="many">Знайдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтерів</item>
<item quantity="other">Знайдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтерів</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> – <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Докладніше про цей принтер"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Вибрати службу друку"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Пошук принтерів"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Немає служб друку"</string>
diff --git a/packages/PrintSpooler/res/values-ur-rPK/strings.xml b/packages/PrintSpooler/res/values-ur-rPK/strings.xml
index c031aba..abd72ff 100644
--- a/packages/PrintSpooler/res/values-ur-rPK/strings.xml
+++ b/packages/PrintSpooler/res/values-ur-rPK/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> پرنٹرز ملے</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> پرنٹر ملا</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"پرنٹ سروس منتخب کریں"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"پرنٹرز تلاش کر رہا ہے"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"کوئی پرنٹ سروس فعال نہیں"</string>
diff --git a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
index 59dcca9..14410c7 100644
--- a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
+++ b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ta printer topildi</item>
<item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> ta printer topildi</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Chop etish xizmatini tanlang"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Printerlar qidirilmoqda"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Hech qaysi chop etish xizmati yoqilmagan"</string>
diff --git a/packages/PrintSpooler/res/values-vi/strings.xml b/packages/PrintSpooler/res/values-vi/strings.xml
index 0167823..4268f81 100644
--- a/packages/PrintSpooler/res/values-vi/strings.xml
+++ b/packages/PrintSpooler/res/values-vi/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">Đã tìm thấy <xliff:g id="COUNT_1">%1$s</xliff:g> máy in</item>
<item quantity="one">Đã tìm thấy <xliff:g id="COUNT_0">%1$s</xliff:g> máy in</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"Chọn dịch vụ in"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Đang tìm kiếm máy in"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Chưa kích hoạt dịch vụ in nào"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
index a74e994..be003d9 100644
--- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">找到 <xliff:g id="COUNT_1">%1$s</xliff:g> 台打印机</item>
<item quantity="one">找到 <xliff:g id="COUNT_0">%1$s</xliff:g> 台打印机</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"选择打印服务"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜索打印机"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"未启用任何打印服务"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rHK/strings.xml b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
index 35643f3..28e793f 100644
--- a/packages/PrintSpooler/res/values-zh-rHK/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">已找到 <xliff:g id="COUNT_1">%1$s</xliff:g> 部打印機</item>
<item quantity="one">已找到 <xliff:g id="COUNT_0">%1$s</xliff:g> 部打印機</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜尋打印機"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"沒有已啟用的列印服務"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rTW/strings.xml b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
index 40c44ff..8edd335 100644
--- a/packages/PrintSpooler/res/values-zh-rTW/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
@@ -59,6 +59,10 @@
<item quantity="other">找到 <xliff:g id="COUNT_1">%1$s</xliff:g> 台印表機</item>
<item quantity="one">找到 <xliff:g id="COUNT_0">%1$s</xliff:g> 台印表機</item>
</plurals>
+ <!-- no translation found for printer_extended_description_template (1366699227703381874) -->
+ <skip />
+ <!-- no translation found for printer_info_desc (7181988788991581654) -->
+ <skip />
<string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜尋印表機"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"未啟用任何列印服務"</string>
diff --git a/packages/PrintSpooler/res/values-zu/strings.xml b/packages/PrintSpooler/res/values-zu/strings.xml
index e0f6f34..92595aa 100644
--- a/packages/PrintSpooler/res/values-zu/strings.xml
+++ b/packages/PrintSpooler/res/values-zu/strings.xml
@@ -59,6 +59,8 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> amaphrinta atholakele</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> amaphrinta atholakele</item>
</plurals>
+ <string name="printer_extended_description_template" msgid="1366699227703381874">"<xliff:g id="PRINT_SERVICE_LABEL">%1$s</xliff:g> - <xliff:g id="PRINTER_DESCRIPTION">%2$s</xliff:g>"</string>
+ <string name="printer_info_desc" msgid="7181988788991581654">"Olunye ulwazi mayelana nale phrinta"</string>
<string name="choose_print_service" msgid="3740309762324459694">"Khetha isevisi yephrinta"</string>
<string name="print_searching_for_printers" msgid="6550424555079932867">"Isesha amaphrinta"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"Amasevisi ephrinta akavuliwe."</string>
diff --git a/packages/PrintSpooler/res/values/strings.xml b/packages/PrintSpooler/res/values/strings.xml
index 6d81788..97a7bff 100644
--- a/packages/PrintSpooler/res/values/strings.xml
+++ b/packages/PrintSpooler/res/values/strings.xml
@@ -144,6 +144,12 @@
<item quantity="other"><xliff:g id="count" example="2">%1$s</xliff:g> printers found</item>
</plurals>
+ <!-- Template for an extended description of a printer. [CHAR LIMIT=50] -->
+ <string name="printer_extended_description_template"><xliff:g id="print_service_label" example="Canon Print Service">%1$s</xliff:g> - <xliff:g id="printer_description" example="Printer under the stairs">%2$s</xliff:g></string>
+
+ <!-- Description of printer info icon. [CHAR LIMIT=50] -->
+ <string name="printer_info_desc">More information about this printer</string>
+
<!-- Add printer dialog -->
<!-- Title for the alert dialog for selecting a print service. [CHAR LIMIT=50] -->
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/CustomPrinterIconCache.java b/packages/PrintSpooler/src/com/android/printspooler/model/CustomPrinterIconCache.java
new file mode 100644
index 0000000..7274268
--- /dev/null
+++ b/packages/PrintSpooler/src/com/android/printspooler/model/CustomPrinterIconCache.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2015 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.printspooler.model;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.drawable.Icon;
+import android.print.PrinterId;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * A fixed size cache for custom printer icons. Old icons get removed with a last recently used
+ * policy.
+ */
+public class CustomPrinterIconCache {
+
+ private final static String LOG_TAG = "CustomPrinterIconCache";
+
+ /** Maximum number of icons in the cache */
+ private final static int MAX_SIZE = 1024;
+
+ /** Directory used to persist state and icons */
+ private final File mCacheDirectory;
+
+ /**
+ * Create a new icon cache.
+ */
+ public CustomPrinterIconCache(@NonNull File cacheDirectory) {
+ mCacheDirectory = new File(cacheDirectory, "icons");
+ if (!mCacheDirectory.exists()) {
+ mCacheDirectory.mkdir();
+ }
+ }
+
+ /**
+ * Return the file name to be used for the icon of a printer
+ *
+ * @param printerId the id of the printer
+ *
+ * @return The file to be used for the icon of the printer
+ */
+ private @Nullable File getIconFileName(@NonNull PrinterId printerId) {
+ StringBuffer sb = new StringBuffer(printerId.getServiceName().getPackageName());
+ sb.append("-");
+
+ try {
+ MessageDigest md = MessageDigest.getInstance("SHA-1");
+ md.update(
+ (printerId.getServiceName().getClassName() + ":" + printerId.getLocalId())
+ .getBytes("UTF-16"));
+ sb.append(String.format("%#040x", new java.math.BigInteger(1, md.digest())));
+ } catch (UnsupportedEncodingException|NoSuchAlgorithmException e) {
+ Log.e(LOG_TAG, "Could not compute custom printer icon file name", e);
+ return null;
+ }
+
+ return new File(mCacheDirectory, sb.toString());
+ }
+
+ /**
+ * Get the {@link Icon} to be used as a custom icon for the printer. If not available request
+ * the icon to be loaded.
+ *
+ * @param printerId the printer the icon belongs to
+ * @return the {@link Icon} if already available or null if icon is not loaded yet
+ */
+ public synchronized @Nullable Icon getIcon(@NonNull PrinterId printerId) {
+ Icon icon;
+
+ File iconFile = getIconFileName(printerId);
+ if (iconFile != null && iconFile.exists()) {
+ try (FileInputStream is = new FileInputStream(iconFile)) {
+ icon = Icon.createFromStream(is);
+ } catch (IOException e) {
+ icon = null;
+ Log.e(LOG_TAG, "Could not read icon from " + iconFile, e);
+ }
+
+ // Touch file so that it is the not likely to be removed
+ iconFile.setLastModified(System.currentTimeMillis());
+ } else {
+ icon = null;
+ }
+
+ return icon;
+ }
+
+ /**
+ * Remove old icons so that only between numFilesToKeep and twice as many icons are left.
+ *
+ * @param numFilesToKeep the number of icons to keep
+ */
+ public void removeOldFiles(int numFilesToKeep) {
+ File files[] = mCacheDirectory.listFiles();
+
+ // To reduce the number of shrink operations, let the cache grow to twice the max size
+ if (files.length > numFilesToKeep * 2) {
+ SortedMap<Long, File> sortedFiles = new TreeMap<>();
+
+ for (File f : files) {
+ sortedFiles.put(f.lastModified(), f);
+ }
+
+ while (sortedFiles.size() > numFilesToKeep) {
+ sortedFiles.remove(sortedFiles.firstKey());
+ }
+ }
+ }
+
+ /**
+ * Handle that a custom icon for a printer was loaded
+ *
+ * @param printerId the id of the printer the icon belongs to
+ * @param icon the icon that was loaded
+ */
+ public synchronized void onCustomPrinterIconLoaded(@NonNull PrinterId printerId,
+ @Nullable Icon icon) {
+ File iconFile = getIconFileName(printerId);
+
+ if (iconFile == null) {
+ return;
+ }
+
+ try (FileOutputStream os = new FileOutputStream(iconFile)) {
+ icon.writeToStream(os);
+ } catch (IOException e) {
+ Log.e(LOG_TAG, "Could not write icon for " + printerId + " to storage", e);
+ }
+
+ removeOldFiles(MAX_SIZE);
+ }
+
+ /**
+ * Clear all persisted and non-persisted state from this cache.
+ */
+ public synchronized void clear() {
+ for (File f : mCacheDirectory.listFiles()) {
+ f.delete();
+ }
+ }
+}
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java
index ea6281d..ac97ad0 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/model/PageContentRepository.java
@@ -116,6 +116,7 @@
});
return;
}
+ mCloseGuard.close();
mState = STATE_DESTROYED;
if (DEBUG) {
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
index 90eef83..496a0b0 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
@@ -23,6 +23,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.graphics.drawable.Icon;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
@@ -109,6 +110,9 @@
private NotificationController mNotificationController;
+ /** Cache for custom printer icons loaded from the print service */
+ private CustomPrinterIconCache mCustomIconCache;
+
public static PrintSpoolerService peekInstance() {
synchronized (sLock) {
return sInstance;
@@ -123,6 +127,7 @@
mPersistanceManager = new PersistenceManager();
mNotificationController = new NotificationController(PrintSpoolerService.this);
+ mCustomIconCache = new CustomPrinterIconCache(getCacheDir());
synchronized (mLock) {
mPersistanceManager.readStateLocked();
@@ -135,6 +140,11 @@
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ }
+
+ @Override
public IBinder onBind(Intent intent) {
return new PrintSpooler();
}
@@ -703,6 +713,37 @@
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
}
+ /**
+ * Handle that a custom icon for a printer was loaded.
+ *
+ * @param printerId the id of the printer the icon belongs to
+ * @param icon the icon that was loaded
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public void onCustomPrinterIconLoaded(PrinterId printerId, Icon icon) {
+ mCustomIconCache.onCustomPrinterIconLoaded(printerId, icon);
+ }
+
+ /**
+ * Get the custom icon for a printer. If the icon is not cached, the icon is
+ * requested asynchronously. Once it is available the printer is updated.
+ *
+ * @param printerId the id of the printer the icon should be loaded for
+ * @return the custom icon to be used for the printer or null if the icon is
+ * not yet available
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public Icon getCustomPrinterIcon(PrinterId printerId) {
+ return mCustomIconCache.getIcon(printerId);
+ }
+
+ /**
+ * Clear the custom printer icon cache.
+ */
+ public void clearCustomPrinterIconCache() {
+ mCustomIconCache.clear();
+ }
+
private final class PersistenceManager {
private static final String PERSIST_FILE_NAME = "print_spooler_state.xml";
@@ -1262,7 +1303,7 @@
}
private void expect(XmlPullParser parser, int type, String tag)
- throws IOException, XmlPullParserException {
+ throws XmlPullParserException {
if (!accept(parser, type, tag)) {
throw new XmlPullParserException("Exepected event: " + type
+ " and tag: " + tag + " but got event: " + parser.getEventType()
@@ -1279,7 +1320,7 @@
}
private boolean accept(XmlPullParser parser, int type, String tag)
- throws IOException, XmlPullParserException {
+ throws XmlPullParserException {
if (parser.getEventType() != type) {
return false;
}
@@ -1395,5 +1436,38 @@
public PrintSpoolerService getService() {
return PrintSpoolerService.this;
}
+
+ @Override
+ public void onCustomPrinterIconLoaded(PrinterId printerId, Icon icon,
+ IPrintSpoolerCallbacks callbacks, int sequence)
+ throws RemoteException {
+ try {
+ PrintSpoolerService.this.onCustomPrinterIconLoaded(printerId, icon);
+ } finally {
+ callbacks.onCustomPrinterIconCached(sequence);
+ }
+ }
+
+ @Override
+ public void getCustomPrinterIcon(PrinterId printerId, IPrintSpoolerCallbacks callbacks,
+ int sequence) throws RemoteException {
+ Icon icon = null;
+ try {
+ icon = PrintSpoolerService.this.getCustomPrinterIcon(printerId);
+ } finally {
+ callbacks.onGetCustomPrinterIconResult(icon, sequence);
+ }
+ }
+
+ @Override
+ public void clearCustomPrinterIconCache(IPrintSpoolerCallbacks callbacks,
+ int sequence) throws RemoteException {
+ try {
+ PrintSpoolerService.this.clearCustomPrinterIconCache();
+ } finally {
+ callbacks.customPrinterIconCacheCleared(sequence);
+ }
+ }
+
}
}
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/RemotePrintDocument.java b/packages/PrintSpooler/src/com/android/printspooler/model/RemotePrintDocument.java
index 1b6e9ce..ea11ae4 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/model/RemotePrintDocument.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/model/RemotePrintDocument.java
@@ -870,7 +870,7 @@
private final MutexFileProvider mFileProvider;
private final IWriteResultCallback mRemoteResultCallback;
- private final CommandDoneCallback mDoneCallback;
+ private final CommandDoneCallback mWriteDoneCallback;
private final Context mContext;
private final Handler mHandler;
@@ -885,7 +885,7 @@
mPageCount = pageCount;
mPages = Arrays.copyOf(pages, pages.length);
mFileProvider = fileProvider;
- mDoneCallback = callback;
+ mWriteDoneCallback = callback;
}
@Override
@@ -997,7 +997,7 @@
mCancellation = null;
// Done.
- mDoneCallback.onDone();
+ mWriteDoneCallback.onDone();
}
private void handleOnWriteFailed(CharSequence error, int sequence) {
@@ -1015,7 +1015,7 @@
mCancellation = null;
// Done.
- mDoneCallback.onDone();
+ mWriteDoneCallback.onDone();
}
private void handleOnWriteCanceled(int sequence) {
@@ -1033,7 +1033,7 @@
mCancellation = null;
// Done.
- mDoneCallback.onDone();
+ mWriteDoneCallback.onDone();
}
private final class WriteHandler extends Handler {
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/FusedPrintersProvider.java b/packages/PrintSpooler/src/com/android/printspooler/ui/FusedPrintersProvider.java
index 80c28e0..5525774 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/FusedPrintersProvider.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/FusedPrintersProvider.java
@@ -20,23 +20,33 @@
import android.content.Context;
import android.content.Loader;
import android.content.pm.ServiceInfo;
+import android.location.Criteria;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.location.LocationRequest;
import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Looper;
+import android.os.SystemClock;
import android.print.PrintManager;
import android.print.PrinterDiscoverySession;
import android.print.PrinterDiscoverySession.OnPrintersChangeListener;
import android.print.PrinterId;
import android.print.PrinterInfo;
import android.printservice.PrintServiceInfo;
-import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.AtomicFile;
import android.util.Log;
+import android.util.Pair;
import android.util.Slog;
import android.util.Xml;
import com.android.internal.util.FastXmlSerializer;
+import libcore.io.IoUtils;
+
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
@@ -49,18 +59,19 @@
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
-import libcore.io.IoUtils;
-
/**
* This class is responsible for loading printers by doing discovery
* and merging the discovered printers with the previously used ones.
*/
-public final class FusedPrintersProvider extends Loader<List<PrinterInfo>> {
+public final class FusedPrintersProvider extends Loader<List<PrinterInfo>>
+ implements LocationListener {
private static final String LOG_TAG = "FusedPrintersProvider";
private static final boolean DEBUG = false;
@@ -70,10 +81,22 @@
private static final int MAX_FAVORITE_PRINTER_COUNT = 4;
+ /** Interval of location updated in ms */
+ private static final int LOCATION_UPDATE_MS = 30 * 1000;
+
+ /** Maximum acceptable age of the location in ms */
+ private static final int MAX_LOCATION_AGE_MS = 10 * 60 * 1000;
+
+ /** The worst accuracy that is considered usable in m */
+ private static final int MIN_LOCATION_ACCURACY = 50;
+
+ /** Maximum distance where a printer is still considered "near" */
+ private static final int MAX_PRINTER_DISTANCE = MIN_LOCATION_ACCURACY * 2;
+
private final List<PrinterInfo> mPrinters =
new ArrayList<>();
- private final List<PrinterInfo> mFavoritePrinters =
+ private final List<Pair<PrinterInfo, Location>> mFavoritePrinters =
new ArrayList<>();
private final PersistenceManager mPersistenceManager;
@@ -84,33 +107,111 @@
private boolean mPrintersUpdatedBefore;
+ /** Last known location, can be null or out of date */
+ private final Object mLocationLock;
+ private Location mLocation;
+
+ /** Location used when the printers were updated the last time */
+ private Location mLocationOfLastPrinterUpdate;
+
+ /** Reference to the system's location manager */
+ private final LocationManager mLocationManager;
+
+ /**
+ * Get a reference to the current location.
+ */
+ private Location getCurrentLocation() {
+ synchronized (mLocationLock) {
+ return mLocation;
+ }
+ }
+
public FusedPrintersProvider(Context context) {
super(context);
+ mLocationLock = new Object();
mPersistenceManager = new PersistenceManager(context);
+ mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}
public void addHistoricalPrinter(PrinterInfo printer) {
mPersistenceManager.addPrinterAndWritePrinterHistory(printer);
}
+ /**
+ * Add printer to dest, or if updatedPrinters add the updated printer. If the updated printer
+ * was added, remove it from updatedPrinters.
+ *
+ * @param dest The list the printers should be added to
+ * @param printer The printer to add
+ * @param updatedPrinters The printer to add
+ */
+ private void updateAndAddPrinter(List<PrinterInfo> dest, PrinterInfo printer,
+ Map<PrinterId, PrinterInfo> updatedPrinters) {
+ PrinterInfo updatedPrinter = updatedPrinters.remove(printer.getId());
+ if (updatedPrinter != null) {
+ dest.add(updatedPrinter);
+ } else {
+ dest.add(printer);
+ }
+ }
+
+ /**
+ * Compute the printers, order them appropriately and deliver the printers to the clients. We
+ * prefer printers that have been previously used (favorites) and printers that have been used
+ * previously close to the current location (near printers).
+ *
+ * @param discoveredPrinters All printers currently discovered by the print discovery session.
+ * @param favoritePrinters The ordered list of printers. The earlier in the list, the more
+ * preferred.
+ */
private void computeAndDeliverResult(Map<PrinterId, PrinterInfo> discoveredPrinters,
- List<PrinterInfo> favoritePrinters) {
+ List<Pair<PrinterInfo, Location>> favoritePrinters) {
List<PrinterInfo> printers = new ArrayList<>();
- // Add the updated favorite printers.
+ // Store the printerIds that have already been added. We cannot compare the printerInfos in
+ // "printers" as they might have been taken from discoveredPrinters and the printerInfo does
+ // not equals() anymore
+ HashSet<PrinterId> alreadyAddedPrinter = new HashSet<>(MAX_FAVORITE_PRINTER_COUNT);
+
+ Location location = getCurrentLocation();
+
+ // Add the favorite printers that have last been used close to the current location
final int favoritePrinterCount = favoritePrinters.size();
- for (int i = 0; i < favoritePrinterCount; i++) {
- PrinterInfo favoritePrinter = favoritePrinters.get(i);
- PrinterInfo updatedPrinter = discoveredPrinters.remove(
- favoritePrinter.getId());
- if (updatedPrinter != null) {
- printers.add(updatedPrinter);
- } else {
- printers.add(favoritePrinter);
+ if (location != null) {
+ for (int i = 0; i < favoritePrinterCount; i++) {
+ // Only add a certain amount of favorite printers
+ if (printers.size() == MAX_FAVORITE_PRINTER_COUNT) {
+ break;
+ }
+
+ PrinterInfo favoritePrinter = favoritePrinters.get(i).first;
+ Location printerLocation = favoritePrinters.get(i).second;
+
+ if (printerLocation != null
+ && !alreadyAddedPrinter.contains(favoritePrinter.getId())) {
+ if (printerLocation.distanceTo(location) <= MAX_PRINTER_DISTANCE) {
+ updateAndAddPrinter(printers, favoritePrinter, discoveredPrinters);
+ alreadyAddedPrinter.add(favoritePrinter.getId());
+ }
+ }
}
}
- // Add other updated printers.
+ // Add the other favorite printers
+ for (int i = 0; i < favoritePrinterCount; i++) {
+ // Only add a certain amount of favorite printers
+ if (printers.size() == MAX_FAVORITE_PRINTER_COUNT) {
+ break;
+ }
+
+ PrinterInfo favoritePrinter = favoritePrinters.get(i).first;
+ if (!alreadyAddedPrinter.contains(favoritePrinter.getId())) {
+ updateAndAddPrinter(printers, favoritePrinter, discoveredPrinters);
+ }
+ }
+
+ // Add other updated printers. Printers that have already been added have been removed from
+ // discoveredPrinters in the calls to updateAndAddPrinter
final int printerCount = mPrinters.size();
for (int i = 0; i < printerCount; i++) {
PrinterInfo printer = mPrinters.get(i);
@@ -142,6 +243,21 @@
if (DEBUG) {
Log.i(LOG_TAG, "onStartLoading() " + FusedPrintersProvider.this.hashCode());
}
+
+ mLocationManager.requestLocationUpdates(LocationRequest.create()
+ .setQuality(LocationRequest.POWER_LOW).setInterval(LOCATION_UPDATE_MS), this,
+ Looper.getMainLooper());
+
+ Location lastLocation = mLocationManager.getLastLocation();
+ if (lastLocation != null) {
+ onLocationChanged(lastLocation);
+ }
+
+ // Jumpstart location with a single forced update
+ Criteria oneTimeCriteria = new Criteria();
+ oneTimeCriteria.setAccuracy(Criteria.ACCURACY_FINE);
+ mLocationManager.requestSingleUpdate(oneTimeCriteria, this, Looper.getMainLooper());
+
// The contract is that if we already have a valid,
// result the we have to deliver it immediately.
if (!mPrinters.isEmpty()) {
@@ -158,6 +274,8 @@
Log.i(LOG_TAG, "onStopLoading() " + FusedPrintersProvider.this.hashCode());
}
onCancelLoad();
+
+ mLocationManager.removeUpdates(this);
}
@Override
@@ -188,34 +306,38 @@
+ " " + FusedPrintersProvider.this.hashCode());
}
- updatePrinters(mDiscoverySession.getPrinters(), mFavoritePrinters);
+ updatePrinters(mDiscoverySession.getPrinters(), mFavoritePrinters,
+ getCurrentLocation());
}
});
final int favoriteCount = mFavoritePrinters.size();
List<PrinterId> printerIds = new ArrayList<>(favoriteCount);
for (int i = 0; i < favoriteCount; i++) {
- printerIds.add(mFavoritePrinters.get(i).getId());
+ printerIds.add(mFavoritePrinters.get(i).first.getId());
}
mDiscoverySession.startPrinterDiscovery(printerIds);
List<PrinterInfo> printers = mDiscoverySession.getPrinters();
- if (!printers.isEmpty()) {
- updatePrinters(printers, mFavoritePrinters);
- }
+
+ updatePrinters(printers, mFavoritePrinters, getCurrentLocation());
}
}
- private void updatePrinters(List<PrinterInfo> printers, List<PrinterInfo> favoritePrinters) {
+ private void updatePrinters(List<PrinterInfo> printers,
+ List<Pair<PrinterInfo, Location>> favoritePrinters,
+ Location location) {
if (mPrintersUpdatedBefore && mPrinters.equals(printers)
- && mFavoritePrinters.equals(favoritePrinters)) {
+ && mFavoritePrinters.equals(favoritePrinters)
+ && Objects.equals(mLocationOfLastPrinterUpdate, location)) {
return;
}
+ mLocationOfLastPrinterUpdate = location;
mPrintersUpdatedBefore = true;
// Some of the found printers may have be a printer that is in the
- // history but with its name changed. Hence, we try to update the
- // printer to use its current name instead of the historical one.
- mPersistenceManager.updatePrintersHistoricalNamesIfNeeded(printers);
+ // history but with its properties changed. Hence, we try to update the
+ // printer to use its current properties instead of the historical one.
+ mPersistenceManager.updateHistoricalPrintersIfNeeded(printers);
Map<PrinterId, PrinterInfo> printersMap = new LinkedHashMap<>();
final int printerCount = printers.size();
@@ -271,6 +393,60 @@
onStopLoading();
}
+ /**
+ * Check if the location is acceptable. This is to filter out excessively old or inaccurate
+ * location updates.
+ *
+ * @param location the location to check
+ * @return true iff the location is usable.
+ */
+ private boolean isLocationAcceptable(Location location) {
+ return location != null
+ && location.getElapsedRealtimeNanos() > SystemClock.elapsedRealtimeNanos()
+ - MAX_LOCATION_AGE_MS * 1000_000L
+ && location.hasAccuracy()
+ && location.getAccuracy() < MIN_LOCATION_ACCURACY;
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ synchronized(mLocationLock) {
+ // We expect the user to not move too fast while printing. Hence prefer more accurate
+ // updates over more recent ones for LOCATION_UPDATE_MS. We add a 10% fudge factor here
+ // as the location provider might send an update slightly too early.
+ if (isLocationAcceptable(location)
+ && !location.equals(mLocation)
+ && (mLocation == null
+ || location
+ .getElapsedRealtimeNanos() > mLocation.getElapsedRealtimeNanos()
+ + LOCATION_UPDATE_MS * 0.9 * 1000_000L
+ || (!mLocation.hasAccuracy()
+ || location.getAccuracy() < mLocation.getAccuracy()))) {
+ // Other callers of updatePrinters might want to know the location, hence cache it
+ mLocation = location;
+
+ if (areHistoricalPrintersLoaded()) {
+ updatePrinters(mDiscoverySession.getPrinters(), mFavoritePrinters, mLocation);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ // nothing to do
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ // nothing to do
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ // nothing to do
+ }
+
public boolean areHistoricalPrintersLoaded() {
return mPersistenceManager.mReadHistoryCompleted;
}
@@ -294,7 +470,7 @@
public boolean isFavoritePrinter(PrinterId printerId) {
final int printerCount = mFavoritePrinters.size();
for (int i = 0; i < printerCount; i++) {
- PrinterInfo favoritePritner = mFavoritePrinters.get(i);
+ PrinterInfo favoritePritner = mFavoritePrinters.get(i).first;
if (favoritePritner.getId().equals(printerId)) {
return true;
}
@@ -303,28 +479,22 @@
}
public void forgetFavoritePrinter(PrinterId printerId) {
- List<PrinterInfo> newFavoritePrinters = null;
+ final int favoritePrinterCount = mFavoritePrinters.size();
+ List<Pair<PrinterInfo, Location>> newFavoritePrinters = new ArrayList<>(
+ favoritePrinterCount - 1);
// Remove the printer from the favorites.
- final int favoritePrinterCount = mFavoritePrinters.size();
for (int i = 0; i < favoritePrinterCount; i++) {
- PrinterInfo favoritePrinter = mFavoritePrinters.get(i);
- if (favoritePrinter.getId().equals(printerId)) {
- newFavoritePrinters = new ArrayList<>();
- newFavoritePrinters.addAll(mPrinters);
- newFavoritePrinters.remove(i);
- break;
+ if (!mFavoritePrinters.get(i).first.getId().equals(printerId)) {
+ newFavoritePrinters.add(mFavoritePrinters.get(i));
}
}
- // If we removed a favorite printer, we have work to do.
- if (newFavoritePrinters != null) {
- // Remove the printer from history and persist the latter.
- mPersistenceManager.removeHistoricalPrinterAndWritePrinterHistory(printerId);
+ // Remove the printer from history and persist the latter.
+ mPersistenceManager.removeHistoricalPrinterAndWritePrinterHistory(printerId);
- // Recompute and deliver the printers.
- updatePrinters(mDiscoverySession.getPrinters(), newFavoritePrinters);
- }
+ // Recompute and deliver the printers.
+ updatePrinters(mDiscoverySession.getPrinters(), newFavoritePrinters, getCurrentLocation());
}
private final class PersistenceManager {
@@ -333,18 +503,22 @@
private static final String TAG_PRINTERS = "printers";
private static final String TAG_PRINTER = "printer";
+ private static final String TAG_LOCATION = "location";
private static final String TAG_PRINTER_ID = "printerId";
private static final String ATTR_LOCAL_ID = "localId";
private static final String ATTR_SERVICE_NAME = "serviceName";
+ private static final String ATTR_LONGITUDE = "longitude";
+ private static final String ATTR_LATITUDE = "latitude";
+ private static final String ATTR_ACCURACY = "accuracy";
+
private static final String ATTR_NAME = "name";
private static final String ATTR_DESCRIPTION = "description";
- private static final String ATTR_STATUS = "status";
private final AtomicFile mStatePersistFile;
- private List<PrinterInfo> mHistoricalPrinters = new ArrayList<>();
+ private List<Pair<PrinterInfo, Location>> mHistoricalPrinters = new ArrayList<>();
private boolean mReadHistoryCompleted;
@@ -378,13 +552,13 @@
mReadTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, (Void[]) null);
}
- public void updatePrintersHistoricalNamesIfNeeded(List<PrinterInfo> printers) {
+ public void updateHistoricalPrintersIfNeeded(List<PrinterInfo> printers) {
boolean writeHistory = false;
final int printerCount = printers.size();
for (int i = 0; i < printerCount; i++) {
PrinterInfo printer = printers.get(i);
- writeHistory |= renamePrinterIfNeeded(printer);
+ writeHistory |= updateHistoricalPrinterIfNeeded(printer);
}
if (writeHistory) {
@@ -392,25 +566,57 @@
}
}
- public boolean renamePrinterIfNeeded(PrinterInfo printer) {
- boolean renamed = false;
+ /**
+ * Updates the historical printer state with the given printer.
+ *
+ * @param printer the printer to update
+ *
+ * @return true iff the historical printer list needs to be updated
+ */
+ public boolean updateHistoricalPrinterIfNeeded(PrinterInfo printer) {
+ boolean writeHistory = false;
final int printerCount = mHistoricalPrinters.size();
for (int i = 0; i < printerCount; i++) {
- PrinterInfo historicalPrinter = mHistoricalPrinters.get(i);
- if (historicalPrinter.getId().equals(printer.getId())
- && !TextUtils.equals(historicalPrinter.getName(), printer.getName())) {
- mHistoricalPrinters.set(i, printer);
- renamed = true;
+ PrinterInfo historicalPrinter = mHistoricalPrinters.get(i).first;
+
+ if (!historicalPrinter.getId().equals(printer.getId())) {
+ continue;
+ }
+
+ // Overwrite the historical printer with the updated printer as some properties
+ // changed. We ignore the status as this is a volatile state.
+ if (historicalPrinter.equalsIgnoringStatus(printer)) {
+ continue;
+ }
+
+ mHistoricalPrinters.set(i, new Pair<PrinterInfo, Location>(printer,
+ mHistoricalPrinters.get(i).second));
+
+ // We only persist limited information in the printer history, hence check if
+ // we need to persist the update.
+ // @see PersistenceManager.WriteTask#doWritePrinterHistory
+ if (!historicalPrinter.getName().equals(printer.getName())) {
+ if (Objects.equals(historicalPrinter.getDescription(),
+ printer.getDescription())) {
+ writeHistory = true;
+ }
}
}
- return renamed;
+ return writeHistory;
}
public void addPrinterAndWritePrinterHistory(PrinterInfo printer) {
if (mHistoricalPrinters.size() >= MAX_HISTORY_LENGTH) {
mHistoricalPrinters.remove(0);
}
- mHistoricalPrinters.add(printer);
+
+ Location location = getCurrentLocation();
+ if (!isLocationAcceptable(location)) {
+ location = null;
+ }
+
+ mHistoricalPrinters.add(new Pair<PrinterInfo, Location>(printer, location));
+
writePrinterHistory();
}
@@ -418,7 +624,7 @@
boolean writeHistory = false;
final int printerCount = mHistoricalPrinters.size();
for (int i = printerCount - 1; i >= 0; i--) {
- PrinterInfo historicalPrinter = mHistoricalPrinters.get(i);
+ PrinterInfo historicalPrinter = mHistoricalPrinters.get(i).first;
if (historicalPrinter.getId().equals(printerId)) {
mHistoricalPrinters.remove(i);
writeHistory = true;
@@ -439,63 +645,91 @@
return mLastReadHistoryTimestamp != mStatePersistFile.getBaseFile().lastModified();
}
- private List<PrinterInfo> computeFavoritePrinters(List<PrinterInfo> printers) {
+ /**
+ * Sort the favorite printers by weight. If a printer is in the list multiple times for
+ * different locations, all instances are considered to have the accumulative weight. The
+ * actual favorite printers to display are computed in {@link #computeAndDeliverResult} as
+ * only at this time we know the location to use to determine if a printer is close enough
+ * to be preferred.
+ *
+ * @param printers The printers to sort.
+ * @return The sorted printers.
+ */
+ private List<Pair<PrinterInfo, Location>> sortFavoritePrinters(
+ List<Pair<PrinterInfo, Location>> printers) {
Map<PrinterId, PrinterRecord> recordMap = new ArrayMap<>();
- // Recompute the weights.
+ // Compute the weights.
float currentWeight = 1.0f;
final int printerCount = printers.size();
for (int i = printerCount - 1; i >= 0; i--) {
- PrinterInfo printer = printers.get(i);
- // Aggregate weight for the same printer
- PrinterRecord record = recordMap.get(printer.getId());
+ PrinterId printerId = printers.get(i).first.getId();
+ PrinterRecord record = recordMap.get(printerId);
if (record == null) {
- record = new PrinterRecord(printer);
- recordMap.put(printer.getId(), record);
+ record = new PrinterRecord();
+ recordMap.put(printerId, record);
}
+
+ record.printers.add(printers.get(i));
+
+ // Aggregate weight for the same printer
record.weight += currentWeight;
currentWeight *= WEIGHT_DECAY_COEFFICIENT;
}
- // Soft the favorite printers.
+ // Sort the favorite printers.
List<PrinterRecord> favoriteRecords = new ArrayList<>(
recordMap.values());
Collections.sort(favoriteRecords);
// Write the favorites to the output.
- final int favoriteCount = Math.min(favoriteRecords.size(),
- MAX_FAVORITE_PRINTER_COUNT);
- List<PrinterInfo> favoritePrinters = new ArrayList<>(favoriteCount);
- for (int i = 0; i < favoriteCount; i++) {
- PrinterInfo printer = favoriteRecords.get(i).printer;
- favoritePrinters.add(printer);
+ final int recordCount = favoriteRecords.size();
+ List<Pair<PrinterInfo, Location>> favoritePrinters = new ArrayList<>(printerCount);
+ for (int i = 0; i < recordCount; i++) {
+ favoritePrinters.addAll(favoriteRecords.get(i).printers);
}
return favoritePrinters;
}
+ /**
+ * A set of printers with the same ID and the weight associated with them during
+ * {@link #sortFavoritePrinters}.
+ */
private final class PrinterRecord implements Comparable<PrinterRecord> {
- public final PrinterInfo printer;
+ /**
+ * The printers, all with the same ID, but potentially different properties or locations
+ */
+ public final List<Pair<PrinterInfo, Location>> printers;
+
+ /** The weight associated with the printers */
public float weight;
- public PrinterRecord(PrinterInfo printer) {
- this.printer = printer;
+ /**
+ * Create a new record.
+ */
+ public PrinterRecord() {
+ printers = new ArrayList<>();
}
+ /**
+ * Compare two records by weight.
+ */
@Override
public int compareTo(PrinterRecord another) {
return Float.floatToIntBits(another.weight) - Float.floatToIntBits(weight);
}
}
- private final class ReadTask extends AsyncTask<Void, Void, List<PrinterInfo>> {
+ private final class ReadTask
+ extends AsyncTask<Void, Void, List<Pair<PrinterInfo, Location>>> {
@Override
- protected List<PrinterInfo> doInBackground(Void... args) {
+ protected List<Pair<PrinterInfo, Location>> doInBackground(Void... args) {
return doReadPrinterHistory();
}
@Override
- protected void onPostExecute(List<PrinterInfo> printers) {
+ protected void onPostExecute(List<Pair<PrinterInfo, Location>> printers) {
if (DEBUG) {
Log.i(LOG_TAG, "read history completed "
+ FusedPrintersProvider.this.hashCode());
@@ -518,7 +752,8 @@
final int printerCount = printers.size();
for (int i = printerCount - 1; i >= 0; i--) {
- ComponentName printerServiceName = printers.get(i).getId().getServiceName();
+ ComponentName printerServiceName = printers.get(i).first.getId()
+ .getServiceName();
if (!enabledComponents.contains(printerServiceName)) {
printers.remove(i);
}
@@ -529,12 +764,13 @@
// Compute the favorite printers.
mFavoritePrinters.clear();
- mFavoritePrinters.addAll(computeFavoritePrinters(mHistoricalPrinters));
+ mFavoritePrinters.addAll(sortFavoritePrinters(mHistoricalPrinters));
mReadHistoryCompleted = true;
// Deliver the printers.
- updatePrinters(mDiscoverySession.getPrinters(), mFavoritePrinters);
+ updatePrinters(mDiscoverySession.getPrinters(), mFavoritePrinters,
+ getCurrentLocation());
// We are done.
mReadTask = null;
@@ -544,12 +780,12 @@
}
@Override
- protected void onCancelled(List<PrinterInfo> printerInfos) {
+ protected void onCancelled(List<Pair<PrinterInfo, Location>> printerInfos) {
// We are done.
mReadTask = null;
}
- private List<PrinterInfo> doReadPrinterHistory() {
+ private List<Pair<PrinterInfo, Location>> doReadPrinterHistory() {
final FileInputStream in;
try {
in = mStatePersistFile.openRead();
@@ -561,7 +797,7 @@
return new ArrayList<>();
}
try {
- List<PrinterInfo> printers = new ArrayList<>();
+ List<Pair<PrinterInfo, Location>> printers = new ArrayList<>();
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, StandardCharsets.UTF_8.name());
parseState(parser, printers);
@@ -582,8 +818,9 @@
return Collections.emptyList();
}
- private void parseState(XmlPullParser parser, List<PrinterInfo> outPrinters)
- throws IOException, XmlPullParserException {
+ private void parseState(XmlPullParser parser,
+ List<Pair<PrinterInfo, Location>> outPrinters)
+ throws IOException, XmlPullParserException {
parser.next();
skipEmptyTextTags(parser);
expect(parser, XmlPullParser.START_TAG, TAG_PRINTERS);
@@ -601,8 +838,9 @@
expect(parser, XmlPullParser.END_TAG, TAG_PRINTERS);
}
- private boolean parsePrinter(XmlPullParser parser, List<PrinterInfo> outPrinters)
- throws IOException, XmlPullParserException {
+ private boolean parsePrinter(XmlPullParser parser,
+ List<Pair<PrinterInfo, Location>> outPrinters)
+ throws IOException, XmlPullParserException {
skipEmptyTextTags(parser);
if (!accept(parser, XmlPullParser.START_TAG, TAG_PRINTER)) {
return false;
@@ -610,7 +848,6 @@
String name = parser.getAttributeValue(null, ATTR_NAME);
String description = parser.getAttributeValue(null, ATTR_DESCRIPTION);
- final int status = Integer.parseInt(parser.getAttributeValue(null, ATTR_STATUS));
parser.next();
@@ -625,11 +862,34 @@
expect(parser, XmlPullParser.END_TAG, TAG_PRINTER_ID);
parser.next();
- PrinterInfo.Builder builder = new PrinterInfo.Builder(printerId, name, status);
+ skipEmptyTextTags(parser);
+ Location location;
+ if (accept(parser, XmlPullParser.START_TAG, TAG_LOCATION)) {
+ location = new Location("");
+ location.setLongitude(
+ Double.parseDouble(parser.getAttributeValue(null, ATTR_LONGITUDE)));
+ location.setLatitude(
+ Double.parseDouble(parser.getAttributeValue(null, ATTR_LATITUDE)));
+ location.setAccuracy(
+ Float.parseFloat(parser.getAttributeValue(null, ATTR_ACCURACY)));
+ parser.next();
+
+ skipEmptyTextTags(parser);
+ expect(parser, XmlPullParser.END_TAG, TAG_LOCATION);
+ parser.next();
+ } else {
+ location = null;
+ }
+
+ // If the printer is available the printer will be replaced by the one read from the
+ // discovery session, hence the only time when this object is used is when the
+ // printer is unavailable.
+ PrinterInfo.Builder builder = new PrinterInfo.Builder(printerId, name,
+ PrinterInfo.STATUS_UNAVAILABLE);
builder.setDescription(description);
PrinterInfo printer = builder.build();
- outPrinters.add(printer);
+ outPrinters.add(new Pair<PrinterInfo, Location>(printer, location));
if (DEBUG) {
Log.i(LOG_TAG, "[RESTORED] " + printer);
@@ -642,7 +902,7 @@
}
private void expect(XmlPullParser parser, int type, String tag)
- throws IOException, XmlPullParserException {
+ throws XmlPullParserException {
if (!accept(parser, type, tag)) {
throw new XmlPullParserException("Exepected event: " + type
+ " and tag: " + tag + " but got event: " + parser.getEventType()
@@ -659,7 +919,7 @@
}
private boolean accept(XmlPullParser parser, int type, String tag)
- throws IOException, XmlPullParserException {
+ throws XmlPullParserException {
if (parser.getEventType() != type) {
return false;
}
@@ -674,14 +934,16 @@
}
}
- private final class WriteTask extends AsyncTask<List<PrinterInfo>, Void, Void> {
+ private final class WriteTask
+ extends AsyncTask<List<Pair<PrinterInfo, Location>>, Void, Void> {
@Override
- protected Void doInBackground(List<PrinterInfo>... printers) {
+ protected Void doInBackground(
+ @SuppressWarnings("unchecked") List<Pair<PrinterInfo, Location>>... printers) {
doWritePrinterHistory(printers[0]);
return null;
}
- private void doWritePrinterHistory(List<PrinterInfo> printers) {
+ private void doWritePrinterHistory(List<Pair<PrinterInfo, Location>> printers) {
FileOutputStream out = null;
try {
out = mStatePersistFile.startWrite();
@@ -693,14 +955,11 @@
final int printerCount = printers.size();
for (int i = 0; i < printerCount; i++) {
- PrinterInfo printer = printers.get(i);
+ PrinterInfo printer = printers.get(i).first;
serializer.startTag(null, TAG_PRINTER);
serializer.attribute(null, ATTR_NAME, printer.getName());
- // Historical printers are always stored as unavailable.
- serializer.attribute(null, ATTR_STATUS, String.valueOf(
- PrinterInfo.STATUS_UNAVAILABLE));
String description = printer.getDescription();
if (description != null) {
serializer.attribute(null, ATTR_DESCRIPTION, description);
@@ -713,6 +972,18 @@
.flattenToString());
serializer.endTag(null, TAG_PRINTER_ID);
+ Location location = printers.get(i).second;
+ if (location != null) {
+ serializer.startTag(null, TAG_LOCATION);
+ serializer.attribute(null, ATTR_LONGITUDE,
+ String.valueOf(location.getLongitude()));
+ serializer.attribute(null, ATTR_LATITUDE,
+ String.valueOf(location.getLatitude()));
+ serializer.attribute(null, ATTR_ACCURACY,
+ String.valueOf(location.getAccuracy()));
+ serializer.endTag(null, TAG_LOCATION);
+ }
+
serializer.endTag(null, TAG_PRINTER);
if (DEBUG) {
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java
index 2757b81..606f4eb 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PageAdapter.java
@@ -52,7 +52,7 @@
/**
* This class represents the adapter for the pages in the print preview list.
*/
-public final class PageAdapter extends Adapter {
+public final class PageAdapter extends Adapter<ViewHolder> {
private static final String LOG_TAG = "PageAdapter";
private static final int MAX_PREVIEW_PAGES_BATCH = 50;
@@ -409,7 +409,7 @@
- horizontalPaddingAndMargins) / columnCount) + 0.5f);
// Compute max page height.
- final int pageContentDesiredHeight = (int) (((float) pageContentDesiredWidth
+ final int pageContentDesiredHeight = (int) ((pageContentDesiredWidth
/ pageAspectRatio) + 0.5f);
// If the page does not fit entirely in a vertical direction,
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
index 6521565..9c1cf64 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
@@ -30,7 +30,6 @@
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
@@ -462,6 +461,7 @@
}
}
+ @Override
public void onUpdateCanceled() {
if (DEBUG) {
Log.i(LOG_TAG, "onUpdateCanceled()");
@@ -1738,8 +1738,9 @@
}
private void updatePageRangeOptions(int pageCount) {
+ @SuppressWarnings("unchecked")
ArrayAdapter<SpinnerItem<Integer>> rangeOptionsSpinnerAdapter =
- (ArrayAdapter) mRangeOptionsSpinner.getAdapter();
+ (ArrayAdapter<SpinnerItem<Integer>>) mRangeOptionsSpinner.getAdapter();
rangeOptionsSpinnerAdapter.clear();
final int[] rangeOptionsValues = getResources().getIntArray(
@@ -1928,6 +1929,7 @@
this.label = label;
}
+ @Override
public String toString() {
return label.toString();
}
@@ -2187,7 +2189,7 @@
if (position == 0 && getPdfPrinter() != null) {
PrinterHolder printerHolder = (PrinterHolder) getItem(position);
title = printerHolder.printer.getName();
- icon = getResources().getDrawable(R.drawable.ic_menu_savetopdf);
+ icon = getResources().getDrawable(R.drawable.ic_menu_savetopdf, null);
} else if (position == 1) {
title = getString(R.string.all_printers);
}
@@ -2195,20 +2197,16 @@
if (position == 1 && getPdfPrinter() != null) {
PrinterHolder printerHolder = (PrinterHolder) getItem(position);
title = printerHolder.printer.getName();
- icon = getResources().getDrawable(R.drawable.ic_menu_savetopdf);
+ icon = getResources().getDrawable(R.drawable.ic_menu_savetopdf, null);
} else if (position == getCount() - 1) {
title = getString(R.string.all_printers);
} else {
PrinterHolder printerHolder = (PrinterHolder) getItem(position);
- title = printerHolder.printer.getName();
- try {
- PackageInfo packageInfo = getPackageManager().getPackageInfo(
- printerHolder.printer.getId().getServiceName().getPackageName(), 0);
- subtitle = packageInfo.applicationInfo.loadLabel(getPackageManager());
- icon = packageInfo.applicationInfo.loadIcon(getPackageManager());
- } catch (NameNotFoundException nnfe) {
- /* ignore */
- }
+ PrinterInfo printInfo = printerHolder.printer;
+
+ title = printInfo.getName();
+ icon = printInfo.loadIcon(PrintActivity.this);
+ subtitle = printInfo.getDescription();
}
}
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java
index 8716fd2..ce54204 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintPreviewController.java
@@ -78,8 +78,8 @@
mRecyclerView.setLayoutManager(mLayoutManger);
mRecyclerView.setAdapter(mPageAdapter);
mRecyclerView.setItemViewCacheSize(0);
- mPreloadController = new PreloadController(mRecyclerView);
- mRecyclerView.setOnScrollListener(mPreloadController);
+ mPreloadController = new PreloadController();
+ mRecyclerView.addOnScrollListener(mPreloadController);
mContentView = (PrintContentView) activity.findViewById(R.id.options_content);
mEmbeddedContentContainer = (EmbeddedContentContainer) activity.findViewById(
@@ -314,12 +314,9 @@
}
private final class PreloadController extends RecyclerView.OnScrollListener {
- private final RecyclerView mRecyclerView;
-
private int mOldScrollState;
- public PreloadController(RecyclerView recyclerView) {
- mRecyclerView = recyclerView;
+ public PreloadController() {
mOldScrollState = mRecyclerView.getScrollState();
}
@@ -371,7 +368,8 @@
View lastChild = layoutManager.getChildAt(layoutManager.getChildCount() - 1);
ViewHolder lastHolder = mRecyclerView.getChildViewHolder(lastChild);
- return new PageRange(firstHolder.getPosition(), lastHolder.getPosition());
+ return new PageRange(firstHolder.getLayoutPosition(),
+ lastHolder.getLayoutPosition());
}
return null;
}
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
index ab0b2f1..cdfc7ee 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
@@ -27,6 +27,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.IntentSender.SendIntentException;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -51,6 +52,7 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
import android.widget.AdapterView;
@@ -587,20 +589,31 @@
convertView.setEnabled(isActionable(position));
- PrinterInfo printer = (PrinterInfo) getItem(position);
+ final PrinterInfo printer = (PrinterInfo) getItem(position);
CharSequence title = printer.getName();
- CharSequence subtitle = null;
- Drawable icon = null;
+ Drawable icon = printer.loadIcon(SelectPrinterActivity.this);
+ CharSequence printServiceLabel;
try {
- PackageManager pm = getPackageManager();
- PackageInfo packageInfo = pm.getPackageInfo(printer.getId()
- .getServiceName().getPackageName(), 0);
- subtitle = packageInfo.applicationInfo.loadLabel(pm);
- icon = packageInfo.applicationInfo.loadIcon(pm);
- } catch (NameNotFoundException nnfe) {
- /* ignore */
+ PackageInfo packageInfo = getPackageManager().getPackageInfo(
+ printer.getId().getServiceName().getPackageName(), 0);
+
+ printServiceLabel = packageInfo.applicationInfo.loadLabel(getPackageManager());
+ } catch (NameNotFoundException e) {
+ printServiceLabel = null;
+ }
+
+ CharSequence description = printer.getDescription();
+
+ CharSequence subtitle;
+ if (printServiceLabel == null) {
+ subtitle = description;
+ } else if (description == null) {
+ subtitle = printServiceLabel;
+ } else {
+ subtitle = getString(R.string.printer_extended_description_template,
+ printServiceLabel, description);
}
TextView titleView = (TextView) convertView.findViewById(R.id.title);
@@ -615,6 +628,20 @@
subtitleView.setVisibility(View.GONE);
}
+ ImageView moreInfoView = (ImageView) convertView.findViewById(R.id.more_info);
+ if (printer.getInfoIntent() != null) {
+ moreInfoView.setVisibility(View.VISIBLE);
+ moreInfoView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ startIntentSender(printer.getInfoIntent().getIntentSender(), null, 0, 0, 0);
+ } catch (SendIntentException e) {
+ Log.e(LOG_TAG, "Could not execute pending info intent: %s", e);
+ }
+ }
+ });
+ }
ImageView iconView = (ImageView) convertView.findViewById(R.id.icon);
if (icon != null) {
diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
index e6613fa..0bb4bfa 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java
@@ -415,6 +415,7 @@
onDragProgress(progress);
}
+ @Override
public void onViewReleased(View child, float velocityX, float velocityY) {
final int childTop = child.getTop();
@@ -435,14 +436,17 @@
invalidate();
}
+ @Override
public int getOrderedChildIndex(int index) {
return getChildCount() - index - 1;
}
+ @Override
public int getViewVerticalDragRange(View child) {
return mDraggableContent.getHeight();
}
+ @Override
public int clampViewPositionVertical(View child, int top, int dy) {
final int staticOptionBottom = mStaticContent.getBottom();
return Math.max(Math.min(top, getOpenedOptionsY()), getClosedOptionsY());
diff --git a/packages/SettingsLib/res/values-mk-rMK/strings.xml b/packages/SettingsLib/res/values-mk-rMK/strings.xml
index e01d00c..51c2568 100644
--- a/packages/SettingsLib/res/values-mk-rMK/strings.xml
+++ b/packages/SettingsLib/res/values-mk-rMK/strings.xml
@@ -97,7 +97,7 @@
<string name="running_process_item_user_label" msgid="3129887865552025943">"Корисник: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="launch_defaults_some" msgid="313159469856372621">"Поставени се некои стандардни вредности"</string>
<string name="launch_defaults_none" msgid="4241129108140034876">"Нема поставено стандардни вредности"</string>
- <string name="tts_settings" msgid="8186971894801348327">"Подесувања на текст-во-говор"</string>
+ <string name="tts_settings" msgid="8186971894801348327">"Поставки на текст-во-говор"</string>
<string name="tts_settings_title" msgid="1237820681016639683">"Излез текст-во-говор"</string>
<string name="tts_default_rate_title" msgid="6030550998379310088">"Брзина на говор"</string>
<string name="tts_default_rate_summary" msgid="4061815292287182801">"Брзина со која се кажува текстот"</string>
@@ -117,7 +117,7 @@
<string name="tts_status_requires_network" msgid="6042500821503226892">"<xliff:g id="LOCALE">%1$s</xliff:g> бара мрежно поврзување"</string>
<string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> не е поддржано"</string>
<string name="tts_status_checking" msgid="5339150797940483592">"Се проверува..."</string>
- <string name="tts_engine_settings_title" msgid="3499112142425680334">"Подесувања на <xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>"</string>
+ <string name="tts_engine_settings_title" msgid="3499112142425680334">"Поставки на <xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>"</string>
<string name="tts_engine_settings_button" msgid="1030512042040722285">"Стартувај подесувања на софтвер"</string>
<string name="tts_engine_preference_section_title" msgid="448294500990971413">"Претпочитан софтвер"</string>
<string name="tts_general_section_title" msgid="4402572014604490502">"Општо"</string>
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 1c4c012..c6d9e98 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -108,6 +108,7 @@
<uses-permission android:name="android.permission.REGISTER_SIM_SUBSCRIPTION" />
<uses-permission android:name="android.permission.GET_APP_OPS_STATS" />
<uses-permission android:name="android.permission.VIBRATE" />
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
<application android:label="@string/app_label"
android:forceDeviceEncrypted="true"
diff --git a/packages/Shell/res/values-af/strings.xml b/packages/Shell/res/values-af/strings.xml
index e01252e..247ccfc 100644
--- a/packages/Shell/res/values-af/strings.xml
+++ b/packages/Shell/res/values-af/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Foutverslaglêer kon nie gelees word nie"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"naamloos"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Besonderhede"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Skermkiekie"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Skermkiekie suksesvol geneem."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Kon nie skermkiekie neem nie."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Foutverslagbesonderhede"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Kort naam"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-reëlopsomming"</string>
diff --git a/packages/Shell/res/values-am/strings.xml b/packages/Shell/res/values-am/strings.xml
index a1c926d..9f3615a 100644
--- a/packages/Shell/res/values-am/strings.xml
+++ b/packages/Shell/res/values-am/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"የሳንካ ሪፖርት ፋይል ሊነበብ አልተቻለም"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ያልተሰየመ"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"ዝርዝሮች"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ቅጽበታዊ ገጽ እይታ"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ቅጽበታዊ ገጽ እይታ በስኬት ተነስቷል።"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ቅጽበታዊ ገጽ እይታ ሊነሳ አይችልም"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"የሳንካ ሪፖርት ዝርዝሮች"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"አጭር ስም"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"የ1 መስመር ማጠቃለያ"</string>
diff --git a/packages/Shell/res/values-ar/strings.xml b/packages/Shell/res/values-ar/strings.xml
index 069e5ca..b670e37 100644
--- a/packages/Shell/res/values-ar/strings.xml
+++ b/packages/Shell/res/values-ar/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"تعذرت قراءة ملف تقرير الخطأ."</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"بدون اسم"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"التفاصيل"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"لقطة شاشة"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"تم التقاط لقطة الشاشة بنجاح."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"تعذر التقاط لقطة الشاشة."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"تفاصيل تقرير الخطأ"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"اسم مختصر"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"سطر الملخص الأول"</string>
diff --git a/packages/Shell/res/values-az-rAZ/strings.xml b/packages/Shell/res/values-az-rAZ/strings.xml
index b289776..634d123 100644
--- a/packages/Shell/res/values-az-rAZ/strings.xml
+++ b/packages/Shell/res/values-az-rAZ/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Baq hesabat faylı oxunmur"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"adsız"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detallar"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"displey görüntüsü"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Displey görüntüsü uğurla çəkildi."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Displey görüntüsü əlçatan deyil."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Baq hesabat detalları"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Qısa ad"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-sətrlik xülasə"</string>
diff --git a/packages/Shell/res/values-b+sr+Latn/strings.xml b/packages/Shell/res/values-b+sr+Latn/strings.xml
index dac1b7a..41acb89 100644
--- a/packages/Shell/res/values-b+sr+Latn/strings.xml
+++ b/packages/Shell/res/values-b+sr+Latn/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Datoteka izveštaja o grešci ne može da se pročita"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"neimenovano"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalji"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Snimci ekrana"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Snimanje ekrana je uspelo."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Snimanje ekrana nije uspelo."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalji izveštaja o grešci"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Kratki naziv"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Rezime u jednom redu"</string>
diff --git a/packages/Shell/res/values-bg/strings.xml b/packages/Shell/res/values-bg/strings.xml
index 376360b..661a0b65 100644
--- a/packages/Shell/res/values-bg/strings.xml
+++ b/packages/Shell/res/values-bg/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Файлът със сигнал за програмна грешка не можа да бъде прочетен"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"без име"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Подробности"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Екранна снимка"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Екранната снимка бе направена успешно."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Екранната снимка не можа да бъде направена."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Подробности за сигнала за програмна грешка"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Кратко име"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Едноредово обобщение"</string>
diff --git a/packages/Shell/res/values-bn-rBD/strings.xml b/packages/Shell/res/values-bn-rBD/strings.xml
index 96098f2..e7256ca 100644
--- a/packages/Shell/res/values-bn-rBD/strings.xml
+++ b/packages/Shell/res/values-bn-rBD/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ত্রুটির প্রতিবেদনের ফাইলটি পড়া যায়নি"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"নামবিহীন"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"বিশদ বিবরণ"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"স্ক্রীনশট"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"স্ক্রীনশট সফলভাবে নেওয়া হয়েছে৷"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"স্ক্রীনশট নেওয়া যায়নি৷"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ত্রুটি প্রতিবেদনের বিবরণ"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"ছোট নাম"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"১-লাইনের সারসংক্ষেপ"</string>
diff --git a/packages/Shell/res/values-ca/strings.xml b/packages/Shell/res/values-ca/strings.xml
index e82f319..a8c9553 100644
--- a/packages/Shell/res/values-ca/strings.xml
+++ b/packages/Shell/res/values-ca/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"No s\'ha pogut llegir el fitxer de l\'informe d\'errors"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sense nom"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalls"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Captura de pantalla"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"La captura de pantalla s\'ha fet correctament."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"No s\'ha pogut fer la captura de pantalla."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalls de l\'informe d\'errors"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nom curt"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Resum d\'una línia"</string>
diff --git a/packages/Shell/res/values-cs/strings.xml b/packages/Shell/res/values-cs/strings.xml
index fc3c9b6..193501e2 100644
--- a/packages/Shell/res/values-cs/strings.xml
+++ b/packages/Shell/res/values-cs/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Soubor chybové zprávy nelze načíst"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"bez názvu"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Podrobnosti"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Snímek obrazovky"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Snímek obrazovky byl úspěšně pořízen."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Snímek obrazovky se nepodařilo pořídit."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Podrobnosti zprávy o chybě"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Krátký název"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Shrnutí na jeden řádek"</string>
diff --git a/packages/Shell/res/values-da/strings.xml b/packages/Shell/res/values-da/strings.xml
index ec64efa..3975800 100644
--- a/packages/Shell/res/values-da/strings.xml
+++ b/packages/Shell/res/values-da/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Fejlrapportfilen kunne ikke læses"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ikke navngivet"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Oplysninger"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Skærmbillede"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Der blev taget et skærmbillede."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Der kunne ikke tages et skærmbillede."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Fejlrapportoplysninger"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Kort navn"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Sammenfatning på én linje"</string>
diff --git a/packages/Shell/res/values-de/strings.xml b/packages/Shell/res/values-de/strings.xml
index d65d8cb..b0450dd 100644
--- a/packages/Shell/res/values-de/strings.xml
+++ b/packages/Shell/res/values-de/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Fehlerberichtdatei konnte nicht gelesen werden."</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"Unbenannt"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Details"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot wurde aufgenommen."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot konnte nicht aufgenommen werden."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Details des Fehlerberichts"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Kurzname"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Zusammenfassung in einer Zeile"</string>
diff --git a/packages/Shell/res/values-el/strings.xml b/packages/Shell/res/values-el/strings.xml
index 5049444..ec5f3ac 100644
--- a/packages/Shell/res/values-el/strings.xml
+++ b/packages/Shell/res/values-el/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Δεν ήταν δυνατή η ανάγνωση του αρχείου της αναφοράς σφαλμάτων"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ανώνυμη"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Λεπτομέρειες"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Στιγμιότυπο οθόνης"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Η λήψη του στιγμιότυπου οθόνης ολοκληρώθηκε με επιτυχία."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Δεν ήταν δυνατή η λήψη του στιγμιότυπου οθόνης."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Λεπτομέρειες αναφοράς σφαλμάτων"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Υποκοριστικό"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Σύνοψη μίας σειράς"</string>
diff --git a/packages/Shell/res/values-en-rAU/strings.xml b/packages/Shell/res/values-en-rAU/strings.xml
index ee1ae6f..26a3d38 100644
--- a/packages/Shell/res/values-en-rAU/strings.xml
+++ b/packages/Shell/res/values-en-rAU/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"unnamed"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Details"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot taken successfully."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot could not be taken."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Bug report details"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Short name"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-line summary"</string>
diff --git a/packages/Shell/res/values-en-rGB/strings.xml b/packages/Shell/res/values-en-rGB/strings.xml
index ee1ae6f..26a3d38 100644
--- a/packages/Shell/res/values-en-rGB/strings.xml
+++ b/packages/Shell/res/values-en-rGB/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"unnamed"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Details"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot taken successfully."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot could not be taken."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Bug report details"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Short name"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-line summary"</string>
diff --git a/packages/Shell/res/values-en-rIN/strings.xml b/packages/Shell/res/values-en-rIN/strings.xml
index ee1ae6f..26a3d38 100644
--- a/packages/Shell/res/values-en-rIN/strings.xml
+++ b/packages/Shell/res/values-en-rIN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"unnamed"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Details"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot taken successfully."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot could not be taken."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Bug report details"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Short name"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-line summary"</string>
diff --git a/packages/Shell/res/values-es-rUS/strings.xml b/packages/Shell/res/values-es-rUS/strings.xml
index 23704df..7f70feb 100644
--- a/packages/Shell/res/values-es-rUS/strings.xml
+++ b/packages/Shell/res/values-es-rUS/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"No se pudo leer el archivo de informe de errores"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sin nombre"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalles"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Captura de pantalla"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Se tomó la captura de pantalla correctamente."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"No se pudo tomar la captura de pantalla."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalles del informe de errores"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nombre corto"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Resumen de una línea"</string>
diff --git a/packages/Shell/res/values-es/strings.xml b/packages/Shell/res/values-es/strings.xml
index fbaeab4..df080d2 100644
--- a/packages/Shell/res/values-es/strings.xml
+++ b/packages/Shell/res/values-es/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"No se ha podido leer el archivo del informe de errores"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sin nombre"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalles"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Captura de pantalla"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"La captura de pantalla se ha realizado correctamente."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"No se puede realizar la captura de pantalla."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalles del informe de errores"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nombre corto"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Resumen de 1 línea"</string>
diff --git a/packages/Shell/res/values-et-rEE/strings.xml b/packages/Shell/res/values-et-rEE/strings.xml
index 3b4aead..94b4b89 100644
--- a/packages/Shell/res/values-et-rEE/strings.xml
+++ b/packages/Shell/res/values-et-rEE/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Veaaruande faili ei õnnestunud lugeda"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"nimeta"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Üksikasjad"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Ekraanipilt"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Ekraanipildi tegemine õnnestus."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Ekraanipilti ei saanud teha."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Veaaruande üksikasjad"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Lühike nimi"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-realine kokkuvõte"</string>
diff --git a/packages/Shell/res/values-eu-rES/strings.xml b/packages/Shell/res/values-eu-rES/strings.xml
index 8852f9b..a7a9535 100644
--- a/packages/Shell/res/values-eu-rES/strings.xml
+++ b/packages/Shell/res/values-eu-rES/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Ezin izan da irakurri akatsen txostena"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"izengabea"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Xehetasunak"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Pantaila-argazkia"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Atera da pantaila-argazkia."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Ezin izan da atera pantaila-argazkia"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Akatsen txostenaren xehetasunak"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Izen laburra"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Lerro bakarreko laburpena"</string>
diff --git a/packages/Shell/res/values-fa/strings.xml b/packages/Shell/res/values-fa/strings.xml
index 73e9148..b619f10 100644
--- a/packages/Shell/res/values-fa/strings.xml
+++ b/packages/Shell/res/values-fa/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"فایل گزارش اشکال خوانده نشد"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"بینام"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"جزئیات"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"عکس صفحهنمایش"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"عکس صفحهنمایش با موفقیت گرفته شد."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"نمیتوان عکس صفحهنمایش گرفت."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"جزئیات گزارش اشکال"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"نام مخفف"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"خلاصه یک خطی"</string>
diff --git a/packages/Shell/res/values-fi/strings.xml b/packages/Shell/res/values-fi/strings.xml
index 5376b80..a90ffb5 100644
--- a/packages/Shell/res/values-fi/strings.xml
+++ b/packages/Shell/res/values-fi/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Virheraporttitiedostoa ei voi lukea."</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"nimetön"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Tietoja"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Kuvakaappaus"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Kuvakaappaus tallennettu."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Kuvakaappauksen tallentaminen epäonnistui."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Virheraportin tiedot"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Lyhyt nimi"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Lyhyt tiivistelmä"</string>
diff --git a/packages/Shell/res/values-fr-rCA/strings.xml b/packages/Shell/res/values-fr-rCA/strings.xml
index 7a986b4..52be99d 100644
--- a/packages/Shell/res/values-fr-rCA/strings.xml
+++ b/packages/Shell/res/values-fr-rCA/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossible de lire le fichier du rapport de bogue"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sans nom"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Détails"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Saisie d\'écran"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"La saisie d\'écran a réussi."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Une erreur s\'est produite lors de la saisie d\'écran."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Détails du rapport de bogue"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nom abrégé"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Résumé d\'une ligne"</string>
diff --git a/packages/Shell/res/values-fr/strings.xml b/packages/Shell/res/values-fr/strings.xml
index 8446f6f..e10e28e 100644
--- a/packages/Shell/res/values-fr/strings.xml
+++ b/packages/Shell/res/values-fr/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossible de lire le fichier de rapport de bug."</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sans nom"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Détails"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Captures d\'écran"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"La capture d\'écran a bien été effectuée."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Impossible d\'effectuer une capture d\'écran."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Détails du rapport de bug"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nom court"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Résumé d\'une ligne"</string>
diff --git a/packages/Shell/res/values-gl-rES/strings.xml b/packages/Shell/res/values-gl-rES/strings.xml
index 2a1a93b..20f8cda 100644
--- a/packages/Shell/res/values-gl-rES/strings.xml
+++ b/packages/Shell/res/values-gl-rES/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Non se puido ler o ficheiro de informe de erros"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sen nome"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalles"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Captura de pantalla"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"A captura de pantalla realizouse correctamente."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Non se puido realizar a captura de pantalla."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalles do informe de erros"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nome abreviado"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Resumo de 1 liña"</string>
diff --git a/packages/Shell/res/values-gu-rIN/strings.xml b/packages/Shell/res/values-gu-rIN/strings.xml
index f525b65..967d255 100644
--- a/packages/Shell/res/values-gu-rIN/strings.xml
+++ b/packages/Shell/res/values-gu-rIN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"બગ રીપોર્ટ ફાઇલ વાંચી શકાઇ નથી"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"અનામાંકિત"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"વિગતો"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"સ્ક્રીનશોટ"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"સ્ક્રીનશોટ સફળતાપૂર્વક લેવાયો."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"સ્ક્રીનશોટ લઇ શકાયો નથી."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"બગ રિપોર્ટની વિગતો"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"નાનું નામ"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-રેખાનો સારાંશ"</string>
diff --git a/packages/Shell/res/values-hi/strings.xml b/packages/Shell/res/values-hi/strings.xml
index 26f9757..70e4f38 100644
--- a/packages/Shell/res/values-hi/strings.xml
+++ b/packages/Shell/res/values-hi/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रिपोर्ट फ़ाइल नहीं पढ़ी जा सकी"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"अनामांकित"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"विवरण"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"स्क्रीनशॉट"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"स्क्रीनशॉट सफलतापूर्वक लिया गया."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"स्क्रीनशॉट नहीं लिया जा सका."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"बग रिपोर्ट के विवरण"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"संक्षिप्त नाम"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-पंक्ति में सारांश"</string>
diff --git a/packages/Shell/res/values-hr/strings.xml b/packages/Shell/res/values-hr/strings.xml
index 606f46b..f38a281 100644
--- a/packages/Shell/res/values-hr/strings.xml
+++ b/packages/Shell/res/values-hr/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Izvješće o programskoj pogrešci nije pročitano"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"bez naziva"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Pojedinosti"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Snimka zaslona"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Zaslon je snimljen."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Snimanje zaslona nije uspjelo."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Pojedinosti izvješća o programskoj pogrešci"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Kratko ime"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Sažetak u jednom retku"</string>
diff --git a/packages/Shell/res/values-hu/strings.xml b/packages/Shell/res/values-hu/strings.xml
index 521c87c..544c117 100644
--- a/packages/Shell/res/values-hu/strings.xml
+++ b/packages/Shell/res/values-hu/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"A hibajelentési fájlt nem sikerült beolvasni"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"névtelen"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Részletek"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Képernyőkép"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Sikerült elkészíteni a képernyőképet."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Nem sikerült elkészíteni a képernyőképet."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Hibajelentés részletei"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Rövid név"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Egysoros összefoglalás"</string>
diff --git a/packages/Shell/res/values-hy-rAM/strings.xml b/packages/Shell/res/values-hy-rAM/strings.xml
index 2c0fe23..625994d 100644
--- a/packages/Shell/res/values-hy-rAM/strings.xml
+++ b/packages/Shell/res/values-hy-rAM/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Հնարավոր չէ կարդալ վրիպակների զեկույցի ֆայլը"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"անանուն"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Մանրամասներ"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Էկրանի պատկեր"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Էկրանի պատկերը հաջողությամբ ստացվեց:"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Չհաջողվեց ստանալ էկրանի պատկերը:"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Վրիպակի զեկույցի մանրամասները"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Կրճատ անուն"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Ամփոփագիր մեկ տողով"</string>
diff --git a/packages/Shell/res/values-in/strings.xml b/packages/Shell/res/values-in/strings.xml
index 9286294..747fecd 100644
--- a/packages/Shell/res/values-in/strings.xml
+++ b/packages/Shell/res/values-in/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"File laporan bug tidak dapat dibaca"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"tanpa nama"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detail"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Tangkapan layar"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Tangkapan layar berhasil diambil."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Tangkapan layar tidak dapat diambil."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detail laporan bug"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nama pendek"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Ringkasan 1 baris"</string>
diff --git a/packages/Shell/res/values-is-rIS/strings.xml b/packages/Shell/res/values-is-rIS/strings.xml
index 62f6302..d0d3e60 100644
--- a/packages/Shell/res/values-is-rIS/strings.xml
+++ b/packages/Shell/res/values-is-rIS/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Ekki var hægt að lesa úr villuskýrslunni"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"án heitis"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Nánar"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Skjámynd"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Tókst að taka skjámynd."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Ekki tókst að taka skjámynd."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Upplýsingar um villutilkynningu"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Stutt heiti"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Einnar línu samantekt"</string>
diff --git a/packages/Shell/res/values-it/strings.xml b/packages/Shell/res/values-it/strings.xml
index cee41b6..0511c58 100644
--- a/packages/Shell/res/values-it/strings.xml
+++ b/packages/Shell/res/values-it/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossibile leggere il file relativo alla segnalazione di bug"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"senza nome"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Dettagli"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot acquisito."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Impossibile acquisire lo screenshot."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Dettagli della segnalazione di bug"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nome breve"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Sintesi su una riga"</string>
diff --git a/packages/Shell/res/values-iw/strings.xml b/packages/Shell/res/values-iw/strings.xml
index 906e233..b9bcaf9 100644
--- a/packages/Shell/res/values-iw/strings.xml
+++ b/packages/Shell/res/values-iw/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"לא ניתן היה לקרוא את קובץ הדוח על הבאג"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ללא שם"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"פרטים"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"צילום מסך"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"צילום המסך בוצע בהצלחה."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"לא ניתן היה לצלם מסך."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"פרטי דוח על באג"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"כינוי"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"סיכום בשורה אחת"</string>
diff --git a/packages/Shell/res/values-ja/strings.xml b/packages/Shell/res/values-ja/strings.xml
index 2facb57..05b95eb 100644
--- a/packages/Shell/res/values-ja/strings.xml
+++ b/packages/Shell/res/values-ja/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"バグレポート ファイルを読み取ることができませんでした"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"名前なし"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"詳細"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"スクリーンショット"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"スクリーンショットを撮影しました。"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"スクリーンショットを撮影できませんでした。"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"バグレポートの詳細"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"省略名"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1 行の概要"</string>
diff --git a/packages/Shell/res/values-ka-rGE/strings.xml b/packages/Shell/res/values-ka-rGE/strings.xml
index 7c67cc5..2cfd80a 100644
--- a/packages/Shell/res/values-ka-rGE/strings.xml
+++ b/packages/Shell/res/values-ka-rGE/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ხარვეზების შესახებ ანგარიშის წაკითხვა ვერ მოხერხდა"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"უსახელო"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"დეტალები"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ეკრანის ანაბეჭდი"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ეკრანის ანაბეჭდი გადაღებულია წარმატებით."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ეკრანის ანაბეჭდის გადაღება ვერ მოხერხდა."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ხარვეზის შესახებ ანგარიშის დეტალები"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"მოკლე სახელი"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-ხაზიანი რეზიუმე"</string>
diff --git a/packages/Shell/res/values-kk-rKZ/strings.xml b/packages/Shell/res/values-kk-rKZ/strings.xml
index 73092a6..2829b9b 100644
--- a/packages/Shell/res/values-kk-rKZ/strings.xml
+++ b/packages/Shell/res/values-kk-rKZ/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Қате туралы есеп файлын оқу мүмкін болмады"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"атаусыз"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Мәліметтер"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Скриншот"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Скриншот сәтті түсірілді."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Скриншот түсіру мүмкін болмады."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Қате туралы есептің мәліметтері"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Қысқа аты"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1 жолдық жиынтық мәліметтер"</string>
diff --git a/packages/Shell/res/values-km-rKH/strings.xml b/packages/Shell/res/values-km-rKH/strings.xml
index d4dd08d..3573588 100644
--- a/packages/Shell/res/values-km-rKH/strings.xml
+++ b/packages/Shell/res/values-km-rKH/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"មិនអាចអានឯកសាររបាយកាណ៍កំហុសបានទេ"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"គ្មានឈ្មោះ"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"ព័ត៌មានលម្អិត"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"រូបថតអេក្រង់"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"បានថតរូបថតអេក្រង់ដោយជោគជ័យ"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"មិនអាចថតរូបថតអេក្រង់បានទេ"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ព័ត៌មានលម្អិតពីរបាយការណ៍កំហុស"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"ឈ្មោះខ្លី"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"ការសង្ខេបមួយជួរ"</string>
diff --git a/packages/Shell/res/values-kn-rIN/strings.xml b/packages/Shell/res/values-kn-rIN/strings.xml
index 27e8582..7071264 100644
--- a/packages/Shell/res/values-kn-rIN/strings.xml
+++ b/packages/Shell/res/values-kn-rIN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ಬಗ್ ವರದಿ ಫೈಲ್ ಅನ್ನು ಓದಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ಹೆಸರಿಸದಿರುವುದು"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"ವಿವರಗಳು"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ಸ್ಕ್ರೀನ್ಶಾಟ್"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ಸ್ಕ್ರೀನ್ಶಾಟ್ ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ಸ್ಕ್ರೀನ್ಶಾಟ್ ತೆಗೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ಬಗ್ ವರದಿ ವಿವರಗಳು"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"ಚಿಕ್ಕ ಹೆಸರು"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-ಸಾಲಿನ ಸಾರಾಂಶ"</string>
diff --git a/packages/Shell/res/values-ko/strings.xml b/packages/Shell/res/values-ko/strings.xml
index 7e978e0..4e3c3f4 100644
--- a/packages/Shell/res/values-ko/strings.xml
+++ b/packages/Shell/res/values-ko/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"버그 신고 파일을 읽을 수 없습니다."</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"이름 없음"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"세부정보"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"스크린샷"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"스크린샷을 찍었습니다."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"스크린샷을 찍을 수 없습니다."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"버그 신고 세부정보"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"짧은 이름"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"한 줄 요약"</string>
diff --git a/packages/Shell/res/values-ky-rKG/strings.xml b/packages/Shell/res/values-ky-rKG/strings.xml
index f2a688b..051be38 100644
--- a/packages/Shell/res/values-ky-rKG/strings.xml
+++ b/packages/Shell/res/values-ky-rKG/strings.xml
@@ -27,8 +27,11 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Мүчүлүштүк тууралуу кабарлаган файл окулбай койду"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"аталышы жок"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Чоо-жайы"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Скриншот"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Скриншот ийгиликтүү тартылды."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Скриншот тартылбай койду."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Мүчүлүштүктөр жөнүндө кабардын чоо-жайы"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Кыска аталышы"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1 саптык корутунду"</string>
- <string name="bugreport_info_description" msgid="4117088998733546784">"Кенен сүрөттөмөсү"</string>
+ <string name="bugreport_info_description" msgid="4117088998733546784">"Кененирээк маалымат"</string>
</resources>
diff --git a/packages/Shell/res/values-lo-rLA/strings.xml b/packages/Shell/res/values-lo-rLA/strings.xml
index e3b66df..a04a355 100644
--- a/packages/Shell/res/values-lo-rLA/strings.xml
+++ b/packages/Shell/res/values-lo-rLA/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ບໍ່ສາມາດອ່ານໄຟລ໌ລາຍງານຂໍ້ຜິດພາດໄດ້"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ບໍ່ມີຊື່"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"ລາຍລະອຽດ"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ພາບໜ້າຈໍ"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ຖ່າຍພາບໜ້າຈໍສຳເລັດແລ້ວ."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ບໍ່ສາມາດຖ່າຍພາບໜ້າຈໍໄດ້."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ລາຍລະອຽດການລາຍງານບັນຫາ"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"ຊື່ສັ້ນ"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"ສະຫຼຸບ 1 ແຖວ"</string>
diff --git a/packages/Shell/res/values-lt/strings.xml b/packages/Shell/res/values-lt/strings.xml
index a8f0f2b..8d8d31e 100644
--- a/packages/Shell/res/values-lt/strings.xml
+++ b/packages/Shell/res/values-lt/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Nepavyko sukurti pranešimo apie riktą failo"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"be pavadinimo"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Informacija"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Ekrano kopija"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Ekrano kopija sėkmingai padaryta."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Nepavyko padaryti ekrano kopijos."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Išsami pranešimo apie riktą informacija"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Trumpasis pavadinimas"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1 eilutės suvestinė"</string>
diff --git a/packages/Shell/res/values-lv/strings.xml b/packages/Shell/res/values-lv/strings.xml
index 87380b1..dba1ad3 100644
--- a/packages/Shell/res/values-lv/strings.xml
+++ b/packages/Shell/res/values-lv/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Nevarēja nolasīt kļūdas pārskata failu."</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"bez nosaukuma"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalizēta informācija"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Ekrānuzņēmums"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Ekrānuzņēmums ir veikts sekmīgi."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Nevarēja veikt ekrānuzņēmumu."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Kļūdas pārskata informācija"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Saīsināts nosaukums"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Kopsavilkums 1 rindiņā"</string>
diff --git a/packages/Shell/res/values-mk-rMK/strings.xml b/packages/Shell/res/values-mk-rMK/strings.xml
index 25fdf1f..c88b632 100644
--- a/packages/Shell/res/values-mk-rMK/strings.xml
+++ b/packages/Shell/res/values-mk-rMK/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Датотеката со извештај за грешка не можеше да се прочита"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"неименувани"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Детали"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Слика од екранот"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Сликата од екранот е успешно преземена."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Сликата од екранот не може да се преземе."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Детали на извештајот за грешка"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Кратко име"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Резиме во 1 ред"</string>
diff --git a/packages/Shell/res/values-ml-rIN/strings.xml b/packages/Shell/res/values-ml-rIN/strings.xml
index 8a29f69..73a4fff 100644
--- a/packages/Shell/res/values-ml-rIN/strings.xml
+++ b/packages/Shell/res/values-ml-rIN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ബഗ് റിപ്പോർട്ട് ഫയൽ വായിക്കാനായില്ല"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"പേരില്ലാത്തവർ"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"വിശദാംശങ്ങൾ"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"സ്ക്രീൻഷോട്ട്"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"സ്ക്രീൻഷോട്ട് എടുത്തു."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"സ്ക്രീൻഷോട്ട് എടുക്കാൻ കഴിഞ്ഞില്ല."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ബഗ് റിപ്പോർട്ട് വിശദാംശങ്ങൾ"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"ഹ്രസ്വ നാമം"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"ഒരു വരി സംഗ്രഹം"</string>
diff --git a/packages/Shell/res/values-mn-rMN/strings.xml b/packages/Shell/res/values-mn-rMN/strings.xml
index 2a91276..1f4be4a 100644
--- a/packages/Shell/res/values-mn-rMN/strings.xml
+++ b/packages/Shell/res/values-mn-rMN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Алдааны тайлангийн файлыг уншиж чадахгүй байна"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"нэр байхгүй"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Дэлгэрэнгүй"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Дэлгэцийн зураг"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Дэлгэцийн зургийг амжилттай авлаа."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Дэлгэцийн зураг авах боломжгүй."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Алдааны дэлгэрэнгүй тайлан"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Богино нэр"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-р шугамын хураангуй"</string>
diff --git a/packages/Shell/res/values-mr-rIN/strings.xml b/packages/Shell/res/values-mr-rIN/strings.xml
index 476a887..6b06cf5 100644
--- a/packages/Shell/res/values-mr-rIN/strings.xml
+++ b/packages/Shell/res/values-mr-rIN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"दोष अहवाल फाईल वाचणे शक्य झाले नाही"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"अनामित"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"तपशील"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"स्क्रीनशॉट"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"स्क्रीनशॉट यशस्वीपणे घेतला."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"स्क्रीनशॉट घेणे शक्य झाले नाही."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"दोष अहवाल तपशील"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"लघु नाव"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-ओळीचा सारांश"</string>
diff --git a/packages/Shell/res/values-ms-rMY/strings.xml b/packages/Shell/res/values-ms-rMY/strings.xml
index c7cf3ac..e22f880 100644
--- a/packages/Shell/res/values-ms-rMY/strings.xml
+++ b/packages/Shell/res/values-ms-rMY/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Fail laporan pepijat tidak dapat dibaca"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"tidak bernama"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Butiran"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Tangkapan skrin"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Tangkapan skrin berjaya diambil."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Tangkapan skrin tidak dapat diambil."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Butiran laporan pepijat"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nama pendek"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Ringkasan 1 baris"</string>
diff --git a/packages/Shell/res/values-my-rMM/strings.xml b/packages/Shell/res/values-my-rMM/strings.xml
index e525cc4..727cdc9 100644
--- a/packages/Shell/res/values-my-rMM/strings.xml
+++ b/packages/Shell/res/values-my-rMM/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ချွတ်ယွင်းချက် အစီရင်ခံစာကို ဖတ်၍မရပါ"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"အမည်မဲ့"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"အသေးစိတ်များ"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"မျက်နှာပြင် လျှပ်တစ်ပြက်ပုံ"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"မျက်နှာပြင် လျှပ်တစ်ပြက်ပုံကို အောင်မြင်စွာ ရိုက်ပြီးပြီ။"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"မျက်နှာပြင် လျှပ်တစ်ပြက်ပုံ မရိုက်နိုင်ပါ"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ချွတ်ယွင်းချက်အစီရင်ခံစာ အသေးစိတ်များ"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"အမည်အတိုကောက်"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"လိုင်း ၁ လိုင်းအကျဉ်းချုပ်"</string>
diff --git a/packages/Shell/res/values-nb/strings.xml b/packages/Shell/res/values-nb/strings.xml
index 2f04d32..c7702ef 100644
--- a/packages/Shell/res/values-nb/strings.xml
+++ b/packages/Shell/res/values-nb/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Feilrapportfilen kunne ikke leses"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"uten navn"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detaljer"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Skjermdump"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Skjermdumpen er tatt."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Skjermdumpen kunne ikke tas."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detaljer om feilrapporten"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Kallenavn"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Sammendrag på én linje"</string>
diff --git a/packages/Shell/res/values-ne-rNP/strings.xml b/packages/Shell/res/values-ne-rNP/strings.xml
index 74e472a..732f398 100644
--- a/packages/Shell/res/values-ne-rNP/strings.xml
+++ b/packages/Shell/res/values-ne-rNP/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रिपोर्ट फाइल पढ्न सकिएन"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"(नामविहीन)"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"विवरण"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"स्क्रिनशट"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"स्क्रिनशट सफलतापूर्वक लिइयो।"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"स्क्रिनशट लिन सकिएन।"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"बग रिपोर्टको विवरण"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"छोटो नाम"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"१ लाइनको सारांश"</string>
diff --git a/packages/Shell/res/values-nl/strings.xml b/packages/Shell/res/values-nl/strings.xml
index f5ac17b..0378ca4 100644
--- a/packages/Shell/res/values-nl/strings.xml
+++ b/packages/Shell/res/values-nl/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Bestand met bugrapport kan niet worden gelezen"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"naamloos"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Details"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Screenshot is gemaakt."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Screenshot kan niet worden gemaakt."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Details van bugrapport"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Korte naam"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Samenvatting van één regel"</string>
diff --git a/packages/Shell/res/values-pa-rIN/strings.xml b/packages/Shell/res/values-pa-rIN/strings.xml
index 89d6c60..720bde0 100644
--- a/packages/Shell/res/values-pa-rIN/strings.xml
+++ b/packages/Shell/res/values-pa-rIN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ਬਗ ਰਿਪੋਰਟ ਫ਼ਾਈਲ ਪੜ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ਬਿਨਾਂ-ਨਾਮ"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"ਵੇਰਵੇ"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸਫਲਤਾਪੂਰਵਕ ਲਿਆ ਗਿਆ।"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਨਹੀਂ ਲਿਆ ਜਾ ਸਕਿਆ।"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"ਬੱਗ ਰਿਪੋਰਟ ਵੇਰਵੇ"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"ਛੋਟਾ ਨਾਮ"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-ਲਾਈਨ ਸਾਰਾਂਸ਼"</string>
diff --git a/packages/Shell/res/values-pl/strings.xml b/packages/Shell/res/values-pl/strings.xml
index 9498428..d6715a5 100644
--- a/packages/Shell/res/values-pl/strings.xml
+++ b/packages/Shell/res/values-pl/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Nie można odczytać raportu o błędzie"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"bez nazwy"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Szczegóły"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Zrzut ekranu"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Zrobiono zrzut ekranu."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Nie udało się zrobić zrzutu ekranu."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Szczegóły zgłoszenia błędu"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Krótka nazwa"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Jednowierszowe podsumowanie"</string>
diff --git a/packages/Shell/res/values-pt-rBR/strings.xml b/packages/Shell/res/values-pt-rBR/strings.xml
index d588ef7..fb16dd8 100644
--- a/packages/Shell/res/values-pt-rBR/strings.xml
+++ b/packages/Shell/res/values-pt-rBR/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o arquivo de relatório de bug"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sem nome"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalhes"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Capturas de tela"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Captura de tela concluída."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Não foi possível fazer a captura de tela."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalhes do relatório do bug"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Apelido"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Resumo de uma linha"</string>
diff --git a/packages/Shell/res/values-pt-rPT/strings.xml b/packages/Shell/res/values-pt-rPT/strings.xml
index c0472d0..07d319e 100644
--- a/packages/Shell/res/values-pt-rPT/strings.xml
+++ b/packages/Shell/res/values-pt-rPT/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o ficheiro de relatório de erro"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sem nome"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalhes"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Captura de ecrã"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Captura de ecrã tirada com êxito."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Não foi possível tirar a captura de ecrã."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalhes do relatório de erro"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nome abreviado"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Resumo de 1 linha"</string>
diff --git a/packages/Shell/res/values-pt/strings.xml b/packages/Shell/res/values-pt/strings.xml
index d588ef7..fb16dd8 100644
--- a/packages/Shell/res/values-pt/strings.xml
+++ b/packages/Shell/res/values-pt/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o arquivo de relatório de bug"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"sem nome"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalhes"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Capturas de tela"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Captura de tela concluída."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Não foi possível fazer a captura de tela."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalhes do relatório do bug"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Apelido"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Resumo de uma linha"</string>
diff --git a/packages/Shell/res/values-ro/strings.xml b/packages/Shell/res/values-ro/strings.xml
index 40eac80..064dfaf7 100644
--- a/packages/Shell/res/values-ro/strings.xml
+++ b/packages/Shell/res/values-ro/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Fișierul cu raportul de eroare nu a putut fi citit"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"fără nume"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detalii"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Captură de ecran"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Captura de ecran a fost făcută."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Captura de ecran nu a putut fi făcută."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detalii privind raportul de eroare"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Nume scurt"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Rezumat de un rând"</string>
diff --git a/packages/Shell/res/values-ru/strings.xml b/packages/Shell/res/values-ru/strings.xml
index fd9fdf3..3350740 100644
--- a/packages/Shell/res/values-ru/strings.xml
+++ b/packages/Shell/res/values-ru/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Не удалось открыть отчет об ошибке"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"без названия"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Детали"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Скриншоты"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Скриншот готов"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Не удалось сделать скриншот"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Детали отчета об ошибке"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Краткое название"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Краткое описание ошибки"</string>
diff --git a/packages/Shell/res/values-si-rLK/strings.xml b/packages/Shell/res/values-si-rLK/strings.xml
index 83f04fb..d915109 100644
--- a/packages/Shell/res/values-si-rLK/strings.xml
+++ b/packages/Shell/res/values-si-rLK/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"දෝෂ වාර්තා ගොනුව කියවීමට නොහැකි විය"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"නම් නොකළ"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"විස්තර"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"තිර රුව"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"සාර්ථකව තිර රුවක් ගන්නා ලදී."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"තිර රුවක් ගත නොහැකි විය."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"දෝෂ වාර්තා විස්තර"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"කෙටි නම"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"පේළි-1 සාරාංශය"</string>
diff --git a/packages/Shell/res/values-sk/strings.xml b/packages/Shell/res/values-sk/strings.xml
index 46a6cea..ec9003d 100644
--- a/packages/Shell/res/values-sk/strings.xml
+++ b/packages/Shell/res/values-sk/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Súbor s hlásením chyby sa nepodarilo prečítať"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"bez názvu"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Podrobnosti"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Snímka obrazovky"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Snímka obrazovky bola zaznamenaná."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Snímku obrazovky sa nepodarilo zaznamenať."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Podrobnosti hlásenia chyby"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Skrátený názov"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Jednoriadkové zhrnutie"</string>
diff --git a/packages/Shell/res/values-sl/strings.xml b/packages/Shell/res/values-sl/strings.xml
index fb28bd2..aa66ce9 100644
--- a/packages/Shell/res/values-sl/strings.xml
+++ b/packages/Shell/res/values-sl/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Datoteke s poročilom o napakah ni bilo mogoče prebrati"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"neimenovano"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Podrobnosti"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Posnetek zaslona"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Posnetek zaslon je bil uspešno ustvarjen."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Posnetka zaslon ni bilo mogoče ustvariti."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Podrobnosti o poročilu o napakah"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Ime"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Enovrstični povzetek"</string>
diff --git a/packages/Shell/res/values-sq-rAL/strings.xml b/packages/Shell/res/values-sq-rAL/strings.xml
index e5c42c6..dd13f34 100644
--- a/packages/Shell/res/values-sq-rAL/strings.xml
+++ b/packages/Shell/res/values-sq-rAL/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Skedari i raportimit të defektit në kod nuk mund të lexohej."</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"e paemërtuar"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Detajet"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Pamja e ekranit"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Pamja e ekranit u realizua me sukses."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Pamja e ekranit nuk mund të realizohej."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Detajet e raportimit të gabimeve në kod"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Emri shkurt"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Përmbledhje me 1 rresht"</string>
diff --git a/packages/Shell/res/values-sr/strings.xml b/packages/Shell/res/values-sr/strings.xml
index e46430e..1da7ecb 100644
--- a/packages/Shell/res/values-sr/strings.xml
+++ b/packages/Shell/res/values-sr/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Датотека извештаја о грешци не може да се прочита"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"неименовано"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Детаљи"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Снимци екрана"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Снимање екрана је успело."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Снимање екрана није успело."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Детаљи извештаја о грешци"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Кратки назив"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Резиме у једном реду"</string>
diff --git a/packages/Shell/res/values-sv/strings.xml b/packages/Shell/res/values-sv/strings.xml
index 6b600eb..8afa0a5 100644
--- a/packages/Shell/res/values-sv/strings.xml
+++ b/packages/Shell/res/values-sv/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Det gick inte att läsa felrapporten"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"namnlös"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Information"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Skärmdump"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"En skärmdump har tagits."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Det gick inte att ta skrämdump."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Information för felrapporten"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Kortnamn"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Sammanfattning på en rad"</string>
diff --git a/packages/Shell/res/values-sw/strings.xml b/packages/Shell/res/values-sw/strings.xml
index 2096b36..5b70262 100644
--- a/packages/Shell/res/values-sw/strings.xml
+++ b/packages/Shell/res/values-sw/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Faili ya ripoti ya hitilafu haikusomwa"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"Isiyo na jina"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Maelezo"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Picha ya skrini"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Imepiga picha ya skrini."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Haikupiga picha ya skrini."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Maelezo kuhusu ripoti ya hitilafu"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Jina fupi"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Muhtasari wa mstari mmoja"</string>
diff --git a/packages/Shell/res/values-ta-rIN/strings.xml b/packages/Shell/res/values-ta-rIN/strings.xml
index ae97cfe..91eb718 100644
--- a/packages/Shell/res/values-ta-rIN/strings.xml
+++ b/packages/Shell/res/values-ta-rIN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"பிழை அறிக்கையைப் படிக்க முடியவில்லை"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"பெயரிடப்படாதது"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"விவரங்கள்"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ஸ்கிரீன் ஷாட்"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"ஸ்கிரீன் ஷாட் எடுக்கப்பட்டது."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ஸ்கிரீன் ஷாட்டை எடுக்க முடியவில்லை."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"பிழை அறிக்கை விவரங்கள்"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"சுருக்கப் பெயர்"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"சுருக்கவிவரம் (ஒரு வரியில்)"</string>
diff --git a/packages/Shell/res/values-te-rIN/strings.xml b/packages/Shell/res/values-te-rIN/strings.xml
index 7dd344c..517dd5e 100644
--- a/packages/Shell/res/values-te-rIN/strings.xml
+++ b/packages/Shell/res/values-te-rIN/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"బగ్ నివేదిక ఫైల్ను చదవడం సాధ్యపడలేదు"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"పేరు లేనివి"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"వివరాలు"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"స్క్రీన్షాట్"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"స్క్రీన్షాట్ విజయవంతంగా తీయబడింది."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"స్క్రీన్షాట్ను తీయడం సాధ్యపడలేదు."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"బగ్ నివేదిక వివరాలు"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"చిన్న పేరు"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1-పంక్తి సారాంశం"</string>
diff --git a/packages/Shell/res/values-th/strings.xml b/packages/Shell/res/values-th/strings.xml
index af3fa3e..b734095 100644
--- a/packages/Shell/res/values-th/strings.xml
+++ b/packages/Shell/res/values-th/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ไม่สามารถอ่านไฟล์รายงานข้อบกพร่อง"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ไม่มีชื่อ"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"รายละเอียด"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ภาพหน้าจอ"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"จับภาพหน้าจอสำเร็จแล้ว"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ไม่สามารถจับภาพหน้าจอได้"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"รายละเอียดรายงานข้อบกพร่อง"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"ชื่อย่อ"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"สรุป 1 บรรทัด"</string>
diff --git a/packages/Shell/res/values-tl/strings.xml b/packages/Shell/res/values-tl/strings.xml
index e93e399..bcce1db 100644
--- a/packages/Shell/res/values-tl/strings.xml
+++ b/packages/Shell/res/values-tl/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Hindi mabasa ang file ng pag-uulat ng bug"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"walang pangalan"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Mga Detalye"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Screenshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Nakunan ng screenshot."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Hindi makunan ng screenshot."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Mga detalye ng ulat ng bug"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Maikling pangalan"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Buod na may 1 linya"</string>
diff --git a/packages/Shell/res/values-tr/strings.xml b/packages/Shell/res/values-tr/strings.xml
index 7ea3c77..e1fdf10 100644
--- a/packages/Shell/res/values-tr/strings.xml
+++ b/packages/Shell/res/values-tr/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Hata raporu dosyası okunamadı"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"adsız"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Ayrıntılar"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Ekran görüntüsü"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Ekran görüntüsü başarıyla alındı."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Ekran görüntüsü alınamadı."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Hata raporu ayrıntıları"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Kısa ad"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1 satırlık özet"</string>
diff --git a/packages/Shell/res/values-uk/strings.xml b/packages/Shell/res/values-uk/strings.xml
index 4127deb..dd43c4c 100644
--- a/packages/Shell/res/values-uk/strings.xml
+++ b/packages/Shell/res/values-uk/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Не вдалося прочитати звіт про помилки"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"без назви"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Деталі"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Знімок екрана"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Знімок екрана зроблено."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Не вдалося зробити знімок екрана."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Деталі повідомлення про помилку"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Коротка назва"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Підсумок одним рядком"</string>
diff --git a/packages/Shell/res/values-ur-rPK/strings.xml b/packages/Shell/res/values-ur-rPK/strings.xml
index d8cb00b..b97c8b5 100644
--- a/packages/Shell/res/values-ur-rPK/strings.xml
+++ b/packages/Shell/res/values-ur-rPK/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"بگ رپورٹ فائل پڑھی نہیں جا سکی"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"بغیر نام"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"تفصیلات"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"اسکرین شاٹ"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"اسکرین شاٹ کامیابی سے لے لیا گیا۔"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"سکرین شاٹ نہیں لیا جا سکا۔"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"بگ رپورٹ کی تفصیلات"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"مختصر نام"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"1 لائن کا خلاصہ"</string>
diff --git a/packages/Shell/res/values-uz-rUZ/strings.xml b/packages/Shell/res/values-uz-rUZ/strings.xml
index 8e1f24f..279c876 100644
--- a/packages/Shell/res/values-uz-rUZ/strings.xml
+++ b/packages/Shell/res/values-uz-rUZ/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Xatoliklar hisoboti faylini o‘qib bo‘lmadi"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"nomsiz"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Tafsilotlar"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Skrinshot"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Skrinshot tayyor."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Skrinshot olib bo‘lmadi."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Xatoliklar hisoboti tafsilotlari"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Qisqa nomi"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Xatolikning qisqacha ta’rifi"</string>
diff --git a/packages/Shell/res/values-vi/strings.xml b/packages/Shell/res/values-vi/strings.xml
index 03d40cf..4e1ebc7 100644
--- a/packages/Shell/res/values-vi/strings.xml
+++ b/packages/Shell/res/values-vi/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Không thể đọc tệp báo cáo lỗi"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"chưa được đặt tên"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Chi tiết"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Ảnh chụp màn hình"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Đã chụp ảnh màn hình thành công."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Không thể chụp ảnh màn hình."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Chi tiết báo cáo lỗi"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Tên ngắn"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Tóm tắt 1 dòng"</string>
diff --git a/packages/Shell/res/values-zh-rCN/strings.xml b/packages/Shell/res/values-zh-rCN/strings.xml
index 130a0ad..1340c21 100644
--- a/packages/Shell/res/values-zh-rCN/strings.xml
+++ b/packages/Shell/res/values-zh-rCN/strings.xml
@@ -27,6 +27,12 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"无法读取错误报告文件"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"未命名"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"详细信息"</string>
+ <!-- no translation found for bugreport_screenshot_action (8677781721940614995) -->
+ <skip />
+ <!-- no translation found for bugreport_screenshot_taken (7175343181767429088) -->
+ <skip />
+ <!-- no translation found for bugreport_screenshot_failed (5853049140806834601) -->
+ <skip />
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"错误报告详细信息"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"简称"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"简短摘要(1 行)"</string>
diff --git a/packages/Shell/res/values-zh-rHK/strings.xml b/packages/Shell/res/values-zh-rHK/strings.xml
index b4345f6..e5471be 100644
--- a/packages/Shell/res/values-zh-rHK/strings.xml
+++ b/packages/Shell/res/values-zh-rHK/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"無法讀取錯誤報告檔案"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"未命名"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"詳細資訊"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"螢幕擷取畫面"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"成功拍攝螢幕擷取畫面。"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"無法拍攝螢幕擷取畫面。"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"錯誤報告詳情"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"簡稱"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"簡短摘要 (1 行)"</string>
diff --git a/packages/Shell/res/values-zh-rTW/strings.xml b/packages/Shell/res/values-zh-rTW/strings.xml
index 6b89ad9..2bdf561 100644
--- a/packages/Shell/res/values-zh-rTW/strings.xml
+++ b/packages/Shell/res/values-zh-rTW/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"無法讀取錯誤報告檔案"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"未命名"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"詳細資料"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"螢幕擷取畫面"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"已成功拍攝螢幕擷取畫面。"</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"無法拍攝螢幕擷取畫面。"</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"錯誤報告詳細資料"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"簡稱"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"簡短摘要"</string>
diff --git a/packages/Shell/res/values-zu/strings.xml b/packages/Shell/res/values-zu/strings.xml
index f30c4f6..652105a 100644
--- a/packages/Shell/res/values-zu/strings.xml
+++ b/packages/Shell/res/values-zu/strings.xml
@@ -27,6 +27,9 @@
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Ifayela lombiko wesiphazamso alikwazanga ukufundwa"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"awunikiwe igama"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"Imininingwane"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Isithombe-skrini"</string>
+ <string name="bugreport_screenshot_taken" msgid="7175343181767429088">"Isithombe-skrini sithathwe ngempumelelo."</string>
+ <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"Isithombe-skrini asikwazanga ukuthathwa."</string>
<string name="bugreport_info_dialog_title" msgid="3113549839798564645">"Imininingwane yombiko wesiphazamisi"</string>
<string name="bugreport_info_name" msgid="5089191832271852826">"Igama elifishane"</string>
<string name="bugreport_info_title" msgid="127167853370557175">"Isifinyezo somugqa ongu-1"</string>
diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
index a995ec7..2377684 100644
--- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
+++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
@@ -96,14 +96,14 @@
<LinearLayout
android:id="@+id/date_time_group"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="28dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:orientation="horizontal">
<include layout="@layout/split_clock_view"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:layout_marginStart="16dp"
android:layout_marginTop="2dp"
android:id="@+id/clock" />
@@ -111,28 +111,28 @@
<com.android.systemui.statusbar.policy.DateView
android:id="@+id/date"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:layout_marginStart="6dp"
android:layout_marginTop="8dp"
- android:layout_alignParentTop="true"
android:drawableStart="@drawable/header_dot"
android:drawablePadding="6dp"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
android:textSize="@dimen/qs_time_collapsed_size"
+ android:gravity="top"
systemui:datePattern="@string/abbrev_wday_month_day_no_year_alarm" />
<com.android.systemui.statusbar.AlphaOptimizedButton
android:id="@+id/alarm_status"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
+ android:layout_height="match_parent"
+ android:layout_marginTop="8dp"
android:drawablePadding="6dp"
android:drawableStart="@drawable/ic_access_alarms_small"
android:textColor="#64ffffff"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
- android:minHeight="36dp"
android:paddingStart="6dp"
+ android:gravity="top"
android:background="?android:attr/selectableItemBackground"
android:visibility="gone" />
</LinearLayout>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index f126ba8..f81bf23 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Wys hierdie kennisgewings sonder geluide"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Wys boaan die kennisgewinglys en maak \'n geluid"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Verskyn vlugtig op die skerm en maak \'n geluid"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normale kleure"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Aandkleure"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Gepasmaakte kleure"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Onbekende kleure"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Kleurverandering"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Wys kitsinstellings-teël"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Aktiveer gepasmaakte omskepping"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Pas toe"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Bevestig instellings"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Sommige kleurinstellings kan hierdie toestel onbruikbaar maak. Klik OK om hierdie kleurinstellings te bevestig; andersins sal hierdie instellings ná 10 sekondes teruggestel word."</string>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 6910dd4..d96e790 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"እነዚህን ማሳወቂያዎች በጸጥታ አሳይ"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"በማሳወቂያዎች ዝርዝር ላይኛው ክፍል ላይ አሳይና ድምፅ አሰማ"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"ወደ ገጸ ማያው ይመልከቱና ድምፅ ይቅረጹ"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"መደበኛ ቀለሞች"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"የለሊት ቀለሞች"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"ብጁ ቀለሞች"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"የማይታወቁ ቀለሞች"</string>
+ <string name="color_transform" msgid="6985460408079086090">"የቀለም ማሻሻያ"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"የፈጣን ቅንብሮች ሰቅን አሳይ"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"ብጁ ቅየራን አንቃ"</string>
+ <string name="color_apply" msgid="9212602012641034283">"ተግብር"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"ቅንብሮችን ያረጋግጡ"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"አንዳንድ የቀለም ቅንብሮች ይህን መሣሪያ የማይጠቅም ሊያደርጉት ይችላሉ። እነዚህን የቀለም ቅንብሮች ለማረጋገጥ እሺ የሚለውን ጠቅ ያድርጉ፣ አለበለዚያ እነዚህ ቅንብሮች ከ10 ሰከንዶች በኋላ ዳግም ይጀምራሉ።"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 40e3d6a..b3e494c 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -464,4 +464,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"عرض هذه الإشعارات بدون تنبيه صوتي"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"العرض أعلى قائمة الإشعارات مع تنبيه صوتي"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"الظهور سريعًا على الشاشة مع تنبيه صوتي"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"ألوان عادية"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"ألوان ليلية"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"ألوان مخصصة"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"ألوان غير معروفة"</string>
+ <string name="color_transform" msgid="6985460408079086090">"إشعار الألوان"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"إظهار قسم الإعدادات السريعة"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"تمكين التحويل المخصص"</string>
+ <string name="color_apply" msgid="9212602012641034283">"تطبيق"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"تأكيد الإعدادات"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"يمكن أن تتسبب بعض إعدادات الألوان في تعطيل إمكانية استخدام الجهاز. يمكنك النقر على \"موافق\" لتأكيد إعدادات الألوان هذه، وإلا فستتم إعادة تعيين هذه الإعدادات بعد 10 ثوانٍ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az-rAZ/strings.xml
index a202ab6..4efc5df 100644
--- a/packages/SystemUI/res/values-az-rAZ/strings.xml
+++ b/packages/SystemUI/res/values-az-rAZ/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Bu bildişləri səssiz göstərin"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Bildirişlər siyahısında yuxarıda göstərin və səsli edin"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Ekranda nəzər salın və səsli edin"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normal rənglər"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Gecə rəngləri"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Xüsusi rənglər"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Naməlum rəng"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Rəng modifikasiyası"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Cəld ayarlar örtüyünü göstərin"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Xüsusi dəyişikliyi aktiv edin"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Tətbiq edin"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Ayarları təsdiq edin"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Bəzi renk ayarları bu cihazı yararsız edə bilər. Bu rənk ayarlarını təsdiq etmək üçün OK basın, əks halda bu ayarlar 10 saniyə sonra sıfırlanacaq."</string>
</resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 31608e0..f482e96 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -461,4 +461,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Ova obaveštenja se prikazuju bez zvuka"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Prikazuju se u vrhu liste obaveštenja i emituje se zvuk"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Nakratko se prikazuju na ekranu i emituje se zvuk"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normalne boje"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Noćne boje"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Prilagođene boje"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Nepoznate boje"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Izmena boja"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Prikaži pločicu Brza podešavanja"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Omogući prilagođenu transformaciju"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Primeni"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Potvrdite podešavanja"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Neka podešavanja boja mogu da učine uređaj neupotrebljivim. Kliknite na Potvrdi da biste potvrdili ova podešavanja boja, pošto će se u suprotnom ova podešavanja resetovati nakon 10 sekundi."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index a9d596f..95c4a22 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Тези известия се показват без звук"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Показване най-горе в списъка с известия и издаване на звуков сигнал"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Показване на екрана и издаване на звуков сигнал"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Нормални цветове"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Нощни цветове"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Персонализирани цветове"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Неизвестни цветове"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Промяна на цветовете"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Показване на плочката за бързи настройки"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Активиране на персонализираното трансформиране"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Прилагане"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Потвърждаване на настройките"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Някои настройки за цветовете могат да направят това устройство неизползваемо. За да ги потвърдите, кликнете върху „OK“. В противен случай те ще бъдат нулирани след 10 секунди."</string>
</resources>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml
index d535bdc..38885d5 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn-rBD/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"নিঃশব্দে এই বিজ্ঞপ্তিগুলি দেখানো হয়"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"বিজ্ঞপ্তি তালিকার শীর্ষে দেখানো হয় এবং শব্দ করে"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"স্ক্রীনের উপরে দেখানো হয় এবং শব্দ করে"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"স্বাভাবিক রঙ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"রাতের রঙ"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"কাস্টম রঙ"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"অজানা রঙ"</string>
+ <string name="color_transform" msgid="6985460408079086090">"রঙ সংশোধন"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"দ্রুত সেটিংস টাইল দেখান"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"কাস্টম রূপান্তর সক্ষম করুন"</string>
+ <string name="color_apply" msgid="9212602012641034283">"প্রয়োগ করুন"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"সেটিংস নিশ্চিত করুন"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"কিছু রঙের সেটিংস এই ডিভাইসকে ব্যবহারের অযোগ্য করে দিতে পারে৷ এই রঙের সেটিংস নিশ্চিত করতে ওকে এ ক্লিক করুন, অন্যথায় ১০ সেকেন্ড পরে এই সেটিংস পুনরায় সেট হবে৷"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 2b38473..d27c3ee 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Mostra aquestes notificacions de manera silenciosa"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mostra a la part superior de la llista de notificacions i emet un so"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Mostra a la pantalla i emet un so"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Colors normals"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Colors nocturns"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Colors personalitzats"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Colors desconeguts"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modificació del color"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostra el mosaic de Configuració ràpida"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Activa la transformació personalitzada"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplica"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirma la configuració"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Algunes opcions de configuració de color poden deixar el dispositiu inservible. Fes clic a D\'acord per confirmar la configuració de color; en cas contrari, la configuració es restablirà al cap de 10 segons."</string>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 4bf5730..4f26dc1 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -462,4 +462,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Tato oznámení zobrazovat bez zvukového upozornění"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Tato oznámení zobrazovat na začátku seznamu a upozornit na ně zvukem"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Tato oznámení zobrazovat přímo na obrazovce a upozornit na ně zvukem"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normální barvy"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Noční barvy"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Vlastní barvy"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Neznámé barvy"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Změna barev"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Zobrazit dlaždici Rychlé nastavení"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Umožnit převod na vlastní barvy"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Použít"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Ověření nastavení"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Některá nastavení barev mohou způsobit, že zařízení nebude použitelné. Kliknutím na OK toto nastavení barev potvrdíte, v opačném případě se nastavení po 10 sekundách resetuje."</string>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 2b0998f2..3f868a8 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Vis disse underretninger lydløst"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Vis øverst på listen over underretninger, og giv lyd"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Vis på skærmen, og giv lyd"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Almindelige farver"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nattefarver"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Tilpassede farver"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Ukendte farver"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Farveændring"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Vis feltet Hurtige indstillinger"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Aktivér tilpasset farveændring"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Anvend"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Bekræft indstillingerne"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Nogle farveindstillinger kan medføre, at du ikke kan bruge enheden. Klik på OK for at bekræfte disse farveindstillinger. Ellers nulstilles disse indstillinger efter ti sekunder."</string>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 1bce9fe..4c87758 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Diese Benachrichtigungen ohne Ton anzeigen"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mit Ton ganz oben in der Benachrichtigungsliste anzeigen"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Mit Ton auf dem Display einblenden"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Standardfarben"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nachtfarben"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Benutzerdefinierte Farben"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Unbekannte Farben"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Farben ändern"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Kachel \"Schnelleinstellungen\" anzeigen"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Benutzerdefinierte Anpassung aktivieren"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Übernehmen"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Einstellungen bestätigen"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Einige Farbeinstellungen können dazu führen, dass das Gerät nicht mehr genutzt werden kann. Klicke auf \"OK\", um diese Farbeinstellungen zu bestätigen. Anderenfalls werden diese Einstellungen in 10 Sekunden zurückgesetzt."</string>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index eebb78c..21e1eee 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Να εμφανίζονται αυτές οι ειδοποιήσεις χωρίς ήχο"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Να εμφανίζονται στην κορυφή της λίστας ειδοποιήσεων με ήχο"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Να προβάλλονται στην οθόνη και να συνοδεύονται από κάποιον ήχο"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Κανονικά χρώματα"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Νυχτερινά χρώματα"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Προσαρμοσμένα χρώματα"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Άγνωστα χρώματα"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Τροποποίηση χρωμάτων"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Εμφάνιση πλακιδίου Γρήγορων ρυθμίσεων"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Ενεργοποίηση προσαρμοσμένου μετασχηματισμού"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Εφαρμογή"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Επιβεβαίωση ρυθμίσεων"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Ορισμένες ρυθμίσεις χρωμάτων μπορεί να μην επιτρέπουν τη χρήση αυτής της συσκευής. Κάντε κλικ στην επιλογή OK για να επιβεβαιώσετε αυτές τις ρυθμίσεις χρωμάτων, διαφορετικά θα γίνει επαναφορά αυτών των ρυθμίσεων μετά από 10 δευτερόλεπτα."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 79e95fa..fa8b6c33 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Silently show these notifications"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Show at the top of the notifications list and make sound"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Peek onto the screen and make sound"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normal colours"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Night colours"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Customised colours"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Unknown colours"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Colour modification"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Show Quick Settings tile"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Enable customised transform"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Apply"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirm Settings"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Some colour settings can make this device unusable. Click OK to confirm these colour settings, otherwise these settings will reset after 10 seconds."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 79e95fa..fa8b6c33 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Silently show these notifications"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Show at the top of the notifications list and make sound"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Peek onto the screen and make sound"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normal colours"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Night colours"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Customised colours"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Unknown colours"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Colour modification"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Show Quick Settings tile"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Enable customised transform"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Apply"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirm Settings"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Some colour settings can make this device unusable. Click OK to confirm these colour settings, otherwise these settings will reset after 10 seconds."</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 79e95fa..fa8b6c33 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Silently show these notifications"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Show at the top of the notifications list and make sound"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Peek onto the screen and make sound"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normal colours"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Night colours"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Customised colours"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Unknown colours"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Colour modification"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Show Quick Settings tile"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Enable customised transform"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Apply"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirm Settings"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Some colour settings can make this device unusable. Click OK to confirm these colour settings, otherwise these settings will reset after 10 seconds."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index df467fb..54850f0 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Mostrar estas notificaciones de manera silenciosa"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mostrar en la parte superior de la lista de notificaciones y emitir sonido"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Mostrar en la pantalla y emitir sonido"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Colores normales"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Colores nocturnos"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Colores personalizados"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Colores desconocidos"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modificación del color"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar el mosaico de Configuración rápida"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Habilitar la transformación personalizada"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirmar la configuración"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Algunas opciones de configuración de color pueden provocar que el dispositivo quede inutilizable. Haz clic en Aceptar para confirmar estos parámetros de color. De lo contrario, la configuración se restablecerá en diez segundos."</string>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index a35809b5..41d83dc 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Mostrar estas notificaciones de forma silenciosa"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mostrar en la parte superior de la lista de notificaciones y emitir sonido"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Mostrar en la pantalla y emitir sonido"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Colores normales"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Colores nocturnos"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Colores personalizados"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Colores desconocidos"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modificación de colores"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar mosaico de Ajustes rápidos"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Habilitar transformación personalizada"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirmar configuración"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Algunas opciones de configuración de color pueden hacer que el dispositivo no se pueda utilizar. Haz clic en Aceptar para confirmar esta configuración. Si no lo haces, se restablecerá esta configuración cuando transcurran 10 segundos."</string>
</resources>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index a08d06b..9bb7898 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Kuva need märguanded vaikselt"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Kuva märguannete loendi ülaosas koos heliga"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Kuva ekraani servas koos heliga"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Tavalised värvid"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Öised värvid"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Kohandatud värvid"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Värvid on teadmata"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Värvi muutmine"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Kuva paan Kiirseaded"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Luba kohandatud teisendamine"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Rakenda"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Seadete kinnitamine"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Mõni värviseade ei saa seadet võib-olla kasutada. Nende värviseadete kinnitamiseks klõpsake OK, muidu lähtestatakse need seaded 10 sekundi pärast."</string>
</resources>
diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml
index d9c7489..a122bce 100644
--- a/packages/SystemUI/res/values-eu-rES/strings.xml
+++ b/packages/SystemUI/res/values-eu-rES/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Erakutsi jakinarazpen hauek, baina soinurik egin gabe"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Erakutsi jakinarazpen hauek zerrendaren goialdean eta egin soinua"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Agerrarazi jakinarazpen hauek pantailan eta egin soinua"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Kolore normalak"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Gaueko koloreak"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Kolore pertsonalizatuak"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Kolore ezezagunak"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Kolore-aldaketa"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Erakutsi ezarpen bizkorren lauza"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Gaitu itxuraldaketa pertsonalizatua"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplikatu"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Berretsi ezarpenak"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Baliteke gailua kolore-ezarpen batzuekin ezin erabili izatea. Kolore-ezarpenak berresteko, sakatu Ados. Bestela, hamar segundoren buruan berrezarriko dira ezarpenak."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 170acdd..f45c01b 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"این اعلانها بیصدا نشان داده شوند"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"در بالای فهرست اعلانها و به همراه صدا نشان داده شود"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"در جلوی صفحه به همراه صدا نشان داده شود"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"رنگهای عادی"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"رنگهای شب"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"رنگهای سفارشی"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"رنگهای نامشخص"</string>
+ <string name="color_transform" msgid="6985460408079086090">"اصلاح رنگ"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"نمایش کاشی تنظیمات سریع"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"فعال کردن تبدیل سفارشی"</string>
+ <string name="color_apply" msgid="9212602012641034283">"اعمال کردن"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"تأیید تنظیمات"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"بعضی از تنظیمات رنگ میتوانند این دستگاه را غیرقابل استفاده کنند. برای تأیید این تنظیمات رنگ روی «تأیید» کلیک کنید، در غیر این صورت این تغییرات بعد از ۱۰ ثانیه بازنشانی میشوند."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index a47253f..af1a1e5 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Näytä nämä ilmoitukset huomaamattomasti"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Näytä ilmoitukset luettelon kärjessä ja toista merkkiääni"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Näytä ilmoitus näytöllä ja toista äänimerkki"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Tavalliset värit"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Yövärit"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Muokatut värit"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Tuntemattomat värit"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Muokatut värit"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Näytä pika-asetusruutu"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Ota muokatut värit käyttöön"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Käytä"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Vahvista asetukset"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Jotkin väriasetukset voivat häiritä laitteen käyttöä. Vahvista uudet väriasetukset valitsemalla OK. Muussa tapauksessa aiemmat asetukset palautetaan 10 sekunnin kuluttua."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 705f335..20a8bdc 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Afficher ces notifications en mode silencieux"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Afficher en haut de la liste des notifications et émettre un son"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Afficher sur l\'écran et émettre un son"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Couleurs normales"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Couleurs nocturnes"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Couleurs personnalisées"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Couleurs inconnues"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modifier la couleur"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Afficher la tuile de configuration rapide"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Activer la transformation personnalisée"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Appliquer"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirmer les paramètres"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Certains paramètres de couleurs peuvent rendre cet appareil inutilisable. Cliquez sur « OK » pour valider ces paramètres, sinon ils seront réinitialisés après 10 secondes."</string>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 3cfddf5f..8e76ee8 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Afficher ces notifications en mode silencieux"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Afficher en haut de la liste des notifications et émettre un son"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Afficher sur l\'écran et émettre un son"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Couleurs normales"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Couleurs nocturnes"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Couleurs personnalisées"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Couleurs inconnues"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modification des couleurs"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Afficher la tuile de configuration rapide"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Activer la transformation personnalisée"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Appliquer"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Vérifier les paramètres"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Certains paramètres de couleurs peuvent rendre cet appareil inutilisable. Cliquez sur \"OK\" pour valider ces paramètres, sans quoi ils seront réinitialisés après 10 secondes."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml
index 55b6565..3349b83 100644
--- a/packages/SystemUI/res/values-gl-rES/strings.xml
+++ b/packages/SystemUI/res/values-gl-rES/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Mostrar estas notificacións de forma silenciosa"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mostrar na parte superior da lista de notificacións e emitir son"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Mostrar na pantalla e emitir son"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Cores normais"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Cores nocturnas"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Cores personalizadas"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Cores descoñecidas"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modificación de cor"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar mosaico de configuración rápida"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Activar transformación personalizada"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirmar configuración"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Algunhas opcións de configuración de cor poden facer que este dispositivo sexa inutilizable. Fai clic en Aceptar para confirmar esta configuración de cor. En caso contrario, esta configuración restablecerase tras 10 segundos."</string>
</resources>
diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu-rIN/strings.xml
index 3e9f2c2..69174ef 100644
--- a/packages/SystemUI/res/values-gu-rIN/strings.xml
+++ b/packages/SystemUI/res/values-gu-rIN/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"આ સૂચનાઓ ચુપચાપ બતાવો"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"સૂચનાઓની સૂચિની ટોચ પર બતાવો અને અવાજ કરો"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"સ્ક્રીન પર ત્વરિત દ્રષ્ટિ કરો અને અવાજ કરો"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"સામાન્ય રંગો"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"રાત્રિ રંગો"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"કસ્ટમ રંગો"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"અજાણ્યા રંગો"</string>
+ <string name="color_transform" msgid="6985460408079086090">"રંગ સંશોધન"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"ઝડપી સેટિંગ્સ ટાઇલ બતાવો"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"કસ્ટમ રૂપાંતરણને સક્ષમ કરો"</string>
+ <string name="color_apply" msgid="9212602012641034283">"લાગુ કરો"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"સેટિંગ્સની પુષ્ટિ કરો"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"કેટલીક રંગ સેટિંગ્સ આ ઉપકરણને બિનઉપયોગી બનાવી શકે છે. આ રંગ સેટિંગ્સની પુષ્ટિ કરવા માટે ઑકે ક્લિક કરો, અન્યથા 10 સેકંડ પછી આ સેટિંગ્સ ફરીથી સેટ થશે."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index bf0a305..1ab7f71 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ये नोटिफिकेशन मौन रूप से दिखाएं"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"नोटिफिकेशन सूची में सबसे ऊपर दिखाएं और ध्वनि चलाएं"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"स्क्रीन पर एक झलक दिखाएं और ध्वनि चलाएं"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"सामान्य रंग"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"रात्रि के रंग"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"कस्टम रंग"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"अज्ञात रंग"</string>
+ <string name="color_transform" msgid="6985460408079086090">"रंग परिवर्तन"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"त्वरित-सेटिंग टाइल दिखाएं"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"कस्टम रूपांतरण सक्षम करें"</string>
+ <string name="color_apply" msgid="9212602012641034283">"लागू करें"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"सेेटिंग की पुष्टि करें"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"कुछ रंग सेटिंग इस डिवाइस को अनुपयोगी बना सकती हैं. इन रंग सेटिंग की पुष्टि करने के लिए ठीक क्लिक करें, अन्यथा 10 सेकंड के बाद ये सेटिंग रीसेट हो जाएंगी."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index cb9e6c6..a67258c 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -461,4 +461,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Prikaži te obavijesti tiho"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Prikaži na vrhu popisa obavijesti i emitiraj zvučni signal"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Prikaži na zaslonu i emitiraj zvučni signal"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Uobičajene boje"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Noćne boje"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Prilagođene boje"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Nepoznate boje"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Izmjena boja"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Prikaži pločicu s brzim postavkama"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Omogući prilagođenu preobrazbu"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Primijeni"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Potvrdite postavke"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Neke postavke boja mogu učiniti uređaj neupotrebljivim. Kliknite U redu da biste potvrdili postavke boja jer će se u suprotnom poništiti za 10 sekundi."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 9defa31..8589e95 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -451,13 +451,23 @@
<string name="apply_to_topic" msgid="3641403489318659666">"A következő értesítések esetén: <xliff:g id="TOPIC_NAME">%1$s</xliff:g>"</string>
<string name="apply_to_app" msgid="363016783939815960">"Az alkalmazás minden értesítése esetén"</string>
<string name="blocked_importance" msgid="5198578988978234161">"Letiltva"</string>
- <string name="low_importance" msgid="4109929986107147930">"Alacsony fontossági szint"</string>
- <string name="default_importance" msgid="8192107689995742653">"Normál fontossági szint"</string>
- <string name="high_importance" msgid="1527066195614050263">"Magas fontossági szint"</string>
- <string name="max_importance" msgid="5089005872719563894">"Sürgős értesítés"</string>
+ <string name="low_importance" msgid="4109929986107147930">"Kevésbé fontos"</string>
+ <string name="default_importance" msgid="8192107689995742653">"Normál"</string>
+ <string name="high_importance" msgid="1527066195614050263">"Fontos"</string>
+ <string name="max_importance" msgid="5089005872719563894">"Sürgős"</string>
<string name="notification_importance_blocked" msgid="2397192642657872872">"Soha nem jelennek meg ezek az értesítések"</string>
<string name="notification_importance_low" msgid="4383563267370859725">"Hangjelzés nélkül jelennek meg az értesítési lista alján"</string>
<string name="notification_importance_default" msgid="4926529615920610817">"Hang nélkül jelennek meg ezek az értesítések"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Az értesítési lista tetején jelennek meg hangjelzéssel"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Az értesítések felugranak a képernyőn hangjelzéssel"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Hagyományos színek"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Esti színek"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Egyéni színek"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Ismeretlen színek"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Színmódosítás"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Gyorsbeállítások mozaikjának megjelenítése"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Egyéni átalakítás engedélyezése"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Alkalmaz"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Beállítások megerősítése"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Bizonyos színbeállítások használhatatlanná tehetik ezt az eszközt. A színbeállítás megerősítéséhez kattintson az OK lehetőségre, máskülönben a rendszer 10 másodpercen belül visszaáll a korábbira."</string>
</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index f8b7c21..1b8de04 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Ցուցադրել այս ծանուցումներն առանց ձայնային ազդանշանի"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Ցուցադրել ծանուցումների ցանկի վերևում և հնչեցնել ձայնային ազդանշան"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Ցուցադրել էկրանին և հնչեցնել ձայնային ազդանշան"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Սովորական գույներ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Գիշերային գույներ"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Հատուկ գույներ"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Անհայտ գույներ"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Գույնի փոփոխում"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Ցույց տալ Արագ կարգավորումների սալիկը"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Միացնել հատուկ գունային անցումը"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Կիրառել"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Հաստատել կարգավորումները"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Գունային որոշ կարգավորումները կարող են այս սարքը օգտագործման համար ոչ պիտանի դարձնել: Սեղմեք Լավ կոճակը՝ գունային այս կարգավորումները հաստատելու համար: Հակառակ դեպքում այս կարգավորումները կվերակայվեն 10 վայրկյան հետո:"</string>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index f4df685..9075484 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -448,16 +448,26 @@
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Aktifkan Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Untuk menghubungkan keyboard dengan tablet, terlebih dahulu aktifkan Bluetooth."</string>
<string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"Aktifkan"</string>
- <string name="apply_to_topic" msgid="3641403489318659666">"Terapkan ke <xliff:g id="TOPIC_NAME">%1$s</xliff:g> notifikasi"</string>
+ <string name="apply_to_topic" msgid="3641403489318659666">"Terapkan ke notifikasi <xliff:g id="TOPIC_NAME">%1$s</xliff:g>"</string>
<string name="apply_to_app" msgid="363016783939815960">"Terapkan untuk semua notifikasi dari aplikasi ini"</string>
- <string name="blocked_importance" msgid="5198578988978234161">"Dicekal"</string>
- <string name="low_importance" msgid="4109929986107147930">"Kepentingan rendah"</string>
- <string name="default_importance" msgid="8192107689995742653">"Kepentingan normal"</string>
- <string name="high_importance" msgid="1527066195614050263">"Kepentingan tinggi"</string>
- <string name="max_importance" msgid="5089005872719563894">"Kepentingan darurat"</string>
- <string name="notification_importance_blocked" msgid="2397192642657872872">"Jangan pernah menunjukkan notifikasi ini"</string>
+ <string name="blocked_importance" msgid="5198578988978234161">"Diblokir"</string>
+ <string name="low_importance" msgid="4109929986107147930">"Tingkat kepentingan: rendah"</string>
+ <string name="default_importance" msgid="8192107689995742653">"Tingkat kepentingan: normal"</string>
+ <string name="high_importance" msgid="1527066195614050263">"Tingkat kepentingan: tinggi"</string>
+ <string name="max_importance" msgid="5089005872719563894">"Tingkat kepentingan: darurat"</string>
+ <string name="notification_importance_blocked" msgid="2397192642657872872">"Jangan pernah tunjukkan notifikasi ini"</string>
<string name="notification_importance_low" msgid="4383563267370859725">"Tunjukkan di bawah daftar notifikasi tanpa suara"</string>
<string name="notification_importance_default" msgid="4926529615920610817">"Tunjukkan notifikasi ini tanpa suara"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Tunjukkan di bagian atas daftar notifikasi dan bunyikan suara"</string>
- <string name="notification_importance_max" msgid="5236987171904756134">"Muncul di layar dan membunyikan suara"</string>
+ <string name="notification_importance_max" msgid="5236987171904756134">"Muncul di layar dan bunyikan suara"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Warna normal"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Warna malam"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Warna khusus"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Warna tidak diketahui"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Perubahan warna"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Tampilkan ubin Setelan Cepat"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Aktifkan transformasi khusus"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Terapkan"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Konfirmasi setelan"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Beberapa setelan warna dapat membuat perangkat ini tidak dapat digunakan. Klik OKE untuk mengonfirmasi setelan warna ini. Jika tidak, setelan ini akan disetel ulang setelah 10 detik."</string>
</resources>
diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml
index bb8a901..556018c 100644
--- a/packages/SystemUI/res/values-is-rIS/strings.xml
+++ b/packages/SystemUI/res/values-is-rIS/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Sýna þessar tilkynningar án hljóðs"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Sýna efst á tilkynningalistanum og spila hljóð"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Birta á skjánum og spila hljóð"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Venjulegir litir"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Næturlitir"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Sérsniðnir litir"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Óþekktir litir"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Litabreytingar"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Sýna flísar í flýtistillingum"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Kveikja á sérsniðinni umbreytingu"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Nota"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Staðfesta stillingar"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Sumar litastillingar kunna að bitna á notagildi tækisins. Veldu „Í lagi“ til að staðfesta þessar litastillingar, að öðrum kosti verða litirnir endurstilltir eftir tíu sekúndur."</string>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 9006d62..b49c387 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Mostra silenziosamente queste notifiche"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mostra nella parte superiore dell\'elenco delle notifiche e riproduci suono"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Apri sullo schermo e riproduci suono"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Colori normali"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Colori per la notte"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Colori personalizzati"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Colori sconosciuti"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modifica del colore"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostra il riquadro Impostazioni rapide"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Attiva la trasformazione personalizzata"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Applica"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Conferma le impostazioni"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Alcune impostazioni relative ai colori potrebbero rendere inutilizzabile il dispositivo. Fai clic su OK per confermare queste impostazioni; in caso contrario, le impostazioni verranno reimpostate dopo 10 secondi."</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 8394d1c..e6ac5af 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -462,4 +462,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"הצג את ההודעות האלה בלי להשמיע צליל"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"הצג בחלק העליון של רשימת ההודעות והשמע צליל"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"הצג לרגע על המסך והשמע צליל"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"צבעים רגילים"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"צבעי לילה"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"צבעים מותאמים אישית"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"צבעים לא ידועים"</string>
+ <string name="color_transform" msgid="6985460408079086090">"שינוי צבע"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"הצגת אריח של הגדרות מהירות"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"הפעל טרנספורמציה מותאמת אישית"</string>
+ <string name="color_apply" msgid="9212602012641034283">"החל"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"אישור הגדרות"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"הגדרות צבע מסוימות עלולות להפוך את המכשיר הזה לבלתי שמיש. לחץ על אישור כדי לאשר את הגדרות הצבע האלה, אחרת הגדרות אלה יתאפסו לאחר 10 שניות."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 6f9a00d..e7e3a86 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -456,8 +456,18 @@
<string name="high_importance" msgid="1527066195614050263">"重要度: 高"</string>
<string name="max_importance" msgid="5089005872719563894">"重要度: 緊急"</string>
<string name="notification_importance_blocked" msgid="2397192642657872872">"今後はこの通知を表示しない"</string>
- <string name="notification_importance_low" msgid="4383563267370859725">"通知リストの下にマナーモードで表示する"</string>
+ <string name="notification_importance_low" msgid="4383563267370859725">"通知リストの末尾にマナーモードで表示する"</string>
<string name="notification_importance_default" msgid="4926529615920610817">"この通知をマナーモードで表示する"</string>
- <string name="notification_importance_high" msgid="3222680136612408223">"通知リストの上に表示し、音声でも知らせる"</string>
- <string name="notification_importance_max" msgid="5236987171904756134">"画面にプレビューを表示し、音声でも知らせる"</string>
+ <string name="notification_importance_high" msgid="3222680136612408223">"通知リストの先頭に表示し、音声でも知らせる"</string>
+ <string name="notification_importance_max" msgid="5236987171904756134">"画面に数秒間表示し、音声でも知らせる"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"標準の色"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"夜間の色"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"カスタムの色"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"不明な色"</string>
+ <string name="color_transform" msgid="6985460408079086090">"色の変更"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"[クイック設定] タイルの表示"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"カスタム変換の有効化"</string>
+ <string name="color_apply" msgid="9212602012641034283">"適用"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"設定の確認"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"一部の色設定を適用すると、この端末を使用できなくなることがあります。この色設定を確認するには、[OK] をクリックしてください。確認しない場合、10 秒後に設定はリセットされます。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index d349755..79e0f4f 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ამ შეტყობინებების უხმოდ ჩვენება"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"ამ შეტყობინებების სიის თავში, ხმოვან სიგნალთან ერთად ჩვენება"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"ამ შეტყობინებების პირდაპირ ეკრანზე, ხმოვან სიგნალთან ერთად ჩვენება"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"ჩვეულებრივი ფერები"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"ღამის ფერები"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"მორგებული ფერები"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"უცნობი ფერები"</string>
+ <string name="color_transform" msgid="6985460408079086090">"ფერების შეცვლა"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"სწრაფი პარამეტრების მოზაიკის ჩვენება"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"მორგებული გარდაქმნის ჩართვა"</string>
+ <string name="color_apply" msgid="9212602012641034283">"გამოყენება"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"პარამეტრების დადასტურება"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"ფერთა ზოგიერთ პარამეტრს ამ მოწყობილობასთან მუშაობის გართულება შეუძლია. ფერთა ამჟამინდელი პარამეტრების დასადასტურებლად, დააწკაპუნეთ „კარგი“-ზე. წინააღმდეგ შემთხვევაში, პარამეტრები 10 წამის შემდეგ ჩამოიყრება."</string>
</resources>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml
index b692f78..5187b54 100644
--- a/packages/SystemUI/res/values-kk-rKZ/strings.xml
+++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Осы хабарландыруларды үнсіз көрсету"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Хабарландыруларды тізімінің жоғарғы жағында көрсету және дыбыс шығару"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Экранға бекіту және дыбыс шығару"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Қалыпты түстер"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Түнгі түстер"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Арнаулы түстер"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Белгісіз түстер"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Түсті өзгерту"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Жылдам параметрлер торын көрсету"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Арнаулы түрлендіруді қосу"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Қолдану"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Параметрлерді растау"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Кейбір түс параметрлері бұл құрылғыны пайдалану мүмкін емес етуі мүмкін. Бұл түс параметрлерін растау үшін OK түймесін басыңыз, әйтпесе параметрлер 10 секундтан кейін ысырылады."</string>
</resources>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 637cddd..5665a90 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"បង្ហាញការជូនដំណឹងទាំងនេះស្ងាត់ៗ"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"បង្ហាញនៅផ្នែកខាងលើបញ្ជីនៃការជូនដំណឹង និងបន្លឺសំឡេង"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"លោតបង្ហាញនៅលើអេក្រង់ និងបន្លឺសំឡេង"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"ពណ៌ធម្មតា"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"ពណ៌ពេលយប់"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"ពណ៌ផ្ទាល់ខ្លួន"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"ពណ៌មិនស្គាល់"</string>
+ <string name="color_transform" msgid="6985460408079086090">"ការកែសម្រួលពណ៌"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"បង្ហាញផ្ទាំងប្រអប់ការកំណត់រហ័ស"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"បើកដំណើរការផ្លាស់ប្តូរផ្ទាល់ខ្លួន"</string>
+ <string name="color_apply" msgid="9212602012641034283">"អនុវត្ត"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"បញ្ជាក់ការកំណត់"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"ការកំណត់ពណ៌មួយចំនួនអាចធ្វើឲ្យឧបករណ៍នេះមិនអាចប្រើបាន។ សូមចុច យល់ព្រម ដើម្បីបញ្ជាក់ការកំណត់ពណ៌ទាំងនេះ បើមិនដូច្នេះទេការកំណត់ទាំងនេះនឹងកំណត់ឡើងវិញក្នុងរយៈពេល 10 វិនាទីបន្ទាប់។"</string>
</resources>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml
index d40f160..0326a67 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn-rIN/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಸ್ಥಬ್ಧವಾಗಿ ತೋರಿಸು"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"ಅಧಿಸೂಚನೆಗಳ ಪಟ್ಟಿಯ ಮೇಲ್ಭಾಗದಲ್ಲಿ ತೋರಿಸು ಮತ್ತು ಧ್ವನಿ ಮಾಡು"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"ಪರದೆಯನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ಧ್ವನಿ ಮಾಡು"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"ಸಾಮಾನ್ಯ ಬಣ್ಣಗಳು"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"ರಾತ್ರಿ ಬಣ್ಣಗಳು"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"ಕಸ್ಟಮ್ ಬಣ್ಣಗಳು"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"ಅಪರಿಚಿತ ಬಣ್ಣಗಳು"</string>
+ <string name="color_transform" msgid="6985460408079086090">"ಬಣ್ಣ ಬದಲಾವಣೆ"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳ ಟೈಲ್ ತೋರಿಸು"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"ಕಸ್ಟಮ್ ಪರಿವರ್ತನೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <string name="color_apply" msgid="9212602012641034283">"ಅನ್ವಯಿಸು"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಖಚಿತಪಡಿಸಿ"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"ಕೆಲವು ಬಣ್ಣ ಸೆಟ್ಟಿಂಗ್ಗಳು ಈ ಸಾಧನವನ್ನು ಅನುಪಯುಕ್ತಗೊಳಿಸಬಹುದು. ಈ ಬಣ್ಣ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಖಚಿತಪಡಿಸಲು ಸರಿ ಕ್ಲಿಕ್ ಮಾಡಿ, ಇಲ್ಲವಾದರೆ ಈ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು 10 ಸೆಕೆಂಡುಗಳ ನಂತರ ಮರುಹೊಂದಿಸಿ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index ec34677..b910c04 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"무음으로 알림 표시"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"알림 목록 상단에 표시하고 소리로 알림"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"화면에 표시하고 소리로 알림"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"일반 색상"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"야간 색상"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"맞춤 색상"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"알 수 없는 색상"</string>
+ <string name="color_transform" msgid="6985460408079086090">"색상 수정"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"빠른 설정 타일 표시"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"맞춤 변환 사용"</string>
+ <string name="color_apply" msgid="9212602012641034283">"적용"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"설정 확인"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"일부 색상 설정으로 인해 이 기기를 사용하지 못할 수 있습니다. 확인을 클릭하여 이러한 색상 설정을 확인하지 않으면 10초 후에 설정이 초기화됩니다."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml
index c0e6307..3026095 100644
--- a/packages/SystemUI/res/values-ky-rKG/strings.xml
+++ b/packages/SystemUI/res/values-ky-rKG/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Бул эскертмелер үнсүз көрсөтүлсүн"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Эскертмелер тизмесинин эң жогорусунда үн чыгарып көрсөтүлсүн"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Үн менен коштолуп, экранга чыгарылсын"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Кадимки түстөр"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Түнкү түстөр"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Ыңгайлаштырылган түстөр"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Белгисиз түстөр"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Түсүн өзгөртүү"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Ыкчам жөндөөлөр тайлын көрсөтүү"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Ыңгайлаштырылган өзгөртүүнү иштетүү"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Колдонуу"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Жөндөөлөрдү ырастоо"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Айрым түс жөндөөлөрү бул түзмөктү колдонулгус кылып коюшу мүмкүн. Бул түс жөндөөлөрүн ырастоо үчүн OK баскычын чыкылдатыңыз, болбосо бул жөндөөлөр 10 секунддан кийин баштапкы абалына келтирилет."</string>
</resources>
diff --git a/packages/SystemUI/res/values-land/dimens.xml b/packages/SystemUI/res/values-land/dimens.xml
index 456391d..c75a89f 100644
--- a/packages/SystemUI/res/values-land/dimens.xml
+++ b/packages/SystemUI/res/values-land/dimens.xml
@@ -24,5 +24,5 @@
<integer name="notification_panel_layout_gravity">@integer/standard_notification_panel_layout_gravity</integer>
<dimen name="docked_divider_handle_width">2dp</dimen>
- <dimen name="docked_divider_handle_height">24dp</dimen>
+ <dimen name="docked_divider_handle_height">16dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values-land/styles.xml b/packages/SystemUI/res/values-land/styles.xml
index 96d8fb8..b711faa 100644
--- a/packages/SystemUI/res/values-land/styles.xml
+++ b/packages/SystemUI/res/values-land/styles.xml
@@ -20,7 +20,7 @@
</style>
<style name="DockedDividerBackground">
- <item name="android:layout_width">12dp</item>
+ <item name="android:layout_width">10dp</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_gravity">center_horizontal</item>
</style>
@@ -28,7 +28,7 @@
<style name="DockedDividerHandle">
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_width">48dp</item>
- <item name="android:layout_height">64dp</item>
+ <item name="android:layout_height">96dp</item>
</style>
</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index a2cf6fc..8e43408 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ສະແດງການແຈ້ງເຕືອນເຫຼົ່ານີ້ແບບບໍ່ມີສຽງ"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"ສະແດງຢູ່ສ່ວນເທິງຂອງລາຍການແຈ້ງເຕືອນ ແລະສົ່ງສຽງດັງ"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"ເດັ້ງຂຶ້ນເທິງຫນ້າຈໍ ແລະສົ່ງສຽງດັງ"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"ສີປົກກະຕິ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"ສີຕອນກາງຄືນ"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"ສີແບບກຳນົດເອງ"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"ສີທີ່ບໍ່ຮູ້ຈັກ"</string>
+ <string name="color_transform" msgid="6985460408079086090">"ການດັດແປງສີ"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"ສະແດງໄທລ໌ການຕັ້ງຄ່າດ່ວນ"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"ເປີດໃຊ້ການປ່ຽນສີແບບກຳນົດເອງ"</string>
+ <string name="color_apply" msgid="9212602012641034283">"ນຳໃຊ້"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"ຢືນຢັນການຕັ້ງຄ່າ"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"ບາງການຕັ້ງຄ່າສີສາມາດເຮັດໃຫ້ອຸປະກອນນີ້ບໍ່ສາມາດໃຊ້ໄດ້. ຄລິກ ຕົກລົງ ເພື່ອຢືນຢັນການຕັ້ງຄ່າສີເຫຼົ່ານີ້, ຖ້າບໍ່ດັ່ງນັ້ນ ການຕັ້ງຄ່າເຫຼົ່ານີ້ຈະຕັ້ງຄືນໃໝ່ ຫຼັງຈາກ 10 ວິນາທີ."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index aa5699a..04066a7 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -462,4 +462,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Tyliai rodyti šiuos pranešimus"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Rodyti pranešimų sąrašo viršuje ir skambėti"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Rodyti ekrane ir skambėti"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Įprastos spalvos"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nakties spalvos"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Tinkintos spalvos"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Nežinomos spalvos"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Spalvų keitimas"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Rodyti Sparčiųjų nustatymų išklotinės elementą"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Įgalinti tinkintą transformavimą"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Taikyti"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Nustatymų patvirtinimas"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Dėl kai kurių spalvų nustatymų įrenginys gali būti netinkamas naudoti. Spustelėkite „Gerai“, kad patvirtintumėte šiuos spalvų nustatymus. Kitaip šie nustatymai bus nustatyti iš naujo po 10 sekundžių."</string>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 98761b0..649d07b 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -461,4 +461,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Rādīt šos paziņojumus bez skaņas signāla"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Rādīt paziņojumu saraksta augšdaļā un ar skaņas signālu"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Rādīt ekrānā ar skaņas signālu"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Parastas krāsas"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nakts krāsas"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Pielāgotas krāsas"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Nezināmas krāsas"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Krāsu pārveidošana"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Ātro iestatījumu elementa rādīšana"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Pielāgotās pārveidošanas iespējošana"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Lietot"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Iestatījumu apstiprināšana"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Noteiktu krāsu iestatījumu dēļ šī ierīce var kļūt nelietojama. Lai apstiprinātu šos krāsu iestatījumus, noklikšķiniet uz Labi. Ja to neizdarīsiet, pēc 10 sekundēm šie iestatījumi tiks atiestatīti."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml
index 023792b..b9bed4d 100644
--- a/packages/SystemUI/res/values-mk-rMK/strings.xml
+++ b/packages/SystemUI/res/values-mk-rMK/strings.xml
@@ -42,7 +42,7 @@
<string name="battery_saver_confirmation_title" msgid="5299585433050361634">"Дали да се вклучи штедачот на батерија?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Вклучи"</string>
<string name="battery_saver_start_action" msgid="5576697451677486320">"Вклучете го штедачот на батерија"</string>
- <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Подесувања"</string>
+ <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Поставки"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
<string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Автоматско ротирање на екранот"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"ИСКЛ."</string>
@@ -151,7 +151,7 @@
<string name="accessibility_no_sims" msgid="3957997018324995781">"Нема СИМ-картичка"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Променување на мрежата на операторот."</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_settings_button" msgid="799583911231893380">"Поставки на систем."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Известувања"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Избриши известување."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"ГПС е овозможен."</string>
@@ -260,7 +260,7 @@
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"Медиумски уред"</string>
<string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
<string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Само итни повици"</string>
- <string name="quick_settings_settings_label" msgid="5326556592578065401">"Подесувања"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"Поставки"</string>
<string name="quick_settings_time_label" msgid="4635969182239736408">"Време"</string>
<string name="quick_settings_user_label" msgid="5238995632130897840">"Јас"</string>
<string name="quick_settings_user_title" msgid="4467690427642392403">"Корисник"</string>
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Тивко прикажувај ги известувањава"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Прикажувај ги на врвот на списокот со известувања и дај звучен сигнал"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Појави се на екранот и дај звучен сигнал"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Нормални бои"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Ноќни бои"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Прилагодени бои"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Непознати бои"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Промена на бојата"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Прикажи плочка Брзи поставки"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Овозможи прилагодено трансформирање"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Примени"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Потврдете ги поставките"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Некои поставки на боите може да го направат уредот неупотреблив. Кликнете на Во ред за да ги потврдите овие поставки на боите, инаку тие поставки ќе се ресетираат по 10 секунди."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml
index 9e0e409..2f4b81a 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml-rIN/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ഈ അറിയിപ്പുകൾ നിശബ്ദമായി കാണിക്കുക"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"അറിയിപ്പ് ലിസ്റ്റിന്റെ ഏറ്റവും മുകളിൽ കാണിക്കുക, ശബ്ദമുണ്ടാക്കുക"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"സ്ക്രീനിൽ ദൃശ്യമാക്കുക, ശബ്ദമുണ്ടാക്കുക"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"സാധാരണ വര്ണ്ണങ്ങൾ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"രാത്രി വര്ണ്ണങ്ങൾ"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"ഇഷ്ടാനുസൃത വര്ണ്ണങ്ങൾ"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"തിരിച്ചറിയാനാകാത്ത വർണ്ണങ്ങൾ"</string>
+ <string name="color_transform" msgid="6985460408079086090">"വർണ്ണ പരിഷ്കരണം"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"ദ്രുത ക്രമീകരണ ടൈൽ കാണിക്കുക"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"ഇഷ്ടാനുസൃത പരിവർത്തനം പ്രവർത്തനക്ഷമമാക്കുക"</string>
+ <string name="color_apply" msgid="9212602012641034283">"ബാധകമാക്കുക"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"ക്രമീകരണം സ്ഥിരീകരിക്കുക"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"ചില വർണ്ണ ക്രമീകരണത്തിന് ഈ ഉപകരണത്തെ ഉപയോഗരഹിതമാക്കാനാകും. ഈ വർണ്ണ ക്രമീകരണം സ്ഥിരീകരിക്കുന്നതിന് ശരി എന്നതിൽ ക്ലിക്കുചെയ്യുക, അല്ലെങ്കിൽ 10 സെക്കൻഡിന് ശേഷം ഈ ക്രമീകരണം പുനഃക്രമീകരിക്കപ്പെടും."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index 445c2fd..3dd084e 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -455,7 +455,17 @@
<string name="max_importance" msgid="5089005872719563894">"Яаралтай ач холбогдолтой"</string>
<string name="notification_importance_blocked" msgid="2397192642657872872">"Эдгээр мэдэгдлийг хэзээ ч харуулахгүй"</string>
<string name="notification_importance_low" msgid="4383563267370859725">"Мэдэгдлийг жагсаалтын доод хэсэгт дуугүй харуулах"</string>
- <string name="notification_importance_default" msgid="4926529615920610817">"Эдгээр мэдэгдлийг чимээгүй харуулах"</string>
+ <string name="notification_importance_default" msgid="4926529615920610817">"Эдгээр мэдэгдлийг дуугүй харуулах"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Мэдэгдлийг жагсаалтын эхэнд дуутай харуулах"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Дэлгэцэнд яаралтайгаар дуутай гаргах"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Хэвийн өнгө"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Шөнийн өнгө"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Өгөгдмөл өнгө"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Үл мэдэгдэх өнгө"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Өнгөний өөрчлөлт"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Түргэн тохиргооны хэсгийг харуулах"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Өгөгдмөл өөрчлөлтийг идэвхжүүлэх"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Хэрэгжүүлэх"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Тохиргоог баталгаажуулах"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Зарим өнгөний тохиргоо энэ төхөөрөмжийг ашиглах боломжгүй болгож болзошгүй. OK товчлуурыг дарж эдгээр өнгөний тохиргоог зөвшөөрөхгүй бол энэ тохиргоо нь 10 секундын дараа шинэчлэгдэх болно."</string>
</resources>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml
index 3a45fb9..59eadf1 100644
--- a/packages/SystemUI/res/values-mr-rIN/strings.xml
+++ b/packages/SystemUI/res/values-mr-rIN/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"या सूचना शांतपणे दर्शवा"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"सूचना सूचीच्या शीर्षस्थानी दर्शवा आणि ध्वनी चालू करा"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"स्क्रीनवर डोकावून पहा आणि ध्वनी चालू करा"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"सामान्य रंग"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"रात्रीचे रंग"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"सानुकूल रंग"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"अज्ञात रंग"</string>
+ <string name="color_transform" msgid="6985460408079086090">"रंग सुधारणा"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"द्रुत सेटिंग्ज टाइल दर्शवा"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"सानुकूल रूपांतरण सक्षम करा"</string>
+ <string name="color_apply" msgid="9212602012641034283">"लागू करा"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"सेटिंग्जची पुष्टी करा"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"काही रंग सेटिंग्ज या डिव्हाइसला निरुपयोगी करू शकतात. या रंग सेटिंग्जची पुष्टी करण्यासाठी ठीक आहे दाबा अन्यथा या सेटिंग्ज 10 सेकंदांनंतर रीसेट होतील."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index e3a6840..2d67425 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Tunjukkan pemberitahuan ini secara senyap"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Tunjukkan pada bahagian atas senarai pemberitahuan dan bunyikan"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Intai pada skrin dan bunyikan"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Warna biasa"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Warna malam"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Warna tersuai"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Warna tidak diketahui"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Pengubahsuaian warna"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Tunjukkan jubin Tetapan Pantas"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Dayakan jelmaan tersuai"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Gunakan"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Sahkan tetapan"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Sesetengah tetapan warna boleh menjadikan peranti ini tidak dapat digunakan. Klik OK untuk mengesahkan tetapan warna ini, jika tidak tetapan ini akan ditetapkan semula selepas 10 saat."</string>
</resources>
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml
index 0043eb8..293e010 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my-rMM/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ဤသတိပေးချက်များကို တိတ်တဆိတ်ပြပါ"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"သတိပေးချက်စာရင်းများ၏ ထိပ်တွင်ပြကာ အသံဖွင့်ပါ"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"မျက်နှာပြင်ပေါ်သို့ ဖော်ပြကာ အသံဖွင့်ပါ"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"ပုံမှန် အရောင်များ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"ည အရောင်များ"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"စိတ်ကြိုက် အရောင်များ"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"မသိသည့် အရောင်များ"</string>
+ <string name="color_transform" msgid="6985460408079086090">"အရောင် မွမ်းမံမှု"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"အမြန် ဆက်တင် လေးထောင့်ကွက်ကို ပြပါ"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"စိတ်ကြိုက် ပြောင်းလဲမှုကို ဖွင့်ပါ"</string>
+ <string name="color_apply" msgid="9212602012641034283">"အသုံးပြုပါ"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"ဆက်တင်များကို အတည်ပြုပါ"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"အချို့သော အရောင်ဆက်တက်များက ဤကိရိယာကို သုံးမရအောင် လုပ်ပစ်နိုင်ပါသည်။ ဤအရောင် ဆက်တင်များကို အတည်ပြုရန် အိုကေကို နှိပ်ပါ၊ သို့မဟုတ် ဤဆက်တင်များကို ၁၀ စက္ကန့် အကြာတွင် ပြန်ညှိလိုက်ပါမည်။"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 967388b..ffc2fcf 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Vis disse varslene uten lyd"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Vis øverst på varsellisten med lyd"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Vis fort på skjermen med lyd"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normale farger"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nattfarger"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Spesialtilpassede farger"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Ukjente farger"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Fargemodifisering"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Vis ruten for hurtiginnstillinger"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Slå på spesialtilpasset forvandling"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Bruk"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Bekreft innstillingene"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Noen fargeinnstillinger kan gjøre denne enheten ubrukelig. Klikk på OK for å bekrefte disse fargeinnstillingene, ellers blir de tilbakestilt etter ti sekunder."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml
index 658ee92..e0ff35f 100644
--- a/packages/SystemUI/res/values-ne-rNP/strings.xml
+++ b/packages/SystemUI/res/values-ne-rNP/strings.xml
@@ -449,15 +449,25 @@
<string name="enable_bluetooth_message" msgid="9106595990708985385">"आफ्नो ट्याब्लेटसँग किबोर्ड जोड्न, पहिले तपाईँले ब्लुटुथ सक्रिय गर्नुपर्छ।"</string>
<string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"सक्रिय पार्नुहोस्"</string>
<string name="apply_to_topic" msgid="3641403489318659666">"<xliff:g id="TOPIC_NAME">%1$s</xliff:g> सूचनाहरूमा लागू गर्नुहोस्"</string>
- <string name="apply_to_app" msgid="363016783939815960">"यो अनुप्रयोगबाट सबै सूचनाहरूमा लागू गर्नुहोस्"</string>
+ <string name="apply_to_app" msgid="363016783939815960">"यो अनुप्रयोगका सबै सूचनाहरूमा लागू गर्नुहोस्"</string>
<string name="blocked_importance" msgid="5198578988978234161">"रोकियो"</string>
<string name="low_importance" msgid="4109929986107147930">"न्यून महत्त्व"</string>
<string name="default_importance" msgid="8192107689995742653">"सामान्य महत्त्व"</string>
<string name="high_importance" msgid="1527066195614050263">"उच्च महत्त्व"</string>
- <string name="max_importance" msgid="5089005872719563894">"अत्यावश्यक महत्त्व"</string>
+ <string name="max_importance" msgid="5089005872719563894">"जरूरी महत्त्व"</string>
<string name="notification_importance_blocked" msgid="2397192642657872872">"यी सूचनाहरू कहिल्यै नदेखाउनुहोस्"</string>
- <string name="notification_importance_low" msgid="4383563267370859725">"बिना आवाज सूचना सूचीको फेदमा देखाउनुहोस्"</string>
- <string name="notification_importance_default" msgid="4926529615920610817">"बिना आवाज यी सूचनाहरू देखाउनुहोस्"</string>
+ <string name="notification_importance_low" msgid="4383563267370859725">"सूचीको फेदमा बिना आवाज देखाउनुहोस्"</string>
+ <string name="notification_importance_default" msgid="4926529615920610817">"यी सूचनाहरू बिना आवाज देखाउनुहोस्"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"सूचना सूचीको शीर्षमा देखाउनुहोस् र आवाज निकाल्नुहोस्"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"स्क्रिनमा हेर्नुहोस् र आवाज निकाल्नुहोस्"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"सामान्य रङहरू"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"रात्री रङहरू"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"अनुकूलन रङहरू"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"अज्ञात रङहरू"</string>
+ <string name="color_transform" msgid="6985460408079086090">"रङ परिमार्जन"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"द्रुत सेटिङहरू टाइल देखाउनुहोस्"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"अनुकूलन रूपान्तर सक्रिय गर्नुहोस्"</string>
+ <string name="color_apply" msgid="9212602012641034283">"लागू गर्नुहोस्"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"सेटिङहरूको पुष्टि गर्नुहोस्"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"केही रङ सेटिङहरू यस यन्त्रलाई अनुपयोगी बनाउन सक्छन्। यी रङ सेटिङहरू पुष्टि गर्न हुन्छ मा क्लिक गर्नुहोस्, अन्यथा यी सेटिङहरू 10 सेकेण्डपछि रिसेट हुनेछन्।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index d5ea047..9311711 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Deze meldingen zonder geluid weergeven"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Boven aan de lijst met meldingen weergeven en geluid laten horen"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Op het scherm weergeven en geluid laten horen"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normale kleuren"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nachtkleuren"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Aangepaste kleuren"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Onbekende kleuren"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Kleuraanpassing"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Tegel voor \'Snelle instellingen\' weergeven"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Aangepast transformeren inschakelen"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Toepassen"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Instellingen bevestigen"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Bij sommige kleurinstellingen kan het apparaat onbruikbaar worden. Klik op OK om deze kleurinstellingen te bevestigen, anders worden deze instellingen na tien seconden gereset."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml
index ad66640..2dd91ec 100644
--- a/packages/SystemUI/res/values-pa-rIN/strings.xml
+++ b/packages/SystemUI/res/values-pa-rIN/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਚੁੱਪਚਾਪ ਢੰਗ ਨਾਲ ਵਿਖਾਓ"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"ਸੂਚਨਾਵਾਂ ਸੂਚੀ ਦੇ ਸਿਖਰ \'ਤੇ ਵਿਖਾਓ ਅਤੇ ਆਵਾਜ਼ ਕਰੋ"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"ਸਕਰੀਨ \'ਤੇ ਝਾਤੀ ਮਾਰੋ ਅਤੇ ਆਵਾਜ਼ ਕਰੋ"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"ਸਧਾਰਨ ਰੰਗ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"ਰਾਤ ਦੇ ਰੰਗ"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"ਕਸਟਮ ਰੰਗ"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"ਅਗਿਆਤ ਰੰਗ"</string>
+ <string name="color_transform" msgid="6985460408079086090">"ਰੰਗ ਸੋਧ"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਟਾਇਲ ਵਿਖਾਓ"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"ਕਸਟਮ ਤਬਦੀਲੀ ਯੋਗ ਬਣਾਓ"</string>
+ <string name="color_apply" msgid="9212602012641034283">"ਲਾਗੂ ਕਰੋ"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"ਸੈਟਿੰਗਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"ਕੁਝ ਰੰਗ ਸੈਟਿੰਗਾਂ ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਬੇਕਾਰ ਕਰ ਸਕਦੀਆਂ ਹਨ। ਇਹਨਾਂ ਰੰਗ ਸੈਟਿੰਗਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਠੀਕ \'ਤੇ ਕਲਿੱਕ ਕਰੋ, ਨਹੀਂ ਤਾਂ ਇਹ ਸੈਟਿੰਗਾਂ 10 ਸਕਿੰਟ ਬਾਅਦ ਮੁੜ-ਸੈੱਟ ਹੋ ਜਾਣਗੀਆਂ।"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 8cf8785..bf222bc 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -454,7 +454,7 @@
<string name="apply_to_app" msgid="363016783939815960">"Zastosuj do wszystkich powiadomień z tej aplikacji"</string>
<string name="blocked_importance" msgid="5198578988978234161">"Zablokowane"</string>
<string name="low_importance" msgid="4109929986107147930">"Mało ważne"</string>
- <string name="default_importance" msgid="8192107689995742653">"Mniej ważne"</string>
+ <string name="default_importance" msgid="8192107689995742653">"Ważne"</string>
<string name="high_importance" msgid="1527066195614050263">"Bardzo ważne"</string>
<string name="max_importance" msgid="5089005872719563894">"Pilne"</string>
<string name="notification_importance_blocked" msgid="2397192642657872872">"Nigdy nie pokazuj tych powiadomień"</string>
@@ -462,4 +462,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Pokazuj te powiadomienia bez sygnału dźwiękowego"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Pokazuj na górze listy powiadomień i sygnalizuj dźwiękiem"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Wyświetlaj na ekranie i odtwarzaj dźwięk"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Kolory standardowe"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Kolory nocne"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Kolory niestandardowe"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Nieznane kolory"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Zmiana koloru"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Pokazuj kafelek szybkich ustawień"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Włącz przekształcenie niestandardowe"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Zastosuj"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Potwierdź ustawienia"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Niektóre ustawienia kolorów mogą utrudniać korzystanie z urządzenia. Kliknij OK, by potwierdzić te ustawienia kolorów. Jeśli tego nie zrobisz, zostaną one zresetowane po 10 sekundach."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 72a93f0..5d43efa 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Mostrar essas notificações de forma silenciosa"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mostrar na parte superior da lista de notificações e emitir som"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Mostrar parcialmente na tela e emitir som"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Cores normais"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Cores noturnas"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Cores personalizadas"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Cores desconhecidas"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modificação de cor"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar bloco de configurações rápidas"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Ativar transformação personalizada"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirmar configurações"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Algumas configurações de cor podem tornar o dispositivo inutilizável. Clique em \"OK\" para confirmar essas configurações de cor; caso contrário, essas configurações serão redefinidas após 10 segundos."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 9b4b93e..5ad82a1 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Mostrar estas notificações sem som"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mostrar na parte superior da lista de notificações e emitir som"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Mostrar no ecrã e emitir som"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Cores normais"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Cores noturnas"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Cores personalizadas"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Cores desconhecidas"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modificação de cor"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar o mosaico de Definições rápidas"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Ativar transformação personalizada"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirmar as definições"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Algumas definições de cor podem tornar este dispositivo instável. Clique em OK para confirmar estas definições de cor. Caso contrário, estas definições serão repostas após 10 segundos."</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 72a93f0..5d43efa 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Mostrar essas notificações de forma silenciosa"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Mostrar na parte superior da lista de notificações e emitir som"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Mostrar parcialmente na tela e emitir som"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Cores normais"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Cores noturnas"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Cores personalizadas"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Cores desconhecidas"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modificação de cor"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar bloco de configurações rápidas"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Ativar transformação personalizada"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirmar configurações"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Algumas configurações de cor podem tornar o dispositivo inutilizável. Clique em \"OK\" para confirmar essas configurações de cor; caso contrário, essas configurações serão redefinidas após 10 segundos."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 3877a43..e9e7bdc 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -461,4 +461,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Aceste notificări se afișează fără a se emite un sunet"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Se afișează în partea de sus a listei cu notificări și se emite un sunet"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Se afișează pentru o scurtă durată pe ecran și se emite un sunet"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Culori normale"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Culori de noapte"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Culori personalizate"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Culori necunoscute"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modificarea culorilor"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Afișați caseta cu Setările rapide"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Activați transformarea personalizată"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Aplicați"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Confirmați setările"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Unele setări pentru culori pot face dispozitivul să nu mai funcționeze. Dați clic pe OK pentru a confirma aceste setări pentru culori. În caz contrar, acestea se vor reseta după 10 secunde."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 5002ad2..531a654 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -462,4 +462,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Показывать уведомления без звука."</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Показывать со звуком в начале списка уведомлений."</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Показывать со звуком поверх всех окон."</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Обычные цвета"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Ночные цвета"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Цвета пользователя"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Неизвестные цвета"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Цветовые настройки"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Показывать панель быстрых настроек"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Включить настройки пользователя"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Применить"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Подтвердите настройки"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Некоторые цветовые настройки могут затруднить работу с устройством. Чтобы применить выбранные параметры, нажмите \"ОК\". В противном случае они будут сброшены через 10 секунд."</string>
</resources>
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml
index cdc749d..b9f7e53 100644
--- a/packages/SystemUI/res/values-si-rLK/strings.xml
+++ b/packages/SystemUI/res/values-si-rLK/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"නිශ්ශබ්දව මෙම දැනුම්දීම් පෙන්වන්න"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"දැනුම්දීම් ලැයිස්තුවෙහි ඉහළින්ම පෙන්වන්න සහ ශබ්ද කරන්න"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"තිරයට පැමිණ ශබ්ද කරන්න"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"සාමාන්ය වර්ණ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"රාත්රී වර්ණ"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"අභිරුචි වර්ණ"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"නොදන්නා වර්ණ"</string>
+ <string name="color_transform" msgid="6985460408079086090">"වර්ණ වෙනස් කිරීම"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"ඉක්මන් සැකසීම් ටයිලය පෙන්වන්න"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"අභිරුචි පරිවර්තනය සබල කරන්න"</string>
+ <string name="color_apply" msgid="9212602012641034283">"යොදන්න"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"සැකසීම් තහවුරු කරන්න"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"සමහර වර්ණ සැකසීම් මෙම උපාංගය භාවිත කළ නොහැකි තත්ත්වයට පත් කළ හැකිය. මෙම වර්ණ සැකසීම් තහවුරු කිරීමට හරි ක්ලික් කරන්න, නැතහොත් මෙම සැකසීම් තත්පර 10කට පසුව යළි සකසනු ඇත."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 1dca386..91a143e 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -462,4 +462,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Tieto upozornenia zobrazovať bez zvukového signálu"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Zobrazovať v hornej časti zoznamu upozornení so zvukovým signálom"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Zobrazovať cez obrazovku so zvukovým signálom"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normálne farby"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nočné farby"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Vlastné farby"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Neznáme farby"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Úprava farieb"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Zobraziť dlaždicu Rýchle nastavenia"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Povoliť vlastnú transformáciu"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Použiť"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Potvrdenie nastavení"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Niektoré nastavenia farieb môžu toto zariadenie znefunkčniť. Tieto nastavenia farieb potvrdíte kliknutím na tlačidlo OK, ináč sa tieto nastavenia o 10 sekúnd obnovia."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index a3a8682..96974ae 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -462,4 +462,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Prikaži ta obvestila brez zvoka"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Prikaži na vrhu seznama obvestil in predvajaj zvok"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Za hip pokaži predogled na zaslonu in predvajaj zvok"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Običajne barve"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nočne barve"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Barve po meri"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Neznane barve"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Spreminjanje barv"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Prikaz ploščice s hitrimi nastavitvami"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Omogočanje spremembe po meri"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Uporabi"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Potrditev nastavitev"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Zaradi nekaterih barvnih nastavitev lahko postane ta naprava neuporabna. Kliknite »V redu«, če želite potrditi te barvne nastavitve. V nasprotnem primeru se bodo čez 10 sekund ponastavile na prvotno vrednost."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq-rAL/strings.xml
index 1cf34a6..b904ae1 100644
--- a/packages/SystemUI/res/values-sq-rAL/strings.xml
+++ b/packages/SystemUI/res/values-sq-rAL/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Shfaqi këto njoftime në heshtje"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Shfaqi në krye të listës së njoftimeve dhe lësho tingull"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Shfaq një vështrim të shpejtë në ekran dhe lësho tingull"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Ngjyrat normale"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Ngjyrat e natës"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Ngjyrat e personalizuara"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Ngjyra të panjohura"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Modifikimi i ngjyrës"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Pllakëza Shfaq cilësimet e shpejta"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Zbato transformimin e personalizuar"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Zbato"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Konfirmo cilësimet"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Disa cilësime ngjyrash mund ta bëjnë këtë pajisje të papërdorshme. Kliko OK për të konfirmuar këto cilësime ngjyrash, përndryshe këto cilësime do të rivendosen pas 10 sekondash."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index f429e15..6470fcc 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -461,4 +461,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Ова обавештења се приказују без звука"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Приказују се у врху листе обавештења и емитује се звук"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Накратко се приказују на екрану и емитује се звук"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Нормалне боје"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Ноћне боје"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Прилагођене боје"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Непознате боје"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Измена боја"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Прикажи плочицу Брза подешавања"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Омогући прилагођену трансформацију"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Примени"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Потврдите подешавања"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Нека подешавања боја могу да учине уређај неупотребљивим. Кликните на Потврди да бисте потврдили ова подешавања боја, пошто ће се у супротном ова подешавања ресетовати након 10 секунди."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 3420f09..5f2b397 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Visa aviseringarna utan ljud"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Visa högst upp på listan, med ljud"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Visa på skärmen, med ljud"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normala färger"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Nattfärger"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Anpassade färger"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Okända färger"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Färgändring"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Visa rutan Snabbinställningar"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Aktivera anpassad omvandling"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Verkställ"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Bekräfta inställningarna"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Vissa färginställningar kan göra den här enheten oanvändbar. Klicka på OK om du vill bekräfta färginställningarna, annars återställs inställningarna efter 10 sekunder."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 4bc5ba9..8f962da 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Onyesha arifa hizi bila sauti"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Onyesha katika sehemu ya juu ya orodha ya arifa na itoe sauti"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Weka onyesho la kuchungulia kwenye skrini na itoe sauti"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Rangi za kawaida"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Rangi za usiku"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Rangi maalum"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Rangi zisizojulikana"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Ubadilishaji wa rangi"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Onyesha kigae cha Mipangilio ya Haraka"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Washa ubadilishaji maalum"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Tumia"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Thibitisha mipangilio"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Baadhi ya mipangilio ya rangi inaweza kufanya kifaa hiki kisitumike. Bofya Sawa ili uthibitishe mipangilio hii ya rangi, vinginevyo, mipangilio hii itajiweka upya baada ya sekunde 10."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml
index effcb9d..a625c6f 100644
--- a/packages/SystemUI/res/values-ta-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ta-rIN/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ஒலியின்றி இந்த அறிவிப்புகளைக் காட்டு"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"அறிவிப்புகள் பட்டியலின் மேல் பகுதியில் ஒலியுடன் காட்டு"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"ஒலியுடன் திரையில் காட்டு"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"இயல்பான வண்ணங்கள்"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"இரவுநேர வண்ணங்கள்"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"தனிப்பயன் வண்ணங்கள்"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"அறியப்படாத வண்ணங்கள்"</string>
+ <string name="color_transform" msgid="6985460408079086090">"வண்ண மாற்றம்"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"விரைவு அமைப்புகள் டைலைக் காட்டு"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"தனிப்பயன் வண்ண மாற்றத்தை இயக்கு"</string>
+ <string name="color_apply" msgid="9212602012641034283">"பயன்படுத்து"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"அமைப்புகளை உறுதிப்படுத்து"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"சில வண்ண அமைப்புகள் இந்தச் சாதனத்தைப் பயன்படுத்த முடியாதபடி செய்யலாம். இந்த வண்ண அமைப்புகளை உறுதிப்படுத்த, சரி என்பதைக் கிளிக் செய்யவும், இல்லையெனில் இந்த அமைப்புகள் 10 வினாடிகளுக்குப் பின் மீட்டமைக்கப்படும்."</string>
</resources>
diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml
index fc7cabe..9d1403f 100644
--- a/packages/SystemUI/res/values-te-rIN/strings.xml
+++ b/packages/SystemUI/res/values-te-rIN/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"ఈ నోటిఫికేషన్లను శబ్దం లేకుండా చూపుతుంది"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"నోటిఫికేషన్ల జాబితా ఎగువ భాగంలో శబ్దంతో చూపుతుంది"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"స్క్రీన్పై శీఘ్రంగా శబ్దంతో చూపుతుంది"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"సాధారణ రంగులు"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"రాత్రి రంగులు"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"అనుకూల రంగులు"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"తెలియని రంగులు"</string>
+ <string name="color_transform" msgid="6985460408079086090">"రంగు సవరణ"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"శీఘ్ర సెట్టింగ్ల టైల్ను చూపండి"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"అనుకూల పరివర్తనను ప్రారంభించండి"</string>
+ <string name="color_apply" msgid="9212602012641034283">"వర్తింపజేయి"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"సెట్టింగ్లను నిర్ధారించండి"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"కొన్ని రంగు సెట్టింగ్ల వలన ఈ పరికరం ఉపయోగించలేని విధంగా అయిపోవచ్చు. ఈ రంగు సెట్టింగ్లను నిర్ధారించడానికి సరే క్లిక్ చేయండి లేదంటే ఈ సెట్టింగ్లు 10 సెకన్ల తర్వాత రీసెట్ చేయబడతాయి."</string>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 28e7d68..38e028c 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"แสดงการแจ้งเตือนเหล่านี้โดยไม่ส่งเสียง"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"แสดงที่ด้านบนของรายการแจ้งเตือนและส่งเสียง"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"แสดงบนหน้าจอในช่วงเวลาสั้นๆ และส่งเสียง"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"สีปกติ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"สียามค่ำคืน"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"สีที่กำหนดเอง"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"สีที่ไม่รู้จัก"</string>
+ <string name="color_transform" msgid="6985460408079086090">"การปรับเปลี่ยนสี"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"แสดงไทล์การตั้งค่าด่วน"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"เปิดใช้การเปลี่ยนที่กำหนดเอง"</string>
+ <string name="color_apply" msgid="9212602012641034283">"ใช้"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"ยืนยันการตั้งค่า"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"การตั้งค่าสีบางอย่างอาจทำให้อุปกรณ์นี้ใช้งานไม่ได้ คลิกตกลงเพื่อยืนยันการตั้งค่าสีเหล่านี้ มิฉะนั้นระบบจะรีเซ็ตการตั้งค่าหลังจาก 10 วินาที"</string>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 9602f30..5815041 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Tahimik na ipakita ang mga notification na ito"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Ipakita sa itaas ng listahan ng mga notification at mag-play ng tunog"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Ipasilip sa screen at mag-play ng tunog"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Mga karaniwang kulay"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Madidilim na kulay"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Mga custom na kulay"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Mga hindi kilalang kulay"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Pagbago sa kulay"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Ipakita ang tile ng Mga Mabilisang Setting"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"I-enable ang custom na pagpalit"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Ilapat"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Kumpirmahin ang mga setting"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Maaaring hindi magamit ang device na ito dahil sa ilang setting ng kulay. I-click ang OK upang kumpirmahin ang mga setting ng kulay na ito, kung hindi ay mare-reset ang mga setting na ito pagkatapos ng 10 segundo."</string>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index dbe450f..6832808 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Bu bildirimleri sessizce göster"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Bildirim listesinin en üstünde göster ve ses çıkar"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Ekrana getir ve ses çıkar"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Normal renkler"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Gece renkleri"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Özel renkler"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Bilinmeyen renkler"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Renk değişikliği"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Hızlı Ayarlar kutusunu göster"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Özel dönüşümü etkinleştir"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Uygula"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Ayarları onaylayın"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Bazı renkler bu cihazı kullanılmaz yapabilir. Bu renkleri onaylamak için Tamam\'ı tıklayın. Tıklamazsanız bu ayarlar 10 saniye sonra sıfırlanacaktır."</string>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 35d1e58..9736028 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -462,4 +462,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Показувати ці сповіщення без звукового сигналу"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Показувати сповіщення вгорі списку зі звуковим сигналом"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Показувати сповіщення на екрані зі звуковим сигналом"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Стандартні кольори"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Нічні кольори"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Користувацькі кольори"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Невідомі кольори"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Змінення кольорів"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Показати опцію швидких налаштувань"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Увімкнути користувацьке перетворення"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Застосувати"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Підтвердити налаштування"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Деякі налаштування кольорів можуть зробити цей пристрій непридатним для використання. Натисніть OK, щоб підтвердити налаштування, інакше їх буде скинуто через 10 секунд."</string>
</resources>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml
index 32908fa..28484eb 100644
--- a/packages/SystemUI/res/values-ur-rPK/strings.xml
+++ b/packages/SystemUI/res/values-ur-rPK/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"خاموشی سے یہ اطلاعات دکھائیں"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"اطلاعات کی فہرست پر سب سے اوپر دکھائیں اور آواز چلائیں"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"اسکرین پر دکھائیں اور آواز چلائیں"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"عام رنگ"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"رات کے رنگ"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"حسب ضرورت رنگ"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"نامعلوم رنگ"</string>
+ <string name="color_transform" msgid="6985460408079086090">"رنگوں کی تبدیلی"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"فوری ترتیبات والی ٹائل دکھائیں"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"حسب ضرورت ٹرانسفارم فعال کریں"</string>
+ <string name="color_apply" msgid="9212602012641034283">"لاگو کریں"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"ترتیبات کی توثیق کریں"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"رنگوں کی کچھ ترتیبات اس آلے کو ناقابل استعمال بنا سکتی ہیں۔ رنگوں کی ان ترتیبات کی توثیق کرنے کیلئے ٹھیک ہے پر کلک کریں، بصورت دیگر 10 سیکنڈ بعد یہ ترتیبات ری سیٹ ہو جائیں گی۔"</string>
</resources>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml
index 885412f..4bd9dbc 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Bu bildirishnomalar ovozsiz ko‘rsatilsin"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Bildirishnomalar ro‘yxatining boshida ovoz bilan ko‘rsatilsin"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Barcha oynalar ustida signal ovozi bilan ko‘rsatilsin"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Odatiy ranglar"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Qoramtir ranglar"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Foydalanuvchi rangi"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Noma’lum ranglar"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Rang sozlamalari"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Tezkor sozlamalar panelini ko‘rsatish"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Foydalanuvchi sozlamalarini yoqish"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Qo‘llash"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Sozlamalarni tasdiqlang"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Ba’zi rang sozlamalari qurilmadan foydalanishni qiyinlashtirish mumkin. Tanlgan parametrlarni tasdiqlash uchun “OK” tugmasini bosing. Aks holda, ular 10 soniyadan so‘ng qayta tiklanadi."</string>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 3e0f653..c094d5b 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Hiển thị im lặng các thông báo này"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Hiển thị ở đầu danh sách thông báo và phát ra âm thanh"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Hiển thị trên màn hình và phát ra âm thanh"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Màu thông thường"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Màu tối"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Màu tùy chỉnh"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Màu không xác định"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Sửa đổi màu"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Hiển thị ô Cài đặt nhanh"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Bật chuyển đổi tùy chỉnh"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Áp dụng"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Xác nhận cài đặt"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Một số cài đặt màu có thể khiến thiết bị này không sử dụng được. Hãy nhấp vào OK để xác nhận các cài đặt màu này, nếu không những cài đặt này sẽ được đặt lại sau 10 giây."</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 3eedd49..a1b403a 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -448,28 +448,36 @@
<string name="enable_bluetooth_title" msgid="5027037706500635269">"要开启蓝牙吗?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"要将您的键盘连接到平板电脑,您必须先开启蓝牙。"</string>
<string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"开启"</string>
- <!-- no translation found for apply_to_topic (3641403489318659666) -->
+ <string name="apply_to_topic" msgid="3641403489318659666">"应用于<xliff:g id="TOPIC_NAME">%1$s</xliff:g>通知"</string>
+ <string name="apply_to_app" msgid="363016783939815960">"应用于来自此应用的所有通知"</string>
+ <string name="blocked_importance" msgid="5198578988978234161">"屏蔽"</string>
+ <string name="low_importance" msgid="4109929986107147930">"重要性:低"</string>
+ <string name="default_importance" msgid="8192107689995742653">"重要性:一般"</string>
+ <string name="high_importance" msgid="1527066195614050263">"重要性:高"</string>
+ <string name="max_importance" msgid="5089005872719563894">"重要性:紧急"</string>
+ <string name="notification_importance_blocked" msgid="2397192642657872872">"一律不显示这些通知"</string>
+ <string name="notification_importance_low" msgid="4383563267370859725">"在通知列表底部显示,但不发出提示音"</string>
+ <string name="notification_importance_default" msgid="4926529615920610817">"显示这些通知,但不发出提示音"</string>
+ <string name="notification_importance_high" msgid="3222680136612408223">"在通知列表顶部显示,并发出提示音"</string>
+ <string name="notification_importance_max" msgid="5236987171904756134">"在屏幕上持续显示,并发出提示音"</string>
+ <!-- no translation found for color_matrix_none (2121957926040543148) -->
<skip />
- <!-- no translation found for apply_to_app (363016783939815960) -->
+ <!-- no translation found for color_matrix_night (5943817622105307072) -->
<skip />
- <!-- no translation found for blocked_importance (5198578988978234161) -->
+ <!-- no translation found for color_matrix_custom (3655576492322298713) -->
<skip />
- <!-- no translation found for low_importance (4109929986107147930) -->
+ <!-- no translation found for color_matrix_unknown (2709202104256265107) -->
<skip />
- <!-- no translation found for default_importance (8192107689995742653) -->
+ <!-- no translation found for color_transform (6985460408079086090) -->
<skip />
- <!-- no translation found for high_importance (1527066195614050263) -->
+ <!-- no translation found for color_matrix_show_qs (1763244354399276679) -->
<skip />
- <!-- no translation found for max_importance (5089005872719563894) -->
+ <!-- no translation found for color_enable_custom (6729001308217347501) -->
<skip />
- <!-- no translation found for notification_importance_blocked (2397192642657872872) -->
+ <!-- no translation found for color_apply (9212602012641034283) -->
<skip />
- <!-- no translation found for notification_importance_low (4383563267370859725) -->
+ <!-- no translation found for color_revert_title (4746666545480534663) -->
<skip />
- <!-- no translation found for notification_importance_default (4926529615920610817) -->
- <skip />
- <!-- no translation found for notification_importance_high (3222680136612408223) -->
- <skip />
- <!-- no translation found for notification_importance_max (5236987171904756134) -->
+ <!-- no translation found for color_revert_message (9116001069397996691) -->
<skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index fc82a70..6a244c8 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"顯示這些通知但不發出音效"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"顯示在通知清單頂部並發出音效"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"不時於螢幕出現並發出音效"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"一般顏色"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"夜間顏色"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"自訂顏色"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"不明顏色"</string>
+ <string name="color_transform" msgid="6985460408079086090">"修改顏色"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"顯示「快速設定」圖塊"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"啟用自訂變更"</string>
+ <string name="color_apply" msgid="9212602012641034283">"套用"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"確認設定"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"部分顏色會令此裝置無法使用。請按一下 [確定] 以確認這些顏色設定,否則這些設定將於 10 秒後重設。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 66ffa0f..34fa7aa 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"顯示這些通知且不發出任何音效"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"顯示在通知清單頂端並發出音效"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"短暫顯示在螢幕上並發出音效"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"一般顏色"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"夜間顏色"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"自訂顏色"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"不明顏色"</string>
+ <string name="color_transform" msgid="6985460408079086090">"顏色修改"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"顯示快速設定圖塊"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"啟用自訂顏色變換"</string>
+ <string name="color_apply" msgid="9212602012641034283">"套用"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"確認設定"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"部分顏色設定可能會造成這部裝置無法使用。請按一下 [確定] 來確認您要使用這類顏色設定,否則系統將在 10 秒後重設這些設定。"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 279f765..ebd857c 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -460,4 +460,14 @@
<string name="notification_importance_default" msgid="4926529615920610817">"Bonisa ngokuthulile lezi zaziso"</string>
<string name="notification_importance_high" msgid="3222680136612408223">"Bonisa ngaphezulu kohlu lwezaziso uphinde wenze umsindo"</string>
<string name="notification_importance_max" msgid="5236987171904756134">"Bheka kusikrini uphinde wenze umsindo"</string>
+ <string name="color_matrix_none" msgid="2121957926040543148">"Imibala ejwayelekile"</string>
+ <string name="color_matrix_night" msgid="5943817622105307072">"Imibala yasebusuku"</string>
+ <string name="color_matrix_custom" msgid="3655576492322298713">"Imibala yangokwezifiso"</string>
+ <string name="color_matrix_unknown" msgid="2709202104256265107">"Imibala engaziwa"</string>
+ <string name="color_transform" msgid="6985460408079086090">"Ukulungiswa kombala"</string>
+ <string name="color_matrix_show_qs" msgid="1763244354399276679">"Bonisa ithayili lezilungiselelo ezisheshayo"</string>
+ <string name="color_enable_custom" msgid="6729001308217347501">"Nika amandla ukuguqulwa kwangokwezifiso"</string>
+ <string name="color_apply" msgid="9212602012641034283">"Sebenzisa"</string>
+ <string name="color_revert_title" msgid="4746666545480534663">"Qinisekisa izilungiselelo"</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"Ezinye izilungiselelo zombala zingenza le divayisi ingasebenziseki. Chofoza ku-KULUNGILE ukuze uqinisekise lezi zilungiselelo zombala, uma kungenjalo lezi zilungiselelo zizosethwa kabusha ngemuva kwamasekhondi angu-10."</string>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 24cc6bf..035f564 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -583,9 +583,9 @@
<dimen name="qs_header_neg_padding">-8dp</dimen>
<!-- How high we lift the divider when touching -->
- <dimen name="docked_stack_divider_lift_elevation">6dp</dimen>
+ <dimen name="docked_stack_divider_lift_elevation">4dp</dimen>
- <dimen name="docked_divider_handle_width">24dp</dimen>
+ <dimen name="docked_divider_handle_width">16dp</dimen>
<dimen name="docked_divider_handle_height">2dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index a9176e0..3b0ab791 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -299,13 +299,13 @@
<style name="DockedDividerBackground">
<item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">12dp</item>
+ <item name="android:layout_height">10dp</item>
<item name="android:layout_gravity">center_vertical</item>
</style>
<style name="DockedDividerHandle">
<item name="android:layout_gravity">center_horizontal</item>
- <item name="android:layout_width">64dp</item>
+ <item name="android:layout_width">96dp</item>
<item name="android:layout_height">48dp</item>
</style>
diff --git a/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java b/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java
index d931856..481b9180 100644
--- a/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java
+++ b/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java
@@ -70,17 +70,19 @@
// time for us to receive the signal that it's starting.
private static final long BLUETOOTH_START_DELAY_MILLIS = 10 * 1000;
+ // We will be scanning up to 30 seconds, after which we'll stop.
+ private static final long BLUETOOTH_SCAN_TIMEOUT_MILLIS = 30 * 1000;
+
private static final int STATE_NOT_ENABLED = -1;
private static final int STATE_UNKNOWN = 0;
private static final int STATE_WAITING_FOR_BOOT_COMPLETED = 1;
private static final int STATE_WAITING_FOR_TABLET_MODE_EXIT = 2;
private static final int STATE_WAITING_FOR_DEVICE_DISCOVERY = 3;
private static final int STATE_WAITING_FOR_BLUETOOTH = 4;
- private static final int STATE_WAITING_FOR_STATE_PAIRED = 5;
- private static final int STATE_PAIRING = 6;
- private static final int STATE_PAIRED = 7;
- private static final int STATE_USER_CANCELLED = 8;
- private static final int STATE_DEVICE_NOT_FOUND = 9;
+ private static final int STATE_PAIRING = 5;
+ private static final int STATE_PAIRED = 6;
+ private static final int STATE_USER_CANCELLED = 7;
+ private static final int STATE_DEVICE_NOT_FOUND = 8;
private static final int MSG_INIT = 0;
private static final int MSG_ON_BOOT_COMPLETED = 1;
@@ -92,6 +94,7 @@
private static final int MSG_ON_BLE_SCAN_FAILED = 7;
private static final int MSG_SHOW_BLUETOOTH_DIALOG = 8;
private static final int MSG_DISMISS_BLUETOOTH_DIALOG = 9;
+ private static final int MSG_BLE_ABORT_SCAN = 10;
private volatile KeyboardHandler mHandler;
private volatile KeyboardUIHandler mUIHandler;
@@ -107,6 +110,7 @@
private long mBootCompletedTime;
private int mInTabletMode = InputManager.SWITCH_STATE_UNKNOWN;
+ private int mScanAttempt = 0;
private ScanCallback mScanCallback;
private BluetoothDialog mDialog;
@@ -328,6 +332,9 @@
.build();
mScanCallback = new KeyboardScanCallback();
scanner.startScan(Arrays.asList(filter), settings, mScanCallback);
+
+ Message abortMsg = mHandler.obtainMessage(MSG_BLE_ABORT_SCAN, ++mScanAttempt, 0);
+ mHandler.sendMessageDelayed(abortMsg, BLUETOOTH_SCAN_TIMEOUT_MILLIS);
}
private void stopScanning() {
@@ -338,6 +345,19 @@
}
// Should only be called on the handler thread
+ private void bleAbortScanInternal(int scanAttempt) {
+ if (mState == STATE_WAITING_FOR_DEVICE_DISCOVERY && scanAttempt == mScanAttempt) {
+ if (DEBUG) {
+ Slog.d(TAG, "Bluetooth scan timed out");
+ }
+ stopScanning();
+ // FIXME: should we also try shutting off bluetooth if we enabled
+ // it in the first place?
+ mState = STATE_DEVICE_NOT_FOUND;
+ }
+ }
+
+ // Should only be called on the handler thread
private void onDeviceAddedInternal(CachedBluetoothDevice d) {
if (mState == STATE_WAITING_FOR_DEVICE_DISCOVERY && d.getName().equals(mKeyboardName)) {
stopScanning();
@@ -425,6 +445,12 @@
} else {
mState = STATE_USER_CANCELLED;
}
+ break;
+ }
+ case MSG_BLE_ABORT_SCAN: {
+ int scanAttempt = msg.arg1;
+ bleAbortScanInternal(scanAttempt);
+ break;
}
case MSG_ON_BLUETOOTH_STATE_CHANGED: {
int bluetoothState = msg.arg1;
@@ -555,8 +581,6 @@
return "STATE_WAITING_FOR_DEVICE_DISCOVERY";
case STATE_WAITING_FOR_BLUETOOTH:
return "STATE_WAITING_FOR_BLUETOOTH";
- case STATE_WAITING_FOR_STATE_PAIRED:
- return "STATE_WAITING_FOR_STATE_PAIRED";
case STATE_PAIRING:
return "STATE_PAIRING";
case STATE_PAIRED:
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerSnapAlgorithm.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerSnapAlgorithm.java
index 69e90cc..5af172c 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerSnapAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerSnapAlgorithm.java
@@ -98,10 +98,10 @@
// TODO: Better calculation
targets.add(new SnapTarget(-mDividerSize, SnapTarget.FLAG_DISMISS_START));
- targets.add(new SnapTarget((int) (0.38f * dividerMax) - mDividerSize / 2,
+ targets.add(new SnapTarget((int) (0.3415f * dividerMax) - mDividerSize / 2,
SnapTarget.FLAG_NONE));
targets.add(new SnapTarget(dividerMax / 2 - mDividerSize / 2, SnapTarget.FLAG_NONE));
- targets.add(new SnapTarget((int) (0.62f * dividerMax) - mDividerSize / 2,
+ targets.add(new SnapTarget((int) (0.6585f * dividerMax) - mDividerSize / 2,
SnapTarget.FLAG_NONE));
targets.add(new SnapTarget(dividerMax, SnapTarget.FLAG_DISMISS_END));
return targets;
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
index c01f170..13642eb 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
@@ -240,9 +240,9 @@
private void liftBackground() {
if (isHorizontalDivision()) {
- mBackground.animate().scaleY(1.5f);
+ mBackground.animate().scaleY(1.4f);
} else {
- mBackground.animate().scaleX(1.5f);
+ mBackground.animate().scaleX(1.4f);
}
mBackground.animate()
.setInterpolator(mTouchResponseInterpolator)
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index ca5212a..aa99442 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -37,7 +37,9 @@
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
+import android.app.admin.DeviceAdminInfo;
import android.app.admin.DevicePolicyManager;
+import android.app.admin.DevicePolicyManagerInternal;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentValues;
@@ -82,6 +84,7 @@
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.FgThread;
+import com.android.server.LocalServices;
import com.google.android.collect.Lists;
import com.google.android.collect.Sets;
@@ -830,7 +833,8 @@
throw new SecurityException(msg);
}
- if (!canUserModifyAccounts(userId) || !canUserModifyAccountsForType(userId, account.type)) {
+ if (!canUserModifyAccounts(userId, callingUid) ||
+ !canUserModifyAccountsForType(userId, account.type, callingUid)) {
return false;
}
@@ -1259,7 +1263,7 @@
account.type);
throw new SecurityException(msg);
}
- if (!canUserModifyAccounts(userId)) {
+ if (!canUserModifyAccounts(userId, callingUid)) {
try {
response.onError(AccountManager.ERROR_CODE_USER_RESTRICTED,
"User cannot modify accounts");
@@ -1267,7 +1271,7 @@
}
return;
}
- if (!canUserModifyAccountsForType(userId, account.type)) {
+ if (!canUserModifyAccountsForType(userId, account.type, callingUid)) {
try {
response.onError(AccountManager.ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE,
"User cannot modify accounts of this type (policy).");
@@ -1321,9 +1325,6 @@
throw new SecurityException(msg);
}
UserAccounts accounts = getUserAccountsForCaller();
- if (!canUserModifyAccounts(userId) || !canUserModifyAccountsForType(userId, account.type)) {
- return false;
- }
logRecord(accounts, DebugDbHelper.ACTION_CALLED_ACCOUNT_REMOVE, TABLE_ACCOUNTS);
long identityToken = clearCallingIdentity();
try {
@@ -2146,8 +2147,9 @@
if (accountType == null) throw new IllegalArgumentException("accountType is null");
// Is user disallowed from modifying accounts?
- int userId = Binder.getCallingUserHandle().getIdentifier();
- if (!canUserModifyAccounts(userId)) {
+ final int uid = Binder.getCallingUid();
+ final int userId = UserHandle.getUserId(uid);
+ if (!canUserModifyAccounts(userId, uid)) {
try {
response.onError(AccountManager.ERROR_CODE_USER_RESTRICTED,
"User is not allowed to add an account!");
@@ -2156,7 +2158,7 @@
showCantAddAccount(AccountManager.ERROR_CODE_USER_RESTRICTED, userId);
return;
}
- if (!canUserModifyAccountsForType(userId, accountType)) {
+ if (!canUserModifyAccountsForType(userId, accountType, uid)) {
try {
response.onError(AccountManager.ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE,
"User cannot modify accounts of this type (policy).");
@@ -2168,7 +2170,6 @@
}
final int pid = Binder.getCallingPid();
- final int uid = Binder.getCallingUid();
final Bundle options = (optionsIn == null) ? new Bundle() : optionsIn;
options.putInt(AccountManager.KEY_CALLER_UID, uid);
options.putInt(AccountManager.KEY_CALLER_PID, pid);
@@ -2230,7 +2231,7 @@
}
// Is user disallowed from modifying accounts?
- if (!canUserModifyAccounts(userId)) {
+ if (!canUserModifyAccounts(userId, callingUid)) {
try {
response.onError(AccountManager.ERROR_CODE_USER_RESTRICTED,
"User is not allowed to add an account!");
@@ -2239,7 +2240,7 @@
showCantAddAccount(AccountManager.ERROR_CODE_USER_RESTRICTED, userId);
return;
}
- if (!canUserModifyAccountsForType(userId, accountType)) {
+ if (!canUserModifyAccountsForType(userId, accountType, callingUid)) {
try {
response.onError(AccountManager.ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE,
"User cannot modify accounts of this type (policy).");
@@ -2310,8 +2311,9 @@
throw new IllegalArgumentException("accountType is null");
}
- int userId = Binder.getCallingUserHandle().getIdentifier();
- if (!canUserModifyAccounts(userId)) {
+ final int uid = Binder.getCallingUid();
+ final int userId = UserHandle.getUserId(uid);
+ if (!canUserModifyAccounts(userId, uid)) {
try {
response.onError(AccountManager.ERROR_CODE_USER_RESTRICTED,
"User is not allowed to add an account!");
@@ -2320,7 +2322,7 @@
showCantAddAccount(AccountManager.ERROR_CODE_USER_RESTRICTED, userId);
return;
}
- if (!canUserModifyAccountsForType(userId, accountType)) {
+ if (!canUserModifyAccountsForType(userId, accountType, uid)) {
try {
response.onError(AccountManager.ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE,
"User cannot modify accounts of this type (policy).");
@@ -2332,7 +2334,6 @@
}
final int pid = Binder.getCallingPid();
- final int uid = Binder.getCallingUid();
final Bundle options = (optionsIn == null) ? new Bundle() : optionsIn;
options.putInt(AccountManager.KEY_CALLER_UID, uid);
options.putInt(AccountManager.KEY_CALLER_PID, pid);
@@ -2497,8 +2498,9 @@
throw new IllegalArgumentException("sessionBundle is empty");
}
- int userId = Binder.getCallingUserHandle().getIdentifier();
- if (!canUserModifyAccounts(userId)) {
+ final int uid = Binder.getCallingUid();
+ final int userId = UserHandle.getUserId(uid);
+ if (!canUserModifyAccounts(userId, uid)) {
sendErrorResponse(response,
AccountManager.ERROR_CODE_USER_RESTRICTED,
"User is not allowed to add an account!");
@@ -2507,7 +2509,6 @@
}
final int pid = Binder.getCallingPid();
- final int uid = Binder.getCallingUid();
final Bundle decryptedBundle;
final String accountType;
// First decrypt session bundle to get account type for checking permission.
@@ -2554,7 +2555,7 @@
return;
}
- if (!canUserModifyAccountsForType(userId, accountType)) {
+ if (!canUserModifyAccountsForType(userId, accountType, uid)) {
sendErrorResponse(
response,
AccountManager.ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE,
@@ -4319,7 +4320,11 @@
}
}
- private boolean canUserModifyAccounts(int userId) {
+ private boolean canUserModifyAccounts(int userId, int callingUid) {
+ // the managing app can always modify accounts
+ if (isProfileOwner(callingUid)) {
+ return true;
+ }
if (getUserManager().getUserRestrictions(new UserHandle(userId))
.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS)) {
return false;
@@ -4327,7 +4332,11 @@
return true;
}
- private boolean canUserModifyAccountsForType(int userId, String accountType) {
+ private boolean canUserModifyAccountsForType(int userId, String accountType, int callingUid) {
+ // the managing app can always modify accounts
+ if (isProfileOwner(callingUid)) {
+ return true;
+ }
DevicePolicyManager dpm = (DevicePolicyManager) mContext
.getSystemService(Context.DEVICE_POLICY_SERVICE);
String[] typesArray = dpm.getAccountTypesWithManagementDisabledAsUser(userId);
@@ -4342,6 +4351,13 @@
return true;
}
+ private boolean isProfileOwner(int uid) {
+ final DevicePolicyManagerInternal dpmi =
+ LocalServices.getService(DevicePolicyManagerInternal.class);
+ return (dpmi != null)
+ && dpmi.isActiveAdminWithPolicy(uid, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+ }
+
@Override
public void updateAppPermission(Account account, String authTokenType, int uid, boolean value)
throws RemoteException {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 552db7d..3e8dc4e 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -8230,6 +8230,18 @@
}
}
+ @Override
+ public IBinder getUriPermissionOwnerForActivity(IBinder activityToken) {
+ enforceNotIsolatedCaller("getUriPermissionOwnerForActivity");
+ synchronized(this) {
+ ActivityRecord r = ActivityRecord.isInStackLocked(activityToken);
+ if (r == null) {
+ throw new IllegalArgumentException("Activity does not exist; token="
+ + activityToken);
+ }
+ return r.getUriPermissionsLocked().getExternalTokenLocked();
+ }
+ }
/**
* @param uri This uri must NOT contain an embedded userId.
* @param sourceUserId The userId in which the uri is to be resolved.
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 43d4e77..20b1e60 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -432,6 +432,10 @@
synchronized (mService) {
mService.mStackSupervisor.removeUserLocked(userId);
}
+ // Remove the user if it is ephemeral.
+ if (getUserInfo(userId).isEphemeral()) {
+ mUserManager.removeUser(userId);
+ }
}
}
@@ -478,9 +482,9 @@
}
/**
- * Stops the guest user if it has gone to the background.
+ * Stops the guest or ephemeral user if it has gone to the background.
*/
- private void stopGuestUserIfBackground() {
+ private void stopGuestOrEphemeralUserIfBackground() {
synchronized (mService) {
final int num = mUserLru.size();
for (int i = 0; i < num; i++) {
@@ -492,7 +496,7 @@
continue;
}
UserInfo userInfo = getUserInfo(oldUserId);
- if (userInfo.isGuest()) {
+ if (userInfo.isGuest() || userInfo.isEphemeral()) {
// This is a user to be stopped.
stopUsersLocked(oldUserId, true, null);
break;
@@ -918,7 +922,7 @@
mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_COMPLETE_MSG,
newUserId, 0));
}
- stopGuestUserIfBackground();
+ stopGuestOrEphemeralUserIfBackground();
stopBackgroundUsersIfEnforced(oldUserId);
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index c6df83a..49aa73e 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -2697,8 +2697,8 @@
visibilities[i] = r.getPackageVisibilityOverride();
mRankingHelper.extractSignals(r);
}
+ mRankingHelper.sort(mNotificationList);
for (int i = 0; i < N; i++) {
- mRankingHelper.sort(mNotificationList);
final NotificationRecord r = mNotificationList.get(i);
if (!orderBefore.get(i).equals(r.getKey())
|| visibilities[i] != r.getPackageVisibilityOverride()) {
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index f604bb7..b254f29 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -594,6 +594,14 @@
}
}
+ // Print Spooler
+ PackageParser.Package printSpoolerPackage = getSystemPackageLPr(
+ "com.android.printspooler");
+ if (printSpoolerPackage != null
+ && doesPackageSupportRuntimePermissions(printSpoolerPackage)) {
+ grantRuntimePermissionsLPw(printSpoolerPackage, LOCATION_PERMISSIONS, true, userId);
+ }
+
mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId);
}
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 8a16850..6fcf1d6 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -1594,10 +1594,8 @@
mScreenshotChordEnabled = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_enableScreenshotChord);
- // TODO(b/26050571): This can be only reenabled, if there are measure to prevent the alert
- // windows from being fullscreen. Please consult the bug before enabling.
- mForceWindowDrawsStatusBarBackground = false; // mContext.getResources().getBoolean(
- //R.bool.config_forceWindowDrawsStatusBarBackground);
+ mForceWindowDrawsStatusBarBackground = mContext.getResources().getBoolean(
+ R.bool.config_forceWindowDrawsStatusBarBackground);
mGlobalKeyManager = new GlobalKeyManager(mContext);
@@ -2065,7 +2063,8 @@
attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
}
if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
- || mForceWindowDrawsStatusBarBackground) {
+ || (mForceWindowDrawsStatusBarBackground
+ && attrs.height == MATCH_PARENT && attrs.width == MATCH_PARENT)) {
attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
}
}
diff --git a/services/core/java/com/android/server/wm/DropPermissionsHandler.java b/services/core/java/com/android/server/wm/DropPermissionsHandler.java
index 2ac1ef4..68cfaab 100644
--- a/services/core/java/com/android/server/wm/DropPermissionsHandler.java
+++ b/services/core/java/com/android/server/wm/DropPermissionsHandler.java
@@ -37,7 +37,7 @@
private final ArrayList<Uri> mUris = new ArrayList<Uri>();
- private IBinder mPermissionOwner = null;
+ private IBinder mActivityToken = null;
DropPermissionsHandler(ClipData clipData, int sourceUid, String targetPackage, int mode,
int sourceUserId, int targetUserId) {
@@ -51,18 +51,21 @@
}
@Override
- public void take() throws RemoteException {
- if (mPermissionOwner != null) {
+ public void take(IBinder activityToken) throws RemoteException {
+ if (mActivityToken != null) {
return;
}
+ mActivityToken = activityToken;
- mPermissionOwner = ActivityManagerNative.getDefault().newUriPermissionOwner("drop");
+ // Will throw if Activity is not found.
+ IBinder permissionOwner = ActivityManagerNative.getDefault().
+ getUriPermissionOwnerForActivity(mActivityToken);
long origId = Binder.clearCallingIdentity();
try {
for (int i = 0; i < mUris.size(); i++) {
ActivityManagerNative.getDefault().grantUriPermissionFromOwner(
- mPermissionOwner, mSourceUid, mTargetPackage, mUris.get(i), mMode,
+ permissionOwner, mSourceUid, mTargetPackage, mUris.get(i), mMode,
mSourceUserId, mTargetUserId);
}
} finally {
@@ -72,15 +75,24 @@
@Override
public void release() throws RemoteException {
- if (mPermissionOwner == null) {
+ if (mActivityToken == null) {
return;
}
+ IBinder permissionOwner = null;
+ try {
+ permissionOwner = ActivityManagerNative.getDefault().
+ getUriPermissionOwnerForActivity(mActivityToken);
+ } catch (Exception e) {
+ // Activity is destroyed, permissions already revoked.
+ return;
+ } finally {
+ mActivityToken = null;
+ }
+
for (int i = 0; i < mUris.size(); ++i) {
ActivityManagerNative.getDefault().revokeUriPermissionFromOwner(
- mPermissionOwner, mUris.get(i), mMode, mSourceUserId);
+ permissionOwner, mUris.get(i), mMode, mSourceUserId);
}
-
- mPermissionOwner = null;
}
}
diff --git a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java
index af109d4..98033f6 100644
--- a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java
+++ b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java
@@ -20,6 +20,7 @@
import android.graphics.Region;
import android.view.DisplayInfo;
import android.view.GestureDetector;
+import android.view.InputDevice;
import android.view.MotionEvent;
import android.view.WindowManagerPolicy.PointerEventListener;
@@ -108,7 +109,8 @@
final int x = (int) motionEvent.getX();
final int y = (int) motionEvent.getY();
final Task task = mDisplayContent.findTaskForControlPoint(x, y);
- if (task == null) {
+ InputDevice inputDevice = motionEvent.getDevice();
+ if (task == null || inputDevice == null) {
mPointerIconShape = STYLE_NOT_SPECIFIED;
break;
}
@@ -130,7 +132,7 @@
}
if (mPointerIconShape != iconShape) {
mPointerIconShape = iconShape;
- motionEvent.getDevice().setPointerShape(iconShape);
+ inputDevice.setPointerShape(iconShape);
}
} else {
mPointerIconShape = STYLE_NOT_SPECIFIED;
@@ -139,7 +141,10 @@
case MotionEvent.ACTION_HOVER_EXIT:
mPointerIconShape = STYLE_NOT_SPECIFIED;
- motionEvent.getDevice().setPointerShape(STYLE_DEFAULT);
+ InputDevice inputDevice = motionEvent.getDevice();
+ if (inputDevice != null) {
+ inputDevice.setPointerShape(STYLE_DEFAULT);
+ }
break;
case MotionEvent.ACTION_UP:
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 7605af0..01e41f4 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -705,14 +705,12 @@
}
// Something is wrong and SurfaceFlinger will not like this, try to revert to sane values.
+ // This doesn't necessarily mean that there is an error in the system. The sizes might be
+ // incorrect, because it is before the first layout or draw.
if (mTmpSize.width() < 1) {
- if (!mWin.mLayoutNeeded) Slog.w(TAG,
- "Width of " + w + " is not positive " + mTmpSize.width());
mTmpSize.right = mTmpSize.left + 1;
}
if (mTmpSize.height() < 1) {
- if (!mWin.mLayoutNeeded) Slog.w(TAG,
- "Height of " + w + " is not positive " + mTmpSize.height());
mTmpSize.bottom = mTmpSize.top + 1;
}
diff --git a/services/print/java/com/android/server/print/PrintManagerService.java b/services/print/java/com/android/server/print/PrintManagerService.java
index f18617e..d5f384d 100644
--- a/services/print/java/com/android/server/print/PrintManagerService.java
+++ b/services/print/java/com/android/server/print/PrintManagerService.java
@@ -27,6 +27,7 @@
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
import android.database.ContentObserver;
+import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
@@ -177,6 +178,25 @@
}
@Override
+ public Icon getCustomPrinterIcon(PrinterId printerId, int userId) {
+ final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId);
+ final UserState userState;
+ synchronized (mLock) {
+ // Only the current group members can get the printer icons.
+ if (resolveCallingProfileParentLocked(resolvedUserId) != getCurrentUserId()) {
+ return null;
+ }
+ userState = getOrCreateUserStateLocked(resolvedUserId);
+ }
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return userState.getCustomPrinterIcon(printerId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ @Override
public void cancelPrintJob(PrintJobId printJobId, int appId, int userId) {
final int resolvedUserId = resolveCallingUserEnforcingPermissions(userId);
final int resolvedAppId;
diff --git a/services/print/java/com/android/server/print/RemotePrintService.java b/services/print/java/com/android/server/print/RemotePrintService.java
index 77a47f8..0af1525 100644
--- a/services/print/java/com/android/server/print/RemotePrintService.java
+++ b/services/print/java/com/android/server/print/RemotePrintService.java
@@ -24,6 +24,7 @@
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.ParceledListSlice;
+import android.graphics.drawable.Icon;
import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
@@ -98,6 +99,15 @@
public void onPrintersAdded(List<PrinterInfo> printers);
public void onPrintersRemoved(List<PrinterId> printerIds);
public void onServiceDied(RemotePrintService service);
+
+ /**
+ * Handle that a custom icon for a printer was loaded.
+ *
+ * @param printerId the id of the printer the icon belongs to
+ * @param icon the icon that was loaded
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public void onCustomPrinterIconLoaded(PrinterId printerId, Icon icon);
}
public RemotePrintService(Context context, ComponentName componentName, int userId,
@@ -404,6 +414,22 @@
printerId).sendToTarget();
}
+ /**
+ * Request the custom printer icon for a printer.
+ *
+ * @param printerId the id of the printer the icon should be loaded for
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public void requestCustomPrinterIcon(PrinterId printerId) {
+ try {
+ if (isBound()) {
+ mPrintService.requestCustomPrinterIcon(printerId);
+ }
+ } catch (RemoteException re) {
+ Slog.e(LOG_TAG, "Error requesting icon for " + printerId, re);
+ }
+ }
+
private void handleStartPrinterStateTracking(final PrinterId printerId) {
throwIfDestroyed();
// Take a note we are tracking the printer.
@@ -842,5 +868,19 @@
throw new IllegalArgumentException("Invalid printer id: " + printerId);
}
}
+
+ @Override
+ public void onCustomPrinterIconLoaded(PrinterId printerId, Icon icon)
+ throws RemoteException {
+ RemotePrintService service = mWeakService.get();
+ if (service != null) {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ service.mCallbacks.onCustomPrinterIconLoaded(printerId, icon);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ }
}
}
diff --git a/services/print/java/com/android/server/print/RemotePrintSpooler.java b/services/print/java/com/android/server/print/RemotePrintSpooler.java
index c506b6f..40a8880 100644
--- a/services/print/java/com/android/server/print/RemotePrintSpooler.java
+++ b/services/print/java/com/android/server/print/RemotePrintSpooler.java
@@ -23,6 +23,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.graphics.drawable.Icon;
import android.os.Binder;
import android.os.Build;
import android.os.IBinder;
@@ -35,6 +36,7 @@
import android.print.IPrintSpoolerClient;
import android.print.PrintJobId;
import android.print.PrintJobInfo;
+import android.print.PrinterId;
import android.util.Slog;
import android.util.TimedRemoteCaller;
@@ -72,6 +74,15 @@
private final SetPrintJobTagCaller mSetPrintJobTagCaller = new SetPrintJobTagCaller();
+ private final OnCustomPrinterIconLoadedCaller mCustomPrinterIconLoadedCaller =
+ new OnCustomPrinterIconLoadedCaller();
+
+ private final ClearCustomPrinterIconCacheCaller mClearCustomPrinterIconCache =
+ new ClearCustomPrinterIconCacheCaller();
+
+ private final GetCustomPrinterIconCaller mGetCustomPrinterIconCaller =
+ new GetCustomPrinterIconCaller();
+
private final ServiceConnection mServiceConnection = new MyServiceConnection();
private final Context mContext;
@@ -287,6 +298,96 @@
}
}
+ /**
+ * Handle that a custom icon for a printer was loaded.
+ *
+ * @param printerId the id of the printer the icon belongs to
+ * @param icon the icon that was loaded
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public final void onCustomPrinterIconLoaded(@NonNull PrinterId printerId,
+ @Nullable Icon icon) {
+ throwIfCalledOnMainThread();
+ synchronized (mLock) {
+ throwIfDestroyedLocked();
+ mCanUnbind = false;
+ }
+ try {
+ mCustomPrinterIconLoadedCaller.onCustomPrinterIconLoaded(getRemoteInstanceLazy(),
+ printerId, icon);
+ } catch (RemoteException|TimeoutException re) {
+ Slog.e(LOG_TAG, "Error loading new custom printer icon.", re);
+ } finally {
+ if (DEBUG) {
+ Slog.i(LOG_TAG,
+ "[user: " + mUserHandle.getIdentifier() + "] onCustomPrinterIconLoaded()");
+ }
+ synchronized (mLock) {
+ mCanUnbind = true;
+ mLock.notifyAll();
+ }
+ }
+ }
+
+ /**
+ * Get the custom icon for a printer. If the icon is not cached, the icon is
+ * requested asynchronously. Once it is available the printer is updated.
+ *
+ * @param printerId the id of the printer the icon should be loaded for
+ * @return the custom icon to be used for the printer or null if the icon is
+ * not yet available
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public final @Nullable Icon getCustomPrinterIcon(@NonNull PrinterId printerId) {
+ throwIfCalledOnMainThread();
+ synchronized (mLock) {
+ throwIfDestroyedLocked();
+ mCanUnbind = false;
+ }
+ try {
+ return mGetCustomPrinterIconCaller.getCustomPrinterIcon(getRemoteInstanceLazy(),
+ printerId);
+ } catch (RemoteException|TimeoutException re) {
+ Slog.e(LOG_TAG, "Error getting custom printer icon.", re);
+ return null;
+ } finally {
+ if (DEBUG) {
+ Slog.i(LOG_TAG,
+ "[user: " + mUserHandle.getIdentifier() + "] getCustomPrinterIcon()");
+ }
+ synchronized (mLock) {
+ mCanUnbind = true;
+ mLock.notifyAll();
+ }
+ }
+ }
+
+ /**
+ * Clear the custom printer icon cache
+ */
+ public void clearCustomPrinterIconCache() {
+ throwIfCalledOnMainThread();
+ synchronized (mLock) {
+ throwIfDestroyedLocked();
+ mCanUnbind = false;
+ }
+ try {
+ mClearCustomPrinterIconCache.clearCustomPrinterIconCache(getRemoteInstanceLazy());
+ } catch (RemoteException|TimeoutException re) {
+ Slog.e(LOG_TAG, "Error clearing custom printer icon cache.", re);
+ } finally {
+ if (DEBUG) {
+ Slog.i(LOG_TAG,
+ "[user: " + mUserHandle.getIdentifier()
+ + "] clearCustomPrinterIconCache()");
+ }
+ synchronized (mLock) {
+ mCanUnbind = true;
+ mLock.notifyAll();
+ }
+ }
+ }
+
public final boolean setPrintJobTag(PrintJobId printJobId, String tag) {
throwIfCalledOnMainThread();
synchronized (mLock) {
@@ -632,6 +733,69 @@
}
}
+ private static final class OnCustomPrinterIconLoadedCaller extends TimedRemoteCaller<Void> {
+ private final IPrintSpoolerCallbacks mCallback;
+
+ public OnCustomPrinterIconLoadedCaller() {
+ super(TimedRemoteCaller.DEFAULT_CALL_TIMEOUT_MILLIS);
+ mCallback = new BasePrintSpoolerServiceCallbacks() {
+ @Override
+ public void onCustomPrinterIconCached(int sequence) {
+ onRemoteMethodResult(null, sequence);
+ }
+ };
+ }
+
+ public Void onCustomPrinterIconLoaded(IPrintSpooler target, PrinterId printerId,
+ Icon icon) throws RemoteException, TimeoutException {
+ final int sequence = onBeforeRemoteCall();
+ target.onCustomPrinterIconLoaded(printerId, icon, mCallback, sequence);
+ return getResultTimed(sequence);
+ }
+ }
+
+ private static final class ClearCustomPrinterIconCacheCaller extends TimedRemoteCaller<Void> {
+ private final IPrintSpoolerCallbacks mCallback;
+
+ public ClearCustomPrinterIconCacheCaller() {
+ super(TimedRemoteCaller.DEFAULT_CALL_TIMEOUT_MILLIS);
+ mCallback = new BasePrintSpoolerServiceCallbacks() {
+ @Override
+ public void customPrinterIconCacheCleared(int sequence) {
+ onRemoteMethodResult(null, sequence);
+ }
+ };
+ }
+
+ public Void clearCustomPrinterIconCache(IPrintSpooler target)
+ throws RemoteException, TimeoutException {
+ final int sequence = onBeforeRemoteCall();
+ target.clearCustomPrinterIconCache(mCallback, sequence);
+ return getResultTimed(sequence);
+ }
+ }
+
+ private static final class GetCustomPrinterIconCaller extends TimedRemoteCaller<Icon> {
+ private final IPrintSpoolerCallbacks mCallback;
+
+ public GetCustomPrinterIconCaller() {
+ super(TimedRemoteCaller.DEFAULT_CALL_TIMEOUT_MILLIS);
+ mCallback = new BasePrintSpoolerServiceCallbacks() {
+ @Override
+ public void onGetCustomPrinterIconResult(Icon icon, int sequence) {
+ onRemoteMethodResult(icon, sequence);
+ }
+ };
+ }
+
+ public Icon getCustomPrinterIcon(IPrintSpooler target, PrinterId printerId)
+ throws RemoteException, TimeoutException {
+ final int sequence = onBeforeRemoteCall();
+ target.getCustomPrinterIcon(printerId, mCallback, sequence);
+ return getResultTimed(sequence);
+ }
+ }
+
private static abstract class BasePrintSpoolerServiceCallbacks
extends IPrintSpoolerCallbacks.Stub {
@Override
@@ -658,6 +822,21 @@
public void onSetPrintJobTagResult(boolean success, int sequence) {
/* do nothing */
}
+
+ @Override
+ public void onCustomPrinterIconCached(int sequence) {
+ /* do nothing */
+ }
+
+ @Override
+ public void onGetCustomPrinterIconResult(@Nullable Icon icon, int sequence) {
+ /* do nothing */
+ }
+
+ @Override
+ public void customPrinterIconCacheCleared(int sequence) {
+ /* do nothing */
+ }
}
private static final class PrintSpoolerClient extends IPrintSpoolerClient.Stub {
diff --git a/services/print/java/com/android/server/print/UserState.java b/services/print/java/com/android/server/print/UserState.java
index 6a50a6e..63d3301 100644
--- a/services/print/java/com/android/server/print/UserState.java
+++ b/services/print/java/com/android/server/print/UserState.java
@@ -26,6 +26,7 @@
import android.content.pm.ParceledListSlice;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Binder;
@@ -271,6 +272,28 @@
return printJob;
}
+ /**
+ * Get the custom icon for a printer. If the icon is not cached, the icon is
+ * requested asynchronously. Once it is available the printer is updated.
+ *
+ * @param printerId the id of the printer the icon should be loaded for
+ * @return the custom icon to be used for the printer or null if the icon is
+ * not yet available
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public Icon getCustomPrinterIcon(PrinterId printerId) {
+ Icon icon = mSpooler.getCustomPrinterIcon(printerId);
+
+ if (icon == null) {
+ RemotePrintService service = mActiveServices.get(printerId.getServiceName());
+ if (service != null) {
+ service.requestCustomPrinterIcon(printerId);
+ }
+ }
+
+ return icon;
+ }
+
public void cancelPrintJob(PrintJobId printJobId, int appId) {
PrintJobInfo printJobInfo = mSpooler.getPrintJobInfo(printJobId, appId);
if (printJobInfo == null) {
@@ -345,6 +368,8 @@
throwIfDestroyedLocked();
if (mPrinterDiscoverySession == null) {
+ mSpooler.clearCustomPrinterIconCache();
+
// If we do not have a session, tell all service to create one.
mPrinterDiscoverySession = new PrinterDiscoverySessionMediator(mContext) {
@Override
@@ -533,6 +558,20 @@
}
@Override
+ public void onCustomPrinterIconLoaded(PrinterId printerId, Icon icon) {
+ synchronized (mLock) {
+ throwIfDestroyedLocked();
+
+ // No session - nothing to do.
+ if (mPrinterDiscoverySession == null) {
+ return;
+ }
+ mSpooler.onCustomPrinterIconLoaded(printerId, icon);
+ mPrinterDiscoverySession.onCustomPrinterIconLoadedLocked(printerId);
+ }
+ }
+
+ @Override
public void onServiceDied(RemotePrintService service) {
synchronized (mLock) {
throwIfDestroyedLocked();
@@ -973,16 +1012,16 @@
private final List<PrinterId> mStateTrackedPrinters = new ArrayList<PrinterId>();
- private final Handler mHandler;
+ private final Handler mSessionHandler;
private boolean mIsDestroyed;
public PrinterDiscoverySessionMediator(Context context) {
- mHandler = new SessionHandler(context.getMainLooper());
+ mSessionHandler = new SessionHandler(context.getMainLooper());
// Kick off the session creation.
List<RemotePrintService> services = new ArrayList<RemotePrintService>(
mActiveServices.values());
- mHandler.obtainMessage(SessionHandler
+ mSessionHandler.obtainMessage(SessionHandler
.MSG_DISPATCH_CREATE_PRINTER_DISCOVERY_SESSION, services)
.sendToTarget();
}
@@ -997,7 +1036,7 @@
SomeArgs args = SomeArgs.obtain();
args.arg1 = observer;
args.arg2 = printers;
- mHandler.obtainMessage(SessionHandler.MSG_PRINTERS_ADDED,
+ mSessionHandler.obtainMessage(SessionHandler.MSG_PRINTERS_ADDED,
args).sendToTarget();
}
}
@@ -1040,7 +1079,7 @@
SomeArgs args = SomeArgs.obtain();
args.arg1 = services;
args.arg2 = priorityList;
- mHandler.obtainMessage(SessionHandler
+ mSessionHandler.obtainMessage(SessionHandler
.MSG_DISPATCH_START_PRINTER_DISCOVERY, args)
.sendToTarget();
}
@@ -1060,7 +1099,7 @@
}
List<RemotePrintService> services = new ArrayList<RemotePrintService>(
mActiveServices.values());
- mHandler.obtainMessage(SessionHandler
+ mSessionHandler.obtainMessage(SessionHandler
.MSG_DISPATCH_STOP_PRINTER_DISCOVERY, services)
.sendToTarget();
}
@@ -1094,7 +1133,7 @@
SomeArgs args = SomeArgs.obtain();
args.arg1 = service;
args.arg2 = updateList;
- mHandler.obtainMessage(SessionHandler
+ mSessionHandler.obtainMessage(SessionHandler
.MSG_VALIDATE_PRINTERS, args)
.sendToTarget();
}
@@ -1126,7 +1165,7 @@
SomeArgs args = SomeArgs.obtain();
args.arg1 = service;
args.arg2 = printerId;
- mHandler.obtainMessage(SessionHandler
+ mSessionHandler.obtainMessage(SessionHandler
.MSG_START_PRINTER_STATE_TRACKING, args)
.sendToTarget();
}
@@ -1153,7 +1192,7 @@
SomeArgs args = SomeArgs.obtain();
args.arg1 = service;
args.arg2 = printerId;
- mHandler.obtainMessage(SessionHandler
+ mSessionHandler.obtainMessage(SessionHandler
.MSG_STOP_PRINTER_STATE_TRACKING, args)
.sendToTarget();
}
@@ -1183,7 +1222,7 @@
// Tell the services we are done.
List<RemotePrintService> services = new ArrayList<RemotePrintService>(
mActiveServices.values());
- mHandler.obtainMessage(SessionHandler
+ mSessionHandler.obtainMessage(SessionHandler
.MSG_DISPATCH_DESTROY_PRINTER_DISCOVERY_SESSION, services)
.sendToTarget();
}
@@ -1209,7 +1248,7 @@
}
}
if (addedPrinters != null) {
- mHandler.obtainMessage(SessionHandler.MSG_DISPATCH_PRINTERS_ADDED,
+ mSessionHandler.obtainMessage(SessionHandler.MSG_DISPATCH_PRINTERS_ADDED,
addedPrinters).sendToTarget();
}
}
@@ -1234,7 +1273,7 @@
}
}
if (removedPrinterIds != null) {
- mHandler.obtainMessage(SessionHandler.MSG_DISPATCH_PRINTERS_REMOVED,
+ mSessionHandler.obtainMessage(SessionHandler.MSG_DISPATCH_PRINTERS_REMOVED,
removedPrinterIds).sendToTarget();
}
}
@@ -1250,6 +1289,37 @@
service.destroy();
}
+ /**
+ * Handle that a custom icon for a printer was loaded.
+ *
+ * This increments the icon generation and adds the printer again which triggers an update
+ * in all users of the currently known printers.
+ *
+ * @param printerId the id of the printer the icon belongs to
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ */
+ public void onCustomPrinterIconLoadedLocked(PrinterId printerId) {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "onCustomPrinterIconLoadedLocked()");
+ }
+ if (mIsDestroyed) {
+ Log.w(LOG_TAG, "Not updating printer - session destroyed");
+ return;
+ }
+
+ PrinterInfo printer = mPrinters.get(printerId);
+ if (printer != null) {
+ PrinterInfo newPrinter = (new PrinterInfo.Builder(printer))
+ .incCustomPrinterIconGen().build();
+ mPrinters.put(printerId, newPrinter);
+
+ ArrayList<PrinterInfo> addedPrinters = new ArrayList<>(1);
+ addedPrinters.add(newPrinter);
+ mSessionHandler.obtainMessage(SessionHandler.MSG_DISPATCH_PRINTERS_ADDED,
+ addedPrinters).sendToTarget();
+ }
+ }
+
public void onServiceDiedLocked(RemotePrintService service) {
// Remove the reported by that service.
removePrintersForServiceLocked(service.getComponentName());
@@ -1261,12 +1331,12 @@
return;
}
// Tell the service to create a session.
- mHandler.obtainMessage(
+ mSessionHandler.obtainMessage(
SessionHandler.MSG_CREATE_PRINTER_DISCOVERY_SESSION,
service).sendToTarget();
// Start printer discovery if necessary.
if (!mStartedPrinterDiscoveryTokens.isEmpty()) {
- mHandler.obtainMessage(
+ mSessionHandler.obtainMessage(
SessionHandler.MSG_START_PRINTER_DISCOVERY,
service).sendToTarget();
}
@@ -1278,7 +1348,7 @@
SomeArgs args = SomeArgs.obtain();
args.arg1 = service;
args.arg2 = printerId;
- mHandler.obtainMessage(SessionHandler
+ mSessionHandler.obtainMessage(SessionHandler
.MSG_START_PRINTER_STATE_TRACKING, args)
.sendToTarget();
}
@@ -1348,7 +1418,7 @@
for (int i = 0; i < removedPrinterCount; i++) {
mPrinters.remove(removedPrinterIds.get(i));
}
- mHandler.obtainMessage(
+ mSessionHandler.obtainMessage(
SessionHandler.MSG_DISPATCH_PRINTERS_REMOVED,
removedPrinterIds).sendToTarget();
}
diff --git a/tools/aapt2/compile/XmlIdCollector_test.cpp b/tools/aapt2/compile/XmlIdCollector_test.cpp
index 45b7af2..a37ea86 100644
--- a/tools/aapt2/compile/XmlIdCollector_test.cpp
+++ b/tools/aapt2/compile/XmlIdCollector_test.cpp
@@ -37,13 +37,13 @@
XmlIdCollector collector;
ASSERT_TRUE(collector.consume(context.get(), doc.get()));
- EXPECT_EQ(1u, std::count(doc->file.exportedSymbols.begin(), doc->file.exportedSymbols.end(),
+ EXPECT_EQ(1, std::count(doc->file.exportedSymbols.begin(), doc->file.exportedSymbols.end(),
SourcedResourceName{ test::parseNameOrDie(u"@id/foo"), 3u }));
- EXPECT_EQ(1u, std::count(doc->file.exportedSymbols.begin(), doc->file.exportedSymbols.end(),
+ EXPECT_EQ(1, std::count(doc->file.exportedSymbols.begin(), doc->file.exportedSymbols.end(),
SourcedResourceName{ test::parseNameOrDie(u"@id/bar"), 3u }));
- EXPECT_EQ(1u, std::count(doc->file.exportedSymbols.begin(), doc->file.exportedSymbols.end(),
+ EXPECT_EQ(1, std::count(doc->file.exportedSymbols.begin(), doc->file.exportedSymbols.end(),
SourcedResourceName{ test::parseNameOrDie(u"@id/car"), 6u }));
}