diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 81abdea0d23f3..10fe52a71d9dd 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -812,7 +812,10 @@ public class Camera {
*
* @throws RuntimeException if starting preview fails; usually this would be
* because of a hardware or other low-level error, or because release()
- * has been called on this Camera instance.
+ * has been called on this Camera instance. The QCIF (176x144) exception
+ * mentioned in {@link Parameters#setPreviewSize setPreviewSize} and
+ * {@link Parameters#setPictureSize setPictureSize} can also cause this
+ * exception be thrown.
*/
public native final void startPreview();
@@ -2863,6 +2866,16 @@ public class Camera {
* orientation should also be considered while setting picture size and
* thumbnail size.
*
+ * Exception on 176x144 (QCIF) resolution:
+ * Camera devices usually have a fixed capability for downscaling from
+ * larger resolution to smaller, and the QCIF resolution sometimes
+ * is not fully supported due to this limitation on devices with
+ * high-resolution image sensors. Therefore, trying to configure a QCIF
+ * preview size with any picture or video size larger than 1920x1080
+ * (either width or height) might not be supported, and
+ * {@link #setParameters(Camera.Parameters)} might throw a
+ * RuntimeException if it is not.
+ *
* @param width the width of the pictures, in pixels
* @param height the height of the pictures, in pixels
* @see #setDisplayOrientation(int)
@@ -2908,6 +2921,16 @@ public class Camera {
* preview can be different from the resolution of the recorded video
* during video recording.
*
+ * Exception on 176x144 (QCIF) resolution:
+ * Camera devices usually have a fixed capability for downscaling from
+ * larger resolution to smaller, and the QCIF resolution sometimes
+ * is not fully supported due to this limitation on devices with
+ * high-resolution image sensors. Therefore, trying to configure a QCIF
+ * video resolution with any preview or picture size larger than
+ * 1920x1080 (either width or height) might not be supported, and
+ * {@link #setParameters(Camera.Parameters)} will throw a
+ * RuntimeException if it is not.
+ *
* @return a list of Size object if camera has separate preview and
* video output; otherwise, null is returned.
* @see #getPreferredPreviewSizeForVideo()
@@ -3202,6 +3225,16 @@ public class Camera {
* Applications need to consider the display orientation. See {@link
* #setPreviewSize(int,int)} for reference.
*
+ * Exception on 176x144 (QCIF) resolution:
+ * Camera devices usually have a fixed capability for downscaling from
+ * larger resolution to smaller, and the QCIF resolution sometimes
+ * is not fully supported due to this limitation on devices with
+ * high-resolution image sensors. Therefore, trying to configure a QCIF
+ * picture size with any preview or video size larger than 1920x1080
+ * (either width or height) might not be supported, and
+ * {@link #setParameters(Camera.Parameters)} might throw a
+ * RuntimeException if it is not.
+ *
* @param width the width for pictures, in pixels
* @param height the height for pictures, in pixels
* @see #setPreviewSize(int,int)
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index a787d77bc9642..e5c5328a32fa5 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -2136,6 +2136,12 @@ public final class CameraCharacteristics extends CameraMetadata
* Refer to {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} for additional
* mandatory stream configurations on a per-capability basis.
+ * Exception on 176x144 (QCIF) resolution: camera devices usually have a fixed capability for
+ * downscaling from larger resolution to smaller, and the QCIF resolution sometimes is not
+ * fully supported due to this limitation on devices with high-resolution image sensors.
+ * Therefore, trying to configure a QCIF resolution stream together with any other
+ * stream larger than 1920x1080 resolution (either width or height) might not be supported,
+ * and capture session creation will fail if it is not.
* This key is available on all devices.
*
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
@@ -2331,6 +2337,12 @@ public final class CameraCharacteristics extends CameraMetadata
*
+ * Exception on 176x144 (QCIF) resolution: camera devices usually have a fixed capability on
+ * downscaling from larger resolution to smaller ones, and the QCIF resolution can sometimes
+ * not be fully supported due to this limitation on devices with high-resolution image
+ * sensors. Therefore, trying to configure a QCIF resolution stream together with any other
+ * stream larger than 1920x1080 resolution (either width or height) might not be supported,
+ * and capture session creation will fail if it is not.
* This key is available on all devices.
*
* @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
@@ -3188,7 +3200,7 @@ public final class CameraCharacteristics extends CameraMetadataLEVEL_3 devices additionally support YUV reprocessing and RAW image capture, along
* with additional output stream configurations.
* EXTERNAL devices are similar to LIMITED devices with exceptions like some sensor or
- * lens information not reorted or less stable framerates.
+ * lens information not reported or less stable framerates.
*
* See the individual level enums for full descriptions of the supported capabilities. The
* {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} entry describes the device's capabilities at a
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index ce88697fa8db2..04e9246b994e0 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -433,6 +433,14 @@ public abstract class CameraDevice implements AutoCloseable {
* target combinations with sizes outside of these guarantees, but this can only be tested for
* by attempting to create a session with such targets.
*
+ * Exception on 176x144 (QCIF) resolution:
+ * Camera devices usually have a fixed capability for downscaling from larger resolution to
+ * smaller, and the QCIF resolution sometimes is not fully supported due to this
+ * limitation on devices with high-resolution image sensors. Therefore, trying to configure a
+ * QCIF resolution stream together with any other stream larger than 1920x1080 resolution
+ * (either width or height) might not be supported, and capture session creation will fail if it
+ * is not.
+ *
* @param outputs The new set of Surfaces that should be made available as
* targets for captured image data.
* @param callback The callback to notify about the status of the new capture session.
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 66f16d57c8289..1ef2629234427 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -75,7 +75,8 @@ public class SurfaceControl implements Parcelable {
boolean allLayers, boolean useIdentityTransform, int rotation);
private static native GraphicBuffer nativeScreenshotToBuffer(IBinder displayToken,
Rect sourceCrop, int width, int height, int minLayer, int maxLayer,
- boolean allLayers, boolean useIdentityTransform, int rotation);
+ boolean allLayers, boolean useIdentityTransform, int rotation,
+ boolean captureSecureLayers);
private static native void nativeScreenshot(IBinder displayToken, Surface consumer,
Rect sourceCrop, int width, int height, int minLayer, int maxLayer,
boolean allLayers, boolean useIdentityTransform);
@@ -1299,7 +1300,28 @@ public class SurfaceControl implements Parcelable {
IBinder displayToken = SurfaceControl.getBuiltInDisplay(
SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN);
return nativeScreenshotToBuffer(displayToken, sourceCrop, width, height,
- minLayer, maxLayer, false, useIdentityTransform, rotation);
+ minLayer, maxLayer, false, useIdentityTransform, rotation,
+ false /* captureSecureLayers */);
+ }
+
+ /**
+ * Like screenshotToBuffer, but if the caller is AID_SYSTEM, allows
+ * for the capture of secure layers. This is used for the screen rotation
+ * animation where the system server takes screenshots but does
+ * not persist them or allow them to leave the server. However in other
+ * cases in the system server, we mostly want to omit secure layers
+ * like when we take a screenshot on behalf of the assistant.
+ *
+ * @hide
+ */
+ public static GraphicBuffer screenshotToBufferWithSecureLayersUnsafe(Rect sourceCrop,
+ int width, int height, int minLayer, int maxLayer, boolean useIdentityTransform,
+ int rotation) {
+ IBinder displayToken = SurfaceControl.getBuiltInDisplay(
+ SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN);
+ return nativeScreenshotToBuffer(displayToken, sourceCrop, width, height,
+ minLayer, maxLayer, false, useIdentityTransform, rotation,
+ true /* captureSecureLayers */);
}
/**
diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java
index a29d449665404..26c21753a23f9 100644
--- a/core/java/android/webkit/WebViewClient.java
+++ b/core/java/android/webkit/WebViewClient.java
@@ -102,9 +102,11 @@ public class WebViewClient {
/**
* Notify the host application that a page has finished loading. This method
- * is called only for main frame. When onPageFinished() is called, the
- * rendering picture may not be updated yet. To get the notification for the
- * new Picture, use {@link WebView.PictureListener#onNewPicture}.
+ * is called only for main frame. Receiving an {@code onPageFinished()} callback does not
+ * guarantee that the next frame drawn by WebView will reflect the state of the DOM at this
+ * point. In order to be notified that the current DOM state is ready to be rendered, request a
+ * visual state callback with {@link WebView#postVisualStateCallback} and wait for the supplied
+ * callback to be triggered.
*
* @param view The WebView that is initiating the callback.
* @param url The url of the page.
diff --git a/core/jni/android_os_HwBlob.cpp b/core/jni/android_os_HwBlob.cpp
index cb55618c685c0..e5b72caf27924 100644
--- a/core/jni/android_os_HwBlob.cpp
+++ b/core/jni/android_os_HwBlob.cpp
@@ -88,7 +88,7 @@ JHwBlob::JHwBlob(JNIEnv *env, jobject thiz, size_t size)
mOwnsBuffer(true),
mHandle(0) {
if (size > 0) {
- mBuffer = malloc(size);
+ mBuffer = calloc(size, 1);
}
}
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 5b4b5f2a2264d..614a8ff124ea1 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -160,7 +160,7 @@ static Rect rectFromObj(JNIEnv* env, jobject rectObj) {
static jobject nativeScreenshotToBuffer(JNIEnv* env, jclass clazz,
jobject displayTokenObj, jobject sourceCropObj, jint width, jint height,
jint minLayer, jint maxLayer, bool allLayers, bool useIdentityTransform,
- int rotation) {
+ int rotation, bool captureSecureLayers) {
sp displayToken = ibinderForJavaObject(env, displayTokenObj);
if (displayToken == NULL) {
return NULL;
@@ -171,9 +171,10 @@ static jobject nativeScreenshotToBuffer(JNIEnv* env, jclass clazz,
maxLayer = INT32_MAX;
}
sp buffer;
+ bool capturedSecureLayers = false;
status_t res = ScreenshotClient::capture(displayToken,
sourceCrop, width, height, minLayer, maxLayer, useIdentityTransform,
- rotation, &buffer);
+ rotation, captureSecureLayers, &buffer, capturedSecureLayers);
if (res != NO_ERROR) {
return NULL;
}
@@ -184,7 +185,8 @@ static jobject nativeScreenshotToBuffer(JNIEnv* env, jclass clazz,
buffer->getHeight(),
buffer->getPixelFormat(),
(jint)buffer->getUsage(),
- (jlong)buffer.get());
+ (jlong)buffer.get(),
+ capturedSecureLayers);
}
static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz,
@@ -1026,7 +1028,7 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
{"nativeGetHandle", "(J)Landroid/os/IBinder;",
(void*)nativeGetHandle },
{"nativeScreenshotToBuffer",
- "(Landroid/os/IBinder;Landroid/graphics/Rect;IIIIZZI)Landroid/graphics/GraphicBuffer;",
+ "(Landroid/os/IBinder;Landroid/graphics/Rect;IIIIZZIZ)Landroid/graphics/GraphicBuffer;",
(void*)nativeScreenshotToBuffer },
{"nativeCaptureLayers", "(Landroid/os/IBinder;Landroid/graphics/Rect;F)Landroid/graphics/GraphicBuffer;",
(void*)nativeCaptureLayers },
@@ -1082,7 +1084,7 @@ int register_android_view_SurfaceControl(JNIEnv* env)
jclass graphicsBufferClazz = FindClassOrDie(env, "android/graphics/GraphicBuffer");
gGraphicBufferClassInfo.clazz = MakeGlobalRefOrDie(env, graphicsBufferClazz);
gGraphicBufferClassInfo.builder = GetStaticMethodIDOrDie(env, graphicsBufferClazz,
- "createFromExisting", "(IIIIJ)Landroid/graphics/GraphicBuffer;");
+ "createFromExisting", "(IIIIJZ)Landroid/graphics/GraphicBuffer;");
return err;
}
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 1720e8be05af0..b203fa32e48e6 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -1779,7 +1779,7 @@
"%1$s/%2$s"
"Suzi"
"Ne ometaj"
- "Prestanak rada"
+ "Neaktivnost"
"Radni dan uvečer"
"Vikend"
"Događaj"
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index e5f208d4a91f5..6ca2691ad6247 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -255,7 +255,7 @@
"Estat de la VPN"
"Administració del dispositiu"
"Alertes"
- "Demostració comercial"
+ "Demostració per a botigues"
"Connexió USB"
"S\'està executant una aplicació"
"Aplicacions que consumeixen bateria"
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index d9e15b2c186f6..bb85487053397 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -375,13 +375,13 @@
"Umožňuje aplikaci odesílat trvalá vysílání, která přetrvávají i po skončení vysílání. Nadměrné používání může televizi zpomalit či způsobit její nestabilitu, protože bude používat příliš mnoho paměti."
"Umožňuje aplikaci odesílat trvalá vysílání, která přetrvávají i po skončení vysílání. Nadměrné používání může telefon zpomalit či způsobit jeho nestabilitu, protože bude používat příliš mnoho paměti."
"čtení kontaktů"
- "Umožňuje aplikaci číst údaje o kontaktech uložených v tabletu, včetně toho, jak často voláte, posíláte e-maily nebo jinak komunikujete s konkrétními osobami. Toto oprávnění umožňuje aplikacím ukládat údaje o kontaktech. Škodlivé aplikace mohou tyto údaje bez vašeho vědomí sdílet."
- "Umožňuje aplikaci číst údaje o kontaktech uložených v televizi včetně toho, jak často voláte, posíláte e-maily nebo jinými způsoby komunikujete s konkrétními kontakty. Toto oprávnění umožňuje aplikacím ukládat údaje o vašich kontaktech a škodlivé aplikace mohou sdílet údaje o kontaktech bez vašeho vědomí."
- "Umožňuje aplikaci číst údaje o kontaktech uložených v telefonu, včetně toho, jak často voláte, posíláte e-maily nebo komunikujete jinými způsoby s konkrétními osobami. Toto oprávnění umožňuje aplikacím ukládat údaje o kontaktech. Škodlivé aplikace mohou tyto údaje bez vašeho vědomí sdílet."
+ "Umožňuje aplikaci číst údaje o kontaktech uložených v tabletu, včetně toho, jak často voláte, posíláte e‑maily nebo jinak komunikujete s konkrétními osobami. Toto oprávnění umožňuje aplikacím ukládat údaje o kontaktech. Škodlivé aplikace mohou tyto údaje bez vašeho vědomí sdílet."
+ "Umožňuje aplikaci číst údaje o kontaktech uložených v televizi včetně toho, jak často voláte, posíláte e‑maily nebo jinými způsoby komunikujete s konkrétními kontakty. Toto oprávnění umožňuje aplikacím ukládat údaje o vašich kontaktech a škodlivé aplikace mohou sdílet údaje o kontaktech bez vašeho vědomí."
+ "Umožňuje aplikaci číst údaje o kontaktech uložených v telefonu, včetně toho, jak často voláte, posíláte e‑maily nebo komunikujete jinými způsoby s konkrétními osobami. Toto oprávnění umožňuje aplikacím ukládat údaje o kontaktech. Škodlivé aplikace mohou tyto údaje bez vašeho vědomí sdílet."
"úprava kontaktů"
- "Umožňuje aplikaci upravit údaje o kontaktech uložených v tabletu včetně toho, jak často voláte, posíláte e-maily nebo komunikujete jinými způsoby s konkrétními kontakty. Toto oprávnění aplikacím umožňuje mazat údaje o kontaktech."
- "Umožňuje aplikaci upravit údaje o kontaktech uložených v televizi včetně toho, jak často voláte, posíláte e-maily nebo jinými způsoby komunikujete s konkrétními kontakty. Toto oprávnění aplikacím umožňuje mazat údaje o kontaktech."
- "Umožňuje aplikaci upravit údaje o kontaktech uložených v telefonu včetně toho, jak často voláte, posíláte e-maily nebo komunikujete jinými způsoby s konkrétními kontakty. Toto oprávnění aplikacím umožňuje mazat údaje o kontaktech."
+ "Umožňuje aplikaci upravit údaje o kontaktech uložených v tabletu včetně toho, jak často voláte, posíláte e‑maily nebo komunikujete jinými způsoby s konkrétními kontakty. Toto oprávnění aplikacím umožňuje mazat údaje o kontaktech."
+ "Umožňuje aplikaci upravit údaje o kontaktech uložených v televizi včetně toho, jak často voláte, posíláte e‑maily nebo jinými způsoby komunikujete s konkrétními kontakty. Toto oprávnění aplikacím umožňuje mazat údaje o kontaktech."
+ "Umožňuje aplikaci upravit údaje o kontaktech uložených v telefonu včetně toho, jak často voláte, posíláte e‑maily nebo komunikujete jinými způsoby s konkrétními kontakty. Toto oprávnění aplikacím umožňuje mazat údaje o kontaktech."
"čtení seznamu hovorů"
"Tato aplikace může číst historii volání."
"zápis do seznamu hovorů"
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index ab95af6f52bc5..654165539d3b8 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -63,7 +63,7 @@
"Rufweiterleitung"
"Anklopfen"
"Anrufsperre"
- "Passwort-Änderung"
+ "Passwortänderung"
"PIN-Änderung"
"Rufnummer vorhanden"
"Rufnummer begrenzt"
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 0893201152064..6219bb90541ff 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -134,7 +134,7 @@
"Desactivado"
"Preferir Wi-Fi"
"Preferir datos móviles"
- "Solo conexión Wi-Fi"
+ "Solo Wi-Fi"
"{0}: No desviada"
"{0}: {1}"
"{0}: {1} transcurridos {2} segundos"
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 0bf480296b884..d1f6cb53d271c 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -1195,7 +1195,7 @@
"Utzi"
"Gogoratu aukera"
"Hori geroago alda dezakezu Ezarpenak > Aplikazioak atalean"
- "Onartu beti"
+ "Eman baimena beti"
"Ez onartu inoiz"
"SIM txartela kendu da"
"Sare mugikorra ez da erabilgarri egongo baliozko SIM txartel bat sartuta berrabiarazten ez duzun arte."
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index f840922090c92..223d8b54fd572 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -266,7 +266,7 @@
"Mode sécurisé"
"Système Android"
"Passer au profil personnel"
- "Passer au profil professionnel"
+ "Passer au profil pro"
"Contacts"
"accéder à vos contacts"
"Permettre à <b>%1$s</b> d\'accéder à vos contacts"
diff --git a/graphics/java/android/graphics/GraphicBuffer.java b/graphics/java/android/graphics/GraphicBuffer.java
index 74086830fae20..644f7bc132084 100644
--- a/graphics/java/android/graphics/GraphicBuffer.java
+++ b/graphics/java/android/graphics/GraphicBuffer.java
@@ -53,6 +53,7 @@ public class GraphicBuffer implements Parcelable {
private final int mHeight;
private final int mFormat;
private final int mUsage;
+ private final boolean mCapturedSecureLayers;
// Note: do not rename, this field is used by native code
@UnsupportedAppUsage
private final long mNativeObject;
@@ -87,12 +88,22 @@ public class GraphicBuffer implements Parcelable {
* Private use only. See {@link #create(int, int, int, int)}.
*/
@UnsupportedAppUsage
- private GraphicBuffer(int width, int height, int format, int usage, long nativeObject) {
+ private GraphicBuffer(int width, int height, int format, int usage, long nativeObject,
+ boolean capturedSecureLayers) {
mWidth = width;
mHeight = height;
mFormat = format;
mUsage = usage;
mNativeObject = nativeObject;
+ mCapturedSecureLayers = capturedSecureLayers;
+ }
+
+ /**
+ * Private use only. See {@link #create(int, int, int, int)}.
+ */
+ @UnsupportedAppUsage
+ private GraphicBuffer(int width, int height, int format, int usage, long nativeObject) {
+ this(width, height, format, usage, nativeObject, false);
}
/**
@@ -101,14 +112,33 @@ public class GraphicBuffer implements Parcelable {
*/
@UnsupportedAppUsage
public static GraphicBuffer createFromExisting(int width, int height,
- int format, int usage, long unwrappedNativeObject) {
+ int format, int usage, long unwrappedNativeObject,
+ boolean capturedSecureLayers) {
long nativeObject = nWrapGraphicBuffer(unwrappedNativeObject);
if (nativeObject != 0) {
- return new GraphicBuffer(width, height, format, usage, nativeObject);
+ return new GraphicBuffer(width, height, format, usage, nativeObject,
+ capturedSecureLayers);
}
return null;
}
+ /**
+ * For SurfaceControl JNI. Provides and ignored value for capturedSecureLayers for backwards
+ * compatibility
+ * @hide
+ */
+ public static GraphicBuffer createFromExisting(int width, int height,
+ int format, int usage, long unwrappedNativeObject) {
+ return createFromExisting(width, height, format, usage, unwrappedNativeObject, false);
+ }
+
+ /**
+ * Returns true if the buffer contains visible secure layers.
+ */
+ public boolean doesContainSecureLayers() {
+ return mCapturedSecureLayers;
+ }
+
/**
* Returns the width of this buffer in pixels.
*/
diff --git a/packages/CtsShim/build/shim/AndroidManifest.xml b/packages/CtsShim/build/shim/AndroidManifest.xml
index 9b813ace8b800..3e546f1e02dbe 100644
--- a/packages/CtsShim/build/shim/AndroidManifest.xml
+++ b/packages/CtsShim/build/shim/AndroidManifest.xml
@@ -20,7 +20,7 @@
package="com.android.cts.ctsshim" >
+ android:targetSdkVersion="28" />
diff --git a/packages/CtsShim/build/shim_priv/AndroidManifest.xml b/packages/CtsShim/build/shim_priv/AndroidManifest.xml
index 9bf454c297680..9ab12c9743c0b 100644
--- a/packages/CtsShim/build/shim_priv/AndroidManifest.xml
+++ b/packages/CtsShim/build/shim_priv/AndroidManifest.xml
@@ -20,7 +20,7 @@
package="com.android.cts.priv.ctsshim" >
+ android:targetSdkVersion="28" />
diff --git a/packages/CtsShim/build/shim_priv_upgrade/AndroidManifest.xml b/packages/CtsShim/build/shim_priv_upgrade/AndroidManifest.xml
index 023e93e1449ee..2354061fe3512 100644
--- a/packages/CtsShim/build/shim_priv_upgrade/AndroidManifest.xml
+++ b/packages/CtsShim/build/shim_priv_upgrade/AndroidManifest.xml
@@ -20,7 +20,7 @@
package="com.android.cts.priv.ctsshim" >
+ android:targetSdkVersion="28" />
"Fejlretningstilstand, når USB er tilsluttet"
"Tilbagekald tilladelser for USB-fejlfinding"
"Genvej til fejlrapporting"
- "Vis en knap til oprettelse af fejlrapporter i menu for slukknap"
+ "Vis en knap til oprettelse af fejlrapporter i afbrydermenuen"
"Lås ikke"
"Skærmen går ikke i dvale under opladning"
"Aktivér Bluetooth HCI snoop log"
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 84e33bc51ce37..df8245cf04262 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -192,7 +192,7 @@
"OEM-Entsperrung"
"Bootloader-Entsperrung zulassen"
"OEM-Entsperrung zulassen?"
- "Achtung: Die Geräteschutzfunktionen funktionieren auf diesem Gerät nicht, solange diese Einstellung aktiviert ist."
+ "Achtung: Der Geräteschutz funktioniert auf diesem Gerät nicht, solange diese Einstellung aktiviert ist."
"App für simulierte Standorte auswählen"
"Keine App für simulierte Standorte eingerichtet"
"App für simulierte Standorte: %1$s"
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index bcaf79cfbaf45..5b2b8b0e33e76 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -33,7 +33,7 @@
"Egiaztatu pasahitza zuzena dela eta saiatu berriro"
"Urrunegi"
"Ez da konektatuko automatikoki"
- "Ezin da atzitu Internet"
+ "Ezin da konektatu Internetera"
"%1$s aplikazioak gorde du"
"%1$s bidez automatikoki konektatuta"
"Automatikoki konektatuta sareen balorazioen hornitzailearen bidez"
@@ -67,7 +67,7 @@
"Telefono-deiak"
"Fitxategi-transferentzia"
"Sarrerako gailua"
- "Interneterako sarbidea"
+ "Interneteko konexioa"
"Kontaktuak partekatzea"
"Erabili kontaktuak partekatzeko"
"Interneteko konexioa partekatzea"
@@ -84,9 +84,9 @@
"SAP sarbide-puntura konektatuta"
"Fitxategi-transferentziako zerbitzarira konektatu gabe"
"Sarrerako gailura konektatuta"
- "Gailura konektatuta Interneteko sarbiderako"
+ "Gailura konektatuta Internet atzitzeko"
"Tokiko Interneteko konexioa gailu batekin partekatzea"
- "Erabili Internet atzitzeko"
+ "Erabili Internetera konektatzeko"
"Erabili maparako"
"Erabili SIM txartelerako sarbiderako"
"Erabili euskarriaren audiorako"
diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml
index 012fe2f4c437c..16073a7c33dec 100644
--- a/packages/SystemUI/res-keyguard/values-da/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-da/strings.xml
@@ -34,6 +34,7 @@
"Forkert pinkode."
"Ugyldigt kort."
"Opladet"
+ "%s • Trådløs opladning"
"%s • Oplader"
"%s • Oplader hurtigt"
"%s • Oplader langsomt"
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 83451ba6743b2..73b16759ca076 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -399,6 +399,7 @@
"Silenci\ntotal"
"Només\ninterr. prior."
"Només\nalarmes"
+ "%2$s • S\'està carregant sense fils (temps restant: %1$s)"
"%2$s • S\'està carregant (temps restant: %s)"
"%2$s • Carregant ràpidament (temps restant: %s)"
"%2$s • Carregant lentament (temps restant: %s)"
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 42c5caee72cf3..f2905791c9632 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -405,6 +405,7 @@
"שקט\nמוחלט"
"הודעות בעדיפות\nבלבד"
"התראות\nבלבד"
+ "%2$s • בטעינה אלחוטית (%1$s עד לסיום)"
"%2$s • בטעינה (%s עד לסיום)"
"%2$s • בטעינה מהירה (%s עד לסיום)"
"%2$s • בטעינה איטית (%s עד לסיום)"
@@ -800,8 +801,8 @@
"אם אינך רוצה שהתכונה הזו תשמש את %s, יש להקיש כדי לפתוח את ההגדרות ולכבות את התכונה."
"הפעל"
"השהה"
- "ברצוני לדלג אל הבא"
- "ברצוני לדלג אל הקודם"
+ "אפשר לדלג אל הבא"
+ "אפשר לדלג אל הקודם"
"הטלפון כבה עקב התחממות"
"הטלפון פועל כרגיל עכשיו"
"הטלפון שלך התחמם יותר מדי וכבה כדי להתקרר. הטלפון פועל כרגיל עכשיו.\n\nייתכן שהטלפון יתחמם יותר מדי אם:\n • תשתמש באפליקציות עתירות משאבים (כגון משחקים, אפליקציות וידאו או אפליקציות ניווט)\n • תוריד או תעלה קבצים גדולים\n • תשתמש בטלפון בטמפרטורות גבוהות"
diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
index 755a571cf5f75..95051dea2e9a3 100644
--- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -27,6 +27,7 @@ import static com.android.server.wm.ScreenRotationAnimationProto.ANIMATION_RUNNI
import static com.android.server.wm.ScreenRotationAnimationProto.STARTED;
import android.content.Context;
+import android.graphics.GraphicBuffer;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.os.IBinder;
@@ -285,10 +286,27 @@ class ScreenRotationAnimation {
if (displayHandle != null) {
Surface sur = new Surface();
sur.copyFrom(mSurfaceControl);
- SurfaceControl.screenshot(displayHandle, sur);
- t.setLayer(mSurfaceControl, SCREEN_FREEZE_LAYER_SCREENSHOT);
- t.setAlpha(mSurfaceControl, 0);
- t.show(mSurfaceControl);
+ GraphicBuffer gb = SurfaceControl.screenshotToBufferWithSecureLayersUnsafe(
+ new Rect(), 0 /* width */, 0 /* height */, 0 /* minLayer */,
+ 0 /* maxLayer */, false /* useIdentityTransform */, 0 /* rotation */);
+ if (gb != null) {
+ try {
+ sur.attachAndQueueBuffer(gb);
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failed to attach screenshot - " + e.getMessage());
+ }
+ // If the screenshot contains secure layers, we have to make sure the
+ // screenshot surface we display it in also has FLAG_SECURE so that
+ // the user can not screenshot secure layers via the screenshot surface.
+ if (gb.doesContainSecureLayers()) {
+ t.setSecure(mSurfaceControl, true);
+ }
+ t.setLayer(mSurfaceControl, SCREEN_FREEZE_LAYER_SCREENSHOT);
+ t.setAlpha(mSurfaceControl, 0);
+ t.show(mSurfaceControl);
+ } else {
+ Slog.w(TAG, "Unable to take screenshot of display " + displayId);
+ }
sur.destroy();
} else {
Slog.w(TAG, "Built-in display " + displayId + " is null.");